Refactor mailings email

This commit is contained in:
Antoine Bartuccio 2017-08-22 22:39:12 +02:00
parent c83a990165
commit 4f6109e27c
9 changed files with 127 additions and 115 deletions

View File

@ -1,39 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
from django.conf import settings
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('club', '0008_auto_20170515_2214'),
]
operations = [
migrations.CreateModel(
name='Mailing',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)),
('email', models.EmailField(verbose_name='Email address', max_length=254, unique=True)),
('is_moderated', models.BooleanField(verbose_name='is moderated', default=False)),
('club', models.ForeignKey(related_name='mailings', to='club.Club', verbose_name='Club')),
('moderator', models.ForeignKey(related_name='moderated_mailings', to=settings.AUTH_USER_MODEL, verbose_name='moderator', null=True)),
],
),
migrations.CreateModel(
name='MailingSubscription',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)),
('email', models.EmailField(verbose_name='Email address', max_length=254)),
('mailing', models.ForeignKey(related_name='subscriptions', to='club.Mailing', verbose_name='Mailing')),
('user', models.ForeignKey(null=True, related_name='mailing_subscriptions', to=settings.AUTH_USER_MODEL, verbose_name='User', blank=True)),
],
),
migrations.AlterUniqueTogether(
name='mailingsubscription',
unique_together=set([('user', 'email', 'mailing')]),
),
]

View File

