[SPIP] v3.2.1-->v3.2.3
[lhc/web/www.git] / www / plugins-dist / revisions / inc / revisions_pipeline.php
index b55a942..8027b8d 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2016                                                *
+ *  Copyright (c) 2001-2019                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -106,8 +106,7 @@ function revisions_formulaire_charger($flux) {
                $flux['data']['message_ok'] .= "<br />" . _T('revisions:message_valider_recuperer_version');
                // recuperer la version
                include_spip('inc/revisions');
-               #$champs = recuperer_version_complete($id, $objet, $id_version);
-               $champs = recuperer_version($id, $objet, $id_version);
+               $champs = recuperer_version_complete($id, $objet, $id_version);
                foreach ($champs as $champ => $valeur) {
                        if (!strncmp($champ, 'jointure_', 9) == 0) {
                                if ($champ == 'id_rubrique') {
@@ -122,6 +121,24 @@ function revisions_formulaire_charger($flux) {
        return $flux;
 }
 
+/**
+ * Sur une insertion en base, lever un flag pour ne pas creer une premiere révision vide
+ *
+ * @param array $x Données du pipeline
+ * @return array $x  Données du pipeline
+ */
+function revisions_pre_insertion($x) {
+       $table = $x['args']['table'];
+       include_spip('inc/revisions');
+       if ($champs = liste_champs_versionnes($table)) {
+               // on ne connait pas encore l'ID, mais on leve un flag pour ne pas creer de premiere revision pour ce type d'objet
+               // sur une simple jointure (auteur)
+               $GLOBALS['premiere_revision']["$table:0"] = true;
+       }
+
+       return $x;
+}
+
 
 /**
  * Sur une insertion en base, lever un flag pour ne pas creer une premiere révision vide
@@ -134,6 +151,9 @@ function revisions_post_insertion($x) {
        $table = $x['args']['table'];
        include_spip('inc/revisions');
        if ($champs = liste_champs_versionnes($table)) {
+               if (isset($GLOBALS['premiere_revision']["$table:0"])) {
+                       unset($GLOBALS['premiere_revision']["$table:0"]);
+               }
                $GLOBALS['premiere_revision']["$table:" . $x['args']['id_objet']] = true;
        }
 
@@ -182,6 +202,11 @@ function revisions_pre_edition_lien($x) {
                $table = table_objet_sql($x['args']['objet']);
                $id_objet = intval($x['args']['id_objet']);
                include_spip('inc/revisions');
+               // si c'est une creation de lien qui arrive aussitot apres l'insertion on ne cree pas de revision
+               if (isset($GLOBALS['premiere_revision']["$table:0"])) {
+                       unset($GLOBALS['premiere_revision']["$table:0"]);
+                       $GLOBALS['premiere_revision']["$table:" . $id_objet] = true;
+               }
                if (isset($GLOBALS['premiere_revision']["$table:" . $id_objet])) {
                        $GLOBALS['premiere_revision']["$table:" . $id_objet] = 0;
                } // ex : si le champ jointure_mots est versionnable sur les articles
@@ -193,6 +218,11 @@ function revisions_pre_edition_lien($x) {
 
                $table = table_objet_sql($x['args']['objet_source']);
                $id_objet = $x['args']['id_objet_source'];
+               // si c'est une creation de lien qui arrive aussitot apres l'insertion on ne cree pas de revision
+               if (isset($GLOBALS['premiere_revision']["$table:0"])) {
+                       unset($GLOBALS['premiere_revision']["$table:0"]);
+                       $GLOBALS['premiere_revision']["$table:" . $id_objet] = true;
+               }
                if (isset($GLOBALS['premiere_revision']["$table:" . $id_objet])) {
                        $GLOBALS['premiere_revision']["$table:" . $id_objet] = 0;
                } // ex : si le champ jointure_articles est versionnable sur les mots
@@ -271,6 +301,12 @@ function revisions_post_edition_lien($x) {
                $table = table_objet_sql($x['args']['objet']);
                $id_objet = $x['args']['id_objet'];
                include_spip('inc/revisions');
+               // si c'est une creation de lien qui arrive aussitot apres l'insertion on ne cree pas de revision
+               // (au cas ou pre_edition_lien n'aurait pas ete appele ?)
+               if (isset($GLOBALS['premiere_revision']["$table:0"])) {
+                       unset($GLOBALS['premiere_revision']["$table:0"]);
+                       $GLOBALS['premiere_revision']["$table:" . $id_objet] = true;
+               }
                if (isset($GLOBALS['premiere_revision']["$table:" . $id_objet])) {
                        $GLOBALS['premiere_revision']["$table:" . $id_objet] = 0;
                } // ex : si le champ jointure_mots est versionnable sur les articles
@@ -285,6 +321,12 @@ function revisions_post_edition_lien($x) {
 
                $table = table_objet_sql($x['args']['objet_source']);
                $id_objet = $x['args']['id_objet_source'];
+               // si c'est une creation de lien qui arrive aussitot apres l'insertion on ne cree pas de revision
+               // (au cas ou pre_edition_lien n'aurait pas ete appele ?)
+               if (isset($GLOBALS['premiere_revision']["$table:0"])) {
+                       unset($GLOBALS['premiere_revision']["$table:0"]);
+                       $GLOBALS['premiere_revision']["$table:" . $id_objet] = true;
+               }
                if (isset($GLOBALS['premiere_revision']["$table:" . $id_objet])) {
                        $GLOBALS['premiere_revision']["$table:" . $id_objet] = 0;
                } // ex : si le champ jointure_articles est versionnable sur les mots