Skip to content

Commit

Permalink
[#1581] make help texts configurable via CMS
Browse files Browse the repository at this point in the history
  • Loading branch information
pi-sigma committed Aug 31, 2023
1 parent d7a9c3c commit 6a52fa2
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 36 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Generated by Django 3.2.15 on 2023-08-09 10:12

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("extensions", "0005_alter_commonextension_menu_icon"),
]

operations = [
migrations.AddField(
model_name="commonextension",
name="help_text",
field=models.TextField(
blank=True, help_text="Help text for the page", verbose_name="Help text"
),
),
]
5 changes: 5 additions & 0 deletions src/open_inwoner/cms/extensions/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ class CommonExtension(PageExtension):
blank=True,
help_text=_("Icon in het menu"),
)
help_text = models.TextField(
_("Help text"),
blank=True,
help_text=_("Help text for the page"),
)

def __str__(self):
return str(self.get_page())
Expand Down
40 changes: 40 additions & 0 deletions src/open_inwoner/cms/tests/test_page_options.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from unittest.mock import patch

from django.test import TestCase, override_settings
from django.urls import reverse

from pyquery import PyQuery

from open_inwoner.accounts.tests.factories import UserFactory

from ..inbox.cms_apps import InboxApphook
from ..tests import cms_tools


@override_settings(ROOT_URLCONF="open_inwoner.cms.tests.urls")
class TestCMSHelpText(TestCase):
def setUp(self):
self.user = UserFactory()
self.user.set_password("12345")
self.user.email = "[email protected]"
self.user.save()

@patch("open_inwoner.configurations.models.SiteConfiguration.get_solo")
def test_help_text(self, mock_solo):
mock_solo.return_value.cookiebanner_enabled = False

cms_tools.create_apphook_page(
InboxApphook,
extension_args={
"help_text": "Help! I need somebody. Help!",
},
)

url = reverse("inbox:index")
self.client.login(email=self.user.email, password="12345")
response = self.client.get(url)

doc = PyQuery(response.content.decode("utf-8"))

modal = doc.find(".help-modal")[0]
self.assertEqual(modal.attrib["data-help-text"], "Help! I need somebody. Help!")
22 changes: 19 additions & 3 deletions src/open_inwoner/components/templatetags/header_tags.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from django import template

from open_inwoner.configurations.models import SiteConfiguration
from cms.models import Page

from open_inwoner.cms.extensions.models import CommonExtension

register = template.Library()

Expand All @@ -19,6 +21,20 @@ def accessibility_header(request, **kwargs):
Extra context:
- help_text: str | The help text depending on the current path.
"""
config = SiteConfiguration.get_solo()
kwargs["help_text"] = config.get_help_text(request)
cms_pages = Page.objects.all().select_related("commonextension")

for page in cms_pages:
page_url = page.get_absolute_url()
# home page
if page_url == "" and request.path in ("", "/"):
res = page
# all other pages
elif not page_url == "" and page_url in request.build_absolute_uri():
res = page

try:
kwargs["help_text"] = res.commonextension.help_text
except CommonExtension.DoesNotExist:
kwargs["help_text"] = ""

return {**kwargs, "request": request}
47 changes: 14 additions & 33 deletions src/open_inwoner/configurations/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -285,23 +285,26 @@ class SiteConfiguration(SingletonModel):
home_help_text = models.TextField(
blank=True,
default=_(
"Welkom! Op dit scherm vindt u een overzicht van de verschillende onderwerpen en producten & diensten."
"Welkom! Op dit scherm vindt u een overzicht van de verschillende onderwerpen "
"en producten & diensten."
),
verbose_name=_("Home help"),
help_text=_("The help text for the home page."),
)
theme_help_text = models.TextField(
blank=True,
default=_(
"Op dit scherm vindt u de verschillende onderwerpen waarvoor wij producten en diensten aanbieden."
"Op dit scherm vindt u de verschillende onderwerpen waarvoor wij producten en "
"diensten aanbieden."
),
verbose_name=_("Category help"),
help_text=_("The help text for the theme page."),
)
product_help_text = models.TextField(
blank=True,
default=_(
"Op dit scherm kunt u de details vinden over het gekozen product of dienst. Afhankelijk van het product kunt u deze direct aanvragen of meer informatie opvragen."
"Op dit scherm kunt u de details vinden over het gekozen product of dienst. "
"Afhankelijk van het product kunt u deze direct aanvragen of meer informatie opvragen."
),
verbose_name=_("Product help"),
help_text=_("The help text for the product page."),
Expand All @@ -323,15 +326,21 @@ class SiteConfiguration(SingletonModel):
questionnaire_help_text = models.TextField(
blank=True,
default=_(
"Het onderdeel Zelfdiagnose stelt u in staat om met het beantwoorden van enkele vragen een advies te krijgen van de gemeente, met concrete vervolgstappen en producten en diensten. U kunt tevens uw antwoorden en het advies bewaren om met een begeleider van de gemeente te bespreken."
"Het onderdeel Zelfdiagnose stelt u in staat om met het beantwoorden van enkele vragen "
"een advies te krijgen van de gemeente, met concrete vervolgstappen en producten en "
"diensten. U kunt tevens uw antwoorden en het advies bewaren om met een begeleider van "
"de gemeente te bespreken."
),
verbose_name=_("Questionnaire help"),
help_text=_("The help text for the questionnaire page."),
)
plan_help_text = models.TextField(
blank=True,
default=_(
"Met het onderdeel Samenwerken kunt u samen met uw contactpersonen of begeleider van de gemeente aan de slag om met een samenwerkingsplan uw persoonlijke situatie te verbeteren. Door samen aan uw doelen te werken en acties te omschrijven kunnen we elkaar helpen."
"Met het onderdeel Samenwerken kunt u samen met uw contactpersonen of begeleider "
"van de gemeente aan de slag om met een samenwerkingsplan uw persoonlijke situatie "
"te verbeteren. Door samen aan uw doelen te werken en acties te omschrijven kunnen "
"we elkaar helpen."
),
verbose_name=_("Plan help"),
help_text=_("The help text for the plan page."),
Expand Down Expand Up @@ -521,34 +530,6 @@ def openid_enabled_for_admin(self):
def openid_enabled_for_regular_users(self):
return self.openid_display == OpenIDDisplayChoices.regular

def get_help_text(self, request) -> Optional[str]:
match = request.resolver_match
path = request.get_full_path()
if not match:
return ""

lookup = {
"pages-root": "home_help_text",
"products:category_list": "theme_help_text",
"products:category_product_detail": "product_help_text",
"products:product_detail": "product_help_text",
"products:product_form": "product_help_text",
"search:search": "search_help_text",
"profile:detail": "account_help_text",
"products:questionnaire_list": "questionnaire_help_text",
"collaborate:plan_list": "plan_help_text",
"pages-cookieroot": "cookie_info_text",
"pages-cookie": "cookie_link_text",
}

attr = lookup.get(match.view_name, "")
if attr:
return getattr(self, attr)
elif path in ("", "/"):
return self.home_help_text
else:
return ""


class SiteConfigurationPage(OrderedModel):
configuration = models.ForeignKey(
Expand Down

0 comments on commit 6a52fa2

Please sign in to comment.