diff options
| -rw-r--r-- | urls.py | 2 | ||||
| -rw-r--r-- | views.py | 27 | 
2 files changed, 26 insertions, 3 deletions
| @@ -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"),  ] @@ -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") | 
