Skip to content

Commit

Permalink
Merge pull request #1148 from maykinmedia/feature/2306-move-newslette…
Browse files Browse the repository at this point in the history
…rs-form-to-mijn-profiel

✨ [#2306] Move newsletter form to profile detail page
  • Loading branch information
alextreme authored Apr 11, 2024
2 parents d3d46c9 + c54ac68 commit ca95867
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 87 deletions.
16 changes: 12 additions & 4 deletions src/open_inwoner/accounts/tests/test_profile_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -1035,7 +1035,12 @@ class NewsletterSubscriptionTests(ClearCachesMixin, WebTest):
def setUp(self):
super().setUp()

self.profile_url = reverse("profile:newsletters")
self.profile_app = ProfileConfig.objects.create(
namespace=ProfileApphook.app_name, newsletters=True
)
cms_tools.create_apphook_page(ProfileApphook)

self.profile_url = reverse("profile:detail")
self.user = DigidUserFactory()

self.config = LapostaConfig.get_solo()
Expand All @@ -1054,7 +1059,12 @@ def setUp(self):
def setUpMocks(self, m):
m.get(
"https://laposta.local/api/v2/list",
json={"data": [{"list": self.list1.dict()}, {"list": self.list2.dict()}]},
json={
"data": [
{"list": self.list1.model_dump()},
{"list": self.list2.model_dump()},
]
},
)

def test_do_not_render_form_if_config_is_missing(self, m):
Expand All @@ -1063,15 +1073,13 @@ def test_do_not_render_form_if_config_is_missing(self, m):

response = self.app.get(self.profile_url, user=self.user)

self.assertIn(_("Geen nieuwsbrieven beschikbaar"), response.text)
self.assertNotIn("newsletter-form", response.forms)

def test_do_not_render_form_if_no_newsletters_are_found(self, m):
m.get("https://laposta.local/api/v2/list", json=[])

response = self.app.get(self.profile_url, user=self.user)

self.assertIn(_("Geen nieuwsbrieven beschikbaar"), response.text)
self.assertNotIn("newsletter-form", response.forms)

def test_render_form_if_newsletters_are_found(self, m):
Expand Down
2 changes: 0 additions & 2 deletions src/open_inwoner/accounts/views/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@
MyDataView,
MyNotificationsView,
MyProfileView,
NewsletterSubscribeView,
UserAppointmentsView,
)
from .registration import CustomRegistrationView, NecessaryFieldsUserView
Expand Down Expand Up @@ -80,7 +79,6 @@
"MyDataView",
"MyNotificationsView",
"MyProfileView",
"NewsletterSubscribeView",
"UserAppointmentsView",
"CustomRegistrationView",
"NecessaryFieldsUserView",
Expand Down
68 changes: 28 additions & 40 deletions src/open_inwoner/accounts/views/profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin
from django.forms.forms import Form
from django.http import HttpResponseRedirect
from django.shortcuts import redirect
from django.urls import reverse, reverse_lazy
Expand Down Expand Up @@ -49,7 +48,31 @@ class MyProfileView(
FormView,
):
template_name = "pages/profile/me.html"
form_class = Form
form_class = NewsletterSubscriptionForm

def get_success_url(self) -> str:
return reverse("profile:detail")

def get_form_kwargs(self) -> dict[str, Any]:
kwargs = super().get_form_kwargs()
kwargs["user"] = self.request.user
return kwargs

def form_valid(self, form):
form.save(self.request)

# Display errors raised by Laposta API
if form.errors:
self.log_user_action(
self.request.user, _("failed to modify user newsletter subscription")
)
return self.form_invalid(form)

messages.success(self.request, _("Uw wijzigingen zijn opgeslagen"))
self.log_user_action(
self.request.user, _("users newsletter subscriptions were modified")
)
return HttpResponseRedirect(self.get_success_url())

@cached_property
def crumbs(self):
Expand Down Expand Up @@ -140,6 +163,9 @@ def get_context_data(self, **kwargs):
return context

def post(self, request, *args, **kwargs):
if "newsletter-submit" in request.POST:
return super().post(request, *args, **kwargs)

if request.user.is_authenticated and not request.user.is_staff:
instance = User.objects.get(id=request.user.id)

Expand Down Expand Up @@ -311,44 +337,6 @@ def form_valid(self, form):
return HttpResponseRedirect(self.get_success_url())


