source: spip-zone/_plugins_/saisies/trunk/saisies_pipelines.php @ 118235

Last change on this file since 118235 was 115878, checked in by rastapopoulos@…, 8 months ago

Ne pas prendre en compte les squelettes qui ne sont pas vraiment le formulaire (c'est nul pas générique là mais bon…) cf form inscription ou autre.

File size: 7.6 KB
Line 
1<?php
2
3/**
4 * Utilisation des pipelines
5 *
6 * @package SPIP\Saisies\Pipelines
7**/
8
9// Sécurité
10if (!defined('_ECRIRE_INC_VERSION')) {
11        return;
12}
13
14/**
15 * Ajoute les scripts JS et CSS de saisies dans l'espace privé
16 *
17 * @param string $flux
18 * @return string
19**/
20function saisies_header_prive($flux) {
21        $js = find_in_path('javascript/saisies.js');
22        $flux .= "\n<script type='text/javascript' src='$js'></script>\n";
23        $css = generer_url_public('saisies.css');
24        $flux .= "\n<link rel='stylesheet' href='$css' type='text/css' media='all' />\n";
25        $css_constructeur = find_in_path('css/formulaires_constructeur.css');
26        $flux .= "\n<link rel='stylesheet' href='$css_constructeur' type='text/css' />\n";
27       
28        return $flux;
29}
30
31/**
32 * Ajoute les scripts JS et CSS de saisies dans l'espace public
33 *
34 * Ajoute également de quoi gérer le datepicker de la saisie date si
35 * celle-ci est utilisée dans la page.
36 *
37 * @param string $flux
38 * @return string
39**/
40function saisies_affichage_final($flux) {
41        if (
42                $GLOBALS['html'] // si c'est bien du HTML
43                and ($p = strpos($flux, '<!--!inserer_saisie_editer-->')) !== false // et qu'on a au moins une saisie
44                and strpos($flux, '<head') !== false // et qu'on a la balise <head> quelque part
45        ) {
46                // On insère la CSS devant le premier <link> trouvé
47                if (!$pi = strpos($flux, '<link') and !$pi = strpos($flux, '</head')) {
48                        $pi = $p; // si pas de <link inserer comme un goret entre 2 <li> de saisies
49                }
50                $css = generer_url_public('saisies.css');
51                $ins_css = "\n<link rel='stylesheet' href='$css' type='text/css' media='all' />\n";
52
53                //si on a une saisie de type date, on va charger les css de jquery_ui
54                if (
55                        (!defined('_JQUERYUI_CSS_NON') or !boolval(_JQUERYUI_CSS_NON)) 
56                        and strpos($flux, 'saisie_date') !==false
57                ) {
58                        include_spip('jqueryui_pipelines');
59                        if (function_exists('jqueryui_dependances')) {
60                                $ui_plugins = jqueryui_dependances(array('jquery.ui.datepicker'));
61                                $theme_css = 'jquery.ui.theme';
62                                $ui_css_dir = 'css';
63                                // compatibilité SPIP 3.1 et jQuery UI 1.11
64                                $version = explode('.', $GLOBALS['spip_version_branche']);
65                                if ($version[0] > 3 or ($version[0] == 3 and $version[1] > 0)) {
66                                        $theme_css = 'theme';
67                                        $ui_css_dir = 'css/ui';
68                                }
69                                array_push($ui_plugins, $theme_css);
70                                foreach ($ui_plugins as $ui_plug) {
71                                                // compatibilité pour les versions < SPIP 3.2
72                                                if ($version[0] < 3 or ($version[0] == 3 and $version[1] < 2)) {
73                                                        $ui_plug_css = find_in_path("$ui_css_dir/$ui_plug.css");
74                                                        if (strpos($flux, "$ui_css_dir/$ui_plug.css") === false) {// si pas déjà chargé
75                                                                $ins_css .= "\n<link rel='stylesheet' href='$ui_plug_css' type='text/css' media='all' />\n";
76                                                        }
77                                                }
78                                }
79                                // compatibilité SPIP 3.2 et jQuery UI 1.12
80                if ($version[0] == 3 and $version[1] > 1) {
81                                $ins_css .= "\n<link rel='stylesheet' type='text/css' media='all' href='" . find_in_path('css/ui/jquery-ui.css') . "' />\n";
82                                }
83                        }
84                }
85
86                $flux = substr_replace($flux, $ins_css, $pi, 0);
87                // On insère le JS à la fin du <head>
88                $pos_head = strpos($flux, '</head');
89                $js = find_in_path('javascript/saisies.js');
90                $ins_js = "\n<script type='text/javascript' src='$js'></script>\n";
91                $flux = substr_replace($flux, $ins_js, $pos_head, 0);
92        }
93       
94        return $flux;
95}
96
97
98/**
99 * Déclarer automatiquement les champs d'un formulaire CVT qui déclare des saisies
100 *
101 * Recherche une fonction `formulaires_XX_saisies_dist` et l'utilise si elle
102 * est présente. Cette fonction doit retourner une liste de saisies dont on se
103 * sert alors pour calculer les champs utilisés dans le formulaire.
104 *
105 * @param array $flux
106 * @return array
107**/
108function saisies_formulaire_charger($flux) {
109        // Si le flux data est inexistant, on quitte : Le CVT d'origine a décidé de ne pas continuer
110        if (!is_array($flux['data'])) {
111                return $flux;
112        }
113
114        // Il faut que la fonction existe et qu'elle retourne bien un tableau
115        include_spip('inc/saisies');
116        $saisies = saisies_chercher_formulaire($flux['args']['form'], $flux['args']['args']);
117
118        if ($saisies) {
119                // On ajoute au contexte les champs à déclarer
120                $contexte = saisies_lister_valeurs_defaut($saisies);
121                $flux['data'] = array_merge($contexte, $flux['data']);
122               
123                // On cherche si on gère des étapes
124                if ($etapes = saisies_lister_par_etapes($saisies)) {
125                        $flux['data']['_etapes'] = count($etapes);
126                }
127               
128                // On ajoute le tableau complet des saisies
129                $flux['data']['_saisies'] = $saisies;
130        }
131        return $flux;
132}
133
134/**
135 * Aiguiller CVT vers un squelette propre à Saisies lorsqu'on a déclaré des saisies et qu'il n'y a pas déjà un HTML
136 *
137 * Dans le cadre d'un formulaire CVT demandé, si ce formulaire a déclaré des saisies, et
138 * qu'il n'y a pas de squelette spécifique pour afficher le HTML du formulaire,
139 * alors on utilise le formulaire générique intégré au plugin saisie, qui calculera le HTML
140 * à partir de la déclaration des saisies indiquées.
141 *
142 * @see saisies_formulaire_charger()
143 *
144 * @param array $flux
145 * @return array
146**/
147function saisies_styliser($flux) {
148        if (
149                // Si on cherche un squelette de formulaire
150                strncmp($flux['args']['fond'], 'formulaires/', 12) == 0
151                // Et que ce n'est pas une inclusion (on teste ça pour l'instant mais c'est pas très générique)
152                and strpos($flux['args']['fond'], 'inc-', 12) === false
153                // Et qu'il y a des saisies dans le contexte
154                and isset($flux['args']['contexte']['_saisies'])
155                // Et que le fichier choisi est vide ou n'existe pas
156                and include_spip('inc/flock')
157                and $ext = $flux['args']['ext']
158                and lire_fichier($flux['data'].'.'.$ext, $contenu_squelette)
159                and !trim($contenu_squelette)
160        ) {
161                $flux['data'] = preg_replace("/\.$ext$/", '', find_in_path("formulaires/inc-saisies-cvt.$ext"));
162        }
163
164        return $flux;
165}
166
167/**
168 * Ajouter les vérifications déclarées dans la fonction "saisies" du CVT
169 *
170 * Si un formulaire CVT a déclaré des saisies, on utilise sa déclaration
171 * pour effectuer les vérifications du formulaire.
172 *
173 * @see saisies_formulaire_charger()
174 * @uses saisies_verifier()
175 *
176 * @param array $flux
177 *     Liste des erreurs du formulaire
178 * @return array
179 *     iste des erreurs
180 */
181function saisies_formulaire_verifier($flux) {
182        // Il faut que la fonction existe et qu'elle retourne bien un tableau
183        include_spip('inc/saisies');
184        $saisies = saisies_chercher_formulaire($flux['args']['form'], $flux['args']['args']);
185        if ($saisies and !saisies_lister_par_etapes($saisies)) {
186                $erreurs = saisies_verifier($saisies);
187               
188                if ($erreurs and !isset($erreurs['message_erreur'])) {
189                        $erreurs['message_erreur'] = _T('saisies:erreur_generique');
190                }
191
192                $flux['data'] = array_merge($erreurs, $flux['data']);
193        }
194
195        return $flux;
196}
197
198/**
199 * Ajouter les vérifications déclarées dans la fonction "saisies" du CVT mais pour les étapes
200 *
201 * @see saisies_formulaire_charger()
202 * @uses saisies_verifier()
203 *
204 * @param array $flux
205 *     Liste des erreurs du formulaire
206 * @return array
207 *     iste des erreurs
208 */
209function saisies_formulaire_verifier_etape($flux) {
210        // Il faut que la fonction existe et qu'elle retourne bien un tableau
211        include_spip('inc/saisies');
212        $saisies = saisies_chercher_formulaire($flux['args']['form'], $flux['args']['args']);
213        if ($saisies and $etapes = saisies_lister_par_etapes($saisies)) {
214                // On récupère les sous-saisies de cette étape précise
215                $saisies_etape = $etapes[$flux['args']['etape']]['saisies'];
216               
217                $erreurs = saisies_verifier($saisies_etape);
218
219                $flux['data'] = array_merge($erreurs, $flux['data']);
220        }
221
222        return $flux;
223}
Note: See TracBrowser for help on using the repository browser.