source: spip-zone/_plugins_/groupes_mots_arborescents/gma_pipelines.php @ 91784

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

Pas de fermeture de PHP

File size: 8.6 KB
Line 
1<?php
2/**
3 * Plugin Groupes arborescents de mots clés
4 * (c) 2012 Marcillaud Matthieu
5 * Licence GNU/GPL
6 */
7
8if (!defined('_ECRIRE_INC_VERSION')) return;
9
10
11/**
12 * Ajoute la liste des sous groupes et un bouton de création de
13 * sous groupe sur la vue d'un groupe.
14 *
15 * @param array $flux
16 *              Données du pipeline
17 * @return array
18 *              Données du pipeline complétées
19**/
20function gma_afficher_complement_objet($flux) {
21        // sur la vue d'un groupe de mot
22        if ($flux['args']['type'] == 'groupemots') {
23                $id = $flux['args']['id'];
24                // completer la vue avec les informations des sous groupes
25                $flux['data'] .= recuperer_fond(
26                        "prive/squelettes/contenu/inc-groupes_mots", array('id_parent' => $id), "ajax"
27                );
28        }
29        return $flux;
30}
31
32
33/**
34 * Ajoute le parent dans l'environnement d'un nouveau groupe de mot
35 * s'il est connu
36 *
37 * @param array $flux
38 *              Données du pipeline
39 * @return array
40 *              Données du pipeline complétées
41**/
42function gma_formulaire_charger($flux) {
43        // sur le formulaire d'édition de groupe de mot
44        if ($flux['args']['form'] == 'editer_groupe_mot') {
45                // si c'est un nouveau groupe
46                if ($flux['data']['id_groupe'] == 'oui') {
47                        // le parent est dans l'url ?
48                        if ($id_parent = _request('id_parent')) {
49                                $flux['data']['id_parent'] = $id_parent;
50                        }
51                }
52        }
53        return $flux;
54}
55
56
57/**
58 * Verifie que le parent d'un groupe de mot
59 * n'est pas ce groupe lui-même !
60 *
61 * @param array $flux
62 *              Données du pipeline
63 * @return array
64 *              Données du pipeline complétées
65**/
66function gma_formulaire_verifier($flux) {
67        // sur le formulaire d'édition de groupe de mot
68        if ($flux['args']['form'] == 'editer_groupe_mot') {
69                // tester que le parent ne vaut pas le groupe
70                if ($id_parent = _request('id_parent')
71                and $id_groupe = _request('id_groupe'))
72                {
73                        if ($id_parent == $id_groupe) {
74                                $flux['data']['id_parent'] = _T('gma:erreur_parent_sur_groupe');
75                        }
76                        elseif (
77                          include_spip('gma_fonctions') // calcul_branche_groupe_in
78                          and in_array($id_parent, explode(',', calcul_branche_groupe_in($id_groupe))))
79                        {
80                                $flux['data']['id_parent'] = _T('gma:erreur_parent_sur_groupe_enfant');
81                        }
82                }
83        }
84        return $flux;
85}
86
87
88/**
89 * Modifie les champs du formulaire de groupe de mot
90 * pour :
91 * - ajouter le sélecteur de parenté
92 * - n'afficher les options techniques que sur la racine
93 *
94 * @param array $flux
95 *              Données du pipeline
96 * @return array
97 *              Données du pipeline complétées
98**/
99function gma_formulaire_fond($flux) {
100        // sur le formulaire d'édition de groupe de mot
101        if ($flux['args']['form'] == 'editer_groupe_mot') {
102
103
104                $html = $flux['data'];
105                $env = $flux['args']['contexte'];
106               
107                // charger QueryPath
108                include_spip('inc/querypath');
109                $qp = spip_query_path($html, 'body');
110
111                // la parenté sur tous
112                // on récupère le sélecteur et on l'ajoute après le titre...
113                $selecteur_parent = recuperer_fond('formulaires/selecteur_groupe_parent', $env);
114                $qp->top('body')->find('li.editer_titre')->after($selecteur_parent);
115
116                // les paramètres techniques sont uniquement sur les groupes racine
117                if ($env['id_parent']) {
118                        $qp->top('body')->find('li.fieldset_config')->remove();
119                }
120
121                // retourner le HTML modifie
122                $flux['data'] = $qp->top('body>div')->xhtml();
123        }
124        return $flux;
125}
126
127
128/**
129 * Insère des modifications lors de la création de groupes et de mots
130 *
131 * Lors de la création d'un groupe de mot :
132 * - Ajoute l'id_groupe_racine et l'id_parent
133 *
134 * Lors de la création d'un mot
135 * - Définit l'id_groupe_racine
136 *
137 * @param array $flux
138 *              Données du pipeline
139 * @return array
140 *              Données du pipeline complétées
141**/
142function gma_pre_insertion($flux) {
143        // lors de la création d'un groupe
144        if ($flux['args']['table'] == 'spip_groupes_mots')
145        {
146                if ($id_parent = _request('id_parent')) {
147                        $id_racine = sql_getfetsel('id_groupe_racine', 'spip_groupes_mots', 'id_groupe=' . sql_quote($id_parent));
148                        // si et seulement si le parent demandé existe
149                        if ($id_racine) {
150                                $flux['data']['id_parent'] = $id_parent;
151                                $flux['data']['id_groupe_racine'] = $id_racine;
152                        }
153                }
154        }
155
156        // lors de la création d'un mot
157        if ($flux['args']['table'] == 'spip_mots')
158        {
159                // on récupère la racine et on l'ajoute
160                $id_groupe = $flux['data']['id_groupe'];
161                $id_racine = sql_getfetsel('id_groupe_racine', 'spip_groupes_mots', 'id_groupe=' . sql_quote($id_groupe));
162                $flux['data']['id_groupe_racine'] = $id_racine;
163        }
164        return $flux;
165}
166
167
168
169/**
170 * Insère des modifications lors de la création de groupes et de mots
171 *
172 * Lors de la création d'un groupe de mot :
173 * - Ajoute l'id_groupe_racine si le groupe est à la racine
174 *
175 * @param array $flux
176 *              Données du pipeline
177 * @return array
178 *              Données du pipeline complétées
179**/
180function gma_post_insertion($flux) {
181        // lors de la création d'un groupe
182        if ($flux['args']['table'] == 'spip_groupes_mots')
183        {
184                $id_groupe = $flux['args']['id_objet'];
185                // si le groupe est à la racine,
186                // c'est a dire que 'id_groupe_racine' n'est pas défini ou nul
187                // c'est que nous avons créé un groupe racine. Il faut mettre
188                // id_groupe_racine sur id_groupe, maintenant qu'on le connait.
189                if (!isset($flux['data']['id_groupe_racine']) OR !$flux['data']['id_groupe_racine']) {
190                        sql_updateq(
191                                'spip_groupes_mots',
192                                array('id_groupe_racine' => $id_groupe),
193                                'id_groupe=' . sql_quote($id_groupe));
194                }
195        }
196        return $flux;
197}
198
199
200/**
201 * Insère des modifications lors de l'édition des groupes ou des mots
202 *
203 * Lors de l'édition d'un groupe de mot :
204 * - Modifie l'id_parent choisi et définit l'id_groupe_racine
205 *
206 * Lors de l'édition d'un mot
207 * - Définit l'id_groupe_racine
208 *
209 * @param array $flux
210 *              Données du pipeline
211 * @return array
212 *              Données du pipeline complétées
213**/
214function gma_pre_edition($flux) {
215        // lors de l'édition d'un groupe
216        $table = 'spip_groupes_mots';
217        if ($flux['args']['table'] == $table
218        and $flux['args']['action'] == 'modifier')
219        {
220                $id_groupe = $flux['args']['id_objet'];
221                $id_parent_ancien  = sql_getfetsel('id_parent', $table, 'id_groupe=' . sql_quote($id_groupe));
222                $id_parent_nouveau = _request('id_parent');
223                // uniquement s'ils sont différents
224                if ($id_parent_ancien != $id_parent_nouveau
225                // que le nouveau parent n'est pas notre groupe !
226                and $id_groupe != $id_parent_nouveau
227                // et que le groupe parent n'est pas un de nos enfants
228                and include_spip('gma_fonctions') // calcul_branche_groupe_in
229                and !in_array($id_parent_nouveau, explode(',', calcul_branche_groupe_in($id_groupe)))
230                ) {
231                        $id_racine = '';
232                        // soit c'est la racine
233                        if (!$id_parent_nouveau) {
234                                // auquel cas l'identifiant racine est le meme que notre groupe, qui migre à la racine
235                                $id_racine = $id_groupe;
236                        // soit le groupe existe
237                        } else {
238                                $id_racine = sql_getfetsel('id_groupe_racine', $table, 'id_groupe=' . sql_quote($id_parent_nouveau));
239                        }
240                        if ($id_racine) {
241                                $flux['data']['id_parent']        = $id_parent_nouveau;
242                                $flux['data']['id_groupe_racine'] = $id_racine;
243                                // pour le pipeline de post_edition. Permet entre autre de savoir
244                                // qu'il faudra actualiser les mots de la branche
245                                set_request('gma_definir_heritages', true);
246                        }
247                }
248        }
249
250        // lors de l'édition d'un mot
251        $table = 'spip_mots';
252        if ($flux['args']['table'] == $table
253        and $flux['args']['action'] == 'instituer')
254        {
255                $id_mot = $flux['args']['id_objet'];
256                // on récupère le nouveau groupe (et l'ancien)
257                $id_groupe_nouveau = $flux['data']['id_groupe'];
258                $id_groupe_ancien  = sql_getfetsel('id_groupe', $table, 'id_mot=' . sql_quote($id_mot));
259                // s'il a changé, on insère la nouvelle racine dans le mot
260                if ($id_groupe_nouveau != $id_groupe_ancien) {
261                        $id_racine = sql_getfetsel('id_groupe_racine', 'spip_groupes_mots', 'id_groupe=' . sql_quote($id_groupe_nouveau));
262                        $flux['data']['id_groupe_racine'] = $id_racine;
263                }
264        }
265        return $flux;
266}
267
268/**
269 * Modifie les données héritées d'un groupe de mot
270 *
271 * Modifie les héritages lorsqu'un parent change ou lorsqu'on modifie
272 * un groupe racine qui a pu changer des paramètres de config
273 *
274 * @param array $flux
275 *              Données du pipeline
276 * @return array
277 *              Données du pipeline complétées
278**/
279function gma_post_edition($flux) {
280        // lors de l'édition d'un groupe
281        $table = 'spip_groupes_mots';
282        if ($flux['args']['table']  == $table
283        and $flux['args']['action'] == 'modifier'
284        // soit le parent a change, soit le groupe racine est modifie
285        and (_request('gma_definir_heritages')
286            OR !isset($flux['data']['id_parent'])
287            OR !$flux['data']['id_parent']))
288        {
289                $id_groupe = $flux['args']['id_objet'];
290                include_spip('gma_fonctions');
291                // ne mettre à jour les mots que lorsque le parent a change
292                $update_mots = (bool) _request('gma_definir_heritages');
293                gma_definir_heritages($id_groupe, null, $update_mots);
294        }
295        return $flux;
296}
Note: See TracBrowser for help on using the repository browser.