Skip to content

Commit

Permalink
[#2461] Add setup configuration steps for CMS
Browse files Browse the repository at this point in the history
  • Loading branch information
pi-sigma committed May 16, 2024
1 parent 44b46e5 commit e35a997
Show file tree
Hide file tree
Showing 4 changed files with 586 additions and 0 deletions.
9 changes: 9 additions & 0 deletions src/open_inwoner/cms/utils/page_display.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from open_inwoner.cms.cases.cms_apps import CasesApphook
from open_inwoner.cms.collaborate.cms_apps import CollaborateApphook
from open_inwoner.cms.inbox.cms_apps import InboxApphook
from open_inwoner.cms.products.cms_apps import ProductsApphook
from open_inwoner.cms.profile.cms_apps import ProfileApphook

cms_apps = {
Expand All @@ -18,6 +19,7 @@
CollaborateApphook,
CasesApphook,
SSDApphook,
ProductsApphook,
ProfileApphook,
]
}
Expand Down Expand Up @@ -66,6 +68,13 @@ def benefits_page_is_published() -> bool:
return _is_published("ssd")


def products_page_is_published() -> bool:
"""
:returns: True if the product page published, False otherwise
"""
return _is_published("products")


def profile_page_is_published() -> bool:
"""
:returns: True if the profile page published, False otherwise
Expand Down
70 changes: 70 additions & 0 deletions src/open_inwoner/conf/app/setup_configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -390,3 +390,73 @@
EHERKENNING_PRIVACY_POLICY = config("EHERKENNING_PRIVACY_POLICY", None)
EHERKENNING_MAKELAAR_ID = config("EHERKENNING_MAKELAAR_ID", None)
EHERKENNING_SERVICE_LANGUAGE = config("EHERKENNING_SERVICE_LANGUAGE", None)

#
# CMS configuration variables
#

# benefits (ssd)
CMS_CONFIG_SSD_ENABLE = config("CMS_CONFIG_ENABLE", None)
# common extension
CMS_SSD_REQUIRES_AUTH = config("CMS_SSD_REQUIRES_AUTH", None)
CMS_SSD_REQUIRES_AUTH_BSN_OR_KVK = config("CMS_SSD_REQUIRES_AUTH_BSN_OR_KVK", None)
CMS_SSD_MENU_INDICATOR = config("CMS_SSD_MENU_INDICATOR", None)
CMS_SSD_MENU_ICON = config("CMS_SSD_MENU_ICON", None)

# cases
CMS_CONFIG_CASES_ENABLE = config("CMS_CONFIG_ENABLE", None)
# common extension
CMS_CASES_REQUIRES_AUTH = config("CMS_CASES_REQUIRES_AUTH", None)
CMS_CASES_REQUIRES_AUTH_BSN_OR_KVK = config("CMS_CASES_REQUIRES_AUTH_BSN_OR_KVK", None)
CMS_CASES_MENU_INDICATOR = config("CMS_CASES_MENU_INDICATOR", None)
CMS_CASES_MENU_ICON = config("CMS_CASES_MENU_ICON", None)

# collaborations
CMS_CONFIG_COLLABORATE_ENABLE = config("CMS_CONFIG_COLLABORATE_ENABLE", None)
# common extension
CMS_COLLABORATE_REQUIRES_AUTH = config("CMS_COLLABORATE_REQUIRES_AUTH", None)
CMS_COLLABORATE_REQUIRES_AUTH_BSN_OR_KVK = config(
"CMS_COLLABORATE_REQUIRES_AUTH_BSN_OR_KVK", None
)
CMS_COLLABORATE_MENU_INDICATOR = config("CMS_COLLABORATE_MENU_INDICATOR", None)
CMS_COLLABORATE_MENU_ICON = config("CMS_COLLABORATE_MENU_ICON", None)

# inbox
CMS_CONFIG_INBOX_ENABLE = config("CMS_CONFIG_INBOX_ENABLE", None)
# common extension
CMS_INBOX_REQUIRES_AUTH = config("CMS_INBOX_REQUIRES_AUTH", None)
CMS_INBOX_REQUIRES_AUTH_BSN_OR_KVK = config("CMS_INBOX_REQUIRES_AUTH_BSN_OR_KVK", None)
CMS_INBOX_MENU_INDICATOR = config("CMS_INBOX_MENU_INDICATOR", None)
CMS_INBOX_MENU_ICON = config("CMS_INBOX_MENU_ICON", None)

# products
CMS_CONFIG_PRODUCTS_ENABLE = config("CMS_CONFIG_ENABLE", None)
# common extension
CMS_PRODUCTS_REQUIRES_AUTH = config("CMS_PRODUCTS_REQUIRES_AUTH", None)
CMS_PRODUCTS_REQUIRES_AUTH_BSN_OR_KVK = config(
"CMS_PRODUCTS_REQUIRES_AUTH_BSN_OR_KVK", None
)
CMS_PRODUCTS_MENU_INDICATOR = config("CMS_PRODUCTS_MENU_INDICATOR", None)
CMS_PRODUCTS_MENU_ICON = config("CMS_PRODUCTS_MENU_ICON", None)

# profile app enable
CMS_CONFIG_PROFILE_ENABLE = config("CMS_CONFIG_ENABLE", None)
# procile config
CMS_PROFILE_MY_DATA = config("CMS_PROFILE_MY_DATA", None)
CMS_PROFILE_SELECTED_CATEGORIES = config("CMS_PROFILE_SELECTED_CATEGORIES", None)
CMS_PROFILE_MENTORS = config("CMS_PROFILE_MENTORS", None)
CMS_PROFILE_MY_CONTACTS = config("CMS_PROFILE_MY_CONTACTS", None)
CMS_PROFILE_SELFDIAGNOSE = config("CMS_PROFILE_SELFDIAGNOSE", None)
CMS_PROFILE_ACTIONS = config("CMS_PROFILE_ACTIONS", None)
CMS_PROFILE_NOTIFICATIONS = config("CMS_PROFILE_NOTIFICATIONS", None)
CMS_PROFILE_QUESTIONS = config("CMS_PROFILE_QUESTIONS", None)
CMS_PROFILE_SSD = config("CMS_PROFILE_SSD", None)
CMS_PROFILE_NEWSLETTERS = config("CMS_PROFILE_NEWSLETTERS", None)
CMS_PROFILE_APPOINTMENTS = config("CMS_PROFILE_APPOINTMENTS", None)
# profile common extension
CMS_PROFILE_REQUIRES_AUTH = config("CMS_PROFILE_REQUIRES_AUTH", None)
CMS_PROFILE_REQUIRES_AUTH_BSN_OR_KVK = config(
"CMS_PROFILE_REQUIRES_AUTH_BSN_OR_KVK", None
)
CMS_PROFILE_MENU_INDICATOR = config("CMS_PROFILE_MENU_INDICATOR", None)
CMS_PROFILE_MENU_ICON = config("CMS_PROFILE_MENU_ICON", None)
172 changes: 172 additions & 0 deletions src/open_inwoner/configurations/bootstrap/cms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
from django.conf import settings

from django_setup_configuration.configuration import BaseConfigurationStep

from open_inwoner.cms.benefits.cms_apps import SSDApphook
from open_inwoner.cms.cases.cms_apps import CasesApphook
from open_inwoner.cms.collaborate.cms_apps import CollaborateApphook
from open_inwoner.cms.inbox.cms_apps import InboxApphook
from open_inwoner.cms.products.cms_apps import ProductsApphook
from open_inwoner.cms.profile.cms_apps import ProfileApphook
from open_inwoner.cms.tests import cms_tools


def create_apphook_page_args(config_mapping: dict) -> dict:
"""
Helper function to create mappings with arguments for :func:`create_apphook_page`
"""

apphook_page_args = dict()

# import pdbr;pdbr.set_trace()
for setting_name, config_field_name in config_mapping.items():
setting = getattr(settings, setting_name, None)
if setting is not None:
apphook_page_args[config_field_name] = setting

return apphook_page_args


class GenericCMSConfigurationStep(BaseConfigurationStep):
"""
Generic base class for configuring CMS apps
"""

def is_configured(self):
"""
CMS apps have no required settings; we consider them "configured"
if the configuration option is enabled
"""
return (
getattr(settings, f"CMS_CONFIG_{self.app_name.upper()}_ENABLE", None)
is not None
)

def configure(self):
"""
Create apphook page with common extenion settings
The method is sufficient for generic CMS apps that don't require any
configuration beyond the commonextension. Override to provide additional
arguments to :func:`create_apphook_page`.
"""
extension_args = create_apphook_page_args(self.extension_settings)

if (
getattr(settings, f"CMS_CONFIG_{self.app_name.upper()}_ENABLE", None)
is not None
):
cms_tools.create_apphook_page(
self.app_hook,
extension_args=extension_args,
)

def test_configuration(self):
...


class CMSBenefitsConfigurationStep(GenericCMSConfigurationStep):
verbose_name = "Configuration for CMS social benefits (SSD) app"
extension_settings = {
"CMS_SSD_REQUIRES_AUTH": "requires_auth",
"CMS_SSD_REQUIRES_AUTH_BSN_OR_KVK": "requires_auth_bsn_or_kvk",
"CMS_SSD_MENU_INDICATOR": "menu_indicator",
"CMS_SSD_MENU_ICON": "menu_icon",
}

def __init__(self):
self.app_name = "ssd"
self.app_hook = SSDApphook


class CMSCasesConfigurationStep(GenericCMSConfigurationStep):
verbose_name = "Configuration for CMS cases app"
extension_settings = {
"CMS_CASES_REQUIRES_AUTH": "requires_auth",
"CMS_CASES_REQUIRES_AUTH_BSN_OR_KVK": "requires_auth_bsn_or_kvk",
"CMS_CASES_MENU_INDICATOR": "menu_indicator",
"CMS_CASES_MENU_ICON": "menu_icon",
}

def __init__(self):
self.app_name = "cases"
self.app_hook = CasesApphook


class CMSCollaborateConfigurationStep(GenericCMSConfigurationStep):
verbose_name = "Configuration for CMS collaborate app"
extension_settings = {
"CMS_COLLABORATE_REQUIRES_AUTH": "requires_auth",
"CMS_COLLABORATE_REQUIRES_AUTH_BSN_OR_KVK": "requires_auth_bsn_or_kvk",
"CMS_COLLABORATE_MENU_INDICATOR": "menu_indicator",
"CMS_COLLABORATE_MENU_ICON": "menu_icon",
}

def __init__(self):
self.app_name = "collaborate"
self.app_hook = CollaborateApphook


class CMSInboxConfigurationStep(GenericCMSConfigurationStep):
verbose_name = "Configuration for CMS inbox app"
extension_settings = {
"CMS_INBOX_REQUIRES_AUTH": "requires_auth",
"CMS_INBOX_REQUIRES_AUTH_BSN_OR_KVK": "requires_auth_bsn_or_kvk",
"CMS_INBOX_MENU_INDICATOR": "menu_indicator",
"CMS_INBOX_MENU_ICON": "menu_icon",
}

def __init__(self):
self.app_name = "inbox"
self.app_hook = InboxApphook


class CMSProductsConfigurationStep(GenericCMSConfigurationStep):
verbose_name = "Configuration for CMS product app"
extension_settings = {
"CMS_PRODUCTS_REQUIRES_AUTH": "requires_auth",
"CMS_PRODUCTS_REQUIRES_AUTH_BSN_OR_KVK": "requires_auth_bsn_or_kvk",
"CMS_PRODUCTS_MENU_INDICATOR": "menu_indicator",
"CMS_PRODUCTS_MENU_ICON": "menu_icon",
}

def __init__(self):
self.app_name = "products"
self.app_hook = ProductsApphook


class CMSProfileConfigurationStep(GenericCMSConfigurationStep):
verbose_name = "Configuration for CMS profile app"
config_settings = {
"CMS_PROFILE_MY_DATA": "my_data",
"CMS_PROFILE_SELECTED_CATEGORIES": "selected_categories",
"CMS_PROFILE_MENTORS": "mentors",
"CMS_PROFILE_MY_CONTACTS": "my_contacts",
"CMS_PROFILE_SELFDIAGNOSE": "selfdiagnose",
"CMS_PROFILE_ACTIONS": "actions",
"CMS_PROFILE_NOTIFICATIONS": "notifications",
"CMS_PROFILE_QUESTIONS": "questions",
"CMS_PROFILE_SSD": "ssd",
"CMS_PROFILE_NEWSLETTERS": "newsletters",
"CMS_PROFILE_APPOINTMENTS": "appointments",
}
extension_settings = {
"CMS_PROFILE_REQUIRES_AUTH": "requires_auth",
"CMS_PROFILE_REQUIRES_AUTH_BSN_OR_KVK": "requires_auth_bsn_or_kvk",
"CMS_PROFILE_MENU_INDICATOR": "menu_indicator",
"CMS_PROFILE_MENU_ICON": "menu_icon",
}

def __init__(self):
self.app_name = "profile"

def configure(self):
config_args = create_apphook_page_args(self.config_settings)
extension_args = create_apphook_page_args(self.extension_settings)

if getattr(settings, "CMS_CONFIG_PROFILE_ENABLE", None) is not None:
cms_tools.create_apphook_page(
ProfileApphook,
config_args=config_args,
extension_args=extension_args,
)
Loading

0 comments on commit e35a997

Please sign in to comment.