source: spip-zone/_core_/plugins/revisions/inc/revisions_pipeline.php @ 63529

Last change on this file since 63529 was 63529, checked in by marcimat@…, 8 years ago

Le pipeline revisions_liste_objets ne sert plus en SPIP 3, vu que ça utilise la déclaration des objets éditoriaux maintenant. On le supprime.

File size: 10.2 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2011                                                *
7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8 *                                                                         *
9 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11\***************************************************************************/
12
13/**
14 * Pipelines utilisés du plugin révisions
15 *
16 * @package Revisions\Pipelines
17**/
18if (!defined('_ECRIRE_INC_VERSION')) return;
19
20
21/**
22 * Ajoute dans le bloc d'info d'un objet un bouton permettant d'aller voir
23 * l'historique de ses révisions
24 *
25 * @param array $flux   Données du pipeline
26 * @return array $flux  Données du pipeline
27 */
28function revisions_boite_infos($flux){
29        $type = $flux['args']['type'];
30        if ($id = intval($flux['args']['id'])
31          AND $tables = unserialize($GLOBALS['meta']['objets_versions'])
32                AND in_array(table_objet_sql($type),$tables)
33          AND autoriser('voirrevisions',$type,$id)
34          // regarder le numero de revision le plus eleve, et afficher le bouton
35          // si c'est interessant (id_version>1)
36          AND sql_countsel('spip_versions', 'id_objet='.intval($id).' AND objet = '.sql_quote($type)) > 1
37        ) {
38                include_spip('inc/presentation');
39                $flux['data'] .= icone_horizontale(_T('revisions:info_historique_lien'), generer_url_ecrire('revision',"id_objet=$id&objet=$type"), "revision-24.png");
40        }
41
42        return $flux;
43}
44
45/**
46 * Afficher les dernières révisions en bas de la page d'accueil de ecrire/
47 *
48 * @param array $flux   Données du pipeline
49 * @return array $flux  Données du pipeline
50 */
51function revisions_affiche_milieu($flux) {
52        if ($flux['args']['exec'] == 'accueil') {
53                $contexte = array();
54                if ($GLOBALS['visiteur_session']['statut']!=='0minirezo')
55                        $contexte['id_auteur'] = $GLOBALS['visiteur_session']['id_auteur'];
56                $flux['data'] .= recuperer_fond('prive/objets/liste/versions',$contexte,array('ajax'=>true));
57        }
58        if ($flux['args']['exec'] == 'suivi_edito') {
59                $contexte = array();
60                if ($GLOBALS['visiteur_session']['statut']!=='0minirezo')
61                        $contexte['id_auteur'] = $GLOBALS['visiteur_session']['id_auteur'];
62                $flux['data'] .= recuperer_fond('prive/objets/liste/versions',$contexte,array('ajax'=>true));
63        }
64        return $flux;
65}
66
67/**
68 * Définir les metas de configuration liées aux révisions
69 *
70 * Utilisé par inc/config
71 *
72 * @param array $metas  Liste des métas et leurs valeurs par défaut
73 * @return array        Liste des métas et leurs valeurs par défaut
74 */
75function revisions_configurer_liste_metas($metas){
76        // Dorénavant dans les metas on utilisera un array serialisé de types d'objets
77        // qui correspondront aux objets versionnés
78        $metas['objets_versions'] =  '';
79
80        return $metas;
81}
82
83
84/**
85 * Charge les données d'une révision donnée dans le formulaire d'édition d'un objet
86 *
87 * @param array $flux   Données du pipeline
88 * @return array $flux  Données du pipeline
89 */
90function revisions_formulaire_charger($flux){
91        if (strncmp($flux['args']['form'],'editer_',7)==0
92          AND $id_version = _request('id_version')
93          AND $objet = substr($flux['args']['form'],7)
94          AND $id_table_objet = id_table_objet($objet)
95          AND isset($flux['data'][$id_table_objet])
96                AND $id = intval($flux['data'][$id_table_objet])
97          AND !$flux['args']['je_suis_poste']){
98                // ajouter un message convival pour indiquer qu'on a restaure la version
99                $flux['data']['message_ok'] = _T('revisions:icone_restaurer_version',array('version'=>$id_version));
100                $flux['data']['message_ok'] .= "<br />"._T('revisions:message_valider_recuperer_version');
101                // recuperer la version
102                include_spip('inc/revisions');
103                $champs = recuperer_version($id,$objet, $id_version);
104                foreach($champs as $champ=>$valeur){
105                        if (!strncmp($champ,'jointure_',9)==0){
106                                if ($champ=='id_rubrique'){
107                                        $flux['data']['id_parent'] = $valeur;
108                                }
109                                else
110                                        $flux['data'][$champ] = $valeur;
111                        }
112                }
113        }
114        return $flux;
115}
116
117
118
119/**
120 * Sur une insertion en base, lever un flag pour ne pas creer une premiere révision vide
121 * dans pre_edition mais attendre la post_edition pour cela
122 *
123 * @param array $x   Données du pipeline
124 * @return array $x  Données du pipeline
125 */
126function revisions_post_insertion($x){
127        $table = $x['args']['table'];
128        include_spip('inc/revisions');
129        if  ($champs = liste_champs_versionnes($table)) {
130                $GLOBALS['premiere_revision']["$table:".$x['args']['id_objet']] = true;
131        }
132        return $x;
133}
134
135/**
136 * Avant toute modification en base
137 * vérifier qu'une version initiale existe bien pour cet objet
138 * et la creer sinon avec l'etat actuel de l'objet
139 *
140 * @param array $x   Données du pipeline
141 * @return array $x  Données du pipeline
142 */
143function revisions_pre_edition($x) {
144        // ne rien faire quand on passe ici en controle md5
145        if (!isset($x['args']['action'])
146          OR $x['args']['action']!=='controler'){
147                $table = $x['args']['table'];
148                include_spip('inc/revisions');
149                // si flag leve passer son chemin, post_edition le fera (mais baisser le flag en le gardant en memoire tout de meme)
150                if (isset($GLOBALS['premiere_revision']["$table:".$x['args']['id_objet']])){
151                        $GLOBALS['premiere_revision']["$table:".$x['args']['id_objet']] = 0;
152                }
153                // sinon creer une premiere revision qui date et dont on ne connait pas l'auteur
154                elseif  ($versionnes = liste_champs_versionnes($table)) {
155                        $objet = isset($x['args']['type']) ? $x['args']['type'] : objet_type($table);
156                        verifier_premiere_revision($table, $objet, $x['args']['id_objet'], $versionnes, -1);
157                }
158        }
159        return $x;
160}
161
162/**
163 * Avant modification en base d'un lien,
164 * enregistrer une première révision de l'objet si nécessaire
165 *
166 * @param array $x   Données du pipeline
167 * @return array $x  Données du pipeline
168 */
169function revisions_pre_edition_lien($x) {
170        if (intval($x['args']['id_objet_source'])>0
171            AND intval($x['args']['id_objet'])>0) {
172                $table = table_objet_sql($x['args']['objet']);
173                $id_objet = $x['data'];
174                include_spip('inc/revisions');
175                if (isset($GLOBALS['premiere_revision']["$table:".$id_objet])){
176                        $GLOBALS['premiere_revision']["$table:".$id_objet] = 0;
177                }
178                // ex : si le champ jointure_mots est versionnable sur les articles
179                elseif ($versionnes = liste_champs_versionnes($table)
180                        AND in_array($j='jointure_'.table_objet($x['args']['objet_source']),$versionnes)){
181                        verifier_premiere_revision($table,$x['args']['objet'],$id_objet,$versionnes,-1);
182                }
183
184                $table = table_objet_sql($x['args']['objet_source']);
185                $id_objet = $x['args']['id_objet_source'];
186                if (isset($GLOBALS['premiere_revision']["$table:".$id_objet])){
187                        $GLOBALS['premiere_revision']["$table:".$id_objet] = 0;
188                }
189                // ex : si le champ jointure_articles est versionnable sur les mots
190                elseif ($versionnes = liste_champs_versionnes($table)
191                        AND in_array($j='jointure_'.table_objet($x['args']['objet']),$versionnes)){
192                        verifier_premiere_revision($table,$x['args']['objet_source'],$id_objet,$versionnes,-1);
193                }
194        }
195
196        return $x;
197}
198
199/**
200 * Après modification en base, versionner l'objet
201 *
202 * @param array $x   Données du pipeline
203 * @return array $x  Données du pipeline
204 */
205function revisions_post_edition($x) {
206        include_spip('inc/revisions');
207        if ($versionnes = liste_champs_versionnes($x['args']['table'])){
208                // Regarder si au moins une des modifs est versionnable
209                $champs = array();
210                $table = $x['args']['table'];
211                $objet = isset($x['args']['type']) ? $x['args']['type'] : objet_type($table);
212                if (isset($GLOBALS['premiere_revision']["$table:".$x['args']['id_objet']])){
213                        unset($GLOBALS['premiere_revision']["$table:".$x['args']['id_objet']]);
214                        // verifier la premiere version : sur une version initiale on attend ici pour la creer
215                        // plutot que de creer une version vide+un diff
216                        verifier_premiere_revision($table, $objet, $x['args']['id_objet'], $versionnes, $GLOBALS['visiteur_session']['id_auteur']);
217                }
218                else {
219                        // on versionne les differences
220                        foreach ($versionnes as $key)
221                                if (isset($x['data'][$key]))
222                                        $champs[$key] = $x['data'][$key];
223
224                        if (count($champs))
225                                ajouter_version($x['args']['id_objet'],$objet, $champs, '', $GLOBALS['visiteur_session']['id_auteur']);
226                }
227        }
228
229        return $x;
230}
231
232
233/**
234 * Après modification en base d'un lien, versionner l'objet si nécessaire
235 *
236 * @param array $x   Données du pipeline
237 * @return array $x  Données du pipeline
238 */
239function revisions_post_edition_lien($x) {
240        /*pipeline('post_edition_lien',
241                array(
242                        'args' => array(
243                                'table_lien' => $table_lien,
244                                'objet_source' => $objet_source,
245                                'id_objet_source' => $l[$primary],
246                                'objet' => $l['objet'],
247                                'id_objet' => $id_o,
248                                'action'=>'delete',
249                        ),
250                        'data' => $id_o
251                )
252        */
253        if (intval($x['args']['id_objet_source'])>0
254            AND intval($x['args']['id_objet'])>0) {
255
256                $table = table_objet_sql($x['args']['objet']);
257                $id_objet = $x['data'];
258                include_spip('inc/revisions');
259                if (isset($GLOBALS['premiere_revision']["$table:".$id_objet])){
260                        $GLOBALS['premiere_revision']["$table:".$id_objet] = 0;
261                }
262                // ex : si le champ jointure_mots est versionnable sur les articles
263                elseif ($versionnes = liste_champs_versionnes($table)
264                        AND in_array($j='jointure_'.table_objet($x['args']['objet_source']),$versionnes)){
265                        $champs = array($j=>recuperer_valeur_champ_jointure($x['args']['objet'],$id_objet,$x['args']['objet_source']));
266                        ajouter_version($id_objet,$x['args']['objet'], $champs, '', $GLOBALS['visiteur_session']['id_auteur']);
267                }
268
269                $table = table_objet_sql($x['args']['objet_source']);
270                $id_objet = $x['args']['id_objet_source'];
271                if (isset($GLOBALS['premiere_revision']["$table:".$id_objet])){
272                        $GLOBALS['premiere_revision']["$table:".$id_objet] = 0;
273                }
274                // ex : si le champ jointure_articles est versionnable sur les mots
275                elseif ($versionnes = liste_champs_versionnes($table)
276                        AND in_array($j='jointure_'.table_objet($x['args']['objet']),$versionnes)){
277                        $champs = array($j=>recuperer_valeur_champ_jointure($x['args']['objet_source'],$id_objet,$x['args']['objet']));
278                        ajouter_version($id_objet,$x['args']['objet_source'], $champs, '', $GLOBALS['visiteur_session']['id_auteur']);
279                }
280        }
281
282        return $x;
283}
284
285
286?>
Note: See TracBrowser for help on using the repository browser.