Carnet Wiki

signaler les révisions côté public

Version 13 — Juin 2022 flouvel

A lire aussi : Le Suivi des Révisions (d’Articles etc..)

Dans l’objectif d’un spip 3 en mode wiki (objectif déjà poursuivi par Gribouille pour spip 2).
Utilise le plugin Révisions , (Autorité pouvant être étant utilisé pour créer l’espace wiki)

1. Montrer les révisions sur page public

Créer une page truc_revision.html (revisions.html ok , mais ( non pas revision.html sinon interférences avec l’espace privé et le plugin revisions) dans votre dossier squelettes sur le modèle de gribouille_2 , et en parallèle le fichier truc_revision_fonctions.php copiée de gribouille_fonctions.php
Dans truc_revision.html :

<BOUCLE_revision(VERSIONS){id_version}{objet?}{id_objet?}>
#SET{diff, #VAL{#ID_ARTICLE}|gribouille_calcul_diff{'article',#ENV{id_version}}}
[(#GET{diff/surtitre})][(#GET{diff/titre})][(#GET{diff/soustitre})]
[(#LOGO_ARTICLE) si c'est un article …]
<abbr title="[(#_revision:DATE|date_iso)]">Version n° [(#ID_VERSION)], [(#_revision:DATE|date_relative) ,]
[(#ID_AUTEUR|=={-1}|non) modifié par 
	#SET{id_secteur, #INFO_ID_SECTEUR{#ENV{objet},#ENV{id_objet}}}
	[(#ID_AUTEUR|is_numeric|oui)<a href="[(#URL_PAGE{auteur,id_auteur=#ID_AUTEUR}|parametre_url{id_secteur,#GET{id_secteur}})]" rel="noindex,nofollow">]
	[(#INFO_NOM{auteur,#ID_AUTEUR})]
	[(#ID_AUTEUR|is_numeric|oui)</a>]
]
</abbr>
[(#ENV{id_version}|oui)
  [<div class="texte">(#GET{diff/descriptif})</div>]
  [<div class="chapo">(#GET{diff/chapo})</div>]
  [<div class="texte">(#GET{diff/texte})</div>]
  [<div class="ps">(#GET{diff/ps})</div>]
]
</BOUCLE_revision>

On ne considère avec ce code que les modifications sur les textes, il manquerait la prise en compte de la modification des documents (et logos) liés, des auteurs, de la hiérarchie.
Il manque le style css pour faire apparaître les modifications. Ajouter ces styles dans votre spip.css :

/* Revision, diff, SPIP */
.label {text-decoration: underline; }
.diff-para-deplace { background: #e8e8ff; }
.diff-para-ajoute { background: #d0ffc0; color: #000; }
.diff-para-supprime { background: #ffd0c0; color: #904040; text-decoration: line-through; }
p>.diff-para-deplace,p>.diff-para-ajoute,p>.diff-para-supprime {display:block;}


.diff-deplace { background: #e8e8ff; }
.diff-ajoute { background: #d0ffc0; }
.diff-supprime { background: #ffd0c0; color: #802020; text-decoration: line-through; }
.diff-para-deplace .diff-ajoute { background: #b8ffb8; border: 1px solid #808080; }
.diff-para-deplace .diff-supprime { background: #ffb8b8; border: 1px solid #808080; }
.diff-para-deplace .diff-deplace { background: #b8b8ff; border: 1px solid #808080; }

Pour faire un lien depuis un objet révisé, par exemple depuis la page article.html :

<BOUCLE_revision(VERSIONS){id_article}{!par id_version}{0,1}><a href="spip.php?page=truc_revision&id_objet=#ID_ARTICLE&objet=article&id_version=#ID_VERSION"><:revision:></a></BOUCLE_revision>

Pour pouvoir naviguer entre les différentes versions (comme ici à droite en plus minimaliste), ajouter à votre page truc_revision.html public :

<BOUCLE_autres(VERSIONS){id_objet}{objet}{id_version>0}{" "}>
[(#ID_VERSION|=={#_lastv:ID_VERSION}|?{<strong>#ID_VERSION</strong>,<a href="spip.php?page=truc_revision&id_objet=#ID_OBJET&objet=#OBJET&id_version=#ID_VERSION">#ID_VERSION</a>})]</BOUCLE_autres>


-  lien de retour à l’article (rubrique, …) révisé. Ajouter au minimum, <a href="spip.php?#OBJET#ID_OBJET">#OBJET #ID_OBJET</a> à votre page truc_revision.html public
-  si vous avez activé les révisions sur un objet bidule qui n’a pas de page public (pas de bidule.html côté public), il faudra en créer une
-  
et traiter ce cas à part
(
pour les documents, créer une page document.html conduit à un conflit. Il faudra donc opter pour un autre nom ( par exemple docu . , et filtrer ce cas ) html), et filtrer ce cas : &#91;(#OBJET|!={document}|?{&lt;a href="spip.php?#OBJET#ID_OBJET">#OBJET #ID_OBJET</a>,&lt;a href="spip.php?page=docu&id_document=#ID_OBJET">#OBJET #ID_OBJET</a>})]

2. Seulement signaler les révisions côté public

En partant de /plugins/revisions/prive/objets/liste/versions.html :
créer un fichier /squelettes/inclure/derrevisions.html avec le code ci-dessous, l’inclure par <INCLURE{fond=inclure/derrevisions} /> sur la page sommaire par exemple, pour avoir les 10 dernières révisions, avec lien sur la page revision de l’espace privé de l’objet concerné si connecté, sinon sur la page public.

<table><tbody>
<BOUCLE_liste_rev(VERSIONS){id_version>1}{objet!=''}{id_auteur?} {id_objet?} {objet?}{where?}{par date} {inverse} {0,10}>
<tr><td>[(#INFO_STATUT{#OBJET,#ID_OBJET}|puce_statut{#OBJET})]</td>
<td>[(#OBJET|objet_icone{16})]</td>
<td><a #SET{titre,#INFO_TITRE{#OBJET,#ID_OBJET}}
[(#AUTORISER{modifier, #OBJET, #ID_OBJET}|?{
href="[(#ENV{url_modif,#URL_ECRIRE{revision}}|parametre_url{id_objet,#ID_OBJET} |parametre_url{objet,#OBJET}|parametre_url{id_version,#ID_VERSION})]"
, href="[(#ENV{url_modif,#URL_PAGE{#OBJET}}|parametre_url{id_#OBJET,#ID_OBJET})]"}
)]
title="<:revisions:voir_revisions{objet=#OBJET,id_objet=#ID_OBJET,titre=#GET{titre}}|attribut_html:>">
#GET{titre}</a>[ ((#TITRE_VERSION))]  
</td><td>[(#DATE|date_relative)]</td>
<td>
    [(#REM) retourner le dernier auteur modifiant l'objet ]
    <BOUCLE_lastauteur(VERSIONS){objet=#OBJET}{id_objet=#ID_OBJET}{!par date}{0,1}><span class="vcard author"><a class="url fn spip_in" href="#URL_AUTEUR">#INFO_NOM{'auteur',#ID_AUTEUR}</a></span>
    </BOUCLE_lastauteur>
</td>
</tr>
</BOUCLE_liste_rev>
</tbody></table>

On peut de même signaler qu’il y a eu révision sur un objet consulté (article, ...) :
<INCLURE{fond=inclure/historique} />, avec /squelettes/inclure/historique.html =

<table><tbody>
<BOUCLE_liste_rev(VERSIONS?){id_version>1}{id_article ?}{id_xxxx ?}{where?}{tri #ENV{par,date},#GET{defaut_tri}}{pagination #ENV{nb,10}}>
<tr><td><a #SET{titre,#INFO_TITRE{#OBJET,#ID_OBJET}}
[(#AUTORISER{modifier, #OBJET, #ID_OBJET}|oui)
href="[(#ENV{url_modif,#URL_ECRIRE{revision}}|parametre_url{id_objet,#ID_OBJET}|parametre_url{objet,#OBJET}|parametre_url{id_version,#ID_VERSION})]"
]>
<:revisions:voir_revisions{objet=#OBJET,id_objet=#ID_OBJET,titre=#GET{titre}}|attribut_html:></a>[ ((#TITRE_VERSION))]</td>
<td>[<:der_revision:> : (#DATE|date_relative)]</td>
<td>
    [(#REM) retourner le dernier auteur modifiant l'objet ]
    <BOUCLE_lastauteur(VERSIONS){objet=#OBJET}{id_objet=#ID_OBJET}{!par date}{0,1}><span class="vcard author"><a class="url fn spip_in" href="#URL_AUTEUR">#INFO_NOM{'auteur',#ID_AUTEUR}</a></span>
    </BOUCLE_lastauteur>
</td>
</tr>
</BOUCLE_liste_rev>
</tbody></table>

On ne fait donc que signaler sur la page public qu’une révision a été effectuée, avec lien sur l’espace privé pour pouvoir voir la révision, si connecté et ayant droit.