aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--urls.py2
-rw-r--r--views.py27
2 files changed, 26 insertions, 3 deletions
diff --git a/urls.py b/urls.py
index 46a15cc..1805bb0 100644
--- a/urls.py
+++ b/urls.py
@@ -5,4 +5,6 @@ from . import views
urlpatterns = [
url(r"^$", views.index, name="index"),
url(r"^(?P<timetable_slug>[-\w]+)/(?P<year>[0-9]{4})/(?P<week>[0-53]{1,2})/(?P<group_slug>[-\w]+)/$", views.timetable, name="timetable"),
+ url(r"^subscriptions/confirm/(?P<token>[0-9a-f]{40})$", views.confirm_subscription, name="confirm"),
+ url(r"^subscriptions/cancel/(?P<token>[0-9a-f]{40})$", views.cancel_subscription, name="cancel"),
]
diff --git a/views.py b/views.py
index a6dfede..729333f 100644
--- a/views.py
+++ b/views.py
@@ -1,8 +1,9 @@
-from django.http import HttpResponse
+from django.http import HttpResponse, Http404
from django.db.models import Count
-from django.shortcuts import get_object_or_404, render, render_to_response
+from django.shortcuts import get_object_or_404, redirect, render, render_to_response
+from django.utils import timezone
-from edt.models import Timetable, LastUpdate, Group, Course
+from edt.models import Timetable, LastUpdate, Group, Subscription, Course
from edt.utils import get_week
import datetime
@@ -40,3 +41,23 @@ def timetable(request, timetable_slug, year, week, group_slug):
grouped_courses[-1].append(course)
return render_to_response("timetable.html", {"timetable": timetable, "group": group, "courses": grouped_courses, "last_update": last_update.date, "week": week})
+
+def confirm_subscription(request, token):
+ subscription = get_object_or_404(Subscription, token=token)
+ if subscription.active:
+ raise Http404()
+
+ subscription.active = True
+ subscription.save()
+
+ year, week, day = timezone.now().isocalendar()
+ if day >= 6:
+ year, week, _ = (timezone.now() + datetime.timedelta(weeks=1)).isocalendar()
+
+ return redirect("timetable", timetable_slug=subscription.group.timetable.slug, year=year, week=week, group_slug=subscription.group.slug)
+
+def cancel_subscription(request, token):
+ subscription = get_object_or_404(Subscription, token=token)
+ subscription.delete()
+
+ return redirect("index")