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

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

Groupes de mots arborescents ne fonctionnait plus en 3.1 à cause des renommage des formulaires (li en div).

Cepandant, querypath (ou plutot la lib libxml de PHP) est en erreur sur la plupart des versions récentes de PHP
à cause de ce bug (signalé il y a 1 an et corrigé… hier sur la lib en question) https://bugzilla.gnome.org/show_bug.cgi?id=737840

Il n'y a pas de correction possible il semblerait (autrement que de supprimer tous les ID de la page !!) (cf https://github.com/technosophos/querypath/issues/168)
Bref, grosse galère pour plein de monde qui utilise domxml (et pas seulement pour querypath).

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                $html = $flux['data'];
104                $env = $flux['args']['contexte'];
105
106                // charger QueryPath
107                include_spip('inc/querypath');
108                $qp = spip_query_path($html, 'body');
109
110                // la parenté sur tous
111                // on récupère le sélecteur et on l'ajoute après le titre...
112                $selecteur_parent = recuperer_fond('formulaires/selecteur_groupe_parent', $env);
113                $qp->top('body')->find('.editer_titre')->after($selecteur_parent);
114
115                // les paramètres techniques sont uniquement sur les groupes racine
116                if ($env['id_parent']) {
117                        $qp->top('body')->find('.fieldset_config')->remove();
118                }
119
120                // retourner le HTML modifie
121                $flux['data'] = $qp->top('body>div')->xhtml();
122        }
123        return $flux;
124}
125
126
127/**
128 * Insère des modifications lors de la création de groupes et de mots
129 *
130 * Lors de la création d'un groupe de mot :
131 * - Ajoute l'id_groupe_racine et l'id_parent
132 *
133 * Lors de la création d'un mot
134 * - Définit l'id_groupe_racine
135 *
136 * @param array $flux
137 *              Données du pipeline
138 * @return array
139 *              Données du pipeline complétées
140**/
141function gma_pre_insertion($flux) {
142        // lors de la création d'un groupe
143        if ($flux['args']['table'] == 'spip_groupes_mots')
144        {
145                if ($id_parent = _request('id_parent')) {
146                        $id_racine = sql_getfetsel('id_groupe_racine', 'spip_groupes_mots', 'id_groupe=' . sql_quote($id_parent));
147                        // si et seulement si le parent demandé existe
148                        if ($id_racine) {
149                                $flux['data']['id_parent'] = $id_parent;
150                                $flux['data']['id_groupe_racine'] = $id_racine;
151                        }
152                }
153        }
154
155        // lors de la création d'un mot
156        if ($flux['args']['table'] == 'spip_mots')
157        {
158                // on récupère la racine et on l'ajoute
159                $id_groupe = $flux['data']['id_groupe'];
160                $id_racine = sql_getfetsel('id_groupe_racine', 'spip_groupes_mots', 'id_groupe=' . sql_quote($id_groupe));
161                $flux['data']['id_groupe_racine'] = $id_racine;
162        }
163        return $flux;
164}
165
166
167
168/**
169 * Insère des modifications lors de la création de groupes et de mots
170 *
171 * Lors de la création d'un groupe de mot :
172 * - Ajoute l'id_groupe_racine si le groupe est à la racine
173 *
174 * @param array $flux
175 *              Données du pipeline
176 * @return array
177 *              Données du pipeline complétées
178**/
179function gma_post_insertion($flux) {
180        // lors de la création d'un groupe
181        if ($flux['args']['table'] == 'spip_groupes_mots')
182        {
183                $id_groupe = $flux['args']['id_objet'];
184                // si le groupe est à la racine,
185                // c'est a dire que 'id_groupe_racine' n'est pas défini ou nul
186                // c'est que nous avons créé un groupe racine. Il faut mettre
187                // id_groupe_racine sur id_groupe, maintenant qu'on le connait.
188                if (!isset($flux['data']['id_groupe_racine']) OR !$flux['data']['id_groupe_racine']) {
189                        sql_updateq(
190                                'spip_groupes_mots',
191                                array('id_groupe_racine' => $id_groupe),
192                                'id_groupe=' . sql_quote($id_groupe));
193                }
194        }
195        return $flux;
196}
197
198
199/**
200 * Insère des modifications lors de l'édition des groupes ou des mots
201 *
202 * Lors de l'édition d'un groupe de mot :
203 * - Modifie l'id_parent choisi et définit l'id_groupe_racine
204 *
205 * Lors de l'édition d'un mot
206 * - Définit l'id_groupe_racine
207 *
208 * @param array $flux
209 *              Données du pipeline
210 * @return array
211 *              Données du pipeline complétées
212**/
213function gma_pre_edition($flux) {
214        // lors de l'édition d'un groupe
215        $table = 'spip_groupes_mots';
216        if ($flux['args']['table'] == $table
217        and $flux['args']['action'] == 'modifier')
218        {
219                $id_groupe = $flux['args']['id_objet'];
220                $id_parent_ancien  = sql_getfetsel('id_parent', $table, 'id_groupe=' . sql_quote($id_groupe));
221                $id_parent_nouveau = _request('id_parent');
222                // uniquement s'ils sont différents
223                if ($id_parent_ancien != $id_parent_nouveau
224                // que le nouveau parent n'est pas notre groupe !
225                and $id_groupe != $id_parent_nouveau
226                // et que le groupe parent n'est pas un de nos enfants
227                and include_spip('gma_fonctions') // calcul_branche_groupe_in
228                and !in_array($id_parent_nouveau, explode(',', calcul_branche_groupe_in($id_groupe)))
229                ) {
230                        $id_racine = '';
231                        // soit c'est la racine
232                        if (!$id_parent_nouveau) {
233                                // auquel cas l'identifiant racine est le meme que notre groupe, qui migre à la racine
234                                $id_racine = $id_groupe;
235                        // soit le groupe existe
236                        } else {
237                                $id_racine = sql_getfetsel('id_groupe_racine', $table, 'id_groupe=' . sql_quote($id_parent_nouveau));
238                        }
239                        if ($id_racine) {
240                                $flux['data']['id_parent']        = $id_parent_nouveau;
241                                $flux['data']['id_groupe_racine'] = $id_racine;
242                                // pour le pipeline de post_edition. Permet entre autre de savoir
243                                // qu'il faudra actualiser les mots de la branche
244                                set_request('gma_definir_heritages', true);
245                        }
246                }
247        }
248
249        // lors de l'édition d'un mot
250        $table = 'spip_mots';
251        if ($flux['args']['table'] == $table
252        and $flux['args']['action'] == 'instituer')
253        {
254                $id_mot = $flux['args']['id_objet'];
255                // on récupère le nouveau groupe (et l'ancien)
256                $id_groupe_nouveau = $flux['data']['id_groupe'];
257                $id_groupe_ancien  = sql_getfetsel('id_groupe', $table, 'id_mot=' . sql_quote($id_mot));
258                // s'il a changé, on insère la nouvelle racine dans le mot
259                if ($id_groupe_nouveau != $id_groupe_ancien) {
260                        $id_racine = sql_getfetsel('id_groupe_racine', 'spip_groupes_mots', 'id_groupe=' . sql_quote($id_groupe_nouveau));
261                        $flux['data']['id_groupe_racine'] = $id_racine;
262                }
263        }
264        return $flux;
265}
266
267/**
268 * Modifie les données héritées d'un groupe de mot
269 *
270 * Modifie les héritages lorsqu'un parent change ou lorsqu'on modifie
271 * un groupe racine qui a pu changer des paramètres de config
272 *
273 * @param array $flux
274 *              Données du pipeline
275 * @return array
276 *              Données du pipeline complétées
277**/
278function gma_post_edition($flux) {
279        // lors de l'édition d'un groupe
280        $table = 'spip_groupes_mots';
281        if ($flux['args']['table']  == $table
282        and $flux['args']['action'] == 'modifier'
283        // soit le parent a change, soit le groupe racine est modifie
284        and (_request('gma_definir_heritages')
285            OR !isset($flux['data']['id_parent'])
286            OR !$flux['data']['id_parent']))
287        {
288                $id_groupe = $flux['args']['id_objet'];
289                include_spip('gma_fonctions');
290                // ne mettre à jour les mots que lorsque le parent a change
291                $update_mots = (bool) _request('gma_definir_heritages');
292                gma_definir_heritages($id_groupe, null, $update_mots);
293        }
294        return $flux;
295}
Note: See TracBrowser for help on using the repository browser.