[PLUGINS] +maj gis4
[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")) return;
11
12 /**
13 * Ajoute les scripts JS et CSS de saisies dans l'espace privé
14 *
15 * @param string $flux
16 * @return string
17 **/
18 function saisies_header_prive($flux){
19 $js = find_in_path('javascript/saisies.js');
20 $flux .= "\n<script type='text/javascript' src='$js'></script>\n";
21 $css = generer_url_public('saisies.css');
22 $flux .= "\n<link rel='stylesheet' href='$css' type='text/css' media='all' />\n";
23 $css_constructeur = find_in_path('css/formulaires_constructeur.css');
24 $flux .= "\n<link rel='stylesheet' href='$css_constructeur' type='text/css' />\n";
25 return $flux;
26 }
27
28 /**
29 * Ajoute les scripts JS et CSS de saisies dans l'espace public
30 *
31 * Ajoute également de quoi gérer le datepicker de la saisie date si
32 * celle-ci est utilisée dans la page.
33 *
34 * @param string $flux
35 * @return string
36 **/
37 function saisies_affichage_final($flux){
38 if (
39 $GLOBALS['html'] // si c'est bien du HTML
40 and ($p = strpos($flux,"<!--!inserer_saisie_editer-->")) !== false // et qu'on a au moins une saisie
41 and strpos($flux,'<head') !== false // et qu'on a la balise <head> quelque part
42 ){
43 // On insère la CSS devant le premier <link> trouvé
44 if (!$pi = strpos($flux, "<link") AND !$pi=strpos($flux, '</head')) {
45 $pi = $p; // si pas de <link inserer comme un goret entre 2 <li> de saisies
46 }
47 $css = generer_url_public('saisies.css');
48 $ins_css = "\n<link rel='stylesheet' href='$css' type='text/css' media='all' />\n";
49
50 if (strpos($flux,"saisie_date")!==false){//si on a une saisie de type date, on va charger les css de jquery_ui
51 include_spip("jqueryui_pipelines");
52 if (function_exists("jqueryui_dependances")){
53 $ui_plugins = jqueryui_dependances(array("jquery.ui.datepicker"));
54 $theme_css = "jquery.ui.theme";
55 $ui_css_dir = "css";
56 // compatibilité SPIP 3.1 et jQuery UI 1.11
57 $version = explode(".",$GLOBALS['spip_version_branche']);
58 if ($version[0]>3 OR ($version[0]==3 AND $version[1]>0)) {
59 $theme_css = "theme";
60 $ui_css_dir = "css/ui";
61 }
62 array_push($ui_plugins,$theme_css);
63 foreach ($ui_plugins as $ui_plug){
64 $ui_plug_css = find_in_path("$ui_css_dir/$ui_plug.css");
65 if (strpos($flux,"$ui_css_dir/$ui_plug.css")===false){// si pas déjà chargé
66 $ins_css .= "\n<link rel='stylesheet' href='$ui_plug_css' type='text/css' media='all' />\n";
67 }
68 }
69 }
70 }
71
72 $flux = substr_replace($flux, $ins_css, $pi, 0);
73 // On insère le JS à la fin du <head>
74 $pos_head = strpos($flux, '</head');
75 $js = find_in_path('javascript/saisies.js');
76 $ins_js = "\n<script type='text/javascript' src='$js'></script>\n";
77 $flux = substr_replace($flux, $ins_js, $pos_head, 0);
78 }
79 return $flux;
80 }
81
82
83 /**
84 * Déclarer automatiquement les champs d'un formulaire CVT qui déclare des saisies
85 *
86 * Recherche une fonction `formulaires_XX_saisies_dist` et l'utilise si elle
87 * est présente. Cette fonction doit retourner une liste de saisies dont on se
88 * sert alors pour calculer les champs utilisés dans le formulaire.
89 *
90 * @param array $flux
91 * @return array
92 **/
93 function saisies_formulaire_charger($flux){
94 // Si le flux data est inexistant, on quitte : Le CVT d'origine a décidé de ne pas continuer
95 if (!is_array($flux['data'])){
96 return $flux;
97 }
98
99 // Il faut que la fonction existe et qu'elle retourne bien un tableau
100 include_spip('inc/saisies');
101 $saisies = saisies_chercher_formulaire($flux['args']['form'], $flux['args']['args']);
102
103 if ($saisies) {
104 // On ajoute au contexte les champs à déclarer
105 $contexte = saisies_lister_valeurs_defaut($saisies);
106 $flux['data'] = array_merge($contexte, $flux['data']);
107
108 // On ajoute le tableau complet des saisies
109 $flux['data']['_saisies'] = $saisies;
110 }
111 return $flux;
112 }
113
114 /**
115 * 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
116 *
117 * Dans le cadre d'un formulaire CVT demandé, si ce formulaire a déclaré des saisies, et
118 * qu'il n'y a pas de squelette spécifique pour afficher le HTML du formulaire,
119 * alors on utilise le formulaire générique intégré au plugin saisie, qui calculera le HTML
120 * à partir de la déclaration des saisies indiquées.
121 *
122 * @see saisies_formulaire_charger()
123 *
124 * @param array $flux
125 * @return array
126 **/
127 function saisies_styliser($flux){
128 // Si on cherche un squelette de formulaire
129 if (strncmp($flux['args']['fond'],'formulaires/',12)==0
130 // Et qu'il y a des saisies dans le contexte
131 and isset($flux['args']['contexte']['_saisies'])
132 // Et que le fichier choisi est vide ou n'existe pas
133 and include_spip('inc/flock')
134 and $ext = $flux['args']['ext']
135 and lire_fichier($flux['data'].'.'.$ext, $contenu_squelette)
136 and !trim($contenu_squelette)
137 ){
138 $flux['data'] = preg_replace("/\.$ext$/", '', find_in_path("formulaires/inc-saisies-cvt.$ext"));
139 }
140
141 return $flux;
142 }
143
144 /**
145 * Ajouter les vérifications déclarées dans la fonction "saisies" du CVT
146 *
147 * Si un formulaire CVT a déclaré des saisies, on utilise sa déclaration
148 * pour effectuer les vérifications du formulaire.
149 *
150 * @see saisies_formulaire_charger()
151 * @uses saisies_verifier()
152 *
153 * @param array $flux
154 * Liste des erreurs du formulaire
155 * @return array
156 * iste des erreurs
157 */
158 function saisies_formulaire_verifier($flux){
159 // Il faut que la fonction existe et qu'elle retourne bien un tableau
160 include_spip('inc/saisies');
161 $saisies = saisies_chercher_formulaire($flux['args']['form'], $flux['args']['args']);
162 if ($saisies) {
163 // On ajoute au contexte les champs à déclarer
164 $erreurs = saisies_verifier($saisies);
165 if ($erreurs and !isset($erreurs['message_erreur']))
166 $erreurs['message_erreur'] = _T('saisies:erreur_generique');
167 $flux['data'] = array_merge($erreurs, $flux['data']);
168 }
169
170 return $flux;
171 }
172
173