Repository: zestedesavoir/zds-site

Issue:
Ajouter la possibilité de pouvoir annuler une demande de validation
Tout est dans le titre. Actuellement quand on envoie quelque chose en validation on ne peut pas faire marche arrière.



Discussion:
Et si un staff réserve la publication, toujours possibilité d'annuler ?

Je ne pense pas. Car sinon pour eux ça risque de devenir à compliquer à gérer. Je pense notamment à ce genre de cas : « _j'ai réservé le tuto HTML, où est-il passé ?!_ ». 

Après, un système de notification côté staff, disant que le tutoriel a été retiré de la validation peut régler ce problème. Ou, dans le tableau de validation, le tuto rester quelques jours, avec la mention « _annulé_ » à côté de celui-ci.

Mais personnellement, je pense vraiment, qu'une fois que le tuto est réellement rentré dans le process de validation - _entendez par là, réservé par un staff_ - il doit y rester. Mais cela, n'est que mon avis !

je suis plus mitigé. pour moi un auteur devrait avoir.les.plein.pouvoir sur son tuto. du coup s'il estime que finalement ce qu'il a envoyé en validatio n'est pas au niveau de ce qu'il veut publier alors je vois pas de raisons qu'il ne puisse pas annuler une etape editoriale

Je suis l'avis d'Eskimon, un auteur fait ce qu'il veut de son tuto, mais en même temps je me met à la place de celui qui relit. Imaginons le mec il a déjà relu la moitié du document, l'auteur annule :/ faudrait peut être prévoir un genre de note/post-it accroché au tuto visible pour le staff.

Ah, mais je suis entièrement d'accord sur le fait que l'auteur fait absolument ce qu'il veut de son tutoriel. Mais comme le dit @poulp je pense surtout au valido derrière, pour qui ça peut-être peinant de voir un tuto sur lequel il a passé du temps, disparaître comme cela.

Après, tout comme comme la validation, lorsque le membre retire son tuto on peut imaginer un textarea où il pourrait laisser un message à son validateur !

> Après, tout comme comme la validation, lorsque le membre retire son tuto on peut imaginer un textarea où il pourrait laisser un message à son validateur !

un mp de courtoisie ;)

Le valido est au service de l'auteur, pas le contraire...

Le MP (automatique) de courtoisie me parait une bonne idee par contre. Et si ca peut vous rassurer, rien n'est perdu, le staff peut toujours relire le tuto pour s'avancer dans le truc (oui un staff peut voir les tutos non public/beta)

C'est codé (avec un MP et tout) ! Je suis sur les tests unitaires là.


Resolving patch:
diff --git a/zds/article/views.py b/zds/article/views.py
--- a/zds/article/views.py
+++ b/zds/article/views.py
@@ -800,6 +800,60 @@ def modify(request):
 
             return redirect(redirect_url)
 
+        # user want to remove his article from the validation
+        elif 'unvalidate' in request.POST:
+
+            redirect_url = reverse('zds.article.views.view', args=[
+                article.pk,
+                article.slug
+            ])
+
+            author = request.user
+
+            validation = Validation.objects.filter(article__pk=article_pk).first()
+            validator = validation.validator
+
+            # remove sha_validation
+            article.sha_validation = None
+            article.pubdate = None
+            article.save()
+
+            # check if a validator have already reserv it
+            if validator:
+
+                # check if the user add a comment
+                if request.POST['comment']:
+                    comment = request.POST['comment']
+                else:
+                    comment = u'Pas de raison évoquée.'
+
+                # send a private message to the validator
+                msg = (
+                    u'Bonjour **{0}**,\n\n'
+                    u'L\'article **{1}** que tu avais réservé vient d\'être retiré de la validation par **{2}**. Les r'
+                    u'aisons évoqués sont les suivantes :\n\n'
+                    u'> {3}'.format(
+                        validator,
+                        article.title,
+                        author.username,
+                        comment)
+                )
+                bot = get_object_or_404(User, username=settings.ZDS_APP['member']['bot_account'])
+                send_mp(
+                    bot,
+                    [validator],
+                    u'Suppression de la validation de l\'article « {0} »'.format(article.title),
+                    '',
+                    msg,
+                    True,
+                    direct=False,
+                )
+
+            # delete the validation object
+            validation.delete()
+
+            return redirect(redirect_url)
+
     return redirect(article.get_absolute_url())
 
 
diff --git a/zds/tutorial/views.py b/zds/tutorial/views.py
--- a/zds/tutorial/views.py
+++ b/zds/tutorial/views.py
@@ -781,6 +781,55 @@ def modify_tutorial(request):
 
             return redirect(tutorial.get_absolute_url())
 
+        # user want to remove his article from the validation
+        elif 'unvalidate' in request.POST:
+
+            author = request.user
+
+            validation = Validation.objects.filter(tutorial__pk=tutorial_pk).first()
+            validator = validation.validator
+
+            # remove sha_validation
+            tutorial.sha_validation = None
+            tutorial.pubdate = None
+            tutorial.save()
+
+            # check if a validator have already reserv it
+            if validator:
+
+                # check if the user add a comment
+                if request.POST['comment']:
+                    comment = request.POST['comment']
+                else:
+                    comment = u'Pas de raison évoquée.'
+
+                # send a private message to the validator
+                msg = (
+                    u'Bonjour **{0}**,\n\n'
+                    u'Le tutoriel **{1}** que tu avais réservé vient d\'être retiré de la validation par **{2}**. Les '
+                    u'raisons évoqués sont les suivantes :\n\n'
+                    u'> {3}'.format(
+                        validator,
+                        tutorial.title,
+                        author.username,
+                        comment)
+                )
+                bot = get_object_or_404(User, username=settings.ZDS_APP['member']['bot_account'])
+                send_mp(
+                    bot,
+                    [validator],
+                    u'Suppression de la validation du tutoriel « {0} »'.format(tutorial.title),
+                    '',
+                    msg,
+                    True,
+                    direct=False,
+                )
+
+            # delete the validation object
+            validation.delete()
+
+            return redirect(tutorial.get_absolute_url())
+
     # No action performed, raise 403
 
     raise PermissionDenied


Test patch: