aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlban Gruin2017-10-27 21:51:12 +0200
committerAlban Gruin2017-10-27 21:51:12 +0200
commit7ef57a0226fa25b8ea5e9a6ff5526889dc300649 (patch)
treeddcac97876e52c0e64cb8d1a4431cb9d087f5ef2
parentdf3cb623a79d925e6af048bc88e607094c6b692e (diff)
Ajout d’une page pour lister les calendriers disponibles
-rw-r--r--templates/index.html6
-rw-r--r--urls.py1
-rw-r--r--views.py15
3 files changed, 19 insertions, 3 deletions
diff --git a/templates/index.html b/templates/index.html
index 005fd5b..c47a0be 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -4,7 +4,7 @@
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
{% block head %}{% endblock %}
- <title>{% block title %}{% if year %}{{ year }} &ndash; {% endif %}{% endblock %}celcatsanitizer</title>
+ <title>{% block title %}{% if year %}{{ year }}{% elif group %}{{ group }}{% endif %}{% if year or group %} &ndash; {% endif %}{% endblock %}celcatsanitizer</title>
<link rel="stylesheet" href="{% static "celcatsanitizer/style.css" %}">
</head>
<body>
@@ -13,10 +13,10 @@
</header>
<div class="content">
{% block body %}
- <h3>{% if year %}{{ year }} &ndash; Choisissez votre mention{% else %}Choisissez votre année{% endif %}</h3>
+ <h3>{% if year %}{{ year }} &ndash; Choisissez votre mention{% elif group %}Calendriers disponibles pour le groupe {{ group }}{% else %}Choisissez votre année{% endif %}</h3>
<ul>
{% for element in elements %}
- <li><a href="{% if year %}{% url "groups" year.slug element.slug %}{% else %}{% url "mentions" element.slug %}{% endif %}">{{ element }}</a></li>
+ <li><a href="{% if year %}{% url "groups" year.slug element.slug %}{% elif group %}{% url "ics-group" group.timetable.year.slug group.timetable.slug element.slug %}{% else %}{% url "mentions" element.slug %}{% endif %}">{{ element }}</a></li>
{% empty %}
<p><em>Aucun emploi du temps à afficher</em></p>
{% endfor %}
diff --git a/urls.py b/urls.py
index d269400..b30e8d9 100644
--- a/urls.py
+++ b/urls.py
@@ -22,6 +22,7 @@ urlpatterns = [
url(r"^(?P<year_slug>[-\w]+)/$", views.mention_list, name="mentions"),
url(r"^(?P<year_slug>[-\w]+)/(?P<timetable_slug>[-\w]+)/$", views.group_list, name="groups"),
url(r"^(?P<year_slug>[-\w]+)/(?P<timetable_slug>[-\w]+)/(?P<group_slug>[-\w]+)/$", views.timetable, name="timetable"),
+ url(r"^(?P<year_slug>[-\w]+)/(?P<timetable_slug>[-\w]+)/(?P<group_slug>[-\w]+)/calendars$", views.calendar_list, name="calendar-list"),
url(r"^(?P<year_slug>[-\w]+)/(?P<timetable_slug>[-\w]+)/(?P<group_slug>[-\w]+)/calendar.ics$", feeds.IcalFeed(), name="ics"),
url(r"^(?P<year_slug>[-\w]+)/(?P<timetable_slug>[-\w]+)/(?P<group_slug>[-\w]+)/calendar-group.ics$", feeds.IcalOnlyOneFeed(), name="ics-group"),
url(r"^(?P<year_slug>[-\w]+)/(?P<timetable_slug>[-\w]+)/(?P<group_slug>[-\w]+)/feed.atom$", feeds.AtomFeed(), name="atom"),
diff --git a/views.py b/views.py
index 9c38524..76b7127 100644
--- a/views.py
+++ b/views.py
@@ -17,6 +17,7 @@ import datetime
from django.conf import settings
from django.db.models import Max
+from django.db.models.functions import Length
from django.http import Http404
from django.shortcuts import get_object_or_404, render
@@ -95,5 +96,19 @@ def timetable(request, year_slug, timetable_slug, group_slug, year=None, week=No
"year": year, "week": int(week),
"is_old_timetable": is_old_timetable})
+def calendar_list(request, year_slug, timetable_slug, group_slug):
+ """Affiche une liste des ICS disponibles pour un groupe."""
+ # On commence par récupérer l’emploi du temps associé, puis le groupe
+ # Si la récupération de l’un d’entre eux échoue, on affiche une erreur 404.
+ timetable = get_object_or_404(Timetable, year__slug=year_slug, slug=timetable_slug)
+ group = get_object_or_404(Group, slug=group_slug, timetable=timetable)
+
+ # On récupère les groupes « parents » au groupe spécifié.
+ groups = Group.objects.get_parents(group).annotate(length=Length("subgroup")) \
+ .order_by("length")
+
+ # On réutilise encore la template principale
+ return render(request, "index.html", {"group": group, "elements": groups})
+
def contact(request):
return render(request, "contact.html", {"email": settings.ADMINS[0][1]})