1 | <?php |
---|
2 | /** |
---|
3 | * Plugin Groupes arborescents de mots clés |
---|
4 | * (c) 2012 Marcillaud Matthieu |
---|
5 | * Licence GNU/GPL |
---|
6 | */ |
---|
7 | |
---|
8 | if (!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 | **/ |
---|
20 | function 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 | **/ |
---|
42 | function 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 | **/ |
---|
66 | function 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 | and $id_parent == $id_groupe) { |
---|
73 | $flux['data']['id_parent'] = _T('gma:erreur_parent_sur_groupe'); |
---|
74 | } |
---|
75 | } |
---|
76 | return $flux; |
---|
77 | } |
---|
78 | |
---|
79 | |
---|
80 | /** |
---|
81 | * Modifie les champs du formulaire de groupe de mot |
---|
82 | * pour : |
---|
83 | * - ajouter le sélecteur de parenté |
---|
84 | * - n'afficher les options techniques que sur la racine |
---|
85 | * |
---|
86 | * @param array $flux |
---|
87 | * Données du pipeline |
---|
88 | * @return array |
---|
89 | * Données du pipeline complétées |
---|
90 | **/ |
---|
91 | function gma_formulaire_fond($flux) { |
---|
92 | // sur le formulaire d'édition de groupe de mot |
---|
93 | if ($flux['args']['form'] == 'editer_groupe_mot') { |
---|
94 | |
---|
95 | |
---|
96 | $html = $flux['data']; |
---|
97 | $env = $flux['args']['contexte']; |
---|
98 | |
---|
99 | // charger QueryPath |
---|
100 | include_spip('inc/querypath'); |
---|
101 | $qp = spip_query_path($html, 'body'); |
---|
102 | |
---|
103 | // la parenté sur tous |
---|
104 | // on recupere le selecteur et on l'ajoute après le titre... |
---|
105 | $selecteur_parent = recuperer_fond('formulaires/selecteur_groupe_parent', $env); |
---|
106 | $qp->top('body')->find('li.editer_titre')->after($selecteur_parent); |
---|
107 | |
---|
108 | // les paramètres techniques sont uniquement sur les groupes racine |
---|
109 | if ($env['id_parent']) { |
---|
110 | $qp->top('body')->find('li.fieldset_config')->remove(); |
---|
111 | } |
---|
112 | |
---|
113 | // retourner le HTML modifie |
---|
114 | $flux['data'] = $qp->top('body>div')->xhtml(); |
---|
115 | } |
---|
116 | return $flux; |
---|
117 | } |
---|
118 | |
---|
119 | |
---|
120 | /** |
---|
121 | * Insère des modifications lors de la création de groupes et de mots |
---|
122 | * |
---|
123 | * Lors de la création d'un groupe de mot : |
---|
124 | * - Ajoute l'id_groupe_racine et l'id_parent |
---|
125 | * |
---|
126 | * Lors de la création d'un mot |
---|
127 | * - Définit l'id_groupe_racine |
---|
128 | * |
---|
129 | * @param array $flux |
---|
130 | * Données du pipeline |
---|
131 | * @return array |
---|
132 | * Données du pipeline complétées |
---|
133 | **/ |
---|
134 | function gma_pre_insertion($flux) { |
---|
135 | // lors de la création d'un groupe |
---|
136 | if ($flux['args']['table'] == 'spip_groupes_mots') |
---|
137 | { |
---|
138 | if ($id_parent = _request('id_parent')) { |
---|
139 | $id_racine = sql_getfetsel('id_groupe_racine', 'spip_groupes_mots', 'id_groupe=' . sql_quote($id_parent)); |
---|
140 | // si et seulement si le parent demandé existe |
---|
141 | if ($id_racine) { |
---|
142 | $flux['data']['id_parent'] = $id_parent; |
---|
143 | $flux['data']['id_groupe_racine'] = $id_racine; |
---|
144 | } |
---|
145 | } |
---|
146 | } |
---|
147 | |
---|
148 | // lors de la création d'un mot |
---|
149 | if ($flux['args']['table'] == 'spip_mots') |
---|
150 | { |
---|
151 | // on récupère la racine et on l'ajoute |
---|
152 | $id_groupe = $flux['data']['id_groupe']; |
---|
153 | $id_racine = sql_getfetsel('id_groupe_racine', 'spip_groupes_mots', 'id_groupe=' . sql_quote($id_groupe)); |
---|
154 | $flux['data']['id_groupe_racine'] = $id_racine; |
---|
155 | } |
---|
156 | return $flux; |
---|
157 | } |
---|
158 | |
---|
159 | /** |
---|
160 | * Insère des modifications lors de l'édition des groupes ou des mots |
---|
161 | * |
---|
162 | * Lors de l'édition d'un groupe de mot : |
---|
163 | * - Modifie l'id_parent choisi et définit l'id_groupe_racine |
---|
164 | * |
---|
165 | * Lors de l'édition d'un mot |
---|
166 | * - Définit l'id_groupe_racine |
---|
167 | * |
---|
168 | * @param array $flux |
---|
169 | * Données du pipeline |
---|
170 | * @return array |
---|
171 | * Données du pipeline complétées |
---|
172 | **/ |
---|
173 | function gma_pre_edition($flux) { |
---|
174 | // lors de l'édition d'un groupe |
---|
175 | $table = 'spip_groupes_mots'; |
---|
176 | if ($flux['args']['table'] == $table |
---|
177 | and $flux['args']['action'] == 'modifier') |
---|
178 | { |
---|
179 | $id_groupe = $flux['args']['id_objet']; |
---|
180 | $id_parent_ancien = sql_getfetsel('id_parent', $table, 'id_groupe=' . sql_quote($id_groupe)); |
---|
181 | $id_parent_nouveau = _request('id_parent'); |
---|
182 | // uniquement s'ils sont différents |
---|
183 | if ($id_parent_ancien != $id_parent_nouveau |
---|
184 | // que le nouveau parent n'est pas notre groupe ! |
---|
185 | and $id_groupe != $id_parent_nouveau |
---|
186 | ) { |
---|
187 | $id_racine = ''; |
---|
188 | // soit c'est la racine |
---|
189 | if (!$id_parent_nouveau) { |
---|
190 | // auquel cas l'identifiant racine est le meme que notre groupe, qui migre à la racine |
---|
191 | $id_racine = $id_groupe; |
---|
192 | // soit le groupe existe |
---|
193 | } else { |
---|
194 | $id_racine = sql_getfetsel('id_groupe_racine', $table, 'id_groupe=' . sql_quote($id_parent_nouveau)); |
---|
195 | } |
---|
196 | if ($id_racine) { |
---|
197 | $flux['data']['id_parent'] = $id_parent_nouveau; |
---|
198 | $flux['data']['id_groupe_racine'] = $id_racine; |
---|
199 | // pour le pipeline de post_edition. Permet entre autre de savoir |
---|
200 | // qu'il faudra actualiser les mots de la branche |
---|
201 | set_request('gma_definir_heritages', true); |
---|
202 | } |
---|
203 | } |
---|
204 | } |
---|
205 | |
---|
206 | // lors de l'édition d'un mot |
---|
207 | $table = 'spip_mots'; |
---|
208 | if ($flux['args']['table'] == $table |
---|
209 | and $flux['args']['action'] == 'instituer') |
---|
210 | { |
---|
211 | $id_mot = $flux['args']['id_objet']; |
---|
212 | // on récupère le nouveau groupe (et l'ancien) |
---|
213 | $id_groupe_nouveau = $flux['data']['id_groupe']; |
---|
214 | $id_groupe_ancien = sql_getfetsel('id_groupe', $table, 'id_mot=' . sql_quote($id_mot)); |
---|
215 | // s'il a changé, on insère la nouvelle racine dans le mot |
---|
216 | if ($id_groupe_nouveau != $id_groupe_ancien) { |
---|
217 | $id_racine = sql_getfetsel('id_groupe_racine', 'spip_groupes_mots', 'id_groupe=' . sql_quote($id_groupe_nouveau)); |
---|
218 | $flux['data']['id_groupe_racine'] = $id_racine; |
---|
219 | } |
---|
220 | } |
---|
221 | return $flux; |
---|
222 | } |
---|
223 | |
---|
224 | /** |
---|
225 | * Modifie les données héritées d'un groupe de mot |
---|
226 | * |
---|
227 | * Modifie les héritages lorsqu'un parent change ou lorsqu'on modifie |
---|
228 | * un groupe racine qui a pu changer des paramètres de config |
---|
229 | * |
---|
230 | * @param array $flux |
---|
231 | * Données du pipeline |
---|
232 | * @return array |
---|
233 | * Données du pipeline complétées |
---|
234 | **/ |
---|
235 | function gma_post_edition($flux) { |
---|
236 | // lors de l'édition d'un groupe |
---|
237 | $table = 'spip_groupes_mots'; |
---|
238 | if ($flux['args']['table'] == $table |
---|
239 | and $flux['args']['action'] == 'modifier' |
---|
240 | // soit le parent a change, soit le groupe racine est modifie |
---|
241 | and (_request('gma_definir_heritages') |
---|
242 | OR !isset($flux['data']['id_parent']) |
---|
243 | OR !$flux['data']['id_parent'])) |
---|
244 | { |
---|
245 | $id_groupe = $flux['args']['id_objet']; |
---|
246 | include_spip('gma_fonctions'); |
---|
247 | // ne mettre à jour les mots que lorsque le parent a change |
---|
248 | $update_mots = (bool) _request('gma_definir_heritages'); |
---|
249 | gma_definir_heritages($id_groupe, null, $update_mots); |
---|
250 | } |
---|
251 | return $flux; |
---|
252 | } |
---|
253 | |
---|
254 | ?> |
---|