source: spip-zone/_plugins_/noizetier_layout/trunk/noizetier_layout_pipelines.php @ 118190

Last change on this file since 118190 was 118185, checked in by Charles Razack, 4 months ago

On met les chaînes de langues utiles à toutes les grilles CSS directement dans le plugin.

File size: 7.1 KB
Line 
1<?php
2/**
3 * Pipelines utilisées par le plugin Noizetier : agencements
4 *
5 * @plugin    Noizetier : agencements
6 * @copyright 2019
7 * @author    Mukt
8 * @licence   GNU/GPL
9 * @package   SPIP\Noizetier_agencements\Fonctions
10 */
11
12// Sécurité
13if (!defined('_ECRIRE_INC_VERSION')) {
14        return;
15}
16
17
18/**
19 * Modifier le résultat de la compilation du squelette d'un formulaire
20 *
21 * => Édition de noisette : ajout des scripts pour les saisies
22 *
23 * @param array $flux
24 * @return array
25 */
26function noizetier_layout_formulaire_fond($flux) {
27
28        if (
29                noizetier_layout_grille()
30                and $flux['args']['form'] == 'editer_noisette'
31                and !empty($flux['args']['contexte']['id_noisette'])
32        ) {
33                // Le javascript
34                $js = recuperer_fond('prive/javascript/saisies_grid_init.js');
35                $flux['data'] .= $js;
36        }
37
38        return $flux;
39}
40
41
42/**
43 * Modifier le tableau de valeurs envoyé par la fonction charger d’un formulaire CVT
44 *
45 * => Édition de noisette : ajout des saisies pour le layout
46 *
47 * @param array $flux
48 * @return array
49 */
50function noizetier_layout_formulaire_charger($flux) {
51
52        if (
53                noizetier_layout_grille()
54                and $flux['args']['form'] == 'editer_noisette'
55                and $id_noisette = $flux['args']['args'][0]
56                and include_spip('inc/noizetier_layout')
57                and $elements_grille = noizetier_layout_identifier_element_grille($id_noisette)
58        ) {
59
60                include_spip('inc/saisies');
61
62                // Nb : la noisette peut-être plusieurs éléments de la grille à a fois.
63                // On ajoute aussi les saisies communes à tous les éléments.
64                $elements_grille[] = '*';
65                foreach ($elements_grille as $element) {
66
67                        // Ajout des saisies
68                        $saisies = noizetier_layout_lister_saisies($element, $id_noisette);
69                        $type_noisette = $flux['data']['type_noisette'];
70                        switch ($type_noisette) {
71                                // Pour certaines noisette, directement à la racine
72                                case 'conteneur':
73                                        $flux['data']['_champs_noisette'] = array_merge($flux['data']['_champs_noisette'], $saisies);
74                                        break;
75                                // Pour les autres dans un fieldset « Affichage »
76                                default:
77                                        // Soit il y en a déjà un
78                                        $fieldset_affichage = false;
79                                        foreach ($flux['data']['_champs_noisette'] as $k => $saisie) {
80                                                if (
81                                                        $saisie['saisie'] === 'fieldset'
82                                                        and $saisie['options']['nom'] === 'affichage'
83                                                ) {
84                                                        $fieldset_affichage = true;
85                                                        $flux['data']['_champs_noisette'][$k]['saisies'] = array_merge($flux['data']['_champs_noisette'][$k]['saisies'], $saisies);
86                                                        break;
87                                                }
88                                        }
89                                        // Soit on ajoute le fieldset nous-même
90                                        if (!$fieldset_affichage) {
91                                                $flux['data']['_champs_noisette'][] = array(
92                                                        'saisie' => 'fieldset',
93                                                        'options' => array(
94                                                                'nom' => 'affichage',
95                                                                'label' => _T('noizetier_layout:champ_fieldset_affichage_label'),
96                                                                'pliable' => 'oui',
97                                                                'plie' => '',
98                                                        ),
99                                                        'saisies' => $saisies,
100                                                );
101                                        }
102                                        break;
103                        }
104
105                        // Récupération des valeurs
106                        $parametre       = 'css_grid_' . $element;
107                        $classes_element = $flux['data'][$parametre];
108                        if ($contexte = noizetier_layout_contextualiser_classes($element, $classes_element, $id_noisette)) {
109                                $flux['data'] = array_merge($flux['data'], $contexte);
110                        }
111
112                }
113        }
114
115        return $flux;
116}
117
118
119/**
120 * Complète les traitements d’un formulaire CVT
121 *
122 * => Édition de noisette : enregistrer les paramètres propres à la grille.
123 * Ils sont stockés dans les clés css_grid_container, css_grid_column, css_grid_row et css_grid_*.
124 *
125 * @param array $flux
126 * @return array
127 */
128function noizetier_layout_formulaire_traiter($flux) {
129
130        if (
131                noizetier_layout_grille()
132                and $flux['args']['form'] == 'editer_noisette'
133                and $id_noisette = $flux['args']['args'][0]
134                and include_spip('inc/noizetier_layout')
135                and $elements_grille = noizetier_layout_identifier_element_grille($id_noisette)
136        ) {
137
138                include_spip('inc/saisies_lister');
139                include_spip('inc/ncore_noisette');
140
141                $parametres = unserialize(sql_getfetsel('parametres', 'spip_noisettes', 'id_noisette='.intval($id_noisette)));
142                $grille     = noizetier_layout_decrire_grille();
143
144                // Préparer les paramètres
145                // Nb : la noisette peut-être plusieurs éléments de la grille à a fois.
146                // On ajoute aussi les saisies communes à tous les éléments.
147                $elements_grille[] = '*';
148                foreach ($elements_grille as $element) {
149                        $saisies         = noizetier_layout_lister_saisies($element, $id_noisette);
150                        $saisies_par_nom = saisies_lister_par_nom($saisies);
151                        $parametre       = 'css_grid_' . $element;
152                        // $classe_base     = $grille['classes_base'][$element];
153                        $classes_element = array();
154                        // Récupérer les valeurs postées
155                        foreach ($saisies_par_nom as $champ => $saisie) {
156                                // Toutes les saisies ne sont pas forcément pertinentes
157                                // Les saisies de grille CSS sont identifées avec une clé 'grille' en plus de 'options'
158                                if (
159                                        isset($saisie['grille'])
160                                        and $saisie['saisie'] != 'fieldset'
161                                ) {
162                                        if ($valeur = _request($champ)) {
163                                                if (is_array($valeur)) {
164                                                        $valeur = array_filter(array_values($valeur));
165                                                        $classes_element = array_merge($classes_element, $valeur);
166                                                } else {
167                                                        $classes_element[] = $valeur;
168                                                }
169                                        }
170                                }
171                        }
172                        // S'assurer de la présence des classes de base (.row, .column...)
173                        /*if (!in_array($classe_base, $classes_element)) {
174                                array_unshift($classes_element, $classe_base);
175                        }*/
176                        $classes_element = implode(' ', $classes_element);
177                        $parametres[$parametre] = $classes_element;
178                }
179
180                // var_dump($parametres);
181                // die('Debug');
182
183                // Mettre à jour la noisette
184                noisette_parametrer(
185                        'noizetier',
186                        intval($id_noisette),
187                        array('parametres' => serialize($parametres))
188                );
189
190        }
191
192        return $flux;
193}
194
195
196/**
197 * Ajoute des choses dans le head de l'espace privé
198 *
199 * => Radios to slider + Rangeslider
200 *
201 * @param string $flux
202 * @return string
203 */
204function noizetier_layout_header_prive($flux) {
205
206        if (noizetier_layout_grille()) {
207
208                // Radios to slider
209                $js   = find_in_path('prive/javascript/radios-to-slider/jquery.radios-to-slider.min.js');
210                $flux .= "\n<script type='text/javascript' src='$js'></script>\n";
211                $css  = find_in_path('prive/javascript/radios-to-slider/radios-to-slider.min.css');
212                $flux .= "\n<link rel='stylesheet' href='$css' type='text/css' media='all' />\n";
213
214                // Rangeslider
215                /*
216                $js   = find_in_path('prive/javascript/rangeslider/rangeslider.min.js');
217                $flux .= "\n<script type='text/javascript' src='$js'></script>\n";
218                $css  = find_in_path('prive/javascript/rangeslider/rangeslider.css');
219                $flux .= "\n<link rel='stylesheet' href='$css' type='text/css' media='all' />\n";
220                */
221        }
222
223        return $flux;
224}
225
226
227/**
228 * Ajoute des choses dans le head du site public
229 *
230 * => Feuille de style de la grille si option activée
231 *
232 * @param string $flux
233 * @return string
234 */
235function noizetier_layout_insert_head($flux) {
236
237        if (
238                noizetier_layout_grille()
239                and include_spip('inc/config')
240                and lire_config('noizetier_layout/inclure_css_public')
241                and include_spip('inc/noizetier_layout')
242                and is_string($css = noizetier_layout_decrire_grille('css_public'))
243                and $css = find_in_path($css)
244        ) {
245                $flux .= "\n<!--Plugin noiZetier : agencements-->\n<link rel='stylesheet' href='$css' type='text/css' media='all' />\n";
246        }
247
248        return $flux;
249}
Note: See TracBrowser for help on using the repository browser.