[spip-dev] versionning des articles depuis la partie publique (application à http://spip.net)

Bonjour,

ce mail a peut-être plus sa place sur trac ou sur spip-one je ne sais
pas. Il y a un point qui manque à Spip, c'est l'exploitation des
différentes versions d'un article. Ce problème est flagrant sur
spip.net : il serait vraiment plus simple et compréhensible d'avoir
une version pour la 1.7, une pour la 1.8, une pour la 1.9, etc.. : il
y a pas mal d'articles qui mélangent tout, ou qui ne sont pas à jour
(combien d'entre eux parlent encore de fichiers ayant une extension en
.php3)

L'idéal serait d'avoir une doc toujours à jour, et d'avoir une doc
plus ancienne pour les autres versions. Par exemple, il y a beaucoup
de sites en 1.8.x sur lesquels des utilisateurs doivent faire des
interventions -- hors mise à jour -- sans connaitre cette version de
Spip (prenons le cas de quelqu'un qui ne connait Spip que depuis la
1.9, à qui on demande de changer de serveur ou de mettre à jour une
version 1.7 :slight_smile:

La solution immédiate et peut-être la plus propre serait de dupliquer
la base de spip.net en autant de versions majeures :
Des acces de type spip17.spip.net/fr et spip18.spip.net/fr
permettraient d'y avoir accès facilement.
On peut repartir de la doc existante pour la convertir en une doc1.8
(en fait je n'irais pas plus loin).
Comme cela, une fois que la séparation est faite, on a un glossaire
par version de spip, une doc réservée à cette version, etc..

On peut même anticiper une future doc en préparant des articles sur
une base réservée à la svn (je pense en particulier aux articles en
cours de proposition sur l'explication de la structure de la base, par
exemple, qui n'a de sens que depuis la futur 1.9.3)

Qu'en pensez-vous ?

.Gilles

Gilles Vincent a écrit :

Bonjour,

ce mail a peut-être plus sa place sur trac ou sur spip-one je ne sais
pas. Il y a un point qui manque à Spip, c'est l'exploitation des
différentes versions d'un article. Ce problème est flagrant sur
spip.net : il serait vraiment plus simple et compréhensible d'avoir
une version pour la 1.7, une pour la 1.8, une pour la 1.9, etc.. : il
y a pas mal d'articles qui mélangent tout, ou qui ne sont pas à jour
(combien d'entre eux parlent encore de fichiers ayant une extension en
.php3)

L'idéal serait d'avoir une doc toujours à jour, et d'avoir une doc
plus ancienne pour les autres versions. Par exemple, il y a beaucoup
de sites en 1.8.x sur lesquels des utilisateurs doivent faire des
interventions -- hors mise à jour -- sans connaitre cette version de
Spip (prenons le cas de quelqu'un qui ne connait Spip que depuis la
1.9, à qui on demande de changer de serveur ou de mettre à jour une
version 1.7 :slight_smile:

La solution immédiate et peut-être la plus propre serait de dupliquer
la base de spip.net en autant de versions majeures :
Des acces de type spip17.spip.net/fr et spip18.spip.net/fr
permettraient d'y avoir accès facilement.
On peut repartir de la doc existante pour la convertir en une doc1.8
(en fait je n'irais pas plus loin).
Comme cela, une fois que la séparation est faite, on a un glossaire
par version de spip, une doc réservée à cette version, etc..

On peut même anticiper une future doc en préparant des articles sur
une base réservée à la svn (je pense en particulier aux articles en
cours de proposition sur l'explication de la structure de la base, par
exemple, qui n'a de sens que depuis la futur 1.9.3)

Qu'en pensez-vous ?
  

Si le but, c'est d'afficher des diff de version sur la partie publique, si ca peut aider, en gros, je fais ca en 1.9.2 :

<BOUCLE_article_principal(ARTICLES) {id_article}>
    [<:version:> (#ENV{selected_id_version}) <hr/>
    <h2 class="titre">[(#ID_ARTICLE|affiche_diff_champ{titre,#ENV{selected_id_version}}|sinon{#TITRE})]</h2>
    <div class="chapo">[(#ID_ARTICLE|affiche_diff_champ{chapo,#ENV{selected_id_version}}|sinon{#CHAPO})]</div>
    <br class="nettoyeur" />
    <div class="texte">[(#ID_ARTICLE|affiche_diff_champ{texte,#ENV{selected_id_version}}|sinon{#TEXTE})]</div>
    ]
    [(#ENV{selected_id_version}|?{'',' '})
    <h2 class="#EDIT{titre} titre">#TITRE</h2>
    <div class="#EDIT{chapo} chapo">[(#CHAPO)]</div>
    <br class="nettoyeur" />
    <div class="#EDIT{texte} texte">[(#TEXTE|image_reduire{440,0})]</div>
    ]
[<div>(#FORMULAIRE_ATELIERS_REVISIONS_ARTICLE{#ENV{selected_id_version}})</div>]
</BOUCLE_article_principal>

avec la balise dynamique :
<?php
if (!defined("_ECRIRE_INC_VERSION")) return; #securite

include_spip("inc/autorisation");

function balise_FORMULAIRE_ATELIERS_REVISIONS_ARTICLE($p) {
  return calculer_balise_dynamique($p,'FORMULAIRE_ATELIERS_REVISIONS_ARTICLE',array('id_article','id_rubrique'));

}

function balise_FORMULAIRE_ATELIERS_REVISIONS_ARTICLE_stat($args, $filtres) {
        return array($args[0],$args[1],$args[2]);
}

function balise_FORMULAIRE_ATELIERS_REVISIONS_ARTICLE_dyn($id_article,$id_rubrique,$id_version) {
    if (($GLOBALS["auteur_session"])
        && autoriser('voir','article',$id_article))
        return array('formulaires/ateliers_revisions_article', 0,
                array(
                    'selected_id_version' => $id_version,
                    'id_article' => $id_article,
                    'id_rubrique' => $id_rubrique
                ));
    return '';
}

?>

et le formulaire :
<ul>
<BOUCLE_rev(spip_versions){id_article}{par date}{inverse}{pagination 5}>
[(#SET{a,[(#ENV{selected_id_version}|=={#ID_VERSION}|?{span,a})]})]
<li><[(#GET{a})]
    href="[(#SELF|parametre_url{selected_id_version,#ID_VERSION})]">#DATE</#GET{a}>
    <span>&mdash; [(#ID_AUTEUR|affiche_auteur_diff)] [-- (#TITRE_VERSION)]</span>
    </li>
</BOUCLE_rev>
</ul>

@++
PS : pas testé comme d'ab, mais c'est extrait d'un truc qui marche, donc sauf erreur de copier/coller, ca devrait marcher

Si le but, c'est d'afficher des diff de version sur la partie publique,

Vous parlez de deux choses différentes il me semble ; Gilles parle
d'une version (contrôlée) de la doc correspondant à une version de
SPIP, et toi des différences (calculées) de la doc entre telle et
telle révision.

si ca peut aider, en gros, je fais ca en 1.9.2 :

regarde aussi dans Gribouille, il y a du code pour ça.

-- Fil