mirror of
https://github.com/ae-utbm/sith.git
synced 2025-03-09 23:07:11 +00:00
Allow displaying more news
This commit is contained in:
parent
88b3f7c322
commit
a592a607c1
@ -1,24 +1,28 @@
|
|||||||
{% extends "core/base.jinja" %}
|
|
||||||
{% from "com/macros.jinja" import news_moderation_alert %}
|
{% from "com/macros.jinja" import news_moderation_alert %}
|
||||||
|
{% if not is_fragment %}
|
||||||
|
{% extends "core/base.jinja" %}
|
||||||
|
|
||||||
{% block title %}
|
{% block title %}
|
||||||
{% trans %}News{% endtrans %}
|
{% trans %}News{% endtrans %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block additional_css %}
|
{% block additional_css %}
|
||||||
<link rel="stylesheet" href="{{ static('com/css/news-list.scss') }}">
|
<link rel="stylesheet" href="{{ static('com/css/news-list.scss') }}">
|
||||||
<link rel="stylesheet" href="{{ static('com/components/ics-calendar.scss') }}">
|
<link rel="stylesheet" href="{{ static('com/components/ics-calendar.scss') }}">
|
||||||
|
|
||||||
{# Atom feed discovery, not really css but also goes there #}
|
{# Atom feed discovery, not really css but also goes there #}
|
||||||
<link rel="alternate" type="application/rss+xml" title="{% trans %}News feed{% endtrans %}" href="{{ url("com:news_feed") }}">
|
<link rel="alternate" type="application/rss+xml" title="{% trans %}News feed{% endtrans %}" href="{{ url("com:news_feed") }}">
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block additional_js %}
|
{% block additional_js %}
|
||||||
<script type="module" src={{ static("bundled/com/components/ics-calendar-index.ts") }}></script>
|
<script type="module" src={{ static("bundled/com/components/ics-calendar-index.ts") }}></script>
|
||||||
<script type="module" src={{ static("bundled/com/components/moderation-alert-index.ts") }}></script>
|
<script type="module" src={{ static("bundled/com/components/moderation-alert-index.ts") }}></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
{% if not is_fragment %}
|
||||||
<div id="news">
|
<div id="news">
|
||||||
<div id="left_column" class="news_column">
|
<div id="left_column" class="news_column">
|
||||||
<h3>
|
<h3>
|
||||||
@ -37,6 +41,8 @@
|
|||||||
</a>
|
</a>
|
||||||
<br>
|
<br>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
<div id="news_displayed">
|
||||||
{% for day, dates_group in news_dates %}
|
{% for day, dates_group in news_dates %}
|
||||||
<div class="news_events_group">
|
<div class="news_events_group">
|
||||||
<div class="news_events_group_date">
|
<div class="news_events_group_date">
|
||||||
@ -100,6 +106,18 @@
|
|||||||
<em>{% trans %}Nothing to come...{% endtrans %}</em>
|
<em>{% trans %}Nothing to come...{% endtrans %}</em>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
{% if max_weeks_displayed + 1 < 10 %}
|
||||||
|
<button
|
||||||
|
hx-get={{ url("core:index") }}?weeks={{ max_weeks_displayed + 1 }}
|
||||||
|
hx-target="#news_displayed"
|
||||||
|
hx-swap="outerHtml"
|
||||||
|
hx-push-url="true"
|
||||||
|
>
|
||||||
|
{% trans date=(timezone.now() + timedelta(days=6*(max_weeks_displayed+1))).strftime('%d/%m/%Y') %}Display until {{ date }}{% endtrans %}
|
||||||
|
</button>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% if not is_fragment %}
|
||||||
|
|
||||||
<h3>
|
<h3>
|
||||||
{% trans %}All coming events{% endtrans %}
|
{% trans %}All coming events{% endtrans %}
|
||||||
@ -185,4 +203,5 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
22
com/views.py
22
com/views.py
@ -33,7 +33,7 @@ from django.contrib.syndication.views import Feed
|
|||||||
from django.core.exceptions import PermissionDenied, ValidationError
|
from django.core.exceptions import PermissionDenied, ValidationError
|
||||||
from django.db.models import Max
|
from django.db.models import Max
|
||||||
from django.forms.models import modelform_factory
|
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.shortcuts import get_object_or_404, redirect
|
||||||
from django.urls import reverse, reverse_lazy
|
from django.urls import reverse, reverse_lazy
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
@ -52,7 +52,7 @@ from core.auth.mixins import (
|
|||||||
PermissionOrAuthorRequiredMixin,
|
PermissionOrAuthorRequiredMixin,
|
||||||
)
|
)
|
||||||
from core.models import User
|
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
|
from core.views.widgets.markdown import MarkdownInput
|
||||||
|
|
||||||
# Sith object
|
# Sith object
|
||||||
@ -236,9 +236,18 @@ class NewsAdminListView(PermissionRequiredMixin, ListView):
|
|||||||
permission_required = ["com.moderate_news", "com.delete_news"]
|
permission_required = ["com.moderate_news", "com.delete_news"]
|
||||||
|
|
||||||
|
|
||||||
class NewsListView(TemplateView):
|
class NewsListView(AllowFragment, TemplateView):
|
||||||
template_name = "com/news_list.jinja"
|
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):
|
def get_birthdays(self):
|
||||||
if not self.request.user.has_perm("core.view_user"):
|
if not self.request.user.has_perm("core.view_user"):
|
||||||
return []
|
return []
|
||||||
@ -256,7 +265,11 @@ class NewsListView(TemplateView):
|
|||||||
def get_news_dates(self):
|
def get_news_dates(self):
|
||||||
return itertools.groupby(
|
return itertools.groupby(
|
||||||
NewsDate.objects.viewable_by(self.request.user)
|
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")
|
.order_by("start_date")
|
||||||
.select_related("news", "news__club"),
|
.select_related("news", "news__club"),
|
||||||
key=lambda d: d.start_date.date(),
|
key=lambda d: d.start_date.date(),
|
||||||
@ -266,6 +279,7 @@ class NewsListView(TemplateView):
|
|||||||
return super().get_context_data(**kwargs) | {
|
return super().get_context_data(**kwargs) | {
|
||||||
"news_dates": self.get_news_dates(),
|
"news_dates": self.get_news_dates(),
|
||||||
"birthdays": self.get_birthdays(),
|
"birthdays": self.get_birthdays(),
|
||||||
|
"max_weeks_displayed": self.get_number_weeks_displayed(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"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"
|
"PO-Revision-Date: 2016-07-18\n"
|
||||||
"Last-Translator: Maréchal <thomas.girod@utbm.fr\n"
|
"Last-Translator: Maréchal <thomas.girod@utbm.fr\n"
|
||||||
"Language-Team: AE info <ae.info@utbm.fr>\n"
|
"Language-Team: AE info <ae.info@utbm.fr>\n"
|
||||||
@ -935,6 +935,10 @@ msgstr "rôle"
|
|||||||
msgid "description"
|
msgid "description"
|
||||||
msgstr "description"
|
msgstr "description"
|
||||||
|
|
||||||
|
#: club/models.py
|
||||||
|
msgid "past member"
|
||||||
|
msgstr "ancien membre"
|
||||||
|
|
||||||
#: club/models.py
|
#: club/models.py
|
||||||
msgid "Email address"
|
msgid "Email address"
|
||||||
msgstr "Adresse email"
|
msgstr "Adresse email"
|
||||||
@ -1425,8 +1429,9 @@ msgstr ""
|
|||||||
#: com/templates/com/macros.jinja
|
#: com/templates/com/macros.jinja
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"This event will take place every week for %(nb)s weeks. If you moderate or delete "
|
"This event will take place every week for %(nb)s weeks. If you moderate or "
|
||||||
"this event, it will also be moderated (or deleted) for the following weeks."
|
"delete this event, it will also be moderated (or deleted) for the following "
|
||||||
|
"weeks."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Cet événement se déroulera chaque semaine pendant %(nb)s semaines. Si vous "
|
"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é) "
|
"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..."
|
msgid "Nothing to come..."
|
||||||
msgstr "Rien à venir..."
|
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
|
#: com/templates/com/news_list.jinja
|
||||||
msgid "All coming events"
|
msgid "All coming events"
|
||||||
msgstr "Tous les événements à venir"
|
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
|
#: core/views/forms.py
|
||||||
msgid ""
|
msgid ""
|
||||||
"Profile: you need to be visible on the picture, in order to be recognized (e."
|
"Profile: you need to be visible on the picture, in order to be recognized "
|
||||||
"g. by the barmen)"
|
"(e.g. by the barmen)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Photo de profil: vous devez être visible sur la photo afin d'être reconnu "
|
"Photo de profil: vous devez être visible sur la photo afin d'être reconnu "
|
||||||
"(par exemple par les barmen)"
|
"(par exemple par les barmen)"
|
||||||
@ -3947,8 +3956,8 @@ msgstr ""
|
|||||||
#: counter/templates/counter/mails/account_dump.jinja
|
#: counter/templates/counter/mails/account_dump.jinja
|
||||||
msgid "If you think this was a mistake, please mail us at ae@utbm.fr."
|
msgid "If you think this was a mistake, please mail us at ae@utbm.fr."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Si vous pensez qu'il s'agit d'une erreur, veuillez envoyer un mail à ae@utbm."
|
"Si vous pensez qu'il s'agit d'une erreur, veuillez envoyer un mail à "
|
||||||
"fr."
|
"ae@utbm.fr."
|
||||||
|
|
||||||
#: counter/templates/counter/mails/account_dump.jinja
|
#: counter/templates/counter/mails/account_dump.jinja
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -6022,6 +6031,3 @@ msgstr "Vous ne pouvez plus écrire de commentaires, la date est passée."
|
|||||||
#, python-format
|
#, python-format
|
||||||
msgid "Maximum characters: %(max_length)s"
|
msgid "Maximum characters: %(max_length)s"
|
||||||
msgstr "Nombre de caractères max: %(max_length)s"
|
msgstr "Nombre de caractères max: %(max_length)s"
|
||||||
|
|
||||||
#~ msgid "past member"
|
|
||||||
#~ msgstr "ancien membre"
|
|
||||||
|
@ -162,6 +162,7 @@ TEMPLATES = [
|
|||||||
"Launderette": "launderette.models.Launderette",
|
"Launderette": "launderette.models.Launderette",
|
||||||
"Counter": "counter.models.Counter",
|
"Counter": "counter.models.Counter",
|
||||||
"timezone": "django.utils.timezone",
|
"timezone": "django.utils.timezone",
|
||||||
|
"timedelta": "datetime.timedelta",
|
||||||
"get_sith": "com.views.sith",
|
"get_sith": "com.views.sith",
|
||||||
"get_language": "django.utils.translation.get_language",
|
"get_language": "django.utils.translation.get_language",
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user