Skip to content

Commit

Permalink
TWE-24 Add CTA fields (text+link) to footer
Browse files Browse the repository at this point in the history
  • Loading branch information
bmispelon committed Feb 10, 2025
1 parent ee5b592 commit 6504075
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Generated by Django 5.1.5 on 2025-02-10 08:23

from django.db import migrations, models


class Migration(migrations.Migration):
dependencies = [
("navigation", "0007_divisionmixin_and_navigationsetmixin"),
]

operations = [
migrations.AddField(
model_name="navigationsettings",
name="footer_newsletter_cta_text",
field=models.CharField(blank=True, max_length=255),
),
migrations.AddField(
model_name="navigationsettings",
name="footer_newsletter_cta_url",
field=models.URLField(blank=True),
),
]
19 changes: 18 additions & 1 deletion tbx/navigation/models.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
from django.contrib.contenttypes.fields import GenericRelation
from django.core.cache import cache
from django.core.cache.utils import make_template_fragment_key
from django.core.exceptions import ValidationError
from django.db import models

from modelcluster.models import ClusterableModel
from wagtail.admin.panels import FieldPanel
from wagtail.admin.panels import FieldPanel, MultiFieldPanel
from wagtail.contrib.settings.models import BaseSiteSetting, register_setting
from wagtail.models import RevisionMixin
from wagtail.snippets.models import register_snippet
Expand Down Expand Up @@ -58,11 +59,20 @@ class NavigationSettings(BaseSiteSetting, ClusterableModel):
blank=True,
help_text="Single list of logos that appear before the footer box",
)
footer_newsletter_cta_url = models.URLField(blank=True)
footer_newsletter_cta_text = models.CharField(blank=True, max_length=255)

panels = [
FieldPanel("primary_navigation"),
FieldPanel("footer_links"),
FieldPanel("footer_logos"),
MultiFieldPanel(
[
FieldPanel("footer_newsletter_cta_url", heading="External link"),
FieldPanel("footer_newsletter_cta_text", heading="Text"),
],
heading="Footer newsletter CTA",
),
]

def save(self, **kwargs):
Expand All @@ -83,3 +93,10 @@ def save(self, **kwargs):
for key in fragment_keys
]
cache.delete_many(keys)

def clean(self):
super().clean()

if self.footer_newsletter_cta_url and not self.footer_newsletter_cta_text:
msg = "The CTA footer text is required when a URL is supplied"
raise ValidationError({"footer_newsletter_cta_text": msg})
35 changes: 35 additions & 0 deletions tbx/navigation/tests/test_navigation_settings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
from django.test import SimpleTestCase

from wagtail.admin.panels.base import get_form_for_model

from tbx.navigation.models import NavigationSettings


class NavigationSettingsFormTestCase(SimpleTestCase):
def setUp(self):
self.form_class = get_form_for_model(
NavigationSettings,
fields=[
"footer_newsletter_cta_url",
"footer_newsletter_cta_text",
],
)

def test_cta_optional(self):
form = self.form_class(
data={"footer_newsletter_cta_url": "", "footer_newsletter_cta_text": ""}
)
self.assertTrue(form.is_valid())

def test_cta_text_required_if_url_supplied(self):
form = self.form_class(
data={
"footer_newsletter_cta_url": "https://example.com",
"footer_newsletter_cta_text": "",
}
)
self.assertFormError(
form,
"footer_newsletter_cta_text",
"The CTA footer text is required when a URL is supplied",
)
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,15 @@
{% wagtailcache 600 "footerlinks" current_site.pk is_pattern_library %}
{% footerlinks %}
{% endwagtailcache %}
<a href="#" class="footer__newsletter-link">Sign up for news and insights{% include "patterns/atoms/icons/icon.html" with name="arrow-wide" classname="footer__arrow" %}</a>
{% with settings.navigation.NavigationSettings as global_settings %}
{% if global_settings.footer_newsletter_cta_url and global_settings.footer_newsletter_cta_text %}
<a href="{{ global_settings.footer_newsletter_cta_url }}"
class="footer__newsletter-link">
{{ global_settings.footer_newsletter_cta_text }}
{% include "patterns/atoms/icons/icon.html" with name="arrow-wide" classname="footer__arrow" %}
</a>
{% endif %}
{% endwith %}
<ul class="footer__socials">
<li>
<a aria-label="Follow us on Twitter"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ context:
url: '#'
alt_text: 'We are carbon neutral'
image: fake
footer_newsletter_cta_url: '#'
footer_newsletter_cta_text: 'Sign up for news and insights'

tags:
srcset_image:
Expand Down

0 comments on commit 6504075

Please sign in to comment.