diff --git a/elections2021/forms.py b/elections2021/forms.py index cf14770f6c2ff65e3191a197a92b8a4ec1fbba44..2743ffd0a8e1b2d58295c307830ee886498b3599 100644 --- a/elections2021/forms.py +++ b/elections2021/forms.py @@ -87,9 +87,3 @@ class ProgramAppForm(forms.Form): choices=OCCUPATION_CHOICES, initial=OCCUPATION_WORKING ) topics = forms.MultipleChoiceField(required=False, choices=TOPIC_CHOICES) - - -class SubscribeForm(forms.Form): - email = forms.EmailField() - confirmed = forms.BooleanField() - return_page_id = forms.IntegerField() diff --git a/elections2021/models.py b/elections2021/models.py index a0ba744b934d9b32806940279293161d5077c571..99c7da69feda02154b170aaf0c928f65456fa63d 100644 --- a/elections2021/models.py +++ b/elections2021/models.py @@ -35,6 +35,7 @@ from wagtail.search import index from wagtailmetadata.models import MetadataPageMixin from calendar_utils.models import CalendarMixin +from shared.forms import SubscribeForm from shared.models import ArticleMixin, SubpageMixin from shared.utils import get_subpage_url, subscribe_to_newsletter from tuning import admin_help @@ -110,7 +111,7 @@ from .constants import ( WHITE, WORKING_SENIORS, ) -from .forms import ProgramAppForm, ProgramPointPageForm, SubscribeForm +from .forms import ProgramAppForm, ProgramPointPageForm from .utils import get_archetype NO_SEARCH_IMAGE_USE_PHOTO = ( diff --git a/main/models.py b/main/models.py index a159f2eef9e207db6d740be5b9f68fcf975d527f..ab90aada9785d467989116242201e7c9a7505add 100644 --- a/main/models.py +++ b/main/models.py @@ -1,5 +1,9 @@ +from functools import cached_property + +from django.conf import settings from django.core.paginator import Paginator from django.db import models +from django.http import HttpResponseRedirect from django.shortcuts import render from modelcluster.contrib.taggit import ClusterTaggableManager from modelcluster.fields import ParentalKey @@ -12,6 +16,7 @@ from wagtail.core.models import Page from wagtailmetadata.models import MetadataPageMixin from shared.const import RICH_TEXT_DEFAULT_FEATURES +from shared.forms import SubscribeForm from shared.models import ( ArticleMixin, ExtendedMetadataHomePageMixin, @@ -19,7 +24,7 @@ from shared.models import ( MenuMixin, SubpageMixin, ) -from shared.utils import make_promote_panels +from shared.utils import make_promote_panels, subscribe_to_newsletter from tuning import admin_help from . import blocks @@ -133,10 +138,35 @@ class MainHomePage(MenuMixin, ExtendedMetadataHomePageMixin, MetadataPageMixin, def get_404_response(request): return render(request, "main/404.html", status=404) + @cached_property + def newsletter_subscribe_url(self): + return self.url + self.reverse_subpage("newsletter_subscribe") + @property def root_page(self): return self + @route(r"^prihlaseni-k-newsletteru/$") + def newsletter_subscribe(self, request): + if request.method == "POST": + form = SubscribeForm(request.POST) + if form.is_valid(): + subscribe_to_newsletter( + form.cleaned_data["email"], + settings.PIRATICZ_NEWSLETTER_ID, + settings.PIRATICZ_NEWSLETTER_SOURCE, + ) + try: + page = ( + Page.objects.filter(id=form.cleaned_data["return_page_id"]) + .live() + .first() + ) + return HttpResponseRedirect(page.full_url) + except Page.DoesNotExist: + return HttpResponseRedirect(self.url) + return HttpResponseRedirect(self.url) + class MainWorkPage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page): perex = models.TextField() diff --git a/majak/settings/base.py b/majak/settings/base.py index 7e52665f1fda2389fb129046c5a8f266036230d0..fcd7d96e0d8e475fe8344229e55ab06f17d8a4af 100644 --- a/majak/settings/base.py +++ b/majak/settings/base.py @@ -298,6 +298,9 @@ ELECTIONS2021_NEWSLETTER_SOURCE = env.str( "ELECTIONS2021_NEWSLETTER_SOURCE", "Koalice 2021" ) +PIRATICZ_NEWSLETTER_ID = env.int("PIRATICZ_NEWSLETTER_ID", default=0) +PIRATICZ_NEWSLETTER_SOURCE = env.str("PIRATICZ_NEWSLETTER_SOURCE", "PirĂ¡ti.cz") + # URL pointing to MapProxy instance to use. # MapProxy is used to serve map tiles to hide client details from the tile provider. # @see: https://mapproxy.org/ diff --git a/shared/forms.py b/shared/forms.py new file mode 100644 index 0000000000000000000000000000000000000000..98a3256a7470721a9ddf5a28b3fa03ff34190498 --- /dev/null +++ b/shared/forms.py @@ -0,0 +1,7 @@ +from django import forms + + +class SubscribeForm(forms.Form): + email = forms.EmailField() + confirmed = forms.BooleanField() + return_page_id = forms.IntegerField()