source: spip-zone/_plugins_/noizetier/trunk/noizetier_pipelines.php @ 101725

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

Notice PHP --

File size: 11.0 KB
Line 
1<?php
2
3// Sécurité
4if (!defined('_ECRIRE_INC_VERSION')) {
5        return;
6}
7
8function noizetier_header_prive($flux) {
9        $css = direction_css(find_in_path('css/noizetier.css'));
10        $flux .= "\n<link rel='stylesheet' href='$css' type='text/css' />\n";
11
12        return $flux;
13}
14
15/**
16 * Pipeline recuperer_fond pour ajouter les noisettes.
17 *
18 * @param array $flux
19 *
20 * @return array
21 */
22function noizetier_recuperer_fond($flux) {
23        if (defined('_NOIZETIER_RECUPERER_FOND') ? _NOIZETIER_RECUPERER_FOND : true) {
24                include_spip('noizetier_fonctions');
25               
26                $fond = isset($flux['args']['fond']) ? $flux['args']['fond'] : '';
27                $composition = isset($flux['args']['contexte']['composition']) ? $flux['args']['contexte']['composition'] : '';
28                // Si une composition est définie et si elle n'est pas déjà dans le fond, on l'ajoute au fond
29                // sauf s'il s'agit d'une page de type page (les squelettes page.html assurant la redirection)
30                if ($composition != '' and noizetier_page_composition($fond) == '' and noizetier_page_type($fond) != 'page') {
31                        $fond .= '-'.$composition;
32                }
33
34                // Tester l'installation du noizetier pour éviter un message d'erreur à l'installation
35                if (isset($GLOBALS['meta']['noizetier_base_version'])) {
36                        if (isset($flux['args']['contexte']['voir']) && $flux['args']['contexte']['voir'] == 'noisettes' && !function_exists('autoriser')) {
37                                include_spip('inc/autoriser');
38                        }     // si on utilise le formulaire dans le public
39                       
40                        // On cherche en priorité une correspondance d'objet précis !
41                        // Sinon on cherche pour le type de page ou la composition
42                        if (
43                                (
44                                        isset($flux['args']['contexte']['type-page'])
45                                        and $objet = $flux['args']['contexte']['type-page']
46                                        and $cle_objet = id_table_objet($objet)
47                                        and $id_objet = intval($flux['args']['contexte'][$cle_objet])
48                                        and $par_objet = in_array($flux['args']['fond'], noizetier_lister_blocs_avec_noisettes_objet($objet, $id_objet))
49                                )
50                                or in_array($fond, noizetier_lister_blocs_avec_noisettes())
51                        ) {
52                                $contexte = $flux['data']['contexte'];
53                                $contexte['bloc'] = substr($fond, 0, strpos($fond, '/'));
54                               
55                                if ($par_objet) {
56                                        $contexte['objet'] = $objet;
57                                        $contexte['id_objet'] = $id_objet;
58                                }
59                               
60                                if (isset($flux['args']['contexte']['voir']) && $flux['args']['contexte']['voir'] == 'noisettes' && autoriser('configurer', 'noizetier')) {
61                                        $complements = recuperer_fond('noizetier-generer-bloc-voir-noisettes', $contexte, array('raw' => true));
62                                } else {
63                                        $complements = recuperer_fond('noizetier-generer-bloc', $contexte, array('raw' => true));
64                                }
65                               
66                                // S'il y a une indication d'insertion explicite
67                                if (strpos($flux['data']['texte'], '<!--noisettes-->') !== false) {
68                                        $flux['data']['texte'] = preg_replace(
69                                                '%(<!--noisettes-->)%is',
70                                                "${complements['texte']}\n" . '$1',
71                                                $flux['data']['texte']
72                                        );
73                                }
74                                else {
75                                        $flux['data']['texte'] .= $complements['texte'];
76                                }
77                        }
78                        // Il faut ajouter les blocs vides en mode voir=noisettes
79                        elseif (isset($flux['args']['contexte']['voir']) && $flux['args']['contexte']['voir'] == 'noisettes' && autoriser('configurer', 'noizetier')) {
80                                $contexte = $flux['data']['contexte'];
81                                $bloc = substr($fond, 0, strpos($fond, '/'));
82                                $contexte['bloc'] = $bloc;
83                               
84                                // Si ya au moins une noisette pour cet objet peu importe le bloc
85                                if (sql_fetsel('id_noisette', 'spip_noisettes', array('objet = '.sql_quote($objet),'id_objet = '.$id_objet))) {
86                                        $contexte['objet'] = $objet;
87                                        $contexte['id_objet'] = $id_objet;
88                                }
89                               
90                                $page = isset($contexte['type']) ? $contexte['type'] : (isset($contexte['type-page']) ? $contexte['type-page'] : '');
91                                $page .= (isset($contexte['composition']) && $contexte['composition']) ? '-'.$contexte['composition'] : '';
92                                $info_page = noizetier_lister_pages($page);
93                                if (isset($info_page['blocs'][$bloc])) {
94                                        $complements = recuperer_fond('noizetier-generer-bloc-voir-noisettes', $contexte, array('raw' => true));
95                                        $flux['data']['texte'] .= $complements['texte'];
96                                }
97                        }
98                }
99        }
100
101        return $flux;
102}
103
104/**
105 * Insertion dans le pipeline boite_infos (SPIP)
106 *
107 * Ajouter un lien pour configurer les noisettes de ce contenu précisément
108 *
109 * @param array $flux
110 *              Le contexte du pipeline
111 * @return array $flux
112 *              Le contexte modifié
113 */
114function noizetier_boite_infos($flux){
115        include_spip('inc/autoriser');
116       
117        if (autoriser('configurernoisettes', $flux['args']['type'], $flux['args']['id'])) {
118                include_spip('inc/presentation');
119               
120                // On cherche le nombre de noisettes déjà configurées pour ce contenu
121                $nb = sql_countsel('spip_noisettes', array('objet = '.sql_quote($flux['args']['type']), 'id_objet = '.intval($flux['args']['id'])));
122                if (!$nb) {
123                        $texte = _T('noizetier:noisettes_configurees_aucune');
124                }
125                elseif ($nb == 1) {
126                        $texte = _T('noizetier:noisettes_configurees_une');
127                }
128                else {
129                        $texte = _T('noizetier:noisettes_configurees_nb', array('nb'=>$nb));
130                }
131               
132                $flux['data'] .= icone_horizontale($texte, parametre_url(parametre_url(generer_url_ecrire('noizetier_page'), 'id_objet', $flux['args']['id']), 'objet', $flux['args']['type']), 'noisette', $fonction="", $dummy="", $javascript="");
133        }
134       
135        return $flux;
136}
137
138/**
139 * Personnaliser le fond des formulaires.
140 *
141 * Ajout d'un lien vers la page de configuration
142 * dans le formulaire de sélection de composition d'un objet
143 */
144function noizetier_formulaire_fond($flux) {
145        // formulaire d'edition de la composition d'un objet
146        if (isset($flux['args']['form']) and $flux['args']['form'] == 'editer_composition_objet') {
147                $objet = isset($flux['args']['contexte']['objet']) ? $flux['args']['contexte']['objet'] : '';
148                $composition = isset($flux['args']['contexte']['composition']) ? $flux['args']['contexte']['composition'] : '';
149                $type_page = $objet.($composition ? '-'.$composition : '');
150                $noizetier_compositions_meta = isset($GLOBALS['meta']['noizetier_compositions']) ? unserialize($GLOBALS['meta']['noizetier_compositions']) : array();
151                $noizetier_compositions_xml = array_keys(noizetier_lister_pages());
152
153                // On vérifie que cette composition existe
154                if (
155                        is_array($noizetier_compositions_meta[$objet][$composition])
156                        or in_array($type_page, $noizetier_compositions_xml)
157                ) {
158                        $balise_img = charger_filtre('balise_img');
159                        $lien = generer_url_ecrire('noizetier_page', "page=$type_page");
160                        $alt = _T('noizetier:editer_configurer_page');
161                        $cherche = "/(<span[^>]*class=('|\")toggle_box_link[^>]*>)/is";
162                        $icone = inserer_attribut($balise_img(find_in_path('prive/themes/spip/images/noisette-16.png')), 'style', 'vertical-align:middle;');
163                        $remplace = '$1'."<a href=\"$lien\" title=\"$alt\">".$icone.'</a> ';
164                        $flux['data'] = preg_replace($cherche, $remplace, $flux['data']);
165                }
166        }
167
168        return $flux;
169}
170
171/**
172 * Pipeline compositions_lister_disponibles pour ajouter les compositions du noizetier.
173 *
174 * @param array $flux
175 *
176 * @return array
177 */
178function noizetier_compositions_lister_disponibles($flux) {
179        $noizetier_compositions = isset($GLOBALS['meta']['noizetier_compositions']) ? unserialize($GLOBALS['meta']['noizetier_compositions']) : array();
180        if (!is_array($noizetier_compositions)) {
181                $noizetier_compositions = array();
182        }
183        unset($noizetier_compositions['page']);
184        $type = $flux['args']['type'];
185        $informer = $flux['args']['informer'];
186
187        include_spip('inc/texte');
188        foreach ($noizetier_compositions as $t => $compos_type) {
189                foreach ($compos_type as $c => $info_compo) {
190                        if ($informer) {
191                                $noizetier_compositions[$t][$c]['nom'] = typo($info_compo['nom']);
192                                $noizetier_compositions[$t][$c]['description'] = propre($info_compo['description']);
193                                if ($info_compo['icon'] != '') {
194                                        $icone = $info_compo['icon'];
195                                } else {
196                                        $info_page = noizetier_lister_pages($t);
197                                        $icone = (isset($info_page['icon']) && $info_page['icon'] != '') ? $info_page['icon'] : 'composition-24.png';
198                                }
199                                $noizetier_compositions[$t][$c]['icon'] = noizetier_chemin_icone($icone);
200                        } else {
201                                $noizetier_compositions[$t][$c] = 1;
202                        }
203                }
204        }
205
206        if ($type == '' and count($noizetier_compositions) > 0) {
207                if (!is_array($flux['data'])) {
208                        $flux['data'] = array();
209                }
210               
211                $flux['data'] = array_merge_recursive($flux['data'], $noizetier_compositions);
212        } elseif (count($noizetier_compositions[$type]) > 0) {
213                if (!is_array($flux['data'][$type])) {
214                        $flux['data'][$type] = array();
215                }
216                if (!is_array($noizetier_compositions[$type])) {
217                        $noizetier_compositions[$type] = array();
218                }
219               
220                $flux['data'][$type] = array_merge_recursive($flux['data'][$type], $noizetier_compositions[$type]);
221        }
222
223        return $flux;
224}
225
226/**
227 * Pipeline styliser pour les compositions du noizetier de type page si celles-ci sont activées.
228 *
229 * @param array $flux
230 *
231 * @return array
232 */
233function noizetier_styliser($flux) {
234        if (defined('_NOIZETIER_COMPOSITIONS_TYPE_PAGE') and _NOIZETIER_COMPOSITIONS_TYPE_PAGE) {
235                $squelette = $flux['data'];
236                $fond = $flux['args']['fond'];
237                $ext = $flux['args']['ext'];
238               
239                // Si on n'a pas trouvé de squelette
240                if (!$squelette) {
241                        $noizetier_compositions = (isset($GLOBALS['meta']['noizetier_compositions'])) ? unserialize($GLOBALS['meta']['noizetier_compositions']) : array();
242                        // On vérifie qu'on n'a pas demandé une composition du noizetier de type page et qu'on appele ?page=type
243                        if (isset($noizetier_compositions['page'][$fond])) {
244                                $flux['data'] = substr(find_in_path("page.$ext"), 0, -strlen(".$ext"));
245                                $flux['args']['composition'] = $fond;
246                        }
247                }
248        }
249
250        return $flux;
251}
252
253/**
254 * Pipeline jqueryui_forcer pour demander au plugin l'insertion des scripts pour .sortable().
255 *
256 * @param array $plugins
257 *
258 * @return array
259 */
260function noizetier_jqueryui_forcer($plugins) {
261        $plugins[] = 'jquery.ui.core';
262        $plugins[] = 'jquery.ui.widget';
263        $plugins[] = 'jquery.ui.mouse';
264        $plugins[] = 'jquery.ui.sortable';
265        $plugins[] = 'jquery.ui.droppable';
266        $plugins[] = 'jquery.ui.draggable';
267
268        return $plugins;
269}
270
271function noizetier_noizetier_lister_pages($flux) {
272        return $flux;
273}
274function noizetier_noizetier_blocs_defaut($flux) {
275        return $flux;
276}
277function noizetier_noizetier_config_export($flux) {
278        return $flux;
279}
280function noizetier_noizetier_config_import($flux) {
281        return $flux;
282}
283
284// les boutons d'administration : ajouter le mode voir=noisettes
285function noizetier_formulaire_admin($flux) {
286        if (autoriser('configurer', 'noizetier')) {
287                $btn = recuperer_fond('prive/bouton/voir_noisettes');
288                $flux['data'] = preg_replace('%(<!--extra-->)%is', $btn.'$1', $flux['data']);
289        }
290
291        return $flux;
292}
293
294// Lorsque l'on affiche la page admin_plugin, on supprime le cache des noisettes.
295// C'est un peu grossier mais pas trouvé de pipeline pour agir à la mise à jour d'un plugin.
296// Au moins, le cache est supprimé à chaque changement, mise à jour des plugins.
297
298function noizetier_affiche_milieu($flux) {
299        $exec = $flux['args']['exec'];
300
301        if ($exec == 'admin_plugin') {
302                include_spip('inc/flock');
303                include_spip('noizetier_fonctions');
304                supprimer_fichier(_DIR_CACHE._CACHE_AJAX_NOISETTES);
305                supprimer_fichier(_DIR_CACHE._CACHE_CONTEXTE_NOISETTES);
306                supprimer_fichier(_DIR_CACHE._CACHE_INCLUSIONS_NOISETTES);
307                supprimer_fichier(_DIR_CACHE._CACHE_DESCRIPTIONS_NOISETTES);
308        }
309
310        return $flux;
311}
Note: See TracBrowser for help on using the repository browser.