@ -0,0 +1,41 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
from django.conf import settings
import re
import django.core.validators
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('club', '0008_auto_20170515_2214'),
]
operations = [
migrations.CreateModel(
name='Mailing',
fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', serialize=False, primary_key=True)),
('email', models.CharField(max_length=256, unique=True, validators=[django.core.validators.RegexValidator(re.compile('(^[-!#$%&\'*+/=?^_`{}|~0-9A-Z]+(\\.[-!#$%&\'*+/=?^_`{}|~0-9A-Z]+)*\\Z|^"([\\001-\\010\\013\\014\\016-\\037!#-\\[\\]-\\177]|\\\\[\\001-\\011\\013\\014\\016-\\177])*"\\Z)', 34), 'Enter a valid address. Only the root of the address is needed.')], verbose_name='Email address')),
('is_moderated', models.BooleanField(default=False, verbose_name='is moderated')),
('club', models.ForeignKey(verbose_name='Club', related_name='mailings', to='club.Club')),
('moderator', models.ForeignKey(null=True, verbose_name='moderator', related_name='moderated_mailings', to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='MailingSubscription',
fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', serialize=False, primary_key=True)),
('email', models.EmailField(max_length=254, verbose_name='Email address')),
('mailing', models.ForeignKey(verbose_name='Mailing', related_name='subscriptions', to='club.Mailing')),
('user', models.ForeignKey(null=True, verbose_name='User', related_name='mailing_subscriptions', blank=True, to=settings.AUTH_USER_MODEL)),
],
),
migrations.AlterUniqueTogether(
name='mailingsubscription',
unique_together=set([('user', 'email', 'mailing')]),
),
]

View File

@ -31,6 +31,7 @@ from django.core.exceptions import ValidationError, ObjectDoesNotExist
from django.db import transaction from django.db import transaction
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.utils import timezone from django.utils import timezone
from django.core.validators import RegexValidator, validate_email
from core.models import User, MetaGroup, Group, SithFile, RealGroup, Notification from core.models import User, MetaGroup, Group, SithFile, RealGroup, Notification
@ -229,7 +230,11 @@ class Mailing(models.Model):
Remember that mailing lists should be validated by UTBM Remember that mailing lists should be validated by UTBM
""" """
club = models.ForeignKey(Club, verbose_name=_('Club'), related_name="mailings", null=False, blank=False) club = models.ForeignKey(Club, verbose_name=_('Club'), related_name="mailings", null=False, blank=False)
email = models.EmailField(_('Email address'), unique=True) email = models.CharField(_('Email address'), unique=True, null=False, blank=False, max_length=256,
validators=[
RegexValidator(validate_email.user_regex,
_('Enter a valid address. Only the root of the address is needed.'))
])
is_moderated = models.BooleanField(_('is moderated'), default=False) is_moderated = models.BooleanField(_('is moderated'), default=False)
moderator = models.ForeignKey(User, related_name="moderated_mailings", verbose_name=_("moderator"), null=True) moderator = models.ForeignKey(User, related_name="moderated_mailings", verbose_name=_("moderator"), null=True)
@ -240,6 +245,10 @@ class Mailing(models.Model):
self.moderator = None self.moderator = None
super(Mailing, self).clean() super(Mailing, self).clean()
@property
def email_full(self):
return self.email + '@' + settings.SITH_MAILING_DOMAIN
def can_moderate(self, user): def can_moderate(self, user):
return user.is_root or user.is_in_group(settings.SITH_GROUP_COM_ADMIN_ID) return user.is_root or user.is_in_group(settings.SITH_GROUP_COM_ADMIN_ID)
@ -254,11 +263,8 @@ class Mailing(models.Model):
sub.delete() sub.delete()
super(Mailing, self).delete() super(Mailing, self).delete()
def base_mail(self):
return self.email.split('@')[0]
def fetch_format(self): def fetch_format(self):
resp = self.base_mail() + ': ' resp = self.email + ': '
for sub in self.subscriptions.all(): for sub in self.subscriptions.all():
resp += sub.fetch_format() resp += sub.fetch_format()
return resp return resp
@ -271,7 +277,7 @@ class Mailing(models.Model):
super(Mailing, self).save() super(Mailing, self).save()
def __str__(self): def __str__(self):
return "%s - %s" % (self.club, self.email) return "%s - %s" % (self.club, self.email_full)
class MailingSubscription(models.Model): class MailingSubscription(models.Model):

View File

@ -11,7 +11,7 @@
{% for mailing in object_list %} {% for mailing in object_list %}
{% if mailing.is_moderated %} {% if mailing.is_moderated %}
<h2>{% trans %}Mailing{% endtrans %} {{ mailing.email }} <h2>{% trans %}Mailing{% endtrans %} {{ mailing.email_full }}
{%- if user.is_owner(mailing) -%} {%- if user.is_owner(mailing) -%}
<a href="{{ url('club:mailing_delete', mailing_id=mailing.id) }}"> - {% trans %}Delete{% endtrans %}</a> <a href="{{ url('club:mailing_delete', mailing_id=mailing.id) }}"> - {% trans %}Delete{% endtrans %}</a>
{%- endif -%} {%- endif -%}

View File

@ -36,7 +36,6 @@ from django.utils.translation import ugettext as _t
from ajax_select.fields import AutoCompleteSelectField from ajax_select.fields import AutoCompleteSelectField
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.core.validators import RegexValidator, validate_email
from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, TabedViewMixin from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, TabedViewMixin
from core.views.forms import SelectDate, SelectDateTime from core.views.forms import SelectDate, SelectDateTime
@ -55,16 +54,6 @@ class MailingForm(forms.ModelForm):
model = Mailing model = Mailing
fields = ('email', 'club', 'moderator') fields = ('email', 'club', 'moderator')
email = forms.CharField(
label=_('Email address'),
validators=[
RegexValidator(
validate_email.user_regex,
_('Enter a valid address. Only the root of the address is needed.')
)
],
required=True)
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
club_id = kwargs.pop('club_id', None) club_id = kwargs.pop('club_id', None)
user_id = kwargs.pop('user_id', -1) # Remember 0 is treated as None user_id = kwargs.pop('user_id', -1) # Remember 0 is treated as None
@ -78,12 +67,6 @@ class MailingForm(forms.ModelForm):
self.fields['moderator'].initial = user_id self.fields['moderator'].initial = user_id
self.fields['moderator'].widget = forms.HiddenInput() self.fields['moderator'].widget = forms.HiddenInput()
def clean(self):
cleaned_data = super(MailingForm, self).clean()
if self.is_valid():
cleaned_data['email'] += '@' + settings.SITH_MAILING_DOMAIN
return cleaned_data
class MailingSubscriptionForm(forms.ModelForm): class MailingSubscriptionForm(forms.ModelForm):
class Meta: class Meta:

View File

@ -13,7 +13,7 @@
</tr> </tr>
{% for mailing in list %} {% for mailing in list %}
<tr> <tr>
<td>{{ mailing.email }}</td> <td>{{ mailing.email_full }}</td>
<td><a href="{{ url('club:mailing', club_id=mailing.club.id) }}">{{ mailing.club }}</a></td> <td><a href="{{ url('club:mailing', club_id=mailing.club.id) }}">{{ mailing.club }}</a></td>
<td> <td>
<a href="{{ url('com:mailing_delete', mailing_id=mailing.id) }}">{% trans %}Delete{% endtrans %}</a> - {% if not mailing.is_moderated %}<a href="{{ url('com:mailing_moderate', mailing_id=mailing.id) }}">{% trans %}Moderate{% endtrans %}</a>{% else %}{% trans user=mailing.moderator %}Moderated by {{ user }}{% endtrans %}{% endif %} <a href="{{ url('com:mailing_delete', mailing_id=mailing.id) }}">{% trans %}Delete{% endtrans %}</a> - {% if not mailing.is_moderated %}<a href="{{ url('com:mailing_moderate', mailing_id=mailing.id) }}">{% trans %}Moderate{% endtrans %}</a>{% else %}{% trans user=mailing.moderator %}Moderated by {{ user }}{% endtrans %}{% endif %}

View File

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0021_auto_20170822_1529'),
]
operations = [
migrations.AlterField(
model_name='notification',
name='type',
field=models.CharField(choices=[('MAILING_MODERATION', 'A new mailing list needs to be moderated'), ('NEWS_MODERATION', 'A fresh new to be moderated'), ('FILE_MODERATION', 'New files to be moderated'), ('SAS_MODERATION', 'New pictures/album to be moderated in the SAS'), ('NEW_PICTURES', "You've been identified on some pictures"), ('REFILLING', 'You just refilled of %s'), ('SELLING', 'You just bought %s'), ('GENERIC', 'You have a notification')], default='GENERIC', max_length=32, verbose_name='type'),
),
]

