From c0f72b8c7062eceda834beae57efbe95d94eb4f9 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sun, 22 Jan 2017 18:38:52 +0100 Subject: Mécanismes d'abonnement et de désabonnement --- urls.py | 2 ++ views.py | 27 ++++++++++++++++++++++++--- 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[-\w]+)/(?P[0-9]{4})/(?P[0-53]{1,2})/(?P[-\w]+)/$", views.timetable, name="timetable"), + url(r"^subscriptions/confirm/(?P[0-9a-f]{40})$", views.confirm_subscription, name="confirm"), + url(r"^subscriptions/cancel/(?P[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") -- cgit v1.2.1