Repository: zestedesavoir/zds-site

Issue:
Absence de message d'erreur quand un staff tente de s'ajouter lui-même comme auteur
Quand un membre du staff tente de s'ajouter comme auteur du contenu d'un tiers, il se passe la chose suivante :

* le membre du staff n'est pas ajouté (fonctionnalité anti-abus),
* il n'y a pas de message d'erreur (bug).

L'absence de message d'erreur est très embêtante et la fonctionnalité anti-abus discutable. Je propose donc deux alternatives pour résoudre ce problème :

1. Rajouter un message d'erreur du type "Vous ne pouvez pas vous ajouter vous-même comme auteur en tant que staff."
2. Supprimer simplement la fonctionnalité anti-abus, et donc autoriser le staff à s'ajouter comme auteur si nécessaire.

Quelques détails en plus sont disponibles dans le [sujet du forum](https://zestedesavoir.com/forums/sujet/10586/sajouter-comme-auteur-a-un-contenu-en-tant-que-staff/) correspondant. Notamment, il semblerait que le compte admin ne soit pas non plus capable de faire ça.


Discussion:
Je suis en faveur de la deuxième solution: je ne vois vraiment pas quel genre d'abus il pourrait y avoir.
Je suis aussi plutôt pour la deuxième solution. 

On dirait que tout se passe à la ligne 1758 du fichier zds/tutorialv2/views/contents.py : 

`if user.pk not in all_authors_pk and user != self.request.user:`

Pour être ajouté, un membre ne doit pas être déjà auteur (raisonnable) et ne doit pas s'ajouter lui-même. Ce dernier critère est redondant avec le premier pour les membres normaux, et empêche aussi les membres du staff de s'ajouter eux-mêmes.

Je pense que c'est quelque chose de relativement facile à corriger. Idéal pour de nouveaux contributeurs !

Resolving patch:
diff --git a/zds/tutorialv2/views/contents.py b/zds/tutorialv2/views/contents.py
--- a/zds/tutorialv2/views/contents.py
+++ b/zds/tutorialv2/views/contents.py
@@ -1895,29 +1895,30 @@ def form_valid(self, form):
         bot = get_object_or_404(User, username=settings.ZDS_APP['member']['bot_account'])
         all_authors_pk = [author.pk for author in self.object.authors.all()]
         for user in form.cleaned_data['users']:
-            if user.pk not in all_authors_pk and user != self.request.user:
+            if user.pk not in all_authors_pk:
                 self.object.authors.add(user)
                 if self.object.validation_private_message\
                    and not self.object.validation_private_message.is_participant(user):
                     self.object.validation_private_message.participants.add(user)
                 all_authors_pk.append(user.pk)
-                url_index = reverse(self.object.type.lower() + ':find-' + self.object.type.lower(), args=[user.pk])
-                send_mp(
-                    bot,
-                    [user],
-                    format_lazy('{}{}', _('Ajout à la rédaction '), _type),
-                    self.versioned_object.title,
-                    render_to_string('tutorialv2/messages/add_author_pm.md', {
-                        'content': self.object,
-                        'type': _type,
-                        'url': self.object.get_absolute_url(),
-                        'index': url_index,
-                        'user': user.username
-                    }),
-                    True,
-                    direct=False,
-                    hat=get_hat_from_settings('validation'),
-                )
+                if user != self.request.user:
+                    url_index = reverse(self.object.type.lower() + ':find-' + self.object.type.lower(), args=[user.pk])
+                    send_mp(
+                        bot,
+                        [user],
+                        format_lazy('{}{}', _('Ajout à la rédaction '), _type),
+                        self.versioned_object.title,
+                        render_to_string('tutorialv2/messages/add_author_pm.md', {
+                            'content': self.object,
+                            'type': _type,
+                            'url': self.object.get_absolute_url(),
+                            'index': url_index,
+                            'user': user.username
+                        }),
+                        True,
+                        direct=False,
+                        hat=get_hat_from_settings('validation'),
+                    )
                 UserGallery(gallery=self.object.gallery, user=user, mode=GALLERY_WRITE).save()
         self.object.save(force_slug_update=False)
         self.success_url = self.object.get_absolute_url()


Test patch: