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é |
---|
13 | if (!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 | */ |
---|
26 | function 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 | */ |
---|
50 | function 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 | */ |
---|
128 | function 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 | */ |
---|
204 | function 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 | */ |
---|
235 | function 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 | } |
---|