From a592a607c164e499622ae1ddf6d7c5bee02159dc Mon Sep 17 00:00:00 2001 From: Sli Date: Mon, 17 Feb 2025 01:34:10 +0100 Subject: [PATCH] Allow displaying more news --- com/templates/com/news_list.jinja | 205 ++++++++++++++++-------------- com/views.py | 22 +++- locale/fr/LC_MESSAGES/django.po | 26 ++-- sith/settings.py | 1 + 4 files changed, 147 insertions(+), 107 deletions(-) diff --git a/com/templates/com/news_list.jinja b/com/templates/com/news_list.jinja index ebb4f6e1..abd46d8c 100644 --- a/com/templates/com/news_list.jinja +++ b/com/templates/com/news_list.jinja @@ -1,111 +1,129 @@ -{% extends "core/base.jinja" %} {% from "com/macros.jinja" import news_moderation_alert %} +{% if not is_fragment %} + {% extends "core/base.jinja" %} -{% block title %} - {% trans %}News{% endtrans %} -{% endblock %} + {% block title %} + {% trans %}News{% endtrans %} + {% endblock %} -{% block additional_css %} - - + {% block additional_css %} + + {# Atom feed discovery, not really css but also goes there #} - -{% endblock %} + + {% endblock %} -{% block additional_js %} - - -{% endblock %} + {% block additional_js %} + + + {% endblock %} + +{% endif %} {% block content %} -
-
-

- {% trans %}Events today and the next few days{% endtrans %} - -

- {% if user.is_authenticated and (user.is_com_admin or user.memberships.board().ongoing().exists()) %} - - - {% trans %}Create news{% endtrans %} - - {% endif %} - {% if user.is_com_admin %} - - {% trans %}Administrate news{% endtrans %} - -
- {% endif %} - {% for day, dates_group in news_dates %} -
-
-
-
{{ day|date('D') }}
-
{{ day|date('d') }}
-
{{ day|date('b') }}
-
+ {% if not is_fragment %} +
+
+

+ {% trans %}Events today and the next few days{% endtrans %} + +

+ {% if user.is_authenticated and (user.is_com_admin or user.memberships.board().ongoing().exists()) %} + + + {% trans %}Create news{% endtrans %} + + {% endif %} + {% if user.is_com_admin %} + + {% trans %}Administrate news{% endtrans %} + +
+ {% endif %} + {% endif %} +
+ {% for day, dates_group in news_dates %} +
+
+
+
{{ day|date('D') }}
+
{{ day|date('d') }}
+
{{ day|date('b') }}
-
- {% for date in dates_group %} -
- {% if not date.news.is_moderated %} +
+
+ {% for date in dates_group %} +
+ {% if not date.news.is_moderated %} {# if a non moderated news is in the object list, the logged user is either an admin or the news author #} - {{ news_moderation_alert(date.news, user, "newsState") }} - {% endif %} -
-
- {% if date.news.club.logo %} - {{ date.news.club }} - {% else %} - {{ date.news.club }} - {% endif %} -
-

- - {{ date.news.title }} - -

- {{ date.news.club }} -
- - - -
+ {{ news_moderation_alert(date.news, user, "newsState") }} + {% endif %} +
+
+ {% if date.news.club.logo %} + {{ date.news.club }} + {% else %} + {{ date.news.club }} + {% endif %} +
+

+ + {{ date.news.title }} + +

+ {{ date.news.club }} +
+ - +
-
-
- {{ date.news.summary|markdown }}
+
+
+ {{ date.news.summary|markdown }}
-
- {% endfor %} -
+
+ + {% endfor %}
- {% else %} -
- {% trans %}Nothing to come...{% endtrans %} -
- {% endfor %} +
+ {% else %} +
+ {% trans %}Nothing to come...{% endtrans %} +
+ {% endfor %} + {% if max_weeks_displayed + 1 < 10 %} + + {% endif %} +
+ {% if not is_fragment %} -

- {% trans %}All coming events{% endtrans %} - -

- +

+ {% trans %}All coming events{% endtrans %} + +

+
@@ -184,5 +202,6 @@
-
+
+ {% endif %} {% endblock %} diff --git a/com/views.py b/com/views.py index 3990fe9b..a4d56f0c 100644 --- a/com/views.py +++ b/com/views.py @@ -33,7 +33,7 @@ from django.contrib.syndication.views import Feed from django.core.exceptions import PermissionDenied, ValidationError from django.db.models import Max from django.forms.models import modelform_factory -from django.http import HttpResponseRedirect +from django.http import Http404, HttpResponseRedirect from django.shortcuts import get_object_or_404, redirect from django.urls import reverse, reverse_lazy from django.utils import timezone @@ -52,7 +52,7 @@ from core.auth.mixins import ( PermissionOrAuthorRequiredMixin, ) from core.models import User -from core.views.mixins import QuickNotifMixin, TabedViewMixin +from core.views.mixins import AllowFragment, QuickNotifMixin, TabedViewMixin from core.views.widgets.markdown import MarkdownInput # Sith object @@ -236,9 +236,18 @@ class NewsAdminListView(PermissionRequiredMixin, ListView): permission_required = ["com.moderate_news", "com.delete_news"] -class NewsListView(TemplateView): +class NewsListView(AllowFragment, TemplateView): template_name = "com/news_list.jinja" + def get_number_weeks_displayed(self) -> int: + try: + max_weeks = max(int(self.request.GET.get("weeks", 1)), 0) + except ValueError as e: + raise Http404 from e + if max_weeks < 1 or max_weeks > 10: + raise Http404 + return max_weeks + def get_birthdays(self): if not self.request.user.has_perm("core.view_user"): return [] @@ -256,7 +265,11 @@ class NewsListView(TemplateView): def get_news_dates(self): return itertools.groupby( NewsDate.objects.viewable_by(self.request.user) - .filter(end_date__gt=now(), start_date__lt=now() + timedelta(days=6)) + .filter( + end_date__gt=now(), + start_date__lt=now() + + timedelta(days=6 * self.get_number_weeks_displayed()), + ) .order_by("start_date") .select_related("news", "news__club"), key=lambda d: d.start_date.date(), @@ -266,6 +279,7 @@ class NewsListView(TemplateView): return super().get_context_data(**kwargs) | { "news_dates": self.get_news_dates(), "birthdays": self.get_birthdays(), + "max_weeks_displayed": self.get_number_weeks_displayed(), } diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 25f49724..255aa270 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-12 15:55+0100\n" +"POT-Creation-Date: 2025-02-17 01:30+0100\n" "PO-Revision-Date: 2016-07-18\n" "Last-Translator: Maréchal \n" @@ -935,6 +935,10 @@ msgstr "rôle" msgid "description" msgstr "description" +#: club/models.py +msgid "past member" +msgstr "ancien membre" + #: club/models.py msgid "Email address" msgstr "Adresse email" @@ -1425,8 +1429,9 @@ msgstr "" #: com/templates/com/macros.jinja #, python-format msgid "" -"This event will take place every week for %(nb)s weeks. If you moderate or delete " -"this event, it will also be moderated (or deleted) for the following weeks." +"This event will take place every week for %(nb)s weeks. If you moderate or " +"delete this event, it will also be moderated (or deleted) for the following " +"weeks." msgstr "" "Cet événement se déroulera chaque semaine pendant %(nb)s semaines. Si vous " "modérez ou supprimez cet événement, il sera également modéré (ou supprimé) " @@ -1573,6 +1578,10 @@ msgstr "Administrer les news" msgid "Nothing to come..." msgstr "Rien à venir..." +#: com/templates/com/news_list.jinja +msgid "Display until %(date)s" +msgstr "Afficher jusqu'au %(date)s" + #: com/templates/com/news_list.jinja msgid "All coming events" msgstr "Tous les événements à venir" @@ -3336,8 +3345,8 @@ msgstr "Nom d'utilisateur, email, ou numéro de compte AE" #: core/views/forms.py msgid "" -"Profile: you need to be visible on the picture, in order to be recognized (e." -"g. by the barmen)" +"Profile: you need to be visible on the picture, in order to be recognized " +"(e.g. by the barmen)" msgstr "" "Photo de profil: vous devez être visible sur la photo afin d'être reconnu " "(par exemple par les barmen)" @@ -3947,8 +3956,8 @@ msgstr "" #: counter/templates/counter/mails/account_dump.jinja msgid "If you think this was a mistake, please mail us at ae@utbm.fr." msgstr "" -"Si vous pensez qu'il s'agit d'une erreur, veuillez envoyer un mail à ae@utbm." -"fr." +"Si vous pensez qu'il s'agit d'une erreur, veuillez envoyer un mail à " +"ae@utbm.fr." #: counter/templates/counter/mails/account_dump.jinja msgid "" @@ -6022,6 +6031,3 @@ msgstr "Vous ne pouvez plus écrire de commentaires, la date est passée." #, python-format msgid "Maximum characters: %(max_length)s" msgstr "Nombre de caractères max: %(max_length)s" - -#~ msgid "past member" -#~ msgstr "ancien membre" diff --git a/sith/settings.py b/sith/settings.py index b7d7e71c..b54ddd54 100644 --- a/sith/settings.py +++ b/sith/settings.py @@ -162,6 +162,7 @@ TEMPLATES = [ "Launderette": "launderette.models.Launderette", "Counter": "counter.models.Counter", "timezone": "django.utils.timezone", + "timedelta": "datetime.timedelta", "get_sith": "com.views.sith", "get_language": "django.utils.translation.get_language", },