[SKEL] +affecté le mot-clé "Dates et auteurs" pour les rubriques dont on
[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 $ui_plug_css = find_in_path("$ui_css_dir/$ui_plug.css");
68 if (strpos($flux, "$ui_css_dir/$ui_plug.css") === false) {// si pas déjà chargé
69 $ins_css .= "\n<link rel='stylesheet' href='$ui_plug_css' type='text/css' media='all' />\n";
70 }
71 }
72 }
73 }
74
75 $flux = substr_replace($flux, $ins_css, $pi, 0);
76 // On insère le JS à la fin du <head>
77 $pos_head = strpos($flux, '</head');
78 $js = find_in_path('javascript/saisies.js');
79 $ins_js = "\n<script type='text/javascript' src='$js'></script>\n";
80 $flux = substr_replace($flux, $ins_js, $pos_head, 0);
81 }
82
83 return $flux;
84 }
85
86
87 /**
88 * Déclarer automatiquement les champs d'un formulaire CVT qui déclare des saisies
89 *
90 * Recherche une fonction `formulaires_XX_saisies_dist` et l'utilise si elle
91 * est présente. Cette fonction doit retourner une liste de saisies dont on se
92 * sert alors pour calculer les champs utilisés dans le formulaire.
93 *
94 * @param array $flux
95 * @return array
96 **/
97 function saisies_formulaire_charger($flux) {
98 // Si le flux data est inexistant, on quitte : Le CVT d'origine a décidé de ne pas continuer
99 if (!is_array($flux['data'])) {
100 return $flux;
101 }
102
103 // Il faut que la fonction existe et qu'elle retourne bien un tableau
104 include_spip('inc/saisies');
105 $saisies = saisies_chercher_formulaire($flux['args']['form'], $flux['args']['args']);
106
107 if ($saisies) {
108 // On ajoute au contexte les champs à déclarer
109 $contexte = saisies_lister_valeurs_defaut($saisies);
110 $flux['data'] = array_merge($contexte, $flux['data']);
111
112 // On ajoute le tableau complet des saisies
113 $flux['data']['_saisies'] = $saisies;
114 }
115 return $flux;
116 }
117
118 /**
119 * 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
120 *
121 * Dans le cadre d'un formulaire CVT demandé, si ce formulaire a déclaré des saisies, et
122 * qu'il n'y a pas de squelette spécifique pour afficher le HTML du formulaire,
123 * alors on utilise le formulaire générique intégré au plugin saisie, qui calculera le HTML
124 * à partir de la déclaration des saisies indiquées.
125 *
126 * @see saisies_formulaire_charger()
127 *
128 * @param array $flux
129 * @return array
130 **/
131 function saisies_styliser($flux) {
132 if (
133 // Si on cherche un squelette de formulaire
134 strncmp($flux['args']['fond'], 'formulaires/', 12) == 0
135 // Et qu'il y a des saisies dans le contexte
136 and isset($flux['args']['contexte']['_saisies'])
137 // Et que le fichier choisi est vide ou n'existe pas
138 and include_spip('inc/flock')
139 and $ext = $flux['args']['ext']
140 and lire_fichier($flux['data'].'.'.$ext, $contenu_squelette)
141 and !trim($contenu_squelette)
142 ) {
143 $flux['data'] = preg_replace("/\.$ext$/", '', find_in_path("formulaires/inc-saisies-cvt.$ext"));
144 }
145
146 return $flux;
147 }
148
149 /**
150 * Ajouter les vérifications déclarées dans la fonction "saisies" du CVT
151 *
152 * Si un formulaire CVT a déclaré des saisies, on utilise sa déclaration
153 * pour effectuer les vérifications du formulaire.
154 *
155 * @see saisies_formulaire_charger()
156 * @uses saisies_verifier()
157 *
158 * @param array $flux
159 * Liste des erreurs du formulaire
160 * @return array
161 * iste des erreurs
162 */
163 function saisies_formulaire_verifier($flux) {
164 // Il faut que la fonction existe et qu'elle retourne bien un tableau
165 include_spip('inc/saisies');
166 $saisies = saisies_chercher_formulaire($flux['args']['form'], $flux['args']['args']);
167 if ($saisies) {
168 // On ajoute au contexte les champs à déclarer
169 $erreurs = saisies_verifier($saisies);
170 if ($erreurs and !isset($erreurs['message_erreur'])) {
171 $erreurs['message_erreur'] = _T('saisies:erreur_generique');
172 }
173 $flux['data'] = array_merge($erreurs, $flux['data']);
174 }
175
176 return $flux;
177 }