[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins-dist / revisions / inc / suivi_versions.php
index b4e0e0c..3e3da2e 100644 (file)
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
-if (!defined("_ECRIRE_INC_VERSION")) return;
+/**
+ * Fonctions de suivi de versions
+ *
+ * @package SPIP\Revisions\Versions
+ **/
+if (!defined("_ECRIRE_INC_VERSION")) {
+       return;
+}
 
 include_spip('inc/revisions');
 include_spip('inc/diff');
 
 /**
- * Afficher un diff correspondant a une revision d'un objet
- * 
- * @param int $id_objet
- * @param string $objet
- * @param int $id_version
+ * Afficher un diff correspondant à une révision d'un objet
+ *
+ * @param int $id_objet Identifiant de l'objet
+ * @param string $objet Objet
+ * @param int $id_version Identifiant de la version
  * @param bool $court
+ *     - false : affiche le diff complet
+ *     - true  : indique juste la taille en octets des changements
  * @return string
+ *     Texte HTML du diff.
  */
-function revisions_diff ($id_objet,$objet, $id_version, $court=false){
-       $textes = revision_comparee($id_objet,$objet, $id_version, 'diff');
-       if (!is_array($textes)) return $textes;
+function revisions_diff($id_objet, $objet, $id_version, $court = false) {
+       $textes = revision_comparee($id_objet, $objet, $id_version, 'diff');
+       if (!is_array($textes)) {
+               return $textes;
+       }
        $rev = '';
        $nb = 0;
        foreach ($textes as $var => $t) {
-               if ($n=strlen($t)) {
-                       if ($court)
+               if ($n = strlen($t)) {
+                       if ($court) {
                                $nb += $n;
-                       else {
+                       else {
                                $aff = propre_diff($t);
                                if ($GLOBALS['les_notes']) {
-                                       $aff .= '<p>'.$GLOBALS['les_notes'].'</p>';
+                                       $aff .= '<p>' . $GLOBALS['les_notes'] . '</p>';
                                        $GLOBALS['les_notes'] = '';
                                }
                                $rev .= "<blockquote>$aff</blockquote>";
                        }
                }
        }
+
        return $court ? _T('taille_octets', array('taille' => $nb)) : $rev;
 }
 
 /**
- * Retrouver le champ d'un objet, pour une version demandee
- * @param string $objet
- * @param int $id_objet
- * @param int $id_version
- * @param string $champ
- * @param array $champs
+ * Retrouver le champ d'un objet, pour une version demandée
+ *
+ * Si le champ n'est pas déjà présent dans la liste des champs ($champs),
+ * on remonte les versions à partir du id_version donné, jusqu'à
+ * récupérer une version qui contient ce champ. On complète alors la liste
+ * des champs avec la version du champ trouvée.
+ *
+ * @param string $objet Objet
+ * @param int $id_objet Identifiant de l'objet
+ * @param int $id_version Identifiant de la version
+ * @param string $champ Le nom du champ à retrouver
+ * @param array $champs Liste des champs déjà connus
+ * @return void
  */
-function retrouver_champ_version_objet($objet,$id_objet,$id_version,$champ,&$champs){
-       if (isset($champs[$champ]))
+function retrouver_champ_version_objet($objet, $id_objet, $id_version, $champ, &$champs) {
+       if (isset($champs[$champ])) {
                return;
+       }
 
        // Remonter dans le temps pour trouver le champ en question
        // pour la version demandee
-       $id_ref = $id_version-1;
+       $id_ref = $id_version - 1;
        $prev = array();
-       while (!isset($prev[$champ]) AND $id_ref>0) {
-               $prev = recuperer_version($id_objet,$objet, $id_ref--);
+       while (!isset($prev[$champ]) and $id_ref > 0) {
+               $prev = recuperer_version($id_objet, $objet, $id_ref--);
        }
-       if (isset($prev[$champ]))
+       if (isset($prev[$champ])) {
                $champs[$champ] = $prev[$champ];
-       else {
+       else {
                // le champ n'a jamais ete versionne :
                // il etait initialement vide
-               if (strncmp($champ,'jointure_',9)==0)
-                       $champs[$champ] = '';
-               else
-                       $champs[$champ] = '';
+               $champs[$champ] = '';
        }
 }
 
 /**
- * retourne un array() des champs modifies a la version id_version
- * le format =
- *    - diff => seulement les modifs (page revisions)
- *    - apercu => idem, mais en plus tres cout s'il y en a bcp
- *    - complet => tout, avec surlignage des modifications (page revision)
+ * Liste les champs modifiés par une version de révision donnée
+ *
+ * Pour un couple objet/id_objet et id_version donné, calcule les champs
+ * qui ont été modifiés depuis une version précédente et la version
+ * d'id_version, et les retourne.
  *
- * https://code.spip.net/@revision_comparee
+ * La version précédente est par défaut la version juste
+ * avant id_version, mais peut être définie via le paramètre id_diff.
  *
- * @param int $id_objet
- * @param string $objet
- * @param int $id_version
+ * Le retour est plus ou moins locace en fonction du paramètre format.
+ *
+ * @param int $id_objet Identifiant de l'objet
+ * @param string $objet Objet
+ * @param int $id_version Identifiant de la version
  * @param string $format
+ *     Type de retour
+ *     - diff => seulement les modifs (page revisions)
+ *     - apercu => idem, mais en plus tres cout s'il y en a bcp
+ *     - complet => tout, avec surlignage des modifications (page revision)
  * @param null $id_diff
+ *     Identifiant de la version de base du diff, par défaut l'id_version
+ *     juste précédent
  * @return array
+ *     Couples (champ => texte)
  */
-function revision_comparee($id_objet, $objet, $id_version, $format='diff', $id_diff=NULL) {
+function revision_comparee($id_objet, $objet, $id_version, $format = 'diff', $id_diff = null) {
        include_spip('inc/diff');
 
        // chercher le numero de la version precedente
        if (!$id_diff) {
-               $id_diff = sql_getfetsel("id_version", "spip_versions", "id_objet=" . intval($id_objet) . " AND id_version < " . intval($id_version)." AND objet=".sql_quote($objet), "", "id_version DESC", "1");
+               $id_diff = sql_getfetsel("id_version", "spip_versions",
+                       "id_objet=" . intval($id_objet) . " AND id_version < " . intval($id_version) . " AND objet=" . sql_quote($objet),
+                       "", "id_version DESC", "1");
        }
 
        if ($id_version && $id_diff) {
@@ -110,8 +140,8 @@ function revision_comparee($id_objet, $objet, $id_version, $format='diff', $id_d
                        $id_diff = $t;
                }
 
-               $old = recuperer_version($id_objet,$objet, $id_diff);
-               $new = recuperer_version($id_objet,$objet, $id_version);
+               $old = recuperer_version($id_objet, $objet, $id_diff);
+               $new = recuperer_version($id_objet, $objet, $id_version);
 
                $textes = array();
 
@@ -129,38 +159,42 @@ function revision_comparee($id_objet, $objet, $id_version, $format='diff', $id_d
                }
 
                // memoriser les cas les plus courant
-               $afficher_diff_champ = charger_fonction('champ','afficher_diff');
-               $afficher_diff_jointure = charger_fonction('jointure','afficher_diff');
+               $afficher_diff_champ = charger_fonction('champ', 'afficher_diff');
+               $afficher_diff_jointure = charger_fonction('jointure', 'afficher_diff');
                foreach ($champs as $champ) {
                        // Remonter dans le temps pour trouver le champ en question
                        // pour chaque version
-                       retrouver_champ_version_objet($objet,$id_objet,$id_version,$champ,$new);
-                       retrouver_champ_version_objet($objet,$id_objet,$id_diff,$champ,$old);
+                       retrouver_champ_version_objet($objet, $id_objet, $id_version, $champ, $new);
+                       retrouver_champ_version_objet($objet, $id_objet, $id_diff, $champ, $old);
 
-                       if (!strlen($new[$champ]) && !strlen($old[$champ])) continue;
+                       if (!strlen($new[$champ]) && !strlen($old[$champ])) {
+                               continue;
+                       }
 
                        // si on n'a que le vieux, ou que le nouveau, on ne
                        // l'affiche qu'en mode "complet"
-                       if ($format == 'complet')
+                       if ($format == 'complet') {
                                $textes[$champ] = strlen($new[$champ])
                                        ? $new[$champ] : $old[$champ];
+                       }
 
                        // si on a les deux, le diff nous interesse, plus ou moins court
-                       if (isset($new[$champ]) AND isset($old[$champ])) {
-                               if (!$afficher_diff = charger_fonction($objet."_".$champ,'afficher_diff',true)
-                                 AND !$afficher_diff = charger_fonction($champ,'afficher_diff',true))
-                                       $afficher_diff = (strncmp($champ,'jointure_',9)==0?$afficher_diff_jointure:$afficher_diff_champ);
+                       if (isset($new[$champ]) and isset($old[$champ])) {
+                               if (!$afficher_diff = charger_fonction($objet . "_" . $champ, 'afficher_diff', true)
+                                       and !$afficher_diff = charger_fonction($champ, 'afficher_diff', true)
+                               ) {
+                                       $afficher_diff = (strncmp($champ, 'jointure_', 9) == 0 ? $afficher_diff_jointure : $afficher_diff_champ);
+                               }
 
-                               $textes[$champ] = $afficher_diff($champ,$old[$champ],$new[$champ],$format);
+                               $textes[$champ] = $afficher_diff($champ, $old[$champ], $new[$champ], $format);
                        }
                }
        }
 
        // que donner par defaut ? (par exemple si id_version=1)
-       if (!$textes)
-               $textes = recuperer_version($id_objet,$objet, $id_version);
+       if (!$textes) {
+               $textes = recuperer_version($id_objet, $objet, $id_version);
+       }
 
        return $textes;
 }
-
-?>