source: spip-zone/_plugins_/fabrique/trunk/fabrique/prefixe_pipelines.php.html @ 101008

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

Petit problème dans l'application 'objet_type' sur les calculs pour ajouter les formulaires de liens. Lorsque le plugin généré n'est pas actif, le type calculé était incorrect.
On corrige cela.

File size: 10.1 KB
Line 
1#PHP
2[(#INCLURE{fond=fabrique/entetes/php,env,
3        description=Utilisations de pipelines par #ENV{paquet/nom},
4        package=Pipelines})]
5
6<BOUCLE_si_exemples(CONDITION){si #EXEMPLES}>
7/*
8 * Un fichier de pipelines permet de regrouper
9 * les fonctions de branchement de votre plugin
10 * sur des pipelines existants.
11 */
12
13</BOUCLE_si_exemples>[
14(#REM)
15
16
17
18        AFFICHE ENFANTS
19
20
21
22]<BOUCLE_si_affiche_enfants(CONDITION){si #OBJETS|fabrique_necessite_pipeline{affiche_enfants}}>
23/**
24 * Ajouter les objets sur les vues des parents directs
25 *
26 * @pipeline affiche_enfants
27 * @param  array $flux Données du pipeline
28 * @return array       Données du pipeline
29**/
30function [(#PREFIXE)]_affiche_enfants($flux) {
31        if ($e = trouver_objet_exec($flux['args']['exec']) and $e['edition'] == false) {
32                $id_objet = $flux['args']['id_objet'];
33<B_objets_affiche_enfants_rubrique>
34                if ($e['type'] == 'rubrique') {
35<BOUCLE_objets_affiche_enfants_rubrique(DATA){source tableau,(#OBJETS|objets_option_presente{vue_rubrique})}>
36                        $flux['data'] .= recuperer_fond(
37                                'prive/objets/liste/#OBJET',
38                                array(
39                                        'titre' => _T('#TYPE:titre_[(#OBJET)]_rubrique'),
40                                        'id_rubrique' => $id_objet
41                                )
42                        );
43
44                        if (autoriser('creer[(#TYPE|fabrique_type_autorisation)]dans', 'rubrique', $id_objet)) {
45                                include_spip('inc/presentation');
46                                $flux['data'] .= icone_verticale(
47                                        _T('#TYPE:icone_creer_#TYPE'),
48                                        generer_url_ecrire('[(#TYPE)]_edit', "id_rubrique=$id_objet"),
49                                        '#TYPE-24.png',
50                                        'new',
51                                        'right'
52                                ) . "<br class='nettoyeur' />";
53                        }
54</BOUCLE_objets_affiche_enfants_rubrique>
55                }
56</B_objets_affiche_enfants_rubrique>[(#REM)
57]<BOUCLE_objets_affiche_enfants_directs(DATA){source tableau,(#OBJETS|objets_option_presente{liaison_directe})}>
58                if ($e['type'] == '[(#VALEUR{parent/type})]') {
59                        $flux['data'] .= recuperer_fond(
60                                'prive/objets/liste/#OBJET',
61                                array(
62                                        'titre' => _T('#TYPE:titre_[(#OBJET)]'),
63                                        '[(#VALEUR{parent/id_objet})]' => $id_objet
64                                )
65                        );
66
67                        if (autoriser('creer[(#TYPE|fabrique_type_autorisation)]dans', '[(#VALEUR{parent/objet})]', $id_objet)) {
68                                include_spip('inc/presentation');
69                                $flux['data'] .= icone_verticale(
70                                        _T('#TYPE:icone_creer_#TYPE'),
71                                        generer_url_ecrire('[(#TYPE)]_edit', "[(#VALEUR{parent/id_objet})]=$id_objet"),
72                                        '#TYPE-24.png',
73                                        'new',
74                                        'right'
75                                ) . "<br class='nettoyeur' />";
76                        }
77                }
78</BOUCLE_objets_affiche_enfants_directs>[(#REM)
79]       }
80        return $flux;
81}
82</BOUCLE_si_affiche_enfants>[
83(#REM)
84
85
86
87        AFFICHE MILIEU
88
89
90
91]<BOUCLE_si_affiche_milieu(CONDITION){si #OBJETS|fabrique_necessite_pipeline{affiche_milieu}}>
92
93/**
94 * Ajout de contenu sur certaines pages,
95 * notamment des formulaires de liaisons entre objets
96 *
97 * @pipeline affiche_milieu
98 * @param  array $flux Données du pipeline
99 * @return array       Données du pipeline
100 */
101function [(#PREFIXE)]_affiche_milieu($flux) {
102        $texte = '';
103        $e = trouver_objet_exec($flux['args']['exec']);
104<BOUCLE_si_affiche_milieu_auteurs(CONDITION){si (#OBJETS|objets_option_presente{auteurs_liens})}>
105        // auteurs sur les [(#OBJETS|objets_option_presente{auteurs_liens, objet}|implode{', '})]
106        if (!$e['edition'] and in_array($e['type'], array('[(#OBJETS|objets_option_presente{auteurs_liens, type}|implode{"', '"})]'))) {
107                $texte .= recuperer_fond('prive/objets/editer/liens', array(
108                        'table_source' => 'auteurs',
109                        'objet' => $e['type'],
110                        'id_objet' => $flux['args'][$e['id_table_objet']]
111                ));
112        }</BOUCLE_si_affiche_milieu_auteurs>
113
114<BOUCLE_objet_liens_sur_objet(DATA){source tableau,(#OBJETS|objets_options_presentes{#LISTE{table_liens,vue_liens}})}>
115        // #LOBJET sur les [(#VUE_LIENS|fabrique_array_map{table_objet, #OBJETS}|implode{', '})]
116        if (!$e['edition'] and in_array($e['type'], array('[(#VUE_LIENS|fabrique_array_map{objet_type, #OBJETS}|implode{"', '"})]'))) {
117                $texte .= recuperer_fond('prive/objets/editer/liens', array(
118                        'table_source' => '#LOBJET',
119                        'objet' => $e['type'],
120                        'id_objet' => $flux['args'][$e['id_table_objet']]
121                ));
122        }</BOUCLE_objet_liens_sur_objet>
123
124        if ($texte) {
125                if ($p = strpos($flux['data'], '<!--affiche_milieu-->')) {
126                        $flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
127                } else {
128                        $flux['data'] .= $texte;
129                }
130        }
131
132        return $flux;
133}
134</BOUCLE_si_affiche_milieu>[
135(#REM)
136
137
138
139        AFFICHE AUTEURS INTERVENTIONS
140
141
142
143]<BOUCLE_si_affiche_auteurs_interventions(CONDITION){si (#OBJETS|fabrique_necessite_pipeline{affiche_auteurs_interventions})}>
144
145/**
146 * Ajout de liste sur la vue d'un auteur
147 *
148 * @pipeline affiche_auteurs_interventions
149 * @param  array $flux Données du pipeline
150 * @return array       Données du pipeline
151 */
152function [(#PREFIXE)]_affiche_auteurs_interventions($flux) {
153        if ($id_auteur = intval($flux['args']['id_auteur'])) {<BOUCLE_affiche_auteurs_interventions(DATA){source tableau,(#OBJETS|objets_option_presente{vue_auteurs_liens})}>
154                $flux['data'] .= recuperer_fond('prive/objets/liste/#OBJET', array(
155                        'id_auteur' => $id_auteur,
156                        'titre' => _T('#TYPE:info_[(#OBJET)]_auteur')
157                ), array('ajax' => true));
158        </BOUCLE_affiche_auteurs_interventions>}
159        return $flux;
160}
161</BOUCLE_si_affiche_auteurs_interventions>[
162(#REM)
163
164
165
166        AFFICHER CONTENU OBJET
167
168
169
170]<BOUCLE_si_afficher_contenu_objet(CONDITION){si #OBJETS|fabrique_necessite_pipeline{afficher_contenu_objet}}>
171
172/**
173 * Ajout de formulaires de liens
174 *
175 * @pipeline affiche_contenu_objet
176 * @param  array $flux Données du pipeline
177 * @return array       Données du pipeline
178 */
179function [(#PREFIXE)]_afficher_contenu_objet($flux) {
180
181        $type = $flux['args']['type'];
182        $id   = $flux['args']['id_objet'];
183
184        return $flux;
185}
186</BOUCLE_si_afficher_contenu_objet>[
187(#REM)
188
189
190
191        BOITE INFOS
192
193
194
195]
196<BOUCLE_si_boite_infos(CONDITION){si #OBJETS|fabrique_necessite_pipeline{boite_infos}}>[(#REM)
197]/**
198 * Afficher le nombre d'éléments dans les parents
199 *
200 * @pipeline boite_infos
201 * @param  array $flux Données du pipeline
202 * @return array       Données du pipeline
203**/
204function [(#PREFIXE)]_boite_infos($flux) {[(#REM)
205]<B_boite_infos>
206        if (isset($flux['args']['type']) and isset($flux['args']['id']) and $id = intval($flux['args']['id'])) {
207                $texte = '';
208<BOUCLE_boite_infos(DATA){source tableau,(#OBJETS|objets_options_presentes{parent})}>[(#REM)
209]               if ($flux['args']['type'] == '#VALEUR{parent/type}' and $nb = sql_countsel('#VALEUR{table}', array(["(#STATUT|?{statut='publie'})", ]'#VALEUR{parent/id_objet}=' . $id))) {
210                        $texte .= '<div>' . singulier_ou_pluriel($nb, '#TYPE:info_1_#TYPE', '#TYPE:info_nb_#LOBJET') . "</div>\n";
211                }
212</BOUCLE_boite_infos>[(#REM)
213]               if ($texte and $p = strpos($flux['data'], '<!--nb_elements-->')) {
214                        $flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
215                }
216        }
217        return $flux;
218}
219</B_boite_infos>
220</BOUCLE_si_boite_infos>[
221(#REM)
222
223
224
225        OBJET COMPTE ENFANT
226
227
228
229]
230<BOUCLE_objet_compte_enfants(CONDITION){si #OBJETS|fabrique_necessite_pipeline{objet_compte_enfants}}>[(#REM)
231]/**
232 * Compter les enfants d'un objet
233 *
234 * @pipeline objets_compte_enfants
235 * @param  array $flux Données du pipeline
236 * @return array       Données du pipeline
237**/
238function [(#PREFIXE)]_objet_compte_enfants($flux) {
239<BOUCLE_compte_enfants(DATA){source tableau,(#OBJETS|objets_options_presentes{#LISTE{statut_rubrique,id_rubrique}}|array_merge{#OBJETS|objets_option_presente{liaison_directe}})}>[(#REM)
240
241]       if ($flux['args']['objet'] == '#VALEUR{parent/type}' and $[(#VALEUR{parent/id_objet})] = intval($flux['args']['id_objet'])) {
242[               // juste les publiés ?
243                if (array_key_exists('statut', $flux\['args'\]) and ($flux\['args'\]\['statut'\] == 'publie')) {
244                        $flux\['data'\]\['#OBJET'\] = sql_countsel('#TABLE', '#VALEUR{parent/id_objet} = ' . intval($#VALEUR{parent/id_objet}) . " AND (statut = 'publie')");
245                } else {
246                        $flux\['data'\]\['#OBJET'\] = sql_countsel('#TABLE', '#VALEUR{parent/id_objet} = ' . intval($#VALEUR{parent/id_objet}) . " AND (statut <> 'poubelle')");
247                }(#STATUT|oui)][(#REM)
248
249][              $flux\['data'\]\['#OBJET'\] = sql_countsel('#TABLE', '#VALEUR{parent/id_objet} = ' . intval($#VALEUR{parent/id_objet}));(#STATUT|non)]
250        }
251</BOUCLE_compte_enfants>
252        return $flux;
253}
254</BOUCLE_objet_compte_enfants>[
255(#REM)
256
257
258
259        OPTIMISER BASE DISPARUS
260
261
262
263]<BOUCLE_si_optimiser_base_disparus(CONDITION){si #OBJETS|fabrique_necessite_pipeline{optimiser_base_disparus}}>
264
265/**
266 * Optimiser la base de données
267 *<BOUCLE_desc_objets_optimiser_liens(DATA){source tableau,(#OBJETS|objets_options_presentes{table_liens})}{0,1}>
268 * Supprime les liens orphelins de l'objet vers quelqu'un et de quelqu'un vers l'objet.[(#REM)
269]</BOUCLE_desc_objets_optimiser_liens>[(#REM)
270]<BOUCLE_desc_objets_poubelle(DATA){source tableau,(#OBJETS|objets_champ_present{statut})}{0,1}>
271 * Supprime les objets à la poubelle.[(#REM)
272]</BOUCLE_desc_objets_poubelle>
273 *
274 * @pipeline optimiser_base_disparus
275 * @param  array $flux Données du pipeline
276 * @return array       Données du pipeline
277 */
278function [(#PREFIXE)]_optimiser_base_disparus($flux) {
279<B_objets_optimiser_liens>
280        include_spip('action/editer_liens');
281        $flux['data'] += objet_optimiser_liens(array(<BOUCLE_objets_optimiser_liens(DATA){source tableau,(#OBJETS|objets_options_presentes{table_liens})}{', '}>'#TYPE'=>'*'</BOUCLE_objets_optimiser_liens>), '*');
282</B_objets_optimiser_liens>[(#REM)
283]<B_objets_optimiser_poubelle>[(#REM)
284]<BOUCLE_objets_optimiser_poubelle(DATA){source tableau,(#OBJETS|objets_champ_present{statut})}>
285        sql_delete('#TABLE', "statut='poubelle' AND maj < " . $flux['args']['date']);
286</BOUCLE_objets_optimiser_poubelle>
287        return $flux;
288}</BOUCLE_si_optimiser_base_disparus>[
289(#REM)
290
291
292
293        TRIG PROPAGER LES SECTEURS
294
295
296
297]
298<B_trig_propager_les_secteurs>
299/**
300 * Synchroniser la valeur de id secteur
301 *
302 * @pipeline trig_propager_les_secteurs
303 * @param  string $flux Données du pipeline
304 * @return string       Données du pipeline
305**/
306function [(#PREFIXE)]_trig_propager_les_secteurs($flux) {
307<BOUCLE_trig_propager_les_secteurs(DATA){source tableau,(#OBJETS|objets_options_presentes{#LISTE{id_rubrique,id_secteur}})}>
308        // synchroniser #TABLE
309        $r = sql_select(
310                'A.#ID_OBJET AS id, R.id_secteur AS secteur',
311                '#TABLE AS A, spip_rubriques AS R',
312                'A.id_rubrique = R.id_rubrique AND A.id_secteur <> R.id_secteur'
313        );
314        while ($row = sql_fetch($r)) {
315                sql_update('#TABLE', array('id_secteur' => $row['secteur']), '#ID_OBJET=' . $row['id']);
316        }
317</BOUCLE_trig_propager_les_secteurs>
318        return $flux;
319}
320</B_trig_propager_les_secteurs>
321
Note: See TracBrowser for help on using the repository browser.