f262d21a0823087d542547a747987eedad256291
[lhc/web/www.git] / www / plugins / saisies / saisies_pipelines.php
1 <?php
2
3 /**
4 * Utilisation des pipelines
5 *
6 * @package SPIP\Saisies\Pipelines
7 **/
8
9 // Sécurité
10 if (!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 **/
20 function 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 **/
40 function 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 if (strpos($flux, 'saisie_date') !==false) {//si on a une saisie de type date, on va charger les css de jquery_ui
54 include_spip('jqueryui_pipelines');
55 if (function_exists('jqueryui_dependances')) {
56 $ui_plugins = jqueryui_dependances(array('jquery.ui.datepicker'));
57 $theme_css = 'jquery.ui.theme';
58 $ui_css_dir = 'css';
59 // compatibilité SPIP 3.1 et jQuery UI 1.11
60 $version = explode('.', $GLOBALS['spip_version_branche']);
61 if ($version[0] > 3 or ($version[0] == 3 and $version[1] > 0)) {
62 $theme_css = 'theme';
63 $ui_css_dir = 'css/ui';
64 }
65 array_push($ui_plugins, $theme_css);
66 foreach ($ui_plugins as $ui_plug) {
67 // compatibilité pour les versions < SPIP 3.2
68 if ($version[0] < 3 or ($version[0] == 3 and $version[1] < 2)) {
69 $ui_plug_css = find_in_path("$ui_css_dir/$ui_plug.css");
70 if (strpos($flux, "$ui_css_dir/$ui_plug.css") === false) {// si pas déjà chargé
71 $ins_css .= "\n<link rel='stylesheet' href='$ui_plug_css' type='text/css' media='all' />\n";
72 }
73 }
74 }
75 // compatibilité SPIP 3.2 et jQuery UI 1.12
76 if ($version[0] == 3 and $version[1] > 1) {
77 $ins_css .= "\n<link rel='stylesheet' type='text/css' media='all' href='" . find_in_path('css/ui/jquery-ui.css') . "' />\n";
78 }
79 }
80 }
81
82 $flux = substr_replace($flux, $ins_css, $pi, 0);
83 // On insère le JS à la fin du <head>
84 $pos_head = strpos($flux, '</head');
85 $js = find_in_path('javascript/saisies.js');
86 $ins_js = "\n<script type='text/javascript' src='$js'></script>\n";
87 $flux = substr_replace($flux, $ins_js, $pos_head, 0);
88 }
89
90 return $flux;
91 }
92
93
94 /**
95 * Déclarer automatiquement les champs d'un formulaire CVT qui déclare des saisies
96 *
97 * Recherche une fonction `formulaires_XX_saisies_dist` et l'utilise si elle
98 * est présente. Cette fonction doit retourner une liste de saisies dont on se
99 * sert alors pour calculer les champs utilisés dans le formulaire.
100 *
101 * @param array $flux
102 * @return array
103 **/
104 function saisies_formulaire_charger($flux) {
105 // Si le flux data est inexistant, on quitte : Le CVT d'origine a décidé de ne pas continuer
106 if (!is_array($flux['data'])) {
107 return $flux;
108 }
109
110 // Il faut que la fonction existe et qu'elle retourne bien un tableau
111 include_spip('inc/saisies');
112 $saisies = saisies_chercher_formulaire($flux['args']['form'], $flux['args']['args']);
113
114 if ($saisies) {
115 // On ajoute au contexte les champs à déclarer
116 $contexte = saisies_lister_valeurs_defaut($saisies);
117 $flux['data'] = array_merge($contexte, $flux['data']);
118
119 // On ajoute le tableau complet des saisies
120 $flux['data']['_saisies'] = $saisies;
121 }
122 return $flux;
123 }
124
125 /**
126 * 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
127 *
128 * Dans le cadre d'un formulaire CVT demandé, si ce formulaire a déclaré des saisies, et
129 * qu'il n'y a pas de squelette spécifique pour afficher le HTML du formulaire,
130 * alors on utilise le formulaire générique intégré au plugin saisie, qui calculera le HTML
131 * à partir de la déclaration des saisies indiquées.
132 *
133 * @see saisies_formulaire_charger()
134 *
135 * @param array $flux
136 * @return array
137 **/
138 function saisies_styliser($flux) {
139 if (
140 // Si on cherche un squelette de formulaire
141 strncmp($flux['args']['fond'], 'formulaires/', 12) == 0
142 // Et qu'il y a des saisies dans le contexte
143 and isset($flux['args']['contexte']['_saisies'])
144 // Et que le fichier choisi est vide ou n'existe pas
145 and include_spip('inc/flock')
146 and $ext = $flux['args']['ext']
147 and lire_fichier($flux['data'].'.'.$ext, $contenu_squelette)
148 and !trim($contenu_squelette)
149 ) {
150 $flux['data'] = preg_replace("/\.$ext$/", '', find_in_path("formulaires/inc-saisies-cvt.$ext"));
151 }
152
153 return $flux;
154 }
155
156 /**
157 * Ajouter les vérifications déclarées dans la fonction "saisies" du CVT
158 *
159 * Si un formulaire CVT a déclaré des saisies, on utilise sa déclaration
160 * pour effectuer les vérifications du formulaire.
161 *
162 * @see saisies_formulaire_charger()
163 * @uses saisies_verifier()
164 *
165 * @param array $flux
166 * Liste des erreurs du formulaire
167 * @return array
168 * iste des erreurs
169 */
170 function saisies_formulaire_verifier($flux) {
171 // Il faut que la fonction existe et qu'elle retourne bien un tableau
172 include_spip('inc/saisies');
173 $saisies = saisies_chercher_formulaire($flux['args']['form'], $flux['args']['args']);
174 if ($saisies) {
175 // On ajoute au contexte les champs à déclarer
176 $erreurs = saisies_verifier($saisies);
177 if ($erreurs and !isset($erreurs['message_erreur'])) {
178 $erreurs['message_erreur'] = _T('saisies:erreur_generique');
179 }
180
181 $flux['data'] = array_merge($erreurs, $flux['data']);
182
183 }
184
185 return $flux;
186 }