diff --git a/club/forms.py b/club/forms.py index e0966fed..6cf4e405 100644 --- a/club/forms.py +++ b/club/forms.py @@ -88,7 +88,7 @@ class MailingForm(forms.Form): ) # Include fields for handling mailing creation - mailing_fields = ("email", "club", "moderator") + mailing_fields = ("email",) self.fields.update(forms.fields_for_model(Mailing, fields=mailing_fields)) for field in mailing_fields: self.fields["mailing_" + field] = self.fields.pop(field) @@ -103,17 +103,10 @@ class MailingForm(forms.Form): self.fields["subscription_" + field] = self.fields.pop(field) self.fields["subscription_" + field].required = False - self.fields["mailing_club"].queryset = Club.objects.filter(id=club_id) - self.fields["mailing_club"].initial = club_id - self.fields["mailing_club"].widget = forms.HiddenInput() self.fields["subscription_mailing"].queryset = Mailing.objects.filter( club__id=club_id, is_moderated=True ) - self.fields["mailing_moderator"].queryset = User.objects.filter(id=user_id) - self.fields["mailing_moderator"].initial = user_id - self.fields["mailing_moderator"].widget = forms.HiddenInput() - def check_required(self, cleaned_data, field): """ If the given field doesn't exist or has no value, add a required error on it @@ -150,8 +143,8 @@ class MailingForm(forms.Form): if cleaned_data["action"] == self.ACTION_NEW_MAILING: self.check_required(cleaned_data, "mailing_email") - self.check_required(cleaned_data, "mailing_club") - self.check_required(cleaned_data, "mailing_moderator") + # self.check_required(cleaned_data, "mailing_club") + # self.check_required(cleaned_data, "mailing_moderator") if cleaned_data["action"] == self.ACTION_NEW_SUBSCRIPTION: self.check_required(cleaned_data, "subscription_mailing") diff --git a/club/models.py b/club/models.py index 50cacd0d..5f0b58dd 100644 --- a/club/models.py +++ b/club/models.py @@ -338,6 +338,8 @@ class Mailing(models.Model): ) def clean(self): + if Mailing.objects.filter(email=self.email).exists(): + raise ValidationError(_("This mailing list already exists.")) if self.can_moderate(self.moderator): self.is_moderated = True else: diff --git a/club/templates/club/mailing.jinja b/club/templates/club/mailing.jinja index 1222a332..7aa88eed 100644 --- a/club/templates/club/mailing.jinja +++ b/club/templates/club/mailing.jinja @@ -6,11 +6,20 @@ {% endblock %} {% block content %} - {% if mailings %} {% trans %}Remember : mailing lists need to be moderated, if your new created list is not shown wait until moderation takes action{% endtrans %} - {% for mailing in mailings %} + {% if mailings_not_moderated %} +

{% trans %}Mailing lists waiting for moderation{% endtrans %}

+ + {% endif %} + + {% if mailings_moderated %} + {% for mailing in mailings_moderated %}

{% trans %}Mailing{% endtrans %} {{ mailing.email_full }} {%- if user.is_owner(mailing) -%} - {% trans %}Delete{% endtrans %} @@ -87,15 +96,11 @@

{% trans %}New mailing{% endtrans %}

{% csrf_token %} - {{ form.mailing_club.errors }} - {{ form.mailing_moderator.errors }}

{{ form.mailing_email.errors }} {{ form.mailing_email }}

- {{ form.mailing_club }} - {{ form.mailing_moderator }}

