- {% 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 %}
-
+ {% 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",
},