Remove QuikNotifMixin

This commit is contained in:
2025-09-23 20:26:23 +02:00
parent c6e86841b3
commit 7eaf25a64f
11 changed files with 116 additions and 146 deletions

View File

@@ -31,9 +31,7 @@
<td> <td>
<a href="{{ url('com:weekmail_article_edit', article_id=a.id) }}">{% trans %}Edit{% endtrans %}</a> | <a href="{{ url('com:weekmail_article_edit', article_id=a.id) }}">{% trans %}Edit{% endtrans %}</a> |
<a href="{{ url('com:weekmail_article_delete', article_id=a.id) }}">{% trans %}Delete{% endtrans %}</a> | <a href="{{ url('com:weekmail_article_delete', article_id=a.id) }}">{% trans %}Delete{% endtrans %}</a> |
<a href="?add_article={{ a.id }}">{% trans %}Add to weekmail{% endtrans %}</a> | <a href="?add_article={{ a.id }}">{% trans %}Add to weekmail{% endtrans %}</a>
<a href="?up_article={{ a.id }}">{% trans %}Up{% endtrans %}</a> |
<a href="?down_article={{ a.id }}">{% trans %}Down{% endtrans %}</a>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}

View File

@@ -28,6 +28,7 @@ from typing import Any
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from django.conf import settings from django.conf import settings
from django.contrib import messages
from django.contrib.auth.mixins import ( from django.contrib.auth.mixins import (
PermissionRequiredMixin, PermissionRequiredMixin,
) )
@@ -55,7 +56,7 @@ from core.auth.mixins import (
PermissionOrClubBoardRequiredMixin, PermissionOrClubBoardRequiredMixin,
) )
from core.models import User from core.models import User
from core.views.mixins import QuickNotifMixin, TabedViewMixin from core.views.mixins import TabedViewMixin
from core.views.widgets.markdown import MarkdownInput from core.views.widgets.markdown import MarkdownInput
# Sith object # Sith object
@@ -333,7 +334,7 @@ class NewsFeed(Feed):
# Weekmail # Weekmail
class WeekmailPreviewView(ComTabsMixin, QuickNotifMixin, CanEditPropMixin, DetailView): class WeekmailPreviewView(ComTabsMixin, CanEditPropMixin, DetailView):
model = Weekmail model = Weekmail
template_name = "com/weekmail_preview.jinja" template_name = "com/weekmail_preview.jinja"
success_url = reverse_lazy("com:weekmail") success_url = reverse_lazy("com:weekmail")
@@ -345,12 +346,11 @@ class WeekmailPreviewView(ComTabsMixin, QuickNotifMixin, CanEditPropMixin, Detai
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
self.object = self.get_object() self.object = self.get_object()
messages.success(self.request, _("Weekmail sent successfully"))
if request.POST["send"] == "validate": if request.POST["send"] == "validate":
try: try:
self.object.send() self.object.send()
return HttpResponseRedirect( return HttpResponseRedirect(reverse("com:weekmail"))
reverse("com:weekmail") + "?qn_weekmail_send_success"
)
except SMTPRecipientsRefused as e: except SMTPRecipientsRefused as e:
self.bad_recipients = e.recipients self.bad_recipients = e.recipients
elif request.POST["send"] == "clean": elif request.POST["send"] == "clean":
@@ -361,7 +361,6 @@ class WeekmailPreviewView(ComTabsMixin, QuickNotifMixin, CanEditPropMixin, Detai
for u in users: for u in users:
u.preferences.receive_weekmail = False u.preferences.receive_weekmail = False
u.preferences.save() u.preferences.save()
self.quick_notif_list += ["qn_success"]
return super().get(request, *args, **kwargs) return super().get(request, *args, **kwargs)
def get_object(self, queryset=None): def get_object(self, queryset=None):
@@ -375,7 +374,7 @@ class WeekmailPreviewView(ComTabsMixin, QuickNotifMixin, CanEditPropMixin, Detai
return kwargs return kwargs
class WeekmailEditView(ComTabsMixin, QuickNotifMixin, CanEditPropMixin, UpdateView): class WeekmailEditView(ComTabsMixin, CanEditPropMixin, UpdateView):
model = Weekmail model = Weekmail
template_name = "com/weekmail.jinja" template_name = "com/weekmail.jinja"
form_class = modelform_factory( form_class = modelform_factory(
@@ -415,7 +414,10 @@ class WeekmailEditView(ComTabsMixin, QuickNotifMixin, CanEditPropMixin, UpdateVi
art.rank, prev_art.rank = prev_art.rank, art.rank art.rank, prev_art.rank = prev_art.rank, art.rank
art.save() art.save()
prev_art.save() prev_art.save()
self.quick_notif_list += ["qn_success"] messages.success(
self.request,
_("%(title)s moved up in the Weekmail") % {"title": art.title},
)
if "down_article" in request.GET: if "down_article" in request.GET:
art = get_object_or_404( art = get_object_or_404(
WeekmailArticle, id=request.GET["down_article"], weekmail=self.object WeekmailArticle, id=request.GET["down_article"], weekmail=self.object
@@ -427,7 +429,10 @@ class WeekmailEditView(ComTabsMixin, QuickNotifMixin, CanEditPropMixin, UpdateVi
art.rank, next_art.rank = next_art.rank, art.rank art.rank, next_art.rank = next_art.rank, art.rank
art.save() art.save()
next_art.save() next_art.save()
self.quick_notif_list += ["qn_success"] messages.success(
self.request,
_("%(title)s moved down in the Weekmail") % {"title": art.title},
)
if "add_article" in request.GET: if "add_article" in request.GET:
art = get_object_or_404( art = get_object_or_404(
WeekmailArticle, id=request.GET["add_article"], weekmail=None WeekmailArticle, id=request.GET["add_article"], weekmail=None
@@ -436,7 +441,10 @@ class WeekmailEditView(ComTabsMixin, QuickNotifMixin, CanEditPropMixin, UpdateVi
art.rank = self.object.articles.aggregate(Max("rank"))["rank__max"] or 0 art.rank = self.object.articles.aggregate(Max("rank"))["rank__max"] or 0
art.rank += 1 art.rank += 1
art.save() art.save()
self.quick_notif_list += ["qn_success"] messages.success(
self.request,
_("%(title)s added to the Weekmail") % {"title": art.title},
)
if "del_article" in request.GET: if "del_article" in request.GET:
art = get_object_or_404( art = get_object_or_404(
WeekmailArticle, id=request.GET["del_article"], weekmail=self.object WeekmailArticle, id=request.GET["del_article"], weekmail=self.object
@@ -444,7 +452,10 @@ class WeekmailEditView(ComTabsMixin, QuickNotifMixin, CanEditPropMixin, UpdateVi
art.weekmail = None art.weekmail = None
art.rank = -1 art.rank = -1
art.save() art.save()
self.quick_notif_list += ["qn_success"] messages.success(
self.request,
_("%(title)s removed from the Weekmail") % {"title": art.title},
)
return super().get(request, *args, **kwargs) return super().get(request, *args, **kwargs)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
@@ -454,9 +465,7 @@ class WeekmailEditView(ComTabsMixin, QuickNotifMixin, CanEditPropMixin, UpdateVi
return kwargs return kwargs
class WeekmailArticleEditView( class WeekmailArticleEditView(ComTabsMixin, CanEditPropMixin, UpdateView):
ComTabsMixin, QuickNotifMixin, CanEditPropMixin, UpdateView
):
"""Edit an article.""" """Edit an article."""
model = WeekmailArticle model = WeekmailArticle
@@ -468,11 +477,10 @@ class WeekmailArticleEditView(
pk_url_kwarg = "article_id" pk_url_kwarg = "article_id"
template_name = "core/edit.jinja" template_name = "core/edit.jinja"
success_url = reverse_lazy("com:weekmail") success_url = reverse_lazy("com:weekmail")
quick_notif_url_arg = "qn_weekmail_article_edit"
current_tab = "weekmail" current_tab = "weekmail"
class WeekmailArticleCreateView(QuickNotifMixin, CreateView): class WeekmailArticleCreateView(CreateView):
"""Post an article.""" """Post an article."""
model = WeekmailArticle model = WeekmailArticle
@@ -483,7 +491,6 @@ class WeekmailArticleCreateView(QuickNotifMixin, CreateView):
) )
template_name = "core/create.jinja" template_name = "core/create.jinja"
success_url = reverse_lazy("core:user_tools") success_url = reverse_lazy("core:user_tools")
quick_notif_url_arg = "qn_weekmail_new_article"
def get_initial(self): def get_initial(self):
if "club" not in self.request.GET: if "club" not in self.request.GET:

View File

@@ -1,24 +1,25 @@
export enum NotificationLevel { export enum NotificationLevel {
Error = "error", Error = "error",
Warning = "warning", Warning = "warning",
Success = "success",
} }
export function createNotification(message: string, level: NotificationLevel) { export function createNotification(message: string, level: NotificationLevel) {
const element = document.getElementById("notifications"); const element = document.getElementById("quick-notifications");
if (element === null) { if (element === null) {
return false; return false;
} }
return element.dispatchEvent( return element.dispatchEvent(
new CustomEvent("notification-add", { new CustomEvent("quick-notification-add", {
detail: { text: message, tag: level }, detail: { text: message, tag: level },
}), }),
); );
} }
export function deleteNotifications() { export function deleteNotifications() {
const element = document.getElementById("notifications"); const element = document.getElementById("quick-notifications");
if (element === null) { if (element === null) {
return false; return false;
} }
return element.dispatchEvent(new CustomEvent("notification-delete")); return element.dispatchEvent(new CustomEvent("quick-notification-delete"));
} }

View File

@@ -270,17 +270,6 @@ body {
} }
/*--------------------------------CONTENT------------------------------*/ /*--------------------------------CONTENT------------------------------*/
#quick_notif {
width: 100%;
margin: 0 auto;
list-style-type: none;
background: $second-color;
li {
padding: 10px;
}
}
#content { #content {
padding: 1em 1%; padding: 1em 1%;
box-shadow: $shadow-color 0 5px 10px; box-shadow: $shadow-color 0 5px 10px;

View File

@@ -1,4 +1,4 @@
<div id="notifications" <div id="quick-notifications"
x-data="{ x-data="{
messages: [ messages: [
{% if messages %} {% if messages %}
@@ -11,8 +11,8 @@
{% endif %} {% endif %}
] ]
}" }"
@notification-add="(e) => messages.push(e?.detail)" @quick-notification-add="(e) => messages.push(e?.detail)"
@notification-delete="messages = []"> @quick-notification-delete="messages = []">
<template x-for="message in messages"> <template x-for="message in messages">
<div x-data="{show: true}" class="alert" :class="`alert-${message.tag}`" x-show="show" x-transition> <div x-data="{show: true}" class="alert" :class="`alert-${message.tag}`" x-show="show" x-transition>
<span class="alert-main" x-text="message.text"></span> <span class="alert-main" x-text="message.text"></span>

View File

@@ -2,7 +2,6 @@ import copy
import inspect import inspect
from typing import Any, ClassVar, LiteralString, Protocol, Unpack from typing import Any, ClassVar, LiteralString, Protocol, Unpack
from django.conf import settings
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.http import HttpRequest, HttpResponse from django.http import HttpRequest, HttpResponse
from django.template.loader import render_to_string from django.template.loader import render_to_string
@@ -41,36 +40,6 @@ class TabedViewMixin(View):
return kwargs return kwargs
class QuickNotifMixin:
quick_notif_list = []
def dispatch(self, request, *arg, **kwargs):
# In some cases, the class can stay instanciated, so we need to reset the list
self.quick_notif_list = []
return super().dispatch(request, *arg, **kwargs)
def get_success_url(self):
ret = super().get_success_url()
if hasattr(self, "quick_notif_url_arg"):
if "?" in ret:
ret += "&" + self.quick_notif_url_arg
else:
ret += "?" + self.quick_notif_url_arg
return ret
def get_context_data(self, **kwargs):
"""Add quick notifications to context."""
kwargs = super().get_context_data(**kwargs)
kwargs["quick_notifs"] = []
for n in self.quick_notif_list:
kwargs["quick_notifs"].append(settings.SITH_QUICK_NOTIF[n])
for key, val in settings.SITH_QUICK_NOTIF.items():
for gk in self.request.GET:
if key == gk:
kwargs["quick_notifs"].append(val)
return kwargs
class AllowFragment: class AllowFragment:
"""Add `is_fragment` to templates. It's only True if the request is emitted by htmx""" """Add `is_fragment` to templates. It's only True if the request is emitted by htmx"""

View File

@@ -65,7 +65,7 @@ from core.views.forms import (
UserGroupsForm, UserGroupsForm,
UserProfileForm, UserProfileForm,
) )
from core.views.mixins import QuickNotifMixin, TabedViewMixin, UseFragmentsMixin from core.views.mixins import TabedViewMixin, UseFragmentsMixin
from counter.models import Counter, Refilling, Selling from counter.models import Counter, Refilling, Selling
from eboutic.models import Invoice from eboutic.models import Invoice
from subscription.models import Subscription from subscription.models import Subscription
@@ -564,7 +564,7 @@ class UserUpdateGroupView(UserTabsMixin, CanEditPropMixin, UpdateView):
current_tab = "groups" current_tab = "groups"
class UserToolsView(LoginRequiredMixin, QuickNotifMixin, UserTabsMixin, TemplateView): class UserToolsView(LoginRequiredMixin, UserTabsMixin, TemplateView):
"""Displays the logged user's tools.""" """Displays the logged user's tools."""
template_name = "core/user_tools.jinja" template_name = "core/user_tools.jinja"

View File

@@ -4,7 +4,6 @@
heading_level: 3 heading_level: 3
members: members:
- TabedViewMixin - TabedViewMixin
- QuickNotifMixin
- AllowFragment - AllowFragment
- FragmentMixin - FragmentMixin
- UseFragmentsMixin - UseFragmentsMixin

View File

@@ -6,7 +6,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-22 14:29+0200\n" "POT-Creation-Date: 2025-09-23 20:02+0200\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"
@@ -1261,6 +1261,10 @@ msgstr "Liste d'écrans"
msgid "All incoming events" msgid "All incoming events"
msgstr "Tous les événements à venir" msgstr "Tous les événements à venir"
#: com/views.py
msgid "Weekmail sent successfully"
msgstr "Weekmail envoyé avec succès"
#: com/views.py #: com/views.py
msgid "Delete and save to regenerate" msgid "Delete and save to regenerate"
msgstr "Supprimer et sauver pour régénérer" msgstr "Supprimer et sauver pour régénérer"
@@ -1269,6 +1273,26 @@ msgstr "Supprimer et sauver pour régénérer"
msgid "Weekmail of the " msgid "Weekmail of the "
msgstr "Weekmail du " msgstr "Weekmail du "
#: com/views.py
#, python-format
msgid "%(title)s moved up in the Weekmail"
msgstr "%(title)s monté dans le Weekmail"
#: com/views.py
#, python-format
msgid "%(title)s moved down in the Weekmail"
msgstr "%(title)s descendu dans le Weekmail"
#: com/views.py
#, python-format
msgid "%(title)s added to the Weekmail"
msgstr "%(title)s ajouté dans Weekmail"
#: com/views.py
#, python-format
msgid "%(title)s removed from the Weekmail"
msgstr "%(title)s retiré du Weekmail"
#: com/views.py #: com/views.py
msgid "" msgid ""
"You must be a board member of the selected club to post in the Weekmail." "You must be a board member of the selected club to post in the Weekmail."
@@ -4548,22 +4572,6 @@ msgstr "Signaler ce commentaire"
msgid "Edit UE" msgid "Edit UE"
msgstr "Éditer l'UE" msgstr "Éditer l'UE"
#: pedagogy/templates/pedagogy/uv_edit.jinja
msgid "Import from UTBM"
msgstr "Importer depuis l'UTBM"
#: pedagogy/templates/pedagogy/uv_edit.jinja
msgid "Unknown UE code"
msgstr "Code d'UE inconnu"
#: pedagogy/templates/pedagogy/uv_edit.jinja
msgid "Successful autocomplete"
msgstr "Autocomplétion réussite"
#: pedagogy/templates/pedagogy/uv_edit.jinja
msgid "An error occurred: "
msgstr "Une erreur est survenue : "
#: rootplace/forms.py #: rootplace/forms.py
msgid "User that will be kept" msgid "User that will be kept"
msgstr "Utilisateur qui sera conservé" msgstr "Utilisateur qui sera conservé"
@@ -5116,26 +5124,6 @@ msgstr "Vous avez acheté %s"
msgid "You have a notification" msgid "You have a notification"
msgstr "Vous avez une notification" msgstr "Vous avez une notification"
#: sith/settings.py
msgid "Success!"
msgstr "Succès !"
#: sith/settings.py
msgid "Fail!"
msgstr "Échec !"
#: sith/settings.py
msgid "You successfully posted an article in the Weekmail"
msgstr "Article posté avec succès dans le Weekmail"
#: sith/settings.py
msgid "You successfully edited an article in the Weekmail"
msgstr "Article édité avec succès dans le Weekmail"
#: sith/settings.py
msgid "You successfully sent the Weekmail"
msgstr "Weekmail envoyé avec succès"
#: sith/settings.py #: sith/settings.py
msgid "AE tee-shirt" msgid "AE tee-shirt"
msgstr "Tee-shirt AE" msgstr "Tee-shirt AE"
@@ -5178,8 +5166,8 @@ msgstr "Vous ne pouvez pas cotiser plusieurs fois pour la même période"
#: subscription/templates/subscription/forms/create_existing_user.jinja #: subscription/templates/subscription/forms/create_existing_user.jinja
msgid "" msgid ""
"If the subscription is done using the AE account, you must also click " "If the subscription is done using the AE account, you must also click it on "
"it on the AE counter." "the AE counter."
msgstr "" msgstr ""
"Si la cotisation est faite en utilisant le compte AE, vous devez également " "Si la cotisation est faite en utilisant le compte AE, vous devez également "
"la cliquer sur le comptoir AE." "la cliquer sur le comptoir AE."
@@ -5447,10 +5435,38 @@ msgstr "Mes photos"
msgid "Admin tools" msgid "Admin tools"
msgstr "Admin Trombi" msgstr "Admin Trombi"
#: trombi/views.py
msgid "Trombi modified"
msgstr "Trombi modifié"
#: trombi/views.py
msgid "User added to the trombi"
msgstr "Utilisateur ajouté au trombi"
#: trombi/views.py
msgid "User couldn't be added to the trombi"
msgstr "L'utilisateur n'a pas pu être ajouté au trombi"
#: trombi/views.py
msgid "User removed from the trombi"
msgstr "Utilisateur retiré du trombi"
#: trombi/views.py #: trombi/views.py
msgid "Explain why you rejected the comment" msgid "Explain why you rejected the comment"
msgstr "Expliquez pourquoi vous refusez le commentaire" msgstr "Expliquez pourquoi vous refusez le commentaire"
#: trombi/views.py
msgid "Comment accepted"
msgstr "Commentaire accepté"
#: trombi/views.py
msgid "Comment rejected"
msgstr "Commentaire rejeté"
#: trombi/views.py
msgid "Comment removed"
msgstr "Commentaire retiré"
#: trombi/views.py #: trombi/views.py
msgid "Rejected comment" msgid "Rejected comment"
msgstr "Commentaire rejeté" msgstr "Commentaire rejeté"
@@ -5503,6 +5519,10 @@ msgstr "Téléphone"
msgid "Native town" msgid "Native town"
msgstr "Ville d'origine" msgstr "Ville d'origine"
#: trombi/views.py
msgid "User modified"
msgstr "Utilisateur modifié"
#: trombi/views.py #: trombi/views.py
msgid "" msgid ""
"You can not yet write comment, you must wait for the subscription deadline " "You can not yet write comment, you must wait for the subscription deadline "

View File

@@ -685,14 +685,6 @@ SITH_PERMANENT_NOTIFICATIONS = {
"SAS_MODERATION": "sas.models.sas_notification_callback", "SAS_MODERATION": "sas.models.sas_notification_callback",
} }
SITH_QUICK_NOTIF = {
"qn_success": _("Success!"),
"qn_fail": _("Fail!"),
"qn_weekmail_new_article": _("You successfully posted an article in the Weekmail"),
"qn_weekmail_article_edit": _("You successfully edited an article in the Weekmail"),
"qn_weekmail_send_success": _("You successfully sent the Weekmail"),
}
# Mailing related settings # Mailing related settings
SITH_MAILING_DOMAIN = "utbm.fr" SITH_MAILING_DOMAIN = "utbm.fr"

View File

@@ -26,6 +26,7 @@ from datetime import date
from django import forms from django import forms
from django.conf import settings from django.conf import settings
from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import LoginRequiredMixin
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.db import IntegrityError from django.db import IntegrityError
@@ -46,7 +47,7 @@ from core.auth.mixins import (
) )
from core.models import User from core.models import User
from core.views.forms import SelectDate from core.views.forms import SelectDate
from core.views.mixins import QuickNotifMixin, TabedViewMixin from core.views.mixins import TabedViewMixin
from core.views.widgets.ajax_select import AutoCompleteSelectUser from core.views.widgets.ajax_select import AutoCompleteSelectUser
from trombi.models import Trombi, TrombiClubMembership, TrombiComment, TrombiUser from trombi.models import Trombi, TrombiClubMembership, TrombiComment, TrombiUser
@@ -142,7 +143,8 @@ class TrombiEditView(CanEditPropMixin, TrombiTabsMixin, UpdateView):
current_tab = "admin_tools" current_tab = "admin_tools"
def get_success_url(self): def get_success_url(self):
return super().get_success_url() + "?qn_success" messages.success(self.request, _("Trombi modified"))
return super().get_success_url()
class AddUserForm(forms.Form): class AddUserForm(forms.Form):
@@ -155,7 +157,7 @@ class AddUserForm(forms.Form):
) )
class TrombiDetailView(CanEditMixin, QuickNotifMixin, TrombiTabsMixin, DetailView): class TrombiDetailView(CanEditMixin, TrombiTabsMixin, DetailView):
model = Trombi model = Trombi
template_name = "trombi/detail.jinja" template_name = "trombi/detail.jinja"
pk_url_kwarg = "trombi_id" pk_url_kwarg = "trombi_id"
@@ -167,9 +169,9 @@ class TrombiDetailView(CanEditMixin, QuickNotifMixin, TrombiTabsMixin, DetailVie
if form.is_valid(): if form.is_valid():
try: try:
TrombiUser(user=form.cleaned_data["user"], trombi=self.object).save() TrombiUser(user=form.cleaned_data["user"], trombi=self.object).save()
self.quick_notif_list.append("qn_success") messages.success(self.request, _("User added to the trombi"))
except IntegrityError: # We don't care about duplicate keys except IntegrityError: # We don't care about duplicate keys
self.quick_notif_list.append("qn_fail") messages.error(self.request, _("User couldn't be added to the trombi"))
return super().get(request, *args, **kwargs) return super().get(request, *args, **kwargs)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
@@ -192,15 +194,11 @@ class TrombiDeleteUserView(CanEditPropMixin, TrombiTabsMixin, DeleteView):
current_tab = "admin_tools" current_tab = "admin_tools"
def get_success_url(self): def get_success_url(self):
return ( messages.success(self.request, _("User removed from the trombi"))
reverse("trombi:detail", kwargs={"trombi_id": self.object.trombi.id}) return reverse("trombi:detail", kwargs={"trombi_id": self.object.trombi.id})
+ "?qn_success"
)
class TrombiModerateCommentsView( class TrombiModerateCommentsView(CanEditPropMixin, TrombiTabsMixin, DetailView):
CanEditPropMixin, QuickNotifMixin, TrombiTabsMixin, DetailView
):
model = Trombi model = Trombi
template_name = "trombi/comment_moderation.jinja" template_name = "trombi/comment_moderation.jinja"
pk_url_kwarg = "trombi_id" pk_url_kwarg = "trombi_id"
@@ -235,16 +233,18 @@ class TrombiModerateCommentView(DetailView):
if request.POST["action"] == "accept": if request.POST["action"] == "accept":
self.object.is_moderated = True self.object.is_moderated = True
self.object.save() self.object.save()
messages.success(self.request, _("Comment accepted"))
return redirect( return redirect(
reverse( reverse(
"trombi:moderate_comments", "trombi:moderate_comments",
kwargs={"trombi_id": self.object.author.trombi.id}, kwargs={"trombi_id": self.object.author.trombi.id},
) )
+ "?qn_success"
) )
elif request.POST["action"] == "reject": elif request.POST["action"] == "reject":
messages.success(self.request, _("Comment rejected"))
return super().get(request, *args, **kwargs) return super().get(request, *args, **kwargs)
elif request.POST["action"] == "delete" and "reason" in request.POST: elif request.POST["action"] == "delete" and "reason" in request.POST:
messages.success(self.request, _("Comment removed"))
self.object.author.user.email_user( self.object.author.user.email_user(
subject="[%s] %s" % (settings.SITH_NAME, _("Rejected comment")), subject="[%s] %s" % (settings.SITH_NAME, _("Rejected comment")),
message=_( message=_(
@@ -265,7 +265,6 @@ class TrombiModerateCommentView(DetailView):
"trombi:moderate_comments", "trombi:moderate_comments",
kwargs={"trombi_id": self.object.author.trombi.id}, kwargs={"trombi_id": self.object.author.trombi.id},
) )
+ "?qn_success"
) )
raise Http404 raise Http404
@@ -299,9 +298,7 @@ class UserTrombiForm(forms.Form):
) )
class UserTrombiToolsView( class UserTrombiToolsView(LoginRequiredMixin, TrombiTabsMixin, TemplateView):
LoginRequiredMixin, QuickNotifMixin, TrombiTabsMixin, TemplateView
):
"""Display a user's trombi tools.""" """Display a user's trombi tools."""
template_name = "trombi/user_tools.jinja" template_name = "trombi/user_tools.jinja"
@@ -318,7 +315,6 @@ class UserTrombiToolsView(
user=request.user, trombi=self.form.cleaned_data["trombi"] user=request.user, trombi=self.form.cleaned_data["trombi"]
) )
trombi_user.save() trombi_user.save()
self.quick_notif_list += ["qn_success"]
return super().get(request, *args, **kwargs) return super().get(request, *args, **kwargs)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
@@ -345,12 +341,10 @@ class UserTrombiEditPicturesView(TrombiTabsMixin, UserIsInATrombiMixin, UpdateVi
return self.request.user.trombi_user return self.request.user.trombi_user
def get_success_url(self): def get_success_url(self):
return reverse("trombi:user_tools") + "?qn_success" return reverse("trombi:user_tools")
class UserTrombiEditProfileView( class UserTrombiEditProfileView(TrombiTabsMixin, UserIsInATrombiMixin, UpdateView):
QuickNotifMixin, TrombiTabsMixin, UserIsInATrombiMixin, UpdateView
):
model = User model = User
form_class = modelform_factory( form_class = modelform_factory(
User, User,
@@ -375,7 +369,8 @@ class UserTrombiEditProfileView(
return self.request.user return self.request.user
def get_success_url(self): def get_success_url(self):
return reverse("trombi:user_tools") + "?qn_success" messages.success(self.request, _("User modified"))
return reverse("trombi:user_tools")
class UserTrombiResetClubMembershipsView(UserIsInATrombiMixin, RedirectView): class UserTrombiResetClubMembershipsView(UserIsInATrombiMixin, RedirectView):
@@ -387,7 +382,7 @@ class UserTrombiResetClubMembershipsView(UserIsInATrombiMixin, RedirectView):
return redirect(self.get_success_url()) return redirect(self.get_success_url())
def get_success_url(self): def get_success_url(self):
return reverse("trombi:profile") + "?qn_success" return reverse("trombi:profile")
class UserTrombiDeleteMembershipView(TrombiTabsMixin, CanEditMixin, DeleteView): class UserTrombiDeleteMembershipView(TrombiTabsMixin, CanEditMixin, DeleteView):
@@ -398,7 +393,7 @@ class UserTrombiDeleteMembershipView(TrombiTabsMixin, CanEditMixin, DeleteView):
current_tab = "profile" current_tab = "profile"
def get_success_url(self): def get_success_url(self):
return super().get_success_url() + "?qn_success" return super().get_success_url()
# Used by admins when someone does not have every club in his list # Used by admins when someone does not have every club in his list
@@ -436,7 +431,7 @@ class UserTrombiEditMembershipView(CanEditMixin, TrombiTabsMixin, UpdateView):
current_tab = "profile" current_tab = "profile"
def get_success_url(self): def get_success_url(self):
return super().get_success_url() + "?qn_success" return super().get_success_url()
class UserTrombiProfileView(TrombiTabsMixin, DetailView): class UserTrombiProfileView(TrombiTabsMixin, DetailView):
@@ -496,7 +491,7 @@ class TrombiCommentFormView(LoginRequiredMixin, View):
) )
def get_success_url(self): def get_success_url(self):
return reverse("trombi:user_tools") + "?qn_success" return reverse("trombi:user_tools")
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
kwargs = super().get_context_data(**kwargs) kwargs = super().get_context_data(**kwargs)