View File

@ -6,7 +6,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-22 15:42+0200\n" "POT-Creation-Date: 2017-08-22 22:36+0200\n"
"PO-Revision-Date: 2016-07-18\n" "PO-Revision-Date: 2016-07-18\n"
"Last-Translator: Skia <skia@libskia.so>\n" "Last-Translator: Skia <skia@libskia.so>\n"
"Language-Team: AE info <ae.info@utbm.fr>\n" "Language-Team: AE info <ae.info@utbm.fr>\n"
@ -17,7 +17,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: accounting/models.py:61 accounting/models.py:110 accounting/models.py:138 #: accounting/models.py:61 accounting/models.py:110 accounting/models.py:138
#: accounting/models.py:197 club/models.py:45 #: accounting/models.py:197 club/models.py:46
#: core/templates/core/base.jinja:233 counter/models.py:113 #: core/templates/core/base.jinja:233 counter/models.py:113
#: counter/models.py:139 counter/models.py:183 forum/models.py:49 #: counter/models.py:139 counter/models.py:183 forum/models.py:49
#: launderette/models.py:38 launderette/models.py:84 launderette/models.py:110 #: launderette/models.py:38 launderette/models.py:84 launderette/models.py:110
@ -65,7 +65,7 @@ msgstr "IBAN"
msgid "account number" msgid "account number"
msgstr "numero de compte" msgstr "numero de compte"
#: accounting/models.py:113 accounting/models.py:139 club/models.py:188 #: accounting/models.py:113 accounting/models.py:139 club/models.py:189
#: com/models.py:65 com/models.py:156 counter/models.py:148 #: com/models.py:65 com/models.py:156 counter/models.py:148
#: counter/models.py:184 trombi/models.py:149 #: counter/models.py:184 trombi/models.py:149
msgid "club" msgid "club"
@ -88,12 +88,12 @@ msgstr "Compte club"
msgid "%(club_account)s on %(bank_account)s" msgid "%(club_account)s on %(bank_account)s"
msgstr "%(club_account)s sur %(bank_account)s" msgstr "%(club_account)s sur %(bank_account)s"
#: accounting/models.py:195 club/models.py:189 counter/models.py:463 #: accounting/models.py:195 club/models.py:190 counter/models.py:463
#: election/models.py:16 launderette/models.py:148 #: election/models.py:16 launderette/models.py:148
msgid "start date" msgid "start date"
msgstr "date de début" msgstr "date de début"
#: accounting/models.py:196 club/models.py:190 counter/models.py:464 #: accounting/models.py:196 club/models.py:191 counter/models.py:464
#: election/models.py:17 #: election/models.py:17
msgid "end date" msgid "end date"
msgstr "date de fin" msgstr "date de fin"
@ -172,10 +172,10 @@ msgstr "étiquette"
msgid "target type" msgid "target type"
msgstr "type de cible" msgstr "type de cible"
#: accounting/models.py:271 club/models.py:282 #: accounting/models.py:271 club/models.py:288
#: club/templates/club/club_members.jinja:8 #: club/templates/club/club_members.jinja:8
#: club/templates/club/club_old_members.jinja:8 #: club/templates/club/club_old_members.jinja:8
#: club/templates/club/mailing.jinja:22 club/views.py:101 #: club/templates/club/mailing.jinja:22 club/views.py:84
#: counter/templates/counter/cash_summary_list.jinja:32 #: counter/templates/counter/cash_summary_list.jinja:32
#: counter/templates/counter/stats.jinja:15 #: counter/templates/counter/stats.jinja:15
#: counter/templates/counter/stats.jinja:52 #: counter/templates/counter/stats.jinja:52
@ -184,7 +184,7 @@ msgstr "type de cible"
msgid "User" msgid "User"
msgstr "Utilisateur" msgstr "Utilisateur"
#: accounting/models.py:271 club/models.py:231 #: accounting/models.py:271 club/models.py:232
#: club/templates/club/club_detail.jinja:5 #: club/templates/club/club_detail.jinja:5
#: com/templates/com/mailing_admin.jinja:11 #: com/templates/com/mailing_admin.jinja:11
#: com/templates/com/news_admin_list.jinja:21 #: com/templates/com/news_admin_list.jinja:21
@ -371,7 +371,7 @@ msgid "Delete"
msgstr "Supprimer" msgstr "Supprimer"
#: accounting/templates/accounting/bank_account_details.jinja:17 #: accounting/templates/accounting/bank_account_details.jinja:17
#: club/views.py:113 core/views/user.py:164 sas/templates/sas/picture.jinja:86 #: club/views.py:96 core/views/user.py:164 sas/templates/sas/picture.jinja:86
msgid "Infos" msgid "Infos"
msgstr "Infos" msgstr "Infos"
@ -390,7 +390,7 @@ msgstr "Nouveau compte club"
#: accounting/templates/accounting/bank_account_details.jinja:26 #: accounting/templates/accounting/bank_account_details.jinja:26
#: accounting/templates/accounting/bank_account_list.jinja:21 #: accounting/templates/accounting/bank_account_list.jinja:21
#: accounting/templates/accounting/club_account_details.jinja:57 #: accounting/templates/accounting/club_account_details.jinja:57
#: accounting/templates/accounting/journal_details.jinja:83 club/views.py:135 #: accounting/templates/accounting/journal_details.jinja:83 club/views.py:118
#: com/templates/com/news_admin_list.jinja:37 #: com/templates/com/news_admin_list.jinja:37
#: com/templates/com/news_admin_list.jinja:64 #: com/templates/com/news_admin_list.jinja:64
#: com/templates/com/news_admin_list.jinja:109 #: com/templates/com/news_admin_list.jinja:109
@ -856,11 +856,11 @@ msgstr "Opérations sans étiquette"
msgid "Refound this account" msgid "Refound this account"
msgstr "Rembourser ce compte" msgstr "Rembourser ce compte"
#: club/models.py:47 #: club/models.py:48
msgid "unix name" msgid "unix name"
msgstr "nom unix" msgstr "nom unix"
#: club/models.py:51 #: club/models.py:52
msgid "" msgid ""
"Enter a valid unix name. This value may contain only letters, numbers ./-/_ " "Enter a valid unix name. This value may contain only letters, numbers ./-/_ "
"characters." "characters."
@ -868,81 +868,85 @@ msgstr ""
"Entrez un nom UNIX valide. Cette valeur peut contenir uniquement des " "Entrez un nom UNIX valide. Cette valeur peut contenir uniquement des "
"lettres, des nombres, et les caractères ./-/_" "lettres, des nombres, et les caractères ./-/_"
#: club/models.py:56 #: club/models.py:57
msgid "A club with that unix name already exists." msgid "A club with that unix name already exists."
msgstr "Un club avec ce nom UNIX existe déjà." msgstr "Un club avec ce nom UNIX existe déjà."
#: club/models.py:59 core/models.py:198 #: club/models.py:60 core/models.py:198
msgid "address" msgid "address"
msgstr "Adresse" msgstr "Adresse"
#: club/models.py:65 core/models.py:159 #: club/models.py:66 core/models.py:159
msgid "home" msgid "home"
msgstr "home" msgstr "home"
#: club/models.py:77 #: club/models.py:78
msgid "You can not make loops in clubs" msgid "You can not make loops in clubs"
msgstr "Vous ne pouvez pas faire de boucles dans les clubs" msgstr "Vous ne pouvez pas faire de boucles dans les clubs"
#: club/models.py:91 #: club/models.py:92
msgid "A club with that unix_name already exists" msgid "A club with that unix_name already exists"
msgstr "Un club avec ce nom UNIX existe déjà." msgstr "Un club avec ce nom UNIX existe déjà."
#: club/models.py:187 counter/models.py:461 counter/models.py:479 #: club/models.py:188 counter/models.py:461 counter/models.py:479
#: eboutic/models.py:38 eboutic/models.py:72 election/models.py:140 #: eboutic/models.py:38 eboutic/models.py:72 election/models.py:140
#: launderette/models.py:114 launderette/models.py:152 sas/models.py:158 #: launderette/models.py:114 launderette/models.py:152 sas/models.py:158
#: trombi/models.py:148 #: trombi/models.py:148
msgid "user" msgid "user"
msgstr "nom d'utilisateur" msgstr "nom d'utilisateur"
#: club/models.py:191 core/models.py:178 election/models.py:139 #: club/models.py:192 core/models.py:178 election/models.py:139
#: election/models.py:155 trombi/models.py:150 #: election/models.py:155 trombi/models.py:150
msgid "role" msgid "role"
msgstr "rôle" msgstr "rôle"
#: club/models.py:193 core/models.py:64 counter/models.py:114 #: club/models.py:194 core/models.py:64 counter/models.py:114
#: counter/models.py:140 election/models.py:13 election/models.py:93 #: counter/models.py:140 election/models.py:13 election/models.py:93
#: election/models.py:141 forum/models.py:50 forum/models.py:186 #: election/models.py:141 forum/models.py:50 forum/models.py:186
msgid "description" msgid "description"
msgstr "description" msgstr "description"
#: club/models.py:198 #: club/models.py:199
msgid "User must be subscriber to take part to a club" msgid "User must be subscriber to take part to a club"
msgstr "L'utilisateur doit être cotisant pour faire partie d'un club" msgstr "L'utilisateur doit être cotisant pour faire partie d'un club"
#: club/models.py:200 #: club/models.py:201
msgid "User is already member of that club" msgid "User is already member of that club"
msgstr "L'utilisateur est déjà membre de ce club" msgstr "L'utilisateur est déjà membre de ce club"
#: club/models.py:204 #: club/models.py:205
msgid "past member" msgid "past member"
msgstr "Anciens membres" msgstr "Anciens membres"
#: club/models.py:232 club/models.py:283 club/views.py:59 #: club/models.py:233 club/models.py:289
msgid "Email address" msgid "Email address"
msgstr "Adresse email" msgstr "Adresse email"
#: club/models.py:233 com/models.py:67 core/models.py:629 #: club/models.py:236
msgid "Enter a valid address. Only the root of the address is needed."
msgstr "Entrez une adresse valide. Seule la racine de l'adresse est nécessaire."
#: club/models.py:238 com/models.py:67 core/models.py:629
msgid "is moderated" msgid "is moderated"
msgstr "est modéré" msgstr "est modéré"
#: club/models.py:234 com/models.py:68 #: club/models.py:239 com/models.py:68
msgid "moderator" msgid "moderator"
msgstr "modérateur" msgstr "modérateur"
#: club/models.py:281 club/templates/club/mailing.jinja:14 #: club/models.py:287 club/templates/club/mailing.jinja:14
msgid "Mailing" msgid "Mailing"
msgstr "Mailing" msgstr "Mailing"
#: club/models.py:290 #: club/models.py:296
msgid "At least user or email is required" msgid "At least user or email is required"
msgstr "Au moins un utilisateur ou un email est nécessaire" msgstr "Au moins un utilisateur ou un email est nécessaire"
#: club/models.py:295 #: club/models.py:301
msgid "This email is already suscribed in this mailing" msgid "This email is already suscribed in this mailing"
msgstr "Cet email est déjà abonné à cette mailing" msgstr "Cet email est déjà abonné à cette mailing"
#: club/models.py:313 club/templates/club/mailing.jinja:30 #: club/models.py:319 club/templates/club/mailing.jinja:30
msgid "Unregistered user" msgid "Unregistered user"
msgstr "Désabonner un utilisateur" msgstr "Désabonner un utilisateur"
@ -1011,8 +1015,8 @@ msgstr "Du"
msgid "To" msgid "To"
msgstr "Au" msgstr "Au"
#: club/templates/club/club_sellings.jinja:5 club/views.py:140 #: club/templates/club/club_sellings.jinja:5 club/views.py:123
#: club/views.py:318 counter/templates/counter/counter_main.jinja:19 #: club/views.py:301 counter/templates/counter/counter_main.jinja:19
#: counter/templates/counter/last_ops.jinja:35 #: counter/templates/counter/last_ops.jinja:35
msgid "Sellings" msgid "Sellings"
msgstr "Ventes" msgstr "Ventes"
@ -1038,7 +1042,7 @@ msgstr "unités"
msgid "Benefit: " msgid "Benefit: "
msgstr "Bénéfice : " msgstr "Bénéfice : "
#: club/templates/club/club_sellings.jinja:21 club/views.py:266 #: club/templates/club/club_sellings.jinja:21 club/views.py:249
#: core/templates/core/user_account_detail.jinja:18 #: core/templates/core/user_account_detail.jinja:18
#: core/templates/core/user_account_detail.jinja:51 #: core/templates/core/user_account_detail.jinja:51
#: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:134 #: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:134
@ -1132,8 +1136,9 @@ msgid ""
"Remember : mailing lists need to be moderated, if your new created list is " "Remember : mailing lists need to be moderated, if your new created list is "
"not shown wait until moderation takes action" "not shown wait until moderation takes action"
msgstr "" msgstr ""
"Rappelez vous : les mailing listes doivent être modérées, si votre liste nouvellement créee " "Rappelez vous : les mailing listes doivent être modérées, si votre liste "
"n'est pas affichée, attendez jusqu'à qu'un modérateur entre en action" "nouvellement créee n'est pas affichée, attendez jusqu'à qu'un modérateur "
"entre en action"
#: club/templates/club/mailing.jinja:23 #: club/templates/club/mailing.jinja:23
#: com/templates/com/mailing_admin.jinja:10 #: com/templates/com/mailing_admin.jinja:10
@ -1164,54 +1169,50 @@ msgstr "Créer une mailing liste"
msgid "Club stats" msgid "Club stats"
msgstr "Statistiques du club" msgstr "Statistiques du club"
#: club/views.py:63 #: club/views.py:102
msgid "Enter a valid address. Only the root of the address is needed."
msgstr ""
#: club/views.py:119
msgid "Members" msgid "Members"
msgstr "Membres" msgstr "Membres"
#: club/views.py:124 #: club/views.py:107
msgid "Old members" msgid "Old members"
msgstr "Anciens membres" msgstr "Anciens membres"
#: club/views.py:130 core/templates/core/base.jinja:64 core/views/user.py:180 #: club/views.py:113 core/templates/core/base.jinja:64 core/views/user.py:180
#: sas/templates/sas/picture.jinja:95 trombi/views.py:55 #: sas/templates/sas/picture.jinja:95 trombi/views.py:55
msgid "Tools" msgid "Tools"
msgstr "Outils" msgstr "Outils"
#: club/views.py:145 #: club/views.py:128
#, fuzzy #, fuzzy
#| msgid "File list" #| msgid "File list"
msgid "Mailing list" msgid "Mailing list"
msgstr "Liste des fichiers" msgstr "Liste des fichiers"
#: club/views.py:151 counter/templates/counter/counter_list.jinja:21 #: club/views.py:134 counter/templates/counter/counter_list.jinja:21
#: counter/templates/counter/counter_list.jinja:42 #: counter/templates/counter/counter_list.jinja:42
#: counter/templates/counter/counter_list.jinja:57 #: counter/templates/counter/counter_list.jinja:57
msgid "Props" msgid "Props"
msgstr "Propriétés" msgstr "Propriétés"
#: club/views.py:197 core/views/forms.py:253 counter/views.py:91 #: club/views.py:180 core/views/forms.py:253 counter/views.py:91
#: trombi/views.py:124 #: trombi/views.py:124
msgid "Select user" msgid "Select user"
msgstr "Choisir un utilisateur" msgstr "Choisir un utilisateur"
#: club/views.py:247 sas/views.py:104 sas/views.py:157 sas/views.py:232 #: club/views.py:230 sas/views.py:104 sas/views.py:157 sas/views.py:232
msgid "You do not have the permission to do that" msgid "You do not have the permission to do that"
msgstr "Vous n'avez pas la permission de faire cela" msgstr "Vous n'avez pas la permission de faire cela"
#: club/views.py:264 counter/views.py:1097 #: club/views.py:247 counter/views.py:1097
msgid "Begin date" msgid "Begin date"
msgstr "Date de début" msgstr "Date de début"
#: club/views.py:265 com/views.py:137 counter/views.py:1098 #: club/views.py:248 com/views.py:137 counter/views.py:1098
#: election/views.py:135 subscription/views.py:47 #: election/views.py:135 subscription/views.py:47
msgid "End date" msgid "End date"
msgstr "Date de fin" msgstr "Date de fin"
#: club/views.py:280 core/templates/core/user_stats.jinja:27 #: club/views.py:263 core/templates/core/user_stats.jinja:27
#: counter/views.py:1188 #: counter/views.py:1188
msgid "Product" msgid "Product"
msgstr "Produit" msgstr "Produit"
@ -1330,6 +1331,7 @@ msgid "Moderate"
msgstr "Modérer" msgstr "Modérer"
#: com/templates/com/mailing_admin.jinja:19 #: com/templates/com/mailing_admin.jinja:19
#, python-format
msgid "Moderated by %(user)s" msgid "Moderated by %(user)s"
msgstr "Modéré par %(user)s" msgstr "Modéré par %(user)s"

View File

@ -1340,7 +1340,7 @@ def migrate_mailings():
Mailing.objects.all().delete() Mailing.objects.all().delete()
print("Migrating old database") print("Migrating old mailing database")
cur.execute(""" cur.execute("""
SELECT * FROM mailing SELECT * FROM mailing
@ -1355,7 +1355,7 @@ def migrate_mailings():
club = club.first() club = club.first()
if mailing['nom']: if mailing['nom']:
mailing['nom'] = '.' + mailing['nom'] mailing['nom'] = '.' + mailing['nom']
Mailing(id=mailing['id_mailing'], club=club, email=to_unicode(club.unix_name + mailing['nom'] + '@utbm.fr'), Mailing(id=mailing['id_mailing'], club=club, email=to_unicode(club.unix_name + mailing['nom']),
moderator=moderator, is_moderated=(mailing['is_valid'] > 0)).save() moderator=moderator, is_moderated=(mailing['is_valid'] > 0)).save()
print("-------------------") print("-------------------")