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

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

Une table qui a des champs id_rubrique et id_secteur doit les garder synchronisés
en utilisant le trigger propager les secteurs. C'est ce qu'on ajoute ici.

File size: 7.2 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 de rubriques
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'])
32                AND $e['type'] == 'rubrique'
33                AND $e['edition'] == false) {
34
35                $id_rubrique = $flux['args']['id_rubrique'];
36                $lister_objets = charger_fonction('lister_objets', 'inc');
37<BOUCLE_objets_affiche_enfants(DATA){source tableau,(#OBJETS|objets_option_presente{vue_rubrique})}>
38                $bouton = '';
39                if (autoriser('creer#TYPEdans', 'rubrique', $id_rubrique)) {
40                        $bouton .= icone_verticale(_T("#TYPE:icone_creer_#TYPE"), generer_url_ecrire("[(#TYPE)]_edit", "id_rubrique=$id_rubrique"), "#TYPE-24.png", "new", "right")
41                                        . "<br class='nettoyeur' />";
42                }
43
44                $flux['data'] .= $lister_objets('#OBJET', array('titre'=>_T('#TYPE:titre_[(#OBJET)]_rubrique') , 'id_rubrique'=>$id_rubrique[, 'par'=>'(#CHAMP_TITRE)']));
45                $flux['data'] .= $bouton;
46</BOUCLE_objets_affiche_enfants>
47        }
48        return $flux;
49}
50</BOUCLE_si_affiche_enfants>[
51(#REM)
52
53
54
55        AFFICHE MILIEU
56
57
58
59]<BOUCLE_si_affiche_milieu(CONDITION){si #OBJETS|fabrique_necessite_pipeline{affiche_milieu}}>
60
61/**
62 * Ajout de contenu sur certaines pages,
63 * notamment des formulaires de liaisons entre objets
64 *
65 * @pipeline affiche_milieu
66 * @param  array $flux Données du pipeline
67 * @return array       Données du pipeline
68 */
69function [(#PREFIXE)]_affiche_milieu($flux) {
70        $texte = "";
71        $e = trouver_objet_exec($flux['args']['exec']);
72<BOUCLE_si_affiche_milieu_auteurs(CONDITION){si (#OBJETS|objets_option_presente{auteurs_liens})}>
73        // auteurs sur les [(#OBJETS|objets_option_presente{auteurs_liens, objet}|implode{', '})]
74        if (!$e['edition'] AND in_array($e['type'], array('[(#OBJETS|objets_option_presente{auteurs_liens, type}|implode{"', '"})]'))) {
75                $texte .= recuperer_fond('prive/objets/editer/liens', array(
76                        'table_source' => 'auteurs',
77                        'objet' => $e['type'],
78                        'id_objet' => $flux['args'][$e['id_table_objet']]
79                ));
80        }</BOUCLE_si_affiche_milieu_auteurs>
81
82<BOUCLE_objet_liens_sur_objet(DATA){source tableau,(#OBJETS|objets_options_presentes{#LISTE{table_liens,vue_liens}})}>
83        // #LOBJET sur les [(#VAL{table_objet}|array_map{#VUE_LIENS}|implode{', '})]
84        if (!$e['edition'] AND in_array($e['type'], array('[(#VAL{objet_type}|array_map{#VUE_LIENS}|implode{"', '"})]'))) {
85                $texte .= recuperer_fond('prive/objets/editer/liens', array(
86                        'table_source' => '#LOBJET',
87                        'objet' => $e['type'],
88                        'id_objet' => $flux['args'][$e['id_table_objet']]
89                ));
90        }</BOUCLE_objet_liens_sur_objet>
91
92        if ($texte) {
93                if ($p=strpos($flux['data'],"<!--affiche_milieu-->"))
94                        $flux['data'] = substr_replace($flux['data'],$texte,$p,0);
95                else
96                        $flux['data'] .= $texte;
97        }
98
99        return $flux;
100}
101</BOUCLE_si_affiche_milieu>[
102(#REM)
103
104
105
106        AFFICHE AUTEURS INTERVENTIONS
107
108
109
110]<BOUCLE_si_affiche_auteurs_interventions(CONDITION){si (#OBJETS|fabrique_necessite_pipeline{affiche_auteurs_interventions})}>
111
112/**
113 * Ajout de liste sur la vue d'un auteur
114 *
115 * @pipeline affiche_auteurs_interventions
116 * @param  array $flux Données du pipeline
117 * @return array       Données du pipeline
118 */
119function [(#PREFIXE)]_affiche_auteurs_interventions($flux) {
120        if ($id_auteur = intval($flux['args']['id_auteur'])) {
121<BOUCLE_affiche_auteurs_interventions(DATA){source tableau,(#OBJETS|objets_option_presente{vue_auteurs_liens})}>
122                $flux['data'] .= recuperer_fond('prive/objets/liste/#OBJET', array(
123                        'id_auteur' => $id_auteur,
124                        'titre' => _T('#TYPE:info_[(#OBJET)]_auteur')
125                ), array('ajax' => true));
126</BOUCLE_affiche_auteurs_interventions>
127        }
128        return $flux;
129}
130</BOUCLE_si_affiche_auteurs_interventions>[
131(#REM)
132
133
134
135        AFFICHER CONTENU OBJET
136
137
138
139]<BOUCLE_si_afficher_contenu_objet(CONDITION){si #OBJETS|fabrique_necessite_pipeline{afficher_contenu_objet}}>
140
141/**
142 * Ajout de formulaires de liens
143 *
144 * @pipeline affiche_contenu_objet
145 * @param  array $flux Données du pipeline
146 * @return array       Données du pipeline
147 */
148function [(#PREFIXE)]_afficher_contenu_objet($flux) {
149
150        $type = $flux['args']['type'];
151        $id   = $flux['args']['id_objet'];
152
153        return $flux;
154}
155</BOUCLE_si_afficher_contenu_objet>[
156(#REM)
157
158
159
160        OBJET COMPTE ENFANT
161
162
163
164]
165<B_objet_compte_enfants>
166/**
167 * Compter les enfants d'une rubrique
168 *
169 * @pipeline objets_compte_enfants
170 * @param  array $flux Données du pipeline
171 * @return array       Données du pipeline
172**/
173function [(#PREFIXE)]_objet_compte_enfants($flux) {
174        if ($flux['args']['objet']=='rubrique'
175                AND $id_rubrique=intval($flux['args']['id_objet'])) {
176
177<BOUCLE_objet_compte_enfants(DATA){source tableau,(#OBJETS|objets_options_presentes{#LISTE{statut_rubrique,id_rubrique}})}>
178                [(#STATUT|oui)
179                // juste les publiés ?
180                if (array_key_exists('statut', $flux\['args'\]) and ($flux\['args'\]\['statut'\] == 'publie')) {
181                        $flux\['data'\]\['#OBJET'\] = sql_countsel('#TABLE', "id_rubrique=".intval($id_rubrique)." AND (statut='publie')");
182                } else {
183                        $flux\['data'\]\['#OBJET'\] = sql_countsel('#TABLE', "id_rubrique=".intval($id_rubrique)." AND (statut<>'poubelle')");
184                }
185                ][(#STATUT|non)
186                        $flux\['data'\]\['#OBJET'\] = sql_countsel('#TABLE', "id_rubrique=".intval($id_rubrique));
187                ]
188</BOUCLE_objet_compte_enfants>
189        }
190        return $flux;
191}
192</B_objet_compte_enfants>[
193(#REM)
194
195
196
197        OPTIMISER BASE DISPARUS
198
199
200
201]<BOUCLE_si_optimiser_base_disparus(CONDITION){si #OBJETS|fabrique_necessite_pipeline{optimiser_base_disparus}}>
202
203/**
204 * Optimiser la base de données en supprimant les liens orphelins
205 * de l'objet vers quelqu'un et de quelqu'un vers l'objet.
206 *
207 * @pipeline optimiser_base_disparus
208 * @param  array $flux Données du pipeline
209 * @return array       Données du pipeline
210 */
211function [(#PREFIXE)]_optimiser_base_disparus($flux){
212        include_spip('action/editer_liens');
213        $flux['data'] += objet_optimiser_liens(array(<BOUCLE_objets_optimiser_base_disparus(DATA){source tableau,(#OBJETS|objets_options_presentes{table_liens})}{', '}>'#TYPE'=>'*'</BOUCLE_objets_optimiser_base_disparus>),'*');
214        return $flux;
215}</BOUCLE_si_optimiser_base_disparus>[
216(#REM)
217
218
219
220        TRIG PROPAGER LES SECTEURS
221
222
223
224]
225<B_trig_propager_les_secteurs>
226/**
227 * Synchroniser la valeur de id secteur
228 *
229 * @pipeline trig_propager_les_secteurs
230 * @param  string $flux Données du pipeline
231 * @return string       Données du pipeline
232**/
233function [(#PREFIXE)]_trig_propager_les_secteurs($flux) {
234<BOUCLE_trig_propager_les_secteurs(DATA){source tableau,(#OBJETS|objets_options_presentes{#LISTE{id_rubrique,id_secteur}})}>
235        // synchroniser #TABLE
236        $r = sql_select("A.#ID_OBJET AS id, R.id_secteur AS secteur", "#TABLE AS A, spip_rubriques AS R",
237                "A.id_rubrique = R.id_rubrique AND A.id_secteur <> R.id_secteur");
238        while ($row = sql_fetch($r)) {
239                sql_update("#TABLE", array("id_secteur" => $row['secteur']), "#ID_OBJET=" . $row['id']);
240        }
241</BOUCLE_trig_propager_les_secteurs>
242        return $flux;
243}
244</B_trig_propager_les_secteurs>
245
Note: See TracBrowser for help on using the repository browser.