class NewsletterSubscribeView(
LogMixin, LoginRequiredMixin, CommonPageMixin, BaseBreadcrumbMixin, FormView
):
form_class = NewsletterSubscriptionForm
template_name = "pages/profile/newsletters.html"

def get_success_url(self) -> str:
return reverse("profile:newsletters")

@cached_property
def crumbs(self):
return [
(_("Mijn profiel"), reverse("profile:detail")),
(_("Nieuwsbrieven"), reverse("profile:newsletters")),
]

def get_form_kwargs(self) -> dict[str, Any]:
kwargs = super().get_form_kwargs()
kwargs["user"] = self.request.user
return kwargs

def form_valid(self, form):
form.save(self.request)

# Display errors raised by Laposta API
if form.errors:
self.log_user_action(
self.request.user, _("failed to modify user newsletter subscription")
)
return self.form_invalid(form)

messages.success(self.request, _("Uw wijzigingen zijn opgeslagen"))
self.log_user_action(
self.request.user, _("users newsletter subscriptions were modified")
)
return HttpResponseRedirect(self.get_success_url())


class UserAppointmentsView(
LogMixin, LoginRequiredMixin, CommonPageMixin, BaseBreadcrumbMixin, TemplateView
):
Expand Down
6 changes: 0 additions & 6 deletions src/open_inwoner/cms/profile/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
MyNotificationsView,
MyProfileView,
NecessaryFieldsUserView,
NewsletterSubscribeView,
UserAppointmentsView,
)
from open_inwoner.accounts.views.actions import ActionDeleteView
Expand Down Expand Up @@ -109,11 +108,6 @@
EmailVerificationUserView.as_view(),
name="email_verification_user",
),
path(
"newsletters",
NewsletterSubscribeView.as_view(),
name="newsletters",
),
path("appointments", UserAppointmentsView.as_view(), name="appointments"),
path("", MyProfileView.as_view(), name="detail"),
]
34 changes: 20 additions & 14 deletions src/open_inwoner/templates/pages/profile/me.html
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,26 @@ <h2 class="h2 title" id="notifications">{% trans "Voorkeuren voor meldingen" %}
</div>
</section>

{% if view.config.selected_categories or view.config.mentors or view.config.my_contacts or view.config.actions or view.config.ssd or view.config.selfdiagnose or view.config.newsletters or view.config.appointments %}
{% if view.config.newsletters and form.fields.newsletters.choices %}
<section class="tabled tabled--flexible profile-section profile-section--bordered" id="profile-newsletters">
<div class="tabled__section">
<h2 class="h2 title" id="newsletters">{% trans "Nieuwsbrieven" %}</h2>
</div>
<form method="POST" id="newsletter-form" class="form" novalidate>
{% csrf_token %}

{% for field in form.fields %}
{% autorender_field form field %}
{% endfor %}

{% button_row %}
{% button text=_("Opslaan") type="submit" extra_classes="button--primary" name="newsletter-submit" %}
{% endbutton_row %}
</form>
</section>
{% endif %}

{% if view.config.selected_categories or view.config.mentors or view.config.my_contacts or view.config.actions or view.config.ssd or view.config.selfdiagnose or view.config.appointments %}
{# Overview #}
<section class="profile-section profile-section__overview">
<h2 class="h2 title" id="overview">{% trans "Overzicht" %}</h2>
Expand Down Expand Up @@ -256,19 +275,6 @@ <h4 class="card__heading-4"><span class="link link__text">{% trans "Zelftest" %}
</div>
</a>
{% endif %}
{% if view.config.newsletters %}
<a href="{% url 'profile:newsletters' %}" class="card card--compact card--stretch" id="profile-section-newsletters">
<div class="card__body">
<h4 class="card__heading-4"><span class="link link__text">{% trans "Nieuwsbrieven" %}</span>
</h4>

<span class="link link--icon link--secondary profile-card__button" aria-label="{% trans "Bekijk nieuwsbrieven" %}" title="{% trans "Bekijk nieuwsbrieven" %}">
<span class="link__text">{% trans "Bekijk nieuwsbrieven" %}</span>
{% icon icon="arrow_forward" icon_position="after" primary=True outlined=True %}
</span>
</div>
</a>
{% endif %}
{% if view.config.appointments %}
<a href="{% url 'profile:appointments' %}" class="card card--compact card--stretch" id="profile-section-appointments">
<div class="card__body">
Expand Down
21 changes: 0 additions & 21 deletions src/open_inwoner/templates/pages/profile/newsletters.html

This file was deleted.

0 comments on commit ca95867

Please sign in to comment.