Merge branch 'bugfix' into 'master'

Bugfix for mailing list and posters

See merge request ae/Sith!141
This commit is contained in:
Antoine Bartuccio 2017-12-22 12:59:51 +01:00
commit 80bffd00d1
5 changed files with 273 additions and 165 deletions

View File

@ -296,6 +296,9 @@ class Mailing(models.Model):
def can_view(self, user): def can_view(self, user):
return self.club.has_rights_in_club(user) return self.club.has_rights_in_club(user)
def can_be_edited_by(self, user):
return self.club.has_rights_in_club(user)
def delete(self): def delete(self):
for sub in self.subscriptions.all(): for sub in self.subscriptions.all():
sub.delete() sub.delete()

View File

@ -509,6 +509,9 @@ class ClubMailingView(ClubTabsMixin, ListView):
kwargs['has_objects'] = len(kwargs['object_list']) > 0 kwargs['has_objects'] = len(kwargs['object_list']) > 0
return kwargs return kwargs
def get_object(self):
return self.club
class MailingGenericCreateView(CreateView, SingleObjectMixin): class MailingGenericCreateView(CreateView, SingleObjectMixin):
""" """

View File

@ -217,14 +217,16 @@ class Poster(models.Model):
moderator = models.ForeignKey(User, related_name="moderated_posters", verbose_name=_("moderator"), null=True, blank=True) moderator = models.ForeignKey(User, related_name="moderated_posters", verbose_name=_("moderator"), null=True, blank=True)
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
if self.date_end and self.date_begin > self.date_end:
raise ValidationError(_("Begin date should be before end date"))
if not self.is_moderated: if not self.is_moderated:
for u in RealGroup.objects.filter(id=settings.SITH_GROUP_COM_ADMIN_ID).first().users.all(): for u in RealGroup.objects.filter(id=settings.SITH_GROUP_COM_ADMIN_ID).first().users.all():
Notification(user=u, url=reverse("com:poster_moderate_list"), Notification(user=u, url=reverse("com:poster_moderate_list"),
type="POSTER_MODERATION").save() type="POSTER_MODERATION").save()
return super(Poster, self).save(*args, **kwargs) return super(Poster, self).save(*args, **kwargs)
def clean(self, *args, **kwargs):
if self.date_end and self.date_begin > self.date_end:
raise ValidationError(_("Begin date should be before end date"))
def is_owned_by(self, user): def is_owned_by(self, user):
return user.is_in_group(settings.SITH_GROUP_COM_ADMIN_ID) or Club.objects.filter(id__in=user.clubs_with_rights) return user.is_in_group(settings.SITH_GROUP_COM_ADMIN_ID) or Club.objects.filter(id__in=user.clubs_with_rights)

View File

@ -61,6 +61,11 @@ class PosterForm(forms.ModelForm):
'is_moderated': forms.HiddenInput() 'is_moderated': forms.HiddenInput()
} }
date_begin = forms.DateTimeField(['%Y-%m-%d %H:%M:%S'], label=_("Start date"),
widget=SelectDateTime, required=True, initial=timezone.now().strftime("%Y-%m-%d %H:%M:%S"))
date_end = forms.DateTimeField(['%Y-%m-%d %H:%M:%S'], label=_("End date"),
widget=SelectDateTime, required=False)
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None) self.user = kwargs.pop('user', None)
super(PosterForm, self).__init__(*args, **kwargs) super(PosterForm, self).__init__(*args, **kwargs)

View File

@ -6,7 +6,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-12-02 19:02+0100\n" "POT-Creation-Date: 2017-12-22 12:14+0100\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,8 +17,8 @@ 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:47 #: accounting/models.py:197 club/models.py:47 com/models.py:195
#: core/templates/core/base.jinja:297 counter/models.py:113 #: com/models.py:209 core/templates/core/base.jinja:297 counter/models.py:113
#: counter/models.py:140 counter/models.py:184 forum/models.py:49 #: counter/models.py:140 counter/models.py:184 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
#: stock/models.py:38 stock/models.py:54 stock/models.py:77 stock/models.py:97 #: stock/models.py:38 stock/models.py:54 stock/models.py:77 stock/models.py:97
@ -66,7 +66,7 @@ msgid "account number"
msgstr "numero de compte" msgstr "numero de compte"
#: accounting/models.py:113 accounting/models.py:139 club/models.py:227 #: accounting/models.py:113 accounting/models.py:139 club/models.py:227
#: com/models.py:67 com/models.py:178 counter/models.py:149 #: com/models.py:73 com/models.py:184 com/models.py:211 counter/models.py:149
#: counter/models.py:185 trombi/models.py:149 #: counter/models.py:185 trombi/models.py:149
msgid "club" msgid "club"
msgstr "club" msgstr "club"
@ -127,8 +127,8 @@ msgstr "numéro"
msgid "journal" msgid "journal"
msgstr "classeur" msgstr "classeur"
#: accounting/models.py:258 core/models.py:645 core/models.py:1046 #: accounting/models.py:258 core/models.py:653 core/models.py:1054
#: core/models.py:1090 core/models.py:1117 counter/models.py:301 #: core/models.py:1098 core/models.py:1125 counter/models.py:301
#: counter/models.py:351 counter/models.py:484 eboutic/models.py:39 #: counter/models.py:351 counter/models.py:484 eboutic/models.py:39
#: eboutic/models.py:73 forum/models.py:239 forum/models.py:314 #: eboutic/models.py:73 forum/models.py:239 forum/models.py:314
#: stock/models.py:76 #: stock/models.py:76
@ -166,7 +166,7 @@ msgid "accounting type"
msgstr "type comptable" msgstr "type comptable"
#: accounting/models.py:269 accounting/models.py:371 accounting/models.py:398 #: accounting/models.py:269 accounting/models.py:371 accounting/models.py:398
#: accounting/models.py:422 core/models.py:1116 counter/models.py:343 #: accounting/models.py:422 core/models.py:1124 counter/models.py:343
msgid "label" msgid "label"
msgstr "étiquette" msgstr "étiquette"
@ -174,10 +174,10 @@ msgstr "étiquette"
msgid "target type" msgid "target type"
msgstr "type de cible" msgstr "type de cible"
#: accounting/models.py:271 club/models.py:326 #: accounting/models.py:271 club/models.py:329
#: 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:28 club/views.py:84 #: club/templates/club/mailing.jinja:28 club/views.py:86
#: 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
@ -355,8 +355,10 @@ msgstr "Compte en banque : "
#: com/templates/com/news_admin_list.jinja:234 #: com/templates/com/news_admin_list.jinja:234
#: com/templates/com/news_admin_list.jinja:275 #: com/templates/com/news_admin_list.jinja:275
#: com/templates/com/news_admin_list.jinja:310 #: com/templates/com/news_admin_list.jinja:310
#: com/templates/com/weekmail.jinja:33 com/templates/com/weekmail.jinja:62 #: com/templates/com/poster_edit.jinja:21
#: core/templates/core/file_detail.jinja:25 #: com/templates/com/poster_edit.jinja:23
#: com/templates/com/screen_edit.jinja:16 com/templates/com/weekmail.jinja:33
#: com/templates/com/weekmail.jinja:62 core/templates/core/file_detail.jinja:25
#: core/templates/core/file_detail.jinja:62 #: core/templates/core/file_detail.jinja:62
#: core/templates/core/file_moderation.jinja:24 #: core/templates/core/file_moderation.jinja:24
#: core/templates/core/group_list.jinja:13 core/templates/core/macros.jinja:87 #: core/templates/core/group_list.jinja:13 core/templates/core/macros.jinja:87
@ -383,7 +385,7 @@ msgid "Delete"
msgstr "Supprimer" msgstr "Supprimer"
#: accounting/templates/accounting/bank_account_details.jinja:18 #: accounting/templates/accounting/bank_account_details.jinja:18
#: club/views.py:98 core/views/user.py:166 sas/templates/sas/picture.jinja:86 #: club/views.py:101 core/views/user.py:166 sas/templates/sas/picture.jinja:86
msgid "Infos" msgid "Infos"
msgstr "Infos" msgstr "Infos"
@ -402,7 +404,7 @@ msgstr "Nouveau compte club"
#: accounting/templates/accounting/bank_account_details.jinja:27 #: accounting/templates/accounting/bank_account_details.jinja:27
#: accounting/templates/accounting/bank_account_list.jinja:22 #: accounting/templates/accounting/bank_account_list.jinja:22
#: accounting/templates/accounting/club_account_details.jinja:58 #: accounting/templates/accounting/club_account_details.jinja:58
#: accounting/templates/accounting/journal_details.jinja:89 club/views.py:126 #: accounting/templates/accounting/journal_details.jinja:89 club/views.py:129
#: com/templates/com/news_admin_list.jinja:39 #: com/templates/com/news_admin_list.jinja:39
#: com/templates/com/news_admin_list.jinja:68 #: com/templates/com/news_admin_list.jinja:68
#: com/templates/com/news_admin_list.jinja:115 #: com/templates/com/news_admin_list.jinja:115
@ -411,8 +413,11 @@ msgstr "Nouveau compte club"
#: com/templates/com/news_admin_list.jinja:232 #: com/templates/com/news_admin_list.jinja:232
#: com/templates/com/news_admin_list.jinja:273 #: com/templates/com/news_admin_list.jinja:273
#: com/templates/com/news_admin_list.jinja:308 #: com/templates/com/news_admin_list.jinja:308
#: com/templates/com/weekmail.jinja:32 com/templates/com/weekmail.jinja:61 #: com/templates/com/poster_list.jinja:43
#: core/templates/core/file.jinja:38 core/templates/core/page.jinja:35 #: com/templates/com/poster_list.jinja:45
#: com/templates/com/screen_list.jinja:26 com/templates/com/weekmail.jinja:32
#: com/templates/com/weekmail.jinja:61 core/templates/core/file.jinja:38
#: core/templates/core/page.jinja:35 core/templates/core/poster_list.jinja:40
#: core/templates/core/user_tools.jinja:41 core/views/user.py:188 #: core/templates/core/user_tools.jinja:41 core/views/user.py:188
#: counter/templates/counter/cash_summary_list.jinja:53 #: counter/templates/counter/cash_summary_list.jinja:53
#: counter/templates/counter/counter_list.jinja:17 #: counter/templates/counter/counter_list.jinja:17
@ -759,7 +764,8 @@ msgid "Linked operation:"
msgstr "Opération liée : " msgstr "Opération liée : "
#: accounting/templates/accounting/operation_edit.jinja:55 #: accounting/templates/accounting/operation_edit.jinja:55
#: com/templates/com/news_edit.jinja:57 com/templates/com/weekmail.jinja:74 #: com/templates/com/news_edit.jinja:57 com/templates/com/poster_edit.jinja:33
#: com/templates/com/screen_edit.jinja:25 com/templates/com/weekmail.jinja:74
#: core/templates/core/create.jinja:12 core/templates/core/edit.jinja:7 #: core/templates/core/create.jinja:12 core/templates/core/edit.jinja:7
#: core/templates/core/edit.jinja.py:15 core/templates/core/edit.jinja:20 #: core/templates/core/edit.jinja.py:15 core/templates/core/edit.jinja:20
#: core/templates/core/file_edit.jinja:8 #: core/templates/core/file_edit.jinja:8
@ -936,7 +942,7 @@ msgid "user"
msgstr "nom d'utilisateur" msgstr "nom d'utilisateur"
#: club/models.py:230 core/models.py:180 election/models.py:153 #: club/models.py:230 core/models.py:180 election/models.py:153
#: election/models.py:173 trombi/models.py:150 #: election/models.py:174 trombi/models.py:150
msgid "role" msgid "role"
msgstr "rôle" msgstr "rôle"
@ -958,7 +964,7 @@ msgstr "L'utilisateur est déjà membre de ce club"
msgid "past member" msgid "past member"
msgstr "Anciens membres" msgstr "Anciens membres"
#: club/models.py:271 club/models.py:327 #: club/models.py:271 club/models.py:330
msgid "Email address" msgid "Email address"
msgstr "Adresse email" msgstr "Adresse email"
@ -967,27 +973,27 @@ msgid "Enter a valid address. Only the root of the address is needed."
msgstr "" msgstr ""
"Entrez une adresse valide. Seule la racine de l'adresse est nécessaire." "Entrez une adresse valide. Seule la racine de l'adresse est nécessaire."
#: club/models.py:276 com/models.py:69 core/models.py:646 #: club/models.py:276 com/models.py:75 com/models.py:216 core/models.py:654
msgid "is moderated" msgid "is moderated"
msgstr "est modéré" msgstr "est modéré"
#: club/models.py:277 com/models.py:70 #: club/models.py:277 com/models.py:76 com/models.py:217
msgid "moderator" msgid "moderator"
msgstr "modérateur" msgstr "modérateur"
#: club/models.py:325 club/templates/club/mailing.jinja:14 #: club/models.py:328 club/templates/club/mailing.jinja:14
msgid "Mailing" msgid "Mailing"
msgstr "Liste de diffusion" msgstr "Liste de diffusion"
#: club/models.py:334 #: club/models.py:337
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:339 #: club/models.py:342
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:363 club/templates/club/mailing.jinja:36 #: club/models.py:366 club/templates/club/mailing.jinja:36
msgid "Unregistered user" msgid "Unregistered user"
msgstr "Désabonner un utilisateur" msgstr "Désabonner un utilisateur"
@ -1060,8 +1066,8 @@ msgstr "Du"
msgid "To" msgid "To"
msgstr "Au" msgstr "Au"
#: club/templates/club/club_sellings.jinja:5 club/views.py:137 #: club/templates/club/club_sellings.jinja:5 club/views.py:140
#: club/views.py:366 counter/templates/counter/counter_main.jinja:19 #: club/views.py:374 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"
@ -1087,7 +1093,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:314 #: club/templates/club/club_sellings.jinja:21 club/views.py:322
#: 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
@ -1138,7 +1144,7 @@ msgid "Payment method"
msgstr "Méthode de paiement" msgstr "Méthode de paiement"
#: club/templates/club/club_tools.jinja:4 #: club/templates/club/club_tools.jinja:4
#: core/templates/core/user_tools.jinja:98 #: core/templates/core/user_tools.jinja:100
msgid "Club tools" msgid "Club tools"
msgstr "Outils club" msgstr "Outils club"
@ -1162,15 +1168,22 @@ msgstr "Éditer le Trombi"
msgid "New Trombi" msgid "New Trombi"
msgstr "Nouveau Trombi" msgstr "Nouveau Trombi"
#: club/templates/club/club_tools.jinja:16 #: club/templates/club/club_tools.jinja:14
#: com/templates/com/poster_list.jinja:17
#: core/templates/core/poster_list.jinja:17
#: core/templates/core/user_tools.jinja:90
msgid "Posters"
msgstr "Affiches"
#: club/templates/club/club_tools.jinja:17
msgid "Counters:" msgid "Counters:"
msgstr "Comptoirs : " msgstr "Comptoirs : "
#: club/templates/club/club_tools.jinja:32 #: club/templates/club/club_tools.jinja:33
msgid "Accouting: " msgid "Accouting: "
msgstr "Comptabilité : " msgstr "Comptabilité : "
#: club/templates/club/club_tools.jinja:40 #: club/templates/club/club_tools.jinja:41
msgid "Manage launderettes" msgid "Manage launderettes"
msgstr "Gestion des laveries" msgstr "Gestion des laveries"
@ -1228,157 +1241,173 @@ msgstr "Aucune page n'existe pour ce club"
msgid "Club stats" msgid "Club stats"
msgstr "Statistiques du club" msgstr "Statistiques du club"
#: club/views.py:104 #: club/views.py:107
msgid "Members" msgid "Members"
msgstr "Membres" msgstr "Membres"
#: club/views.py:109 #: club/views.py:112
msgid "Old members" msgid "Old members"
msgstr "Anciens membres" msgstr "Anciens membres"
#: club/views.py:115 core/templates/core/page.jinja:33 #: club/views.py:118 core/templates/core/page.jinja:33
msgid "History" msgid "History"
msgstr "Historique" msgstr "Historique"
#: club/views.py:121 core/templates/core/base.jinja:115 core/views/user.py:182 #: club/views.py:124 core/templates/core/base.jinja:115 core/views/user.py:182
#: 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:132 #: club/views.py:135
msgid "Edit club page" msgid "Edit club page"
msgstr "Éditer la page de club" msgstr "Éditer la page de club"
#: club/views.py:142 #: club/views.py:145
msgid "Mailing list" msgid "Mailing list"
msgstr "Listes de diffusion" msgstr "Listes de diffusion"
#: club/views.py:148 counter/templates/counter/counter_list.jinja:21 #: club/views.py:150 com/views.py:111
msgid "Posters list"
msgstr "Liste d'affiches"
#: club/views.py:156 counter/templates/counter/counter_list.jinja:21
#: counter/templates/counter/counter_list.jinja:43 #: counter/templates/counter/counter_list.jinja:43
#: counter/templates/counter/counter_list.jinja:59 #: counter/templates/counter/counter_list.jinja:59
msgid "Props" msgid "Props"
msgstr "Propriétés" msgstr "Propriétés"
#: club/views.py:243 core/views/forms.py:254 counter/views.py:91 #: club/views.py:251 core/views/forms.py:254 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:290 sas/views.py:97 sas/views.py:150 sas/views.py:228 #: club/views.py:298 sas/views.py:97 sas/views.py:150 sas/views.py:228
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:312 counter/views.py:1097 #: club/views.py:320 counter/views.py:1097
msgid "Begin date" msgid "Begin date"
msgstr "Date de début" msgstr "Date de début"
#: club/views.py:313 com/views.py:137 counter/views.py:1098 #: club/views.py:321 com/views.py:172 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:328 core/templates/core/user_stats.jinja:27 #: club/views.py:336 core/templates/core/user_stats.jinja:27
#: counter/views.py:1188 #: counter/views.py:1188
msgid "Product" msgid "Product"
msgstr "Produit" msgstr "Produit"
#: com/models.py:41 #: com/models.py:47
msgid "alert message" msgid "alert message"
msgstr "message d'alerte" msgstr "message d'alerte"
#: com/models.py:42 #: com/models.py:48
msgid "info message" msgid "info message"
msgstr "message d'info" msgstr "message d'info"
#: com/models.py:43 #: com/models.py:49
msgid "index page" msgid "index page"
msgstr "page d'accueil" msgstr "page d'accueil"
#: com/models.py:44 #: com/models.py:50
msgid "weekmail destinations" msgid "weekmail destinations"
msgstr "destinataires du weekmail" msgstr "destinataires du weekmail"
#: com/models.py:54 #: com/models.py:60
msgid "Notice" msgid "Notice"
msgstr "Information" msgstr "Information"
#: com/models.py:55 #: com/models.py:61
msgid "Event" msgid "Event"
msgstr "Événement" msgstr "Événement"
#: com/models.py:56 #: com/models.py:62
msgid "Weekly" msgid "Weekly"
msgstr "Hebdomadaire" msgstr "Hebdomadaire"
#: com/models.py:57 #: com/models.py:63
msgid "Call" msgid "Call"
msgstr "Appel" msgstr "Appel"
#: com/models.py:63 com/models.py:127 com/models.py:175 election/models.py:13 #: com/models.py:69 com/models.py:133 com/models.py:181 election/models.py:13
#: election/models.py:98 election/models.py:134 forum/models.py:189 #: election/models.py:98 election/models.py:134 forum/models.py:189
#: forum/models.py:237 #: forum/models.py:237
msgid "title" msgid "title"
msgstr "titre" msgstr "titre"
#: com/models.py:64 #: com/models.py:70
msgid "summary" msgid "summary"
msgstr "résumé" msgstr "résumé"
#: com/models.py:65 com/models.py:176 trombi/models.py:135 #: com/models.py:71 com/models.py:182 trombi/models.py:135
msgid "content" msgid "content"
msgstr "contenu" msgstr "contenu"
#: com/models.py:66 core/models.py:1089 launderette/models.py:86 #: com/models.py:72 core/models.py:1097 launderette/models.py:86
#: launderette/models.py:112 launderette/models.py:149 stock/models.py:59 #: launderette/models.py:112 launderette/models.py:149 stock/models.py:59
#: stock/models.py:98 #: stock/models.py:98
msgid "type" msgid "type"
msgstr "type" msgstr "type"
#: com/models.py:68 com/models.py:177 trombi/models.py:133 #: com/models.py:74 com/models.py:183 trombi/models.py:133
msgid "author" msgid "author"
msgstr "auteur" msgstr "auteur"
#: com/models.py:115 #: com/models.py:121
msgid "news_date" msgid "news_date"
msgstr "date de la nouvelle" msgstr "date de la nouvelle"
#: com/models.py:116 #: com/models.py:122
msgid "start_date" msgid "start_date"
msgstr "date de début" msgstr "date de début"
#: com/models.py:117 #: com/models.py:123
msgid "end_date" msgid "end_date"
msgstr "date de fin" msgstr "date de fin"
#: com/models.py:128 #: com/models.py:134
msgid "intro" msgid "intro"
msgstr "intro" msgstr "intro"
#: com/models.py:129 #: com/models.py:135
msgid "joke" msgid "joke"
msgstr "blague" msgstr "blague"
#: com/models.py:130 #: com/models.py:136
msgid "protip" msgid "protip"
msgstr "astuce" msgstr "astuce"
#: com/models.py:131 #: com/models.py:137
msgid "conclusion" msgid "conclusion"
msgstr "conclusion" msgstr "conclusion"
#: com/models.py:132 #: com/models.py:138
msgid "sent" msgid "sent"
msgstr "envoyé" msgstr "envoyé"
#: com/models.py:174 #: com/models.py:180
msgid "weekmail" msgid "weekmail"
msgstr "weekmail" msgstr "weekmail"
#: com/models.py:179 #: com/models.py:185
msgid "rank" msgid "rank"
msgstr "rang" msgstr "rang"
#: com/templates/com/mailing_admin.jinja:4 com/views.py:89 #: com/models.py:210 core/models.py:644 core/models.py:660
msgid "file"
msgstr "fichier"
#: com/models.py:215
msgid "display time"
msgstr "temps d'affichage"
#: com/models.py:221
msgid "Begin date should be before end date"
msgstr "La date de début doit être avant celle de fin"
#: com/templates/com/mailing_admin.jinja:4 com/views.py:106
#: core/templates/core/user_tools.jinja:89 #: core/templates/core/user_tools.jinja:89
msgid "Mailing lists administration" msgid "Mailing lists administration"
msgstr "Administration des mailing listes" msgstr "Administration des mailing listes"
@ -1629,8 +1658,72 @@ msgstr "Rien à venir..."
msgid "Coming soon... don't miss!" msgid "Coming soon... don't miss!"
msgstr "Prochainement... à ne pas rater!" msgstr "Prochainement... à ne pas rater!"
#: com/templates/com/poster_edit.jinja:4 com/templates/com/poster_list.jinja:10
#: core/templates/core/poster_list.jinja:10
msgid "Poster"
msgstr "Affiche"
#: com/templates/com/poster_edit.jinja:13
#: com/templates/com/poster_edit.jinja:15
#: com/templates/com/poster_moderate.jinja:13
#: com/templates/com/screen_edit.jinja:12
msgid "List"
msgstr "Liste"
#: com/templates/com/poster_edit.jinja:18
msgid "Posters - edit"
msgstr "Affiche - modifier"
#: com/templates/com/poster_list.jinja:20
#: com/templates/com/poster_list.jinja:23
#: com/templates/com/screen_list.jinja:13
#: core/templates/core/poster_list.jinja:19 sas/templates/sas/main.jinja:53
msgid "Create"
msgstr "Créer"
#: com/templates/com/poster_list.jinja:21
#: core/templates/core/poster_list.jinja:21
msgid "Moderation"
msgstr "Modération"
#: com/templates/com/poster_list.jinja:31
#: core/templates/core/poster_list.jinja:29
msgid "No posters"
msgstr "Aucune affiche"
#: com/templates/com/poster_moderate.jinja:15
msgid "Posters - moderation"
msgstr "Affiches - modération"
#: com/templates/com/poster_moderate.jinja:21
msgid "No objects"
msgstr "Aucun éléments"
#: com/templates/com/screen_edit.jinja:4
msgid "Screen"
msgstr "Écran"
#: com/templates/com/screen_edit.jinja:14
msgid "Screen - edit"
msgstr "Écran - modifier"
#: com/templates/com/screen_list.jinja:4 com/templates/com/screen_list.jinja:11
#: core/templates/core/user_tools.jinja:91
msgid "Screens"
msgstr "Écrans"
#: com/templates/com/screen_list.jinja:20
msgid "No screens"
msgstr "Pas d'écran"
#: com/templates/com/screen_list.jinja:27
#: com/templates/com/screen_slideshow.jinja:4
#: core/templates/core/screen_slideshow.jinja:4
msgid "Slideshow"
msgstr "Diaporama"
#: com/templates/com/weekmail.jinja:5 com/templates/com/weekmail.jinja.py:9 #: com/templates/com/weekmail.jinja:5 com/templates/com/weekmail.jinja.py:9
#: com/views.py:64 core/templates/core/user_tools.jinja:81 #: com/views.py:81 core/templates/core/user_tools.jinja:81
msgid "Weekmail" msgid "Weekmail"
msgstr "Weekmail" msgstr "Weekmail"
@ -1717,55 +1810,59 @@ msgstr "Astuce"
msgid "Final word" msgid "Final word"
msgstr "Le mot de la fin" msgstr "Le mot de la fin"
#: com/views.py:57 #: com/views.py:74
msgid "Communication administration" msgid "Communication administration"
msgstr "Administration de la communication" msgstr "Administration de la communication"
#: com/views.py:69 core/templates/core/user_tools.jinja:82 #: com/views.py:86 core/templates/core/user_tools.jinja:82
msgid "Weekmail destinations" msgid "Weekmail destinations"
msgstr "Destinataires du Weekmail" msgstr "Destinataires du Weekmail"
#: com/views.py:74 #: com/views.py:91
msgid "Index page" msgid "Index page"
msgstr "Page d'accueil" msgstr "Page d'accueil"
#: com/views.py:79 #: com/views.py:96
msgid "Info message" msgid "Info message"
msgstr "Message d'info" msgstr "Message d'info"
#: com/views.py:84 #: com/views.py:101
msgid "Alert message" msgid "Alert message"
msgstr "Message d'alerte" msgstr "Message d'alerte"
#: com/views.py:136 election/views.py:133 subscription/views.py:44 #: com/views.py:116
msgid "Screens list"
msgstr "Liste d'écrans"
#: com/views.py:171 election/views.py:133 subscription/views.py:44
msgid "Start date" msgid "Start date"
msgstr "Date de début" msgstr "Date de début"
#: com/views.py:138 #: com/views.py:173
msgid "Until" msgid "Until"
msgstr "Jusqu'à" msgstr "Jusqu'à"
#: com/views.py:139 #: com/views.py:174
msgid "Automoderation" msgid "Automoderation"
msgstr "Automodération" msgstr "Automodération"
#: com/views.py:145 com/views.py:147 com/views.py:151 #: com/views.py:180 com/views.py:182 com/views.py:186
msgid "This field is required." msgid "This field is required."
msgstr "Ce champ est obligatoire." msgstr "Ce champ est obligatoire."
#: com/views.py:149 #: com/views.py:184
msgid "You crazy? You can not finish an event before starting it." msgid "You crazy? You can not finish an event before starting it."
msgstr "T'es fou? Un événement ne peut pas finir avant même de commencer." msgstr "T'es fou? Un événement ne peut pas finir avant même de commencer."
#: com/views.py:331 #: com/views.py:366
msgid "Delete and save to regenerate" msgid "Delete and save to regenerate"
msgstr "Supprimer et sauver pour regénérer" msgstr "Supprimer et sauver pour regénérer"
#: com/views.py:339 #: com/views.py:374
msgid "Weekmail of the " msgid "Weekmail of the "
msgstr "Weekmail du " msgstr "Weekmail du "
#: com/views.py:419 #: com/views.py:454
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."
msgstr "" msgstr ""
@ -2010,113 +2107,109 @@ msgstr "Un utilisateur de ce nom d'utilisateur existe déjà"
msgid "Profile" msgid "Profile"
msgstr "Profil" msgstr "Profil"
#: core/models.py:592 #: core/models.py:600
msgid "Visitor" msgid "Visitor"
msgstr "Visiteur" msgstr "Visiteur"
#: core/models.py:598 #: core/models.py:606
msgid "do you want to receive the weekmail" msgid "do you want to receive the weekmail"
msgstr "voulez-vous recevoir le Weekmail" msgstr "voulez-vous recevoir le Weekmail"
#: core/models.py:602 #: core/models.py:610
msgid "show your stats to others" msgid "show your stats to others"
msgstr "montrez vos statistiques aux autres" msgstr "montrez vos statistiques aux autres"
#: core/models.py:606 #: core/models.py:614
msgid "get a notification for every click" msgid "get a notification for every click"
msgstr "recevez une notification pour chaque click" msgstr "recevez une notification pour chaque click"
#: core/models.py:610 #: core/models.py:618
msgid "get a notification for every refilling" msgid "get a notification for every refilling"
msgstr "recevez une notification pour chaque rechargement" msgstr "recevez une notification pour chaque rechargement"
#: core/models.py:634 #: core/models.py:642
msgid "file name" msgid "file name"
msgstr "nom du fichier" msgstr "nom du fichier"
#: core/models.py:635 core/models.py:850 #: core/models.py:643 core/models.py:858
msgid "parent" msgid "parent"
msgstr "parent" msgstr "parent"
#: core/models.py:636 core/models.py:652 #: core/models.py:645
msgid "file"
msgstr "fichier"
#: core/models.py:637
msgid "compressed file" msgid "compressed file"
msgstr "version allégée" msgstr "version allégée"
#: core/models.py:638 #: core/models.py:646
msgid "thumbnail" msgid "thumbnail"
msgstr "miniature" msgstr "miniature"
#: core/models.py:639 core/models.py:647 #: core/models.py:647 core/models.py:655
msgid "owner" msgid "owner"
msgstr "propriétaire" msgstr "propriétaire"
#: core/models.py:640 core/models.py:856 core/views/files.py:149 #: core/models.py:648 core/models.py:864 core/views/files.py:149
msgid "edit group" msgid "edit group"
msgstr "groupe d'édition" msgstr "groupe d'édition"
#: core/models.py:641 core/models.py:857 core/views/files.py:150 #: core/models.py:649 core/models.py:865 core/views/files.py:150
msgid "view group" msgid "view group"
msgstr "groupe de vue" msgstr "groupe de vue"
#: core/models.py:642 #: core/models.py:650
msgid "is folder" msgid "is folder"
msgstr "est un dossier" msgstr "est un dossier"
#: core/models.py:643 #: core/models.py:651
msgid "mime type" msgid "mime type"
msgstr "type mime" msgstr "type mime"
#: core/models.py:644 #: core/models.py:652
msgid "size" msgid "size"
msgstr "taille" msgstr "taille"
#: core/models.py:648 #: core/models.py:656
msgid "asked for removal" msgid "asked for removal"
msgstr "retrait demandé" msgstr "retrait demandé"
#: core/models.py:649 #: core/models.py:657
msgid "is in the SAS" msgid "is in the SAS"
msgstr "est dans le SAS" msgstr "est dans le SAS"
#: core/models.py:688 #: core/models.py:696
msgid "Character '/' not authorized in name" msgid "Character '/' not authorized in name"
msgstr "Le caractère '/' n'est pas autorisé dans les noms de fichier" msgstr "Le caractère '/' n'est pas autorisé dans les noms de fichier"
#: core/models.py:691 core/models.py:696 #: core/models.py:699 core/models.py:704
msgid "Loop in folder tree" msgid "Loop in folder tree"
msgstr "Boucle dans l'arborescence des dossiers" msgstr "Boucle dans l'arborescence des dossiers"
#: core/models.py:700 #: core/models.py:708
msgid "You can not make a file be a children of a non folder file" msgid "You can not make a file be a children of a non folder file"
msgstr "" msgstr ""
"Vous ne pouvez pas mettre un fichier enfant de quelque chose qui n'est pas " "Vous ne pouvez pas mettre un fichier enfant de quelque chose qui n'est pas "
"un dossier" "un dossier"
#: core/models.py:704 #: core/models.py:712
msgid "Duplicate file" msgid "Duplicate file"
msgstr "Un fichier de ce nom existe déjà" msgstr "Un fichier de ce nom existe déjà"
#: core/models.py:718 #: core/models.py:726
msgid "You must provide a file" msgid "You must provide a file"
msgstr "Vous devez fournir un fichier" msgstr "Vous devez fournir un fichier"
#: core/models.py:788 #: core/models.py:796
msgid "Folder: " msgid "Folder: "
msgstr "Dossier : " msgstr "Dossier : "
#: core/models.py:790 #: core/models.py:798
msgid "File: " msgid "File: "
msgstr "Fichier : " msgstr "Fichier : "
#: core/models.py:842 #: core/models.py:850
msgid "page unix name" msgid "page unix name"
msgstr "nom unix de la page" msgstr "nom unix de la page"
#: core/models.py:846 #: core/models.py:854
msgid "" msgid ""
"Enter a valid page name. This value may contain only unaccented letters, " "Enter a valid page name. This value may contain only unaccented letters, "
"numbers and ./+/-/_ characters." "numbers and ./+/-/_ characters."
@ -2124,51 +2217,51 @@ msgstr ""
"Entrez un nom de page correct. Uniquement des lettres non accentuées, " "Entrez un nom de page correct. Uniquement des lettres non accentuées, "
"numéros, et ./+/-/_" "numéros, et ./+/-/_"
#: core/models.py:853 #: core/models.py:861
msgid "page name" msgid "page name"
msgstr "nom de la page" msgstr "nom de la page"
#: core/models.py:854 #: core/models.py:862
msgid "owner group" msgid "owner group"
msgstr "groupe propriétaire" msgstr "groupe propriétaire"
#: core/models.py:858 #: core/models.py:866
msgid "lock user" msgid "lock user"
msgstr "utilisateur bloquant" msgstr "utilisateur bloquant"
#: core/models.py:859 #: core/models.py:867
msgid "lock_timeout" msgid "lock_timeout"
msgstr "décompte du déblocage" msgstr "décompte du déblocage"
#: core/models.py:886 #: core/models.py:894
msgid "Duplicate page" msgid "Duplicate page"
msgstr "Une page de ce nom existe déjà" msgstr "Une page de ce nom existe déjà"
#: core/models.py:892 #: core/models.py:900
msgid "Loop in page tree" msgid "Loop in page tree"
msgstr "Boucle dans l'arborescence des pages" msgstr "Boucle dans l'arborescence des pages"
#: core/models.py:1043 #: core/models.py:1051
msgid "revision" msgid "revision"
msgstr "révision" msgstr "révision"
#: core/models.py:1044 #: core/models.py:1052
msgid "page title" msgid "page title"
msgstr "titre de la page" msgstr "titre de la page"
#: core/models.py:1045 #: core/models.py:1053
msgid "page content" msgid "page content"
msgstr "contenu de la page" msgstr "contenu de la page"
#: core/models.py:1087 #: core/models.py:1095
msgid "url" msgid "url"
msgstr "url" msgstr "url"
#: core/models.py:1088 #: core/models.py:1096
msgid "param" msgid "param"
msgstr "param" msgstr "param"
#: core/models.py:1091 #: core/models.py:1099
msgid "viewed" msgid "viewed"
msgstr "vue" msgstr "vue"
@ -3142,35 +3235,35 @@ msgstr "Éditer le message d'informations"
msgid "Moderate files" msgid "Moderate files"
msgstr "Modérer les fichiers" msgstr "Modérer les fichiers"
#: core/templates/core/user_tools.jinja:92 #: core/templates/core/user_tools.jinja:94
msgid "Moderate pictures" msgid "Moderate pictures"
msgstr "Modérer les photos" msgstr "Modérer les photos"
#: core/templates/core/user_tools.jinja:105 #: core/templates/core/user_tools.jinja:107
msgid "Elections" msgid "Elections"
msgstr "Élections" msgstr "Élections"
#: core/templates/core/user_tools.jinja:107 #: core/templates/core/user_tools.jinja:109
msgid "See available elections" msgid "See available elections"
msgstr "Voir les élections disponibles" msgstr "Voir les élections disponibles"
#: core/templates/core/user_tools.jinja:108 #: core/templates/core/user_tools.jinja:110
msgid "See archived elections" msgid "See archived elections"
msgstr "Voir les élections archivées" msgstr "Voir les élections archivées"
#: core/templates/core/user_tools.jinja:110 #: core/templates/core/user_tools.jinja:112
msgid "Create a new election" msgid "Create a new election"
msgstr "Créer une nouvelle élection" msgstr "Créer une nouvelle élection"
#: core/templates/core/user_tools.jinja:113 #: core/templates/core/user_tools.jinja:115
msgid "Other tools" msgid "Other tools"
msgstr "Autres outils" msgstr "Autres outils"
#: core/templates/core/user_tools.jinja:115 #: core/templates/core/user_tools.jinja:117
msgid "Convert dokuwiki/BBcode syntax to Markdown" msgid "Convert dokuwiki/BBcode syntax to Markdown"
msgstr "Convertir de la syntaxe dokuwiki/BBcode vers Markdown" msgstr "Convertir de la syntaxe dokuwiki/BBcode vers Markdown"
#: core/templates/core/user_tools.jinja:116 #: core/templates/core/user_tools.jinja:118
msgid "Trombi tools" msgid "Trombi tools"
msgstr "Outils Trombi" msgstr "Outils Trombi"
@ -3237,6 +3330,16 @@ msgstr "Parrain"
msgid "Godchild" msgid "Godchild"
msgstr "Fillot" msgstr "Fillot"
#: core/views/forms.py:264 core/views/forms.py:277 election/models.py:22
#: election/views.py:128
msgid "edit groups"
msgstr "groupe d'édition"
#: core/views/forms.py:265 core/views/forms.py:278 election/models.py:26
#: election/views.py:129
msgid "view groups"
msgstr "groupe de vue"
#: core/views/user.py:176 trombi/templates/trombi/export.jinja:25 #: core/views/user.py:176 trombi/templates/trombi/export.jinja:25
#: trombi/templates/trombi/user_profile.jinja:11 #: trombi/templates/trombi/user_profile.jinja:11
msgid "Pictures" msgid "Pictures"
@ -3916,19 +4019,11 @@ msgstr "début des candidatures"
msgid "end candidature" msgid "end candidature"
msgstr "fin des candidatures" msgstr "fin des candidatures"
#: election/models.py:22 #: election/models.py:30 election/views.py:130
msgid "edit groups"
msgstr "groupe d'édition"
#: election/models.py:26
msgid "view groups"
msgstr "groupe de vue"
#: election/models.py:30
msgid "vote groups" msgid "vote groups"
msgstr "groupe de vote" msgstr "groupe de vote"
#: election/models.py:34 #: election/models.py:34 election/views.py:131
msgid "candidature groups" msgid "candidature groups"
msgstr "groupe de candidature" msgstr "groupe de candidature"
@ -3944,7 +4039,7 @@ msgstr "nombre de choix maxi"
msgid "election list" msgid "election list"
msgstr "liste électorale" msgstr "liste électorale"
#: election/models.py:174 #: election/models.py:175
msgid "candidature" msgid "candidature"
msgstr "candidature" msgstr "candidature"
@ -3992,7 +4087,7 @@ msgstr "Vous avez déjà soumis votre vote."
msgid "You have voted in this election." msgid "You have voted in this election."
msgstr "Vous avez déjà voté pour cette élection." msgstr "Vous avez déjà voté pour cette élection."
#: election/templates/election/election_detail.jinja:266 election/views.py:82 #: election/templates/election/election_detail.jinja:266 election/views.py:84
msgid "Blank vote" msgid "Blank vote"
msgstr "Vote blanc" msgstr "Vote blanc"
@ -4061,15 +4156,15 @@ msgstr "au"
msgid "Polls open from" msgid "Polls open from"
msgstr "Votes ouverts du" msgstr "Votes ouverts du"
#: election/views.py:43 #: election/views.py:45
msgid "You have selected too much candidates." msgid "You have selected too much candidates."
msgstr "Vous avez sélectionné trop de candidats." msgstr "Vous avez sélectionné trop de candidats."
#: election/views.py:58 #: election/views.py:60
msgid "User to candidate" msgid "User to candidate"
msgstr "Utilisateur se présentant" msgstr "Utilisateur se présentant"
#: election/views.py:102 #: election/views.py:104
msgid "This role already exists for this election" msgid "This role already exists for this election"
msgstr "Ce rôle existe déjà pour cette élection" msgstr "Ce rôle existe déjà pour cette élection"
@ -4389,10 +4484,6 @@ msgstr "Derniers albums"
msgid "All categories" msgid "All categories"
msgstr "Toutes les catégories" msgstr "Toutes les catégories"
#: sas/templates/sas/main.jinja:53
msgid "Create"
msgstr "Créer"
#: sas/templates/sas/moderation.jinja:4 sas/templates/sas/moderation.jinja:8 #: sas/templates/sas/moderation.jinja:4 sas/templates/sas/moderation.jinja:8
msgid "SAS moderation" msgid "SAS moderation"
msgstr "Modération du SAS" msgstr "Modération du SAS"
@ -4615,62 +4706,66 @@ msgid "Curious"
msgstr "Curieux" msgstr "Curieux"
#: sith/settings.py:565 #: sith/settings.py:565
msgid "A new poster needs to be moderated"
msgstr "Une nouvelle affiche a besoin d'être modérée"
#: sith/settings.py:566
msgid "A new mailing list needs to be moderated" msgid "A new mailing list needs to be moderated"
msgstr "Une nouvelle mailing list a besoin d'être modérée" msgstr "Une nouvelle mailing list a besoin d'être modérée"
#: sith/settings.py:566 #: sith/settings.py:567
#, python-format #, python-format
msgid "There are %s fresh news to be moderated" msgid "There are %s fresh news to be moderated"
msgstr "Il y a %s nouvelles toutes fraîches à modérer" msgstr "Il y a %s nouvelles toutes fraîches à modérer"
#: sith/settings.py:567 #: sith/settings.py:568
msgid "New files to be moderated" msgid "New files to be moderated"
msgstr "Nouveaux fichiers à modérer" msgstr "Nouveaux fichiers à modérer"
#: sith/settings.py:568 #: sith/settings.py:569
#, python-format #, python-format
msgid "There are %s pictures to be moderated in the SAS" msgid "There are %s pictures to be moderated in the SAS"
msgstr "Il y a %s photos à modérer dans le SAS" msgstr "Il y a %s photos à modérer dans le SAS"
#: sith/settings.py:569 #: sith/settings.py:570
msgid "You've been identified on some pictures" msgid "You've been identified on some pictures"
msgstr "Vous avez été identifié sur des photos" msgstr "Vous avez été identifié sur des photos"
#: sith/settings.py:570 #: sith/settings.py:571
#, python-format #, python-format
msgid "You just refilled of %s €" msgid "You just refilled of %s €"
msgstr "Vous avez rechargé votre compte de %s€" msgstr "Vous avez rechargé votre compte de %s€"
#: sith/settings.py:571 #: sith/settings.py:572
#, python-format #, python-format
msgid "You just bought %s" msgid "You just bought %s"
msgstr "Vous avez acheté %s" msgstr "Vous avez acheté %s"
#: sith/settings.py:572 #: sith/settings.py:573
msgid "You have a notification" msgid "You have a notification"
msgstr "Vous avez une notification" msgstr "Vous avez une notification"
#: sith/settings.py:584 #: sith/settings.py:585
msgid "Success!" msgid "Success!"
msgstr "Succès !" msgstr "Succès !"
#: sith/settings.py:585 #: sith/settings.py:586
msgid "Fail!" msgid "Fail!"
msgstr "Échec !" msgstr "Échec !"
#: sith/settings.py:586 #: sith/settings.py:587
msgid "You successfully posted an article in the Weekmail" msgid "You successfully posted an article in the Weekmail"
msgstr "Article posté avec succès dans le Weekmail" msgstr "Article posté avec succès dans le Weekmail"
#: sith/settings.py:587 #: sith/settings.py:588
msgid "You successfully edited an article in the Weekmail" msgid "You successfully edited an article in the Weekmail"
msgstr "Article édité avec succès dans le Weekmail" msgstr "Article édité avec succès dans le Weekmail"
#: sith/settings.py:588 #: sith/settings.py:589
msgid "You successfully sent the Weekmail" msgid "You successfully sent the Weekmail"
msgstr "Weekmail envoyé avec succès" msgstr "Weekmail envoyé avec succès"
#: sith/settings.py:597 #: sith/settings.py:598
msgid "AE tee-shirt" msgid "AE tee-shirt"
msgstr "Tee-shirt AE" msgstr "Tee-shirt AE"