Repository: zestedesavoir/zds-site

Issue:
La date de dernière mise à jour d'un tutoriel republié en version majeure est incorrecte
Il s'agit de [ce tutoriel](https://zestedesavoir.com/tutoriels/1280/creez-une-api-rest-avec-symfony-3/) dont 5 nouveaux chapitres ont été ajouté depuis la première publication du tutoriel.

Comme on peut le voir dans la capture ci-dessous,

![bug_date](https://cloud.githubusercontent.com/assets/6066015/18271345/e9e5efc6-7431-11e6-8900-3c27647a7fa7.PNG)

Le tutoriel semble avoir été modifié pour la dernière fois le _samedi 16 juillet 2016 à 19h41_, ce qui n'est pourtant pas le cas lorsqu'on regarde l'historique, la date dervrait être au _dimanche 04 septembre_, comme en témoigne la capture suivante : 

![bug_date2](https://cloud.githubusercontent.com/assets/6066015/18271370/0b91e80a-7432-11e6-8f9f-c851936f13fc.PNG)

Je soupçonne donc que la date d mise à jour ne soit pas modifiée à chaque modification de contenu, mais uniquement lorsqu'on modifie les métadonnées du tutoriel (tag, catégorie, introduction, conclusion, etc.)



Discussion:
Pourtant, la date est mise à jour [ici](https://github.com/zestedesavoir/zds-site/blob/dev/zds/tutorialv2/views/views_validations.py#L421) s’il s’agit d’une version majeure, non ? J’imagine que c’est le validateur qui indique s’il s’agit d’une mise à jour majeure ou pas, cela a-t-il été fait pour ce tutoriel ?

Quelqu’un arrive à reproduire ? À noter que la mise à jour de la date a fonctionné pour le [tutoriel sur le langage C](https://zestedesavoir.com/tutoriels/755/le-langage-c-1/).
Et celui sur SDL :)

Et celà n'a pas fonctionner lors de la mise à jour majeure du [guide du contributeur](https://zestedesavoir.com/tutoriels/705/le-guide-du-contributeur/) qui a eu lieu le 24 decembre 2016 (on voit encore dans le tutoriel "Dernière mise à jour : mercredi 07 décembre 2016 à 07h58" alors que sur la home on voit bien "24 decembre 2016")
En effet. En regardant attentivement, il y a même des tutoriels dont la date sur la page d’accueil est antérieure à celle affichée sur la page du tutoriel. En regardant les parties de code dédiées aux deux ([ici](https://github.com/zestedesavoir/zds-site/blob/dev/templates/tutorialv2/includes/content_item.part.html#L82-L85) )pour la page d’accueil et [ici](https://github.com/zestedesavoir/zds-site/blob/dev/templates/tutorialv2/includes/tags_authors.part.html#L15-L35) pour la page du tutoriel), on voit qu’on n’affiche pas la même chose. Il faudrait afficher `pubdate` dans les deux cas ?

EDIT : par contre, dans ce cas, il faudra une autre manière de savoir s’il s’agit de la première publication ou s’il s’agit d’une mise à jour ?
Et encore `pubdate` ne me semble pas mis à jour correctement en fonction du cas. Je n'arrive pas à dégager une analyse correcte (dans quels cas on a quoi), mais une chose est sure, il faut à la fois corriger l'affichage (`pubdate` partout ou c'est publique) et la mise à jour du champ à chaque mise à jour (majeure comme mineure).
On peut comme tu dis afficher `pubdate` partout où c’est public, et supprimer [cette condition](https://github.com/zestedesavoir/zds-site/blob/dev/zds/tutorialv2/views/views_validations.py#L426) pour que `pubdate` corresponde toujours à la date de la dernière publication. Dans ce cas, il faudrait soit :

- rajouter par exemple un champ qui indique s’il s’agit de la première publication ou d’une mise à jour (majeure ?) ;
- supprimer le choix entre « Publié » et  « Dernière mise à jour » sur la page du tutoriel.

Le second choix permet de supprimer quelques lignes de code et d’avoir un truc plus compréhensible, le premier permet de conserver le comportement actuel (en le déboguant). Ce comportement permet de savoir si sur un tutoriel que l’on avait lu a subi une mise à jour depuis.  
Un truc m'étonne, c'est qu'on met pas du tout à jour [`update_date`](https://github.com/zestedesavoir/zds-site/blob/dev/zds/tutorialv2/models/models_database.py#L87) dans cette partie là. Est ce que ça viendrait de là ?
Dans ce cas, il faudrait quelque chose dans le genre.

```python
if form.cleaned_data['is_major'] or not is_update or db_object.update_date is None:
    db_object.update_date = datetime.now()
if not is_update or db_object.pubdate is None:
    db_object.pubdate = update_date
```

Comme ça `pubdate` correspond à la date de la première publication, et `update_date` à la date de dernière mise à jour majeure. On affiche partout `update_date` et `pubdate` permet de savoir s’il il y a eu une mise à jour majeure depuis la première publication (et donc d’afficher « Publié » ou « Dernière mise à jour »).

Resolving patch:
diff --git a/zds/tutorialv2/models/database.py b/zds/tutorialv2/models/database.py
--- a/zds/tutorialv2/models/database.py
+++ b/zds/tutorialv2/models/database.py
@@ -904,9 +904,6 @@ def get_absolute_url_zip(self):
 
         return self.get_absolute_url_to_extra_content('zip')
 
-    def get_last_action_date(self):
-        return self.update_date or self.publication_date
-
     def get_char_count(self, md_file_path=None):
         """ Compute the number of letters for a given content
 


Test patch: