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

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

accolade même ligne

File size: 8.6 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                $fond = isset($flux['args']['fond']) ? $flux['args']['fond'] : '';
26                $composition = isset($flux['args']['contexte']['composition']) ? $flux['args']['contexte']['composition'] : '';
27                // Si une composition est définie et si elle n'est pas déjà dans le fond, on l'ajoute au fond
28                // sauf s'il s'agit d'une page de type page (les squelettes page.html assurant la redirection)
29                if ($composition != '' and noizetier_page_composition($fond) == '' and noizetier_page_type($fond) != 'page') {
30                        $fond .= '-'.$composition;
31                }
32
33                // Tester l'installation du noizetier pour éviter un message d'erreur à l'installation
34                if (isset($GLOBALS['meta']['noizetier_base_version'])) {
35                        if (isset($flux['args']['contexte']['voir']) && $flux['args']['contexte']['voir'] == 'noisettes' && !function_exists('autoriser')) {
36                                include_spip('inc/autoriser');
37                        }     // si on utilise le formulaire dans le public
38                        if (in_array($fond, noizetier_lister_blocs_avec_noisettes())) {
39                                $contexte = $flux['data']['contexte'];
40                                $contexte['bloc'] = substr($fond, 0, strpos($fond, '/'));
41                                if (isset($flux['args']['contexte']['voir']) && $flux['args']['contexte']['voir'] == 'noisettes' && autoriser('configurer', 'noizetier')) {
42                                        $complements = recuperer_fond('noizetier-generer-bloc-voir-noisettes', $contexte, array('raw' => true));
43                                } else {
44                                        $complements = recuperer_fond('noizetier-generer-bloc', $contexte, array('raw' => true));
45                                }
46                                $flux['data']['texte'] .= $complements['texte'];
47                        } elseif (isset($flux['args']['contexte']['voir']) && $flux['args']['contexte']['voir'] == 'noisettes' && autoriser('configurer', 'noizetier')) { // Il faut ajouter les blocs vides en mode voir=noisettes
48                                $contexte = $flux['data']['contexte'];
49                                $bloc = substr($fond, 0, strpos($fond, '/'));
50                                $contexte['bloc'] = $bloc;
51                                $page = isset($contexte['type']) ? $contexte['type'] : '';
52                                $page .= (isset($contexte['composition']) && $contexte['composition']) ? '-'.$contexte['composition'] : '';
53                                $info_page = noizetier_lister_pages($page);
54                                if (isset($info_page['blocs'][$bloc])) {
55                                        $complements = recuperer_fond('noizetier-generer-bloc-voir-noisettes', $contexte, array('raw' => true));
56                                        $flux['data']['texte'] .= $complements['texte'];
57                                }
58                        }
59                }
60        }
61
62        return $flux;
63}
64
65/**
66 * Personnaliser le fond des formulaires.
67 *
68 * Ajout d'un lien vers la page de configuration
69 * dans le formulaire de sélection de composition d'un objet
70 */
71function noizetier_formulaire_fond($flux) {
72        // formulaire d'edition de la composition d'un objet
73        if (isset($flux['args']['form']) and $flux['args']['form'] == 'editer_composition_objet') {
74                $objet = isset($flux['args']['contexte']['objet']) ? $flux['args']['contexte']['objet'] : '';
75                $composition = isset($flux['args']['contexte']['composition']) ? $flux['args']['contexte']['composition'] : '';
76                $type_page = $objet.($composition ? '-'.$composition : '');
77                $noizetier_compositions_meta = isset($GLOBALS['meta']['noizetier_compositions']) ? unserialize($GLOBALS['meta']['noizetier_compositions']) : array();
78                $noizetier_compositions_xml = array_keys(noizetier_lister_pages());
79
80                // On vérifie que cette composition existe
81                if (
82                        is_array($noizetier_compositions_meta[$objet][$composition])
83                        or in_array($type_page, $noizetier_compositions_xml)
84                ) {
85                        $balise_img = charger_filtre('balise_img');
86                        $lien = generer_url_ecrire('noizetier_page', "page=$type_page");
87                        $alt = _T('noizetier:editer_configurer_page');
88                        $cherche = "/(<span[^>]*class=('|\")toggle_box_link[^>]*>)/is";
89                        $icone = inserer_attribut($balise_img(find_in_path('prive/themes/spip/images/noisette-16.png')), 'style', 'vertical-align:middle;');
90                        $remplace = '$1'."<a href=\"$lien\" title=\"$alt\">".$icone.'</a> ';
91                        $flux['data'] = preg_replace($cherche, $remplace, $flux['data']);
92                }
93        }
94
95        return $flux;
96}
97
98/**
99 * Pipeline compositions_lister_disponibles pour ajouter les compositions du noizetier.
100 *
101 * @param array $flux
102 *
103 * @return array
104 */
105function noizetier_compositions_lister_disponibles($flux) {
106        $noizetier_compositions = isset($GLOBALS['meta']['noizetier_compositions']) ? unserialize($GLOBALS['meta']['noizetier_compositions']) : array();
107        if (!is_array($noizetier_compositions)) {
108                $noizetier_compositions = array();
109        }
110        unset($noizetier_compositions['page']);
111        $type = $flux['args']['type'];
112        $informer = $flux['args']['informer'];
113
114        include_spip('inc/texte');
115        foreach ($noizetier_compositions as $t => $compos_type) {
116                foreach ($compos_type as $c => $info_compo) {
117                        if ($informer) {
118                                $noizetier_compositions[$t][$c]['nom'] = typo($info_compo['nom']);
119                                $noizetier_compositions[$t][$c]['description'] = propre($info_compo['description']);
120                                if ($info_compo['icon'] != '') {
121                                        $icone = $info_compo['icon'];
122                                } else {
123                                        $info_page = noizetier_lister_pages($t);
124                                        $icone = (isset($info_page['icon']) && $info_page['icon'] != '') ? $info_page['icon'] : 'composition-24.png';
125                                }
126                                $noizetier_compositions[$t][$c]['icon'] = noizetier_chemin_icone($icone);
127                        } else {
128                                $noizetier_compositions[$t][$c] = 1;
129                        }
130                }
131        }
132
133        if ($type == '' and count($noizetier_compositions) > 0) {
134                if (!is_array($flux['data'])) {
135                        $flux['data'] = array();
136                }
137               
138                $flux['data'] = array_merge_recursive($flux['data'], $noizetier_compositions);
139        } elseif (count($noizetier_compositions[$type]) > 0) {
140                if (!is_array($flux['data'][$type])) {
141                        $flux['data'][$type] = array();
142                }
143                if (!is_array($noizetier_compositions[$type])) {
144                        $noizetier_compositions[$type] = array();
145                }
146               
147                $flux['data'][$type] = array_merge_recursive($flux['data'][$type], $noizetier_compositions[$type]);
148        }
149
150        return $flux;
151}
152
153/**
154 * Pipeline styliser pour les compositions du noizetier de type page si celles-ci sont activées.
155 *
156 * @param array $flux
157 *
158 * @return array
159 */
160function noizetier_styliser($flux) {
161        if (defined('_NOIZETIER_COMPOSITIONS_TYPE_PAGE') and _NOIZETIER_COMPOSITIONS_TYPE_PAGE) {
162                $squelette = $flux['data'];
163                $fond = $flux['args']['fond'];
164                $ext = $flux['args']['ext'];
165               
166                // Si on n'a pas trouvé de squelette
167                if (!$squelette) {
168                        $noizetier_compositions = (isset($GLOBALS['meta']['noizetier_compositions'])) ? unserialize($GLOBALS['meta']['noizetier_compositions']) : array();
169                        // On vérifie qu'on n'a pas demandé une composition du noizetier de type page et qu'on appele ?page=type
170                        if (isset($noizetier_compositions['page'][$fond])) {
171                                $flux['data'] = substr(find_in_path("page.$ext"), 0, -strlen(".$ext"));
172                                $flux['args']['composition'] = $fond;
173                        }
174                }
175        }
176
177        return $flux;
178}
179
180/**
181 * Pipeline jqueryui_forcer pour demander au plugin l'insertion des scripts pour .sortable().
182 *
183 * @param array $plugins
184 *
185 * @return array
186 */
187function noizetier_jqueryui_forcer($plugins) {
188        $plugins[] = 'jquery.ui.core';
189        $plugins[] = 'jquery.ui.widget';
190        $plugins[] = 'jquery.ui.mouse';
191        $plugins[] = 'jquery.ui.sortable';
192        $plugins[] = 'jquery.ui.droppable';
193        $plugins[] = 'jquery.ui.draggable';
194
195        return $plugins;
196}
197
198function noizetier_noizetier_lister_pages($flux) {
199        return $flux;
200}
201function noizetier_noizetier_blocs_defaut($flux) {
202        return $flux;
203}
204function noizetier_noizetier_config_export($flux) {
205        return $flux;
206}
207function noizetier_noizetier_config_import($flux) {
208        return $flux;
209}
210
211// les boutons d'administration : ajouter le mode voir=noisettes
212function noizetier_formulaire_admin($flux) {
213        if (autoriser('configurer', 'noizetier')) {
214                $btn = recuperer_fond('prive/bouton/voir_noisettes');
215                $flux['data'] = preg_replace('%(<!--extra-->)%is', $btn.'$1', $flux['data']);
216        }
217
218        return $flux;
219}
220
221// Lorsque l'on affiche la page admin_plugin, on supprime le cache des noisettes.
222// C'est un peu grossier mais pas trouvé de pipeline pour agir à la mise à jour d'un plugin.
223// Au moins, le cache est supprimé à chaque changement, mise à jour des plugins.
224
225function noizetier_affiche_milieu($flux) {
226        $exec = $flux['args']['exec'];
227
228        if ($exec == 'admin_plugin') {
229                include_spip('inc/flock');
230                include_spip('noizetier_fonctions');
231                supprimer_fichier(_DIR_CACHE._CACHE_AJAX_NOISETTES);
232                supprimer_fichier(_DIR_CACHE._CACHE_CONTEXTE_NOISETTES);
233                supprimer_fichier(_DIR_CACHE._CACHE_INCLUSIONS_NOISETTES);
234                supprimer_fichier(_DIR_CACHE._CACHE_DESCRIPTIONS_NOISETTES);
235        }
236
237        return $flux;
238}
Note: See TracBrowser for help on using the repository browser.