diff --git a/club/views.py b/club/views.py index 151dab16..31dc0ad0 100644 --- a/club/views.py +++ b/club/views.py @@ -35,7 +35,7 @@ from django.core.urlresolvers import reverse, reverse_lazy from django.utils import timezone from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext as _t -from django.core.exceptions import PermissionDenied +from django.core.exceptions import PermissionDenied, ValidationError, NON_FIELD_ERRORS from django.shortcuts import get_object_or_404, redirect from core.views import ( @@ -532,6 +532,9 @@ class ClubMailingView(ClubTabsMixin, CanEditMixin, DetailFormView): kwargs["mailings_moderated"] = ( kwargs["mailings"].exclude(is_moderated=False).all() ) + kwargs["mailings_not_moderated"] = ( + kwargs["mailings"].exclude(is_moderated=True).all() + ) kwargs["form_actions"] = { "NEW_MALING": self.form_class.ACTION_NEW_MAILING, "NEW_SUBSCRIPTION": self.form_class.ACTION_NEW_SUBSCRIPTION, @@ -539,20 +542,24 @@ class ClubMailingView(ClubTabsMixin, CanEditMixin, DetailFormView): } return kwargs - def add_new_mailing(self, cleaned_data): + def add_new_mailing(self, cleaned_data) -> ValidationError: """ Create a new mailing list from the form """ mailing = Mailing( - club=cleaned_data["mailing_club"], + club=self.get_object(), email=cleaned_data["mailing_email"], - moderator=cleaned_data["mailing_moderator"], + moderator=self.request.user, is_moderated=False, ) - mailing.clean() + try: + mailing.clean() + except ValidationError as validation_error: + return validation_error mailing.save() + return None - def add_new_subscription(self, cleaned_data): + def add_new_subscription(self, cleaned_data) -> ValidationError: """ Add mailing subscriptions for each user given and/or for the specified email in form """ @@ -568,8 +575,14 @@ class ClubMailingView(ClubTabsMixin, CanEditMixin, DetailFormView): mailing=cleaned_data["subscription_mailing"], email=cleaned_data["subscription_email"], ) + + try: sub.clean() - sub.save() + except ValidationError as validation_error: + return validation_error + sub.save() + + return None def remove_subscription(self, cleaned_data): """ @@ -588,16 +601,21 @@ class ClubMailingView(ClubTabsMixin, CanEditMixin, DetailFormView): resp = super(ClubMailingView, self).form_valid(form) cleaned_data = form.clean() + error = None if cleaned_data["action"] == self.form_class.ACTION_NEW_MAILING: - self.add_new_mailing(cleaned_data) + error = self.add_new_mailing(cleaned_data) if cleaned_data["action"] == self.form_class.ACTION_NEW_SUBSCRIPTION: - self.add_new_subscription(cleaned_data) + error = self.add_new_subscription(cleaned_data) if cleaned_data["action"] == self.form_class.ACTION_REMOVE_SUBSCRIPTION: self.remove_subscription(cleaned_data) + if error: + form.add_error(NON_FIELD_ERRORS, error) + return self.form_invalid(form) + return resp def get_success_url(self, **kwargs): diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index ec15c62e..5b54e273 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: 2019-05-01 22:45+0200\n" +"POT-Creation-Date: 2019-05-09 11:33+0200\n" "PO-Revision-Date: 2016-07-18\n" "Last-Translator: Skia \n" "Language-Team: AE info \n" @@ -174,10 +174,10 @@ msgstr "étiquette" msgid "target type" msgstr "type de cible" -#: accounting/models.py:313 club/models.py:413 +#: accounting/models.py:313 club/models.py:415 #: club/templates/club/club_members.jinja:16 #: club/templates/club/club_old_members.jinja:8 -#: club/templates/club/mailing.jinja:32 +#: club/templates/club/mailing.jinja:41 #: counter/templates/counter/cash_summary_list.jinja:32 #: counter/templates/counter/stats.jinja:15 #: counter/templates/counter/stats.jinja:52 @@ -345,7 +345,7 @@ msgstr "Compte en banque : " #: accounting/templates/accounting/club_account_details.jinja:60 #: accounting/templates/accounting/label_list.jinja:26 #: club/templates/club/club_sellings.jinja:50 -#: club/templates/club/mailing.jinja:16 club/templates/club/mailing.jinja:34 +#: club/templates/club/mailing.jinja:25 club/templates/club/mailing.jinja:43 #: com/templates/com/mailing_admin.jinja:19 #: com/templates/com/news_admin_list.jinja:41 #: com/templates/com/news_admin_list.jinja:70 @@ -1054,7 +1054,7 @@ msgstr "description" msgid "past member" msgstr "Anciens membres" -#: club/models.py:323 club/models.py:418 +#: club/models.py:323 club/models.py:420 msgid "Email address" msgstr "Adresse email" @@ -1071,19 +1071,23 @@ msgstr "est modéré" msgid "moderator" msgstr "modérateur" -#: club/models.py:406 club/templates/club/mailing.jinja:14 +#: club/models.py:342 +msgid "This mailing list already exists." +msgstr "Cette liste de diffusion existe déjà." + +#: club/models.py:408 club/templates/club/mailing.jinja:23 msgid "Mailing" msgstr "Liste de diffusion" -#: club/models.py:425 +#: club/models.py:427 msgid "At least user or email is required" msgstr "Au moins un utilisateur ou un email est nécessaire" -#: club/models.py:433 +#: club/models.py:435 msgid "This email is already suscribed in this mailing" msgstr "Cet email est déjà abonné à cette mailing" -#: club/models.py:459 +#: club/models.py:461 msgid "Unregistered user" msgstr "Utilisateur non enregistré" @@ -1275,7 +1279,7 @@ msgstr "Gestion des laveries" msgid "Mailing lists" msgstr "Mailing listes" -#: club/templates/club/mailing.jinja:11 +#: club/templates/club/mailing.jinja:10 msgid "" "Remember : mailing lists need to be moderated, if your new created list is " "not shown wait until moderation takes action" @@ -1284,40 +1288,44 @@ msgstr "" "nouvellement créee n'est pas affichée, attendez jusqu'à qu'un modérateur " "entre en action" -#: club/templates/club/mailing.jinja:20 +#: club/templates/club/mailing.jinja:13 +msgid "Mailing lists waiting for moderation" +msgstr "Listes de diffusions en attente de modération" + +#: club/templates/club/mailing.jinja:29 msgid "Generate mailing list" msgstr "Générer la liste de diffusion" -#: club/templates/club/mailing.jinja:33 +#: club/templates/club/mailing.jinja:42 #: com/templates/com/mailing_admin.jinja:10 msgid "Email" msgstr "Email" -#: club/templates/club/mailing.jinja:49 +#: club/templates/club/mailing.jinja:58 msgid "Remove from mailing list" msgstr "Supprimer de la liste de diffusion" -#: club/templates/club/mailing.jinja:53 +#: club/templates/club/mailing.jinja:62 msgid "There is no subscriber for this mailing list" msgstr "Il n'y a pas d'abonnés dans cette liste de diffusion" -#: club/templates/club/mailing.jinja:58 +#: club/templates/club/mailing.jinja:67 msgid "No mailing list existing for this club" msgstr "Aucune mailing liste n'existe pour ce club" -#: club/templates/club/mailing.jinja:63 +#: club/templates/club/mailing.jinja:72 msgid "New member" msgstr "Nouveau membre" -#: club/templates/club/mailing.jinja:83 +#: club/templates/club/mailing.jinja:92 msgid "Add to mailing list" msgstr "Ajouter à la mailing liste" -#: club/templates/club/mailing.jinja:87 +#: club/templates/club/mailing.jinja:96 msgid "New mailing" msgstr "Nouvelle liste de diffusion" -#: club/templates/club/mailing.jinja:100 +#: club/templates/club/mailing.jinja:109 msgid "Create mailing list" msgstr "Créer une liste de diffusion"