Désinscription

| Q                         | R
| ------------------------- | -------------------------------------------
| Correction de bugs ?      | Oui
| Nouvelle Fonctionnalité ? | Oui
| Tickets concernés         | #818

Cette PR est la suite de la #1400 initiée par @artragis mais qui est directement sur le dépôt principal permettant ainsi à chacun d'y contribuer plus directement au vu de la complexité de celle-ci.

Elle également là suite à une erreur de ma part alors que j'ai souhaité corrigé un template sans lien avec cette PR.

Note : cette PR est basée sur `dev` et non plus sur `master` comme l'était la PR #1400.

En ayant une branche sur le dépôt principal, il faut donc faire des PR sur cette branche qui sera elle-même mergée via cette présente PR. Procéder ainsi permet de valider étape par étape les diverses modifications plutôt que de devoir revalider toutes les modifications. Aussi, chacun peu contribuer s'il le souhaite.



# QA

## Interface utilisateur (front)

- Lien de désinscription accessible via **Paramètres** (en en haut à droite de toute les pages sur l'avatar / roue dentée) puis **Désinscription** dans la barre latérale ;
- Le lien mène alors vers une page expliquant les conséquences de sa désinscription avec un bouton rouge en bas de celle-ci ;
- Le clic sur le bouton rouge ouvre une boite modale qui constitue le dernier avertissement avant le déclenchement du processus de désinscription.

## Effets de la désinscription (back)

- Suppression du profil, libèrant le pseudo et l'adresse courriel pour les futures inscriptions ;
- Le membre est déconnecté ;
- Les données du membre sont anonymisées : 
    - messages du forum ayant comme pseudo "Anonyme" ;
    - les sujets du forum restent ouverts mais ont comme auteur "Anonyme" ;
    - les galeries non liées à un tutoriel sont données à "Auteur externe" (puisque l'image peut être considérée comme venant d'un "auteur") avec droit de lecture et d'écriture ;
    - les MP sont anonymisés et le membre quitte les discussions auxquelles il participait ;
    - les commentaires de tutoriels/articles ont comme pseudo "Anonyme" ;
    - les articles et tutoriels suivent ces règles : 
        - si le tutoriel/article a été écrit par **plusieurs personne**; le membre est retiré de la liste des auteurs ;
        - si le tutoriel/article est **publié***, il passe sur le compte "Auteur externe", une demande expresse sera nécessaire au retrait complet de ses contenus ;
        - si le tutoriel/article n'est pas publié (brouillon, bêta, validation) il est supprimé ainsi que la galerie associée.


# Historique

Pour lire/voir/comprendre les diverses évolutions, il est possible que la réponse se trouve dans la PR #1400, passer rapidement dessus (Ctrl+F est votre ami :) pourra peut-être vous apporter des réponses.
C'est la partie en dessous qui est inutile. Ce qui est étrange c'est que
je suis sûr de l'avoir enlevé ce code.
Le 11/09/2014 14:40, firm1 a écrit :
>
> In zds/member/views.py:
>
> > +                tuto.authors.add(external)
> > +            tuto.authors.remove(current)
> > +            tuto.save()
> > +    for article in request.user.profile.get_articles():
> > +        # we delete article only if not published with only one author
> > +        if not article.on_line() and article.authors.count() == 1:
> > +            article.delete_entity_and_tree()
> > +        else:
> > +            if article.authors.count() == 1:
> > +                article.authors.add(external)
> > +            article.authors.remove(current)
> > +            article.save()
> > +    # all messages anonymisation (forum, article and tutorial posts)
> > +    for message in Comment.objects.filter(author=current):
> > +        message.author = anonymous
> > +        if message.editor is not None and message.editor.username == current.username:
>
>     if message.editor is not None and message.editor.username == current.username:
>         message.editor = anonymous
>
>     Cette partie du code est inutile, car elle vient en doublon avec
>     ton code du dessous
>
>     for message in Comment.objects.filter(editor=current):
>         message.editor = anonymous
>         message.save()
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/zestedesavoir/zds-site/pull/1469/files#r17418099>.
>