Repository: zestedesavoir/zds-site

Issue:
Afficher la durée de la sanction en cours sur le profil des membres pour le staff
Bonjour,

Je propose d'afficher la durée de lecture seule ou de bannissement sur le profil des membres sous le joug de telles sanctions. Actuellement, j'ai l'impression que cette information n'est pas accessible du tout (hors indication sur le forum staff).

L'affichage aurait les propriétés suivantes :

* visible uniquement par le staff ;
* affichage de la durée totale de la sanction en cours ;
* affichage de la durée restante de bannissement / lecture seule.

On pourrait glisser cette information dans l'intitulé des boutons actuels. On aurait  « Ôter la lecture seule (2 jours restants sur 3) » par exemple. Il faudra penser aussi à traiter correctement les sanctions à durée indéterminée.


Discussion:

Resolving patch:
diff --git a/zds/member/commons.py b/zds/member/commons.py
--- a/zds/member/commons.py
+++ b/zds/member/commons.py
@@ -171,10 +171,9 @@ def get_message_unsanction(self):
         """
         return _('Bonjour **{0}**,\n\n'
                  '**Bonne nouvelle**, la sanction qui '
-                 'pesait sur vous a été levée par **{1}**.\n\n'
-                 'Ce qui signifie que {3}\n\n'
-                 'Le motif est :\n\n'
+                 'pesait sur vous a été levée par **{1}** pour la raison suivante :\n\n'
                  '> {4}\n\n'
+                 'Cela signifie que {3}\n\n'
                  'Cordialement, \n\n L\'équipe {5}.')
 
     def get_message_sanction(self):
@@ -185,10 +184,9 @@ def get_message_sanction(self):
         :rtype: ugettext_lazy
         """
         return _('Bonjour **{0}**,\n\n'
-                 'Vous avez été santionné par **{1}**.\n\n'
-                 'La sanction est de type *{2}*, ce qui signifie que {3}\n\n'
-                 'Le motif de votre sanction est :\n\n'
+                 'Vous avez été sanctionné par **{1}** pour la raison suivante :\n\n'
                  '> {4}\n\n'
+                 'La sanction est de type *{2}*, ce qui signifie que {3}\n\n'
                  'Cordialement, \n\nL\'équipe {5}.')
 
     def notify_member(self, ban, msg):
@@ -209,8 +207,8 @@ def notify_member(self, ban, msg):
             ban.type,
             '',
             msg,
-            True,
-            direct=True,
+            send_by_mail=True,
+            direct=False,
             hat=get_hat_from_settings('moderation'),
         )
 
@@ -221,14 +219,14 @@ class ReadingOnlySanction(MemberSanctionState):
     """
 
     def get_type(self):
-        return _('Lecture Seule')
+        return _('Lecture seule illimitée')
 
     def get_text(self):
         return self.array_infos.get('ls-text', '')
 
     def get_detail(self):
         return (_('vous ne pouvez plus poster dans les forums, ni dans les '
-                  'commentaires d\'articles et de tutoriels.'))
+                  'commentaires d\'articles et de tutoriels jusqu\'à nouvel ordre.'))
 
     def apply_sanction(self, profile, ban):
         profile.end_ban_write = None
@@ -243,7 +241,8 @@ class TemporaryReadingOnlySanction(MemberSanctionState):
     """
 
     def get_type(self):
-        return _('Lecture Seule Temporaire')
+        jrs = int(self.array_infos.get('ls-jrs'))
+        return _('Lecture seule temporaire ({0} jour{1})').format(jrs, pluralize(jrs))
 
     def get_text(self):
         return self.array_infos.get('ls-text', '')
@@ -251,7 +250,7 @@ def get_text(self):
     def get_detail(self):
         jrs = int(self.array_infos.get('ls-jrs'))
         return (_('vous ne pouvez plus poster dans les forums, ni dans les '
-                  'commentaires d\'articles et de tutoriels pendant {0} jour{1}.')
+                  'commentaires d\'articles et de tutoriels pendant {0} jour{1}.')
                 .format(jrs, pluralize(jrs)))
 
     def apply_sanction(self, profile, ban):
@@ -268,7 +267,7 @@ class DeleteReadingOnlySanction(MemberSanctionState):
     """
 
     def get_type(self):
-        return _("Autorisation d'écrire")
+        return _("Levée de la lecture seule")
 
     def get_text(self):
         return self.array_infos.get('unls-text', '')
@@ -290,13 +289,13 @@ class BanSanction(MemberSanctionState):
     """
 
     def get_type(self):
-        return _('Ban définitif')
+        return _('Bannissement illimité')
 
     def get_text(self):
         return self.array_infos.get('ban-text', '')
 
     def get_detail(self):
-        return _('vous ne pouvez plus vous connecter sur {0}.') \
+        return _('vous ne pouvez plus vous connecter sur {0} jusqu\'à nouvel ordre.')\
             .format(settings.ZDS_APP['site']['literal_name'])
 
     def apply_sanction(self, profile, ban):
@@ -312,14 +311,15 @@ class TemporaryBanSanction(MemberSanctionState):
     """
 
     def get_type(self):
-        return _('Ban Temporaire')
+        jrs = int(self.array_infos.get('ban-jrs'))
+        return _('Bannissement temporaire ({0} jour{1})').format(jrs, pluralize(jrs))
 
     def get_text(self):
         return self.array_infos.get('ban-text', '')
 
     def get_detail(self):
         jrs = int(self.array_infos.get('ban-jrs'))
-        return (_('vous ne pouvez plus vous connecter sur {0} pendant {1} jour{2}.')
+        return (_('vous ne pouvez plus vous connecter sur {0} pendant {1} jour{2}.')
                 .format(settings.ZDS_APP['site']['literal_name'],
                         jrs,
                         pluralize(jrs)))
@@ -338,7 +338,7 @@ class DeleteBanSanction(MemberSanctionState):
     """
 
     def get_type(self):
-        return _('Autorisation de se connecter')
+        return _('Levée du bannissement')
 
     def get_text(self):
         return self.array_infos.get('unban-text', '')


Test patch: