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

Last change on this file was 118203, checked in by Charles Razack, 12 months ago

test plus concis

File size: 7.2 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                // Des fois que...
63                if (empty($flux['data']['_champs_noisette'])) {
64                        $flux['data']['_champs_noisette'] = array();
65                }
66
67                // Ajout des saisies pour tous les types d'éléments de la grille
68                // auxquels correspond la noisette (il peut y en avoir plusieurs à a fois).
69                // On ajoute aussi les saisies communes à tous les éléments.
70                $elements_grille[] = '*';
71                foreach ($elements_grille as $element) {
72
73                        // Ajout des saisies
74                        $saisies = noizetier_layout_lister_saisies($element, $id_noisette);
75                        $type_noisette = $flux['data']['type_noisette'];
76                        switch ($type_noisette) {
77                                // Pour certaines noisette, directement à la racine
78                                case 'conteneur':
79                                        $flux['data']['_champs_noisette'] = array_merge($flux['data']['_champs_noisette'], $saisies);
80                                        break;
81                                // Pour les autres dans un fieldset « Affichage »
82                                default:
83                                        // Soit il y en a déjà un
84                                        $fieldset_affichage = false;
85                                        foreach ($flux['data']['_champs_noisette'] as $k => $saisie) {
86                                                if (
87                                                        $saisie['saisie'] === 'fieldset'
88                                                        and $saisie['options']['nom'] === 'affichage'
89                                                ) {
90                                                        $fieldset_affichage = true;
91                                                        $flux['data']['_champs_noisette'][$k]['saisies'] = array_merge($flux['data']['_champs_noisette'][$k]['saisies'], $saisies);
92                                                        break;
93                                                }
94                                        }
95                                        // Soit on ajoute le fieldset nous-même
96                                        if (!$fieldset_affichage) {
97                                                $flux['data']['_champs_noisette'][] = array(
98                                                        'saisie' => 'fieldset',
99                                                        'options' => array(
100                                                                'nom' => 'affichage',
101                                                                'label' => _T('noizetier_layout:champ_fieldset_affichage_label'),
102                                                                'pliable' => 'oui',
103                                                                'plie' => '',
104                                                        ),
105                                                        'saisies' => $saisies,
106                                                );
107                                        }
108                                        break;
109                        }
110
111                        // Récupération des valeurs
112                        $parametre       = 'css_grid_' . $element;
113                        $classes_element = $flux['data'][$parametre];
114                        if ($contexte = noizetier_layout_contextualiser_classes($element, $classes_element, $id_noisette)) {
115                                $flux['data'] = array_merge($flux['data'], $contexte);
116                        }
117
118                }
119        }
120
121        return $flux;
122}
123
124
125/**
126 * Complète les traitements d’un formulaire CVT
127 *
128 * => Édition de noisette : enregistrer les paramètres propres à la grille.
129 * Ils sont stockés dans les clés css_grid_container, css_grid_column, css_grid_row et css_grid_*.
130 *
131 * @param array $flux
132 * @return array
133 */
134function noizetier_layout_formulaire_traiter($flux) {
135
136        if (
137                noizetier_layout_grille()
138                and $flux['args']['form'] == 'editer_noisette'
139                and $id_noisette = $flux['args']['args'][0]
140                and include_spip('inc/noizetier_layout')
141                and $elements_grille = noizetier_layout_identifier_element_grille($id_noisette)
142        ) {
143
144                include_spip('inc/saisies_lister');
145                include_spip('inc/ncore_noisette');
146
147                $parametres = unserialize(sql_getfetsel('parametres', 'spip_noisettes', 'id_noisette='.intval($id_noisette)));
148                $grille     = noizetier_layout_decrire_grille();
149
150                // Préparer les paramètres
151                // Nb : la noisette peut-être plusieurs éléments de la grille à a fois.
152                // On ajoute aussi les saisies communes à tous les éléments.
153                $elements_grille[] = '*';
154                foreach ($elements_grille as $element) {
155                        $saisies         = noizetier_layout_lister_saisies($element, $id_noisette);
156                        $saisies_par_nom = saisies_lister_par_nom($saisies);
157                        $parametre       = 'css_grid_' . $element;
158                        // $classe_base     = $grille['classes_base'][$element];
159                        $classes_element = array();
160                        // Récupérer les valeurs postées
161                        foreach ($saisies_par_nom as $champ => $saisie) {
162                                // Toutes les saisies ne sont pas forcément pertinentes
163                                // Les saisies de grille CSS sont identifées avec une clé 'grille' en plus de 'options'
164                                if (
165                                        isset($saisie['grille'])
166                                        and $saisie['saisie'] != 'fieldset'
167                                ) {
168                                        if ($valeur = _request($champ)) {
169                                                if (is_array($valeur)) {
170                                                        $valeur = array_filter(array_values($valeur));
171                                                        $classes_element = array_merge($classes_element, $valeur);
172                                                } else {
173                                                        $classes_element[] = $valeur;
174                                                }
175                                        }
176                                }
177                        }
178                        // S'assurer de la présence des classes de base (.row, .column...)
179                        /*if (!in_array($classe_base, $classes_element)) {
180                                array_unshift($classes_element, $classe_base);
181                        }*/
182                        $classes_element = implode(' ', $classes_element);
183                        $parametres[$parametre] = $classes_element;
184                }
185
186                // var_dump($parametres);
187                // die('Debug');
188
189                // Mettre à jour la noisette
190                noisette_parametrer(
191                        'noizetier',
192                        intval($id_noisette),
193                        array('parametres' => serialize($parametres))
194                );
195
196        }
197
198        return $flux;
199}
200
201
202/**
203 * Ajoute des choses dans le head de l'espace privé
204 *
205 * => Radios to slider + Rangeslider
206 *
207 * @param string $flux
208 * @return string
209 */
210function noizetier_layout_header_prive($flux) {
211
212        if (noizetier_layout_grille()) {
213
214                // Radios to slider
215                $js   = find_in_path('prive/javascript/radios-to-slider/jquery.radios-to-slider.min.js');
216                $flux .= "\n<script type='text/javascript' src='$js'></script>\n";
217                $css  = find_in_path('prive/javascript/radios-to-slider/radios-to-slider.min.css');
218                $flux .= "\n<link rel='stylesheet' href='$css' type='text/css' media='all' />\n";
219
220                // Rangeslider
221                /*
222                $js   = find_in_path('prive/javascript/rangeslider/rangeslider.min.js');
223                $flux .= "\n<script type='text/javascript' src='$js'></script>\n";
224                $css  = find_in_path('prive/javascript/rangeslider/rangeslider.css');
225                $flux .= "\n<link rel='stylesheet' href='$css' type='text/css' media='all' />\n";
226                */
227        }
228
229        return $flux;
230}
231
232
233/**
234 * Ajoute des choses dans le head du site public
235 *
236 * => Feuille de style de la grille si option activée
237 *
238 * @param string $flux
239 * @return string
240 */
241function noizetier_layout_insert_head($flux) {
242
243        if (
244                noizetier_layout_grille()
245                and include_spip('inc/config')
246                and lire_config('noizetier_layout/inclure_css_public')
247                and include_spip('inc/noizetier_layout')
248                and is_string($css = noizetier_layout_decrire_grille('css_public'))
249                and $css = find_in_path($css)
250        ) {
251                $flux .= "\n<!--Plugin noiZetier : agencements-->\n<link rel='stylesheet' href='$css' type='text/css' media='all' />\n";
252        }
253
254        return $flux;
255}
Note: See TracBrowser for help on using the repository browser.