Opt-out working.
authorRadek Czajka <rczajka@rczajka.pl>
Wed, 29 Jan 2020 13:36:18 +0000 (14:36 +0100)
committerRadek Czajka <rczajka@rczajka.pl>
Wed, 29 Jan 2020 13:36:18 +0000 (14:36 +0100)
src/messaging/models.py
src/messaging/templates/messaging/contact_detail.html [new file with mode: 0644]
src/messaging/templates/messaging/contact_form.html
src/messaging/urls.py
src/messaging/views.py

index da8a01e..b7a87b3 100644 (file)
@@ -4,6 +4,7 @@ from django.core.mail import send_mail
 from django.db import models
 from django.template import Template, Context
 from django.urls import reverse
+from django.utils.timezone import now
 from django.utils.translation import ugettext_lazy as _
 from sentry_sdk import capture_exception
 from catalogue.utils import get_random_hash
@@ -127,7 +128,9 @@ class Contact(models.Model):
         if not created:
             obj.ascend(level, since, expires_at)
 
-    def ascend(self, level, since, expires_at=None):
+    def ascend(self, level, since=None, expires_at=None):
+        if since is None:
+            since = now()
         if level < self.level:
             return
         if level == self.level:
diff --git a/src/messaging/templates/messaging/contact_detail.html b/src/messaging/templates/messaging/contact_detail.html
new file mode 100644 (file)
index 0000000..725f208
--- /dev/null
@@ -0,0 +1,13 @@
+{% extends "base/base.html" %}
+
+{% block body %}
+
+<h1>Adres wypisany</h1>
+
+{% if contact.level == 50 %}
+<p>Potwierdzamy, że adres {{ contact.email }} został wypisany z korespondencji.</p>
+{% else %}
+Błąd.
+{% endif %}
+
+{% endblock %}
index bbe9f37..153490a 100644 (file)
@@ -5,6 +5,7 @@
 <h1>Czy na pewno chcesz zrezygnować z otrzymywania e-maili na adres {{ object.email }}?</h1>
 
 <form method="POST" action="">
+       {% csrf_token %}
        <button type="submit">Tak, wypisz mnie</button>
 </form>
 
index 4990008..cacfe01 100644 (file)
@@ -5,4 +5,5 @@ from . import views
 urlpatterns = [
     path('states/<slug>/info.json', views.state_info),
     path('opt-out/<key>/', views.OptOutView.as_view(), name='messaging_optout'),
+    path('opt-out/<key>/ok/', views.OptOutOkView.as_view(), name='messaging_optout_ok'),
 ]
index 6ea1a40..fc09d72 100644 (file)
@@ -4,9 +4,9 @@ from django.urls import reverse
 from django.shortcuts import render
 from django.utils.translation import ugettext as _
 from django.views.decorators import cache
-from django.views.generic import UpdateView
+from django.views.generic import DetailView, UpdateView
 from . import models
-from .states import states
+from .states import Level, states
 
 
 def describe(value):
@@ -46,5 +46,19 @@ class OptOutView(UpdateView):
     model = models.Contact
     slug_url_kwarg = 'key'
     slug_field = 'key'
-    fields = ['level']
+    fields = []
+
+    def get_success_url(self):
+        return reverse('messaging_optout_ok', args=[self.object.key])
+
+    def form_valid(self, form):
+        self.object.ascend(Level.OPT_OUT)
+        return super().form_valid(form)
+
+
+class OptOutOkView(DetailView):
+    model = models.Contact
+    slug_url_kwarg = 'key'
+    slug_field = 'key'
+