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

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

Ne pas tenter d'afficher sur l'accueil et le suivi des révisions si aucun objet révisable n'est coché dans la configuration des révisions.

Si rien n'est coché, mais qu'il existe en base des versions, on voyait le tableau des dernières révisions (son entête) et la pagination des révisions, mais pas les lignes du tableau, car pas l'autorisation de les voir, qui nécessite que l'objet révisé soit activé dans la configuration.

File size: 10.1 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 sur l'accueil et le suivi
47 *
48 * Liste les révisions en bas de la page d'accueil de ecrire/
49 * et sur la page de suivi de l'activité du site
50 *
51 * @param array $flux   Données du pipeline
52 * @return array $flux  Données du pipeline
53 */
54function revisions_affiche_milieu($flux) {
55        // la bonne page et des objets révisables cochées !
56        if (in_array($flux['args']['exec'], array('accueil', 'suivi_edito'))
57          and unserialize($GLOBALS['meta']['objets_versions'])) {
58                $contexte = array();
59                if ($GLOBALS['visiteur_session']['statut']!=='0minirezo') {
60                        $contexte['id_auteur'] = $GLOBALS['visiteur_session']['id_auteur'];
61                }
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.