-<?php\r
-\r
-// Sécurité\r
-if (!defined("_ECRIRE_INC_VERSION")) return;\r
-\r
-function saisies_header_prive($flux){\r
- $js = find_in_path('javascript/saisies.js');\r
- $flux .= "\n<script type='text/javascript' src='$js'></script>\n";\r
- $css = generer_url_public('saisies.css');\r
- $flux .= "\n<link rel='stylesheet' href='$css' type='text/css' media='all' />\n";\r
- $css_constructeur = find_in_path('css/formulaires_constructeur.css');\r
- $flux .= "\n<link rel='stylesheet' href='$css_constructeur' type='text/css' />\n";\r
- return $flux;\r
-}\r
-\r
-function saisies_affichage_final($flux){\r
- if (($p = strpos($flux,"<!--!inserer_saisie_editer-->"))!==false){\r
- // On insère la CSS devant le premier <link> trouvé\r
- if (!$pi = strpos($flux, "<link") AND !$pi=strpos($flux, '</head'))\r
- $pi = $p; // si pas de <link inserer comme un goret entre 2 <li> de saisies\r
- $css = generer_url_public('saisies.css');\r
- $ins_css = "\n<link rel='stylesheet' href='$css' type='text/css' media='all' />\n";\r
-\r
- if (strpos($flux,"saisie_date")!==false){//si on a une saisie de type date, on va charger les css de jquery_ui\r
- include_spip("jqueryui_pipelines");\r
- if (function_exists("jqueryui_dependances")){\r
- $ui_plugins = jqueryui_dependances(array("jquery.ui.datepicker"));\r
-\r
- array_push($ui_plugins,"jquery.ui.theme");\r
- foreach ($ui_plugins as $ui_plug){\r
- $ui_plug_css = find_in_path("css/$ui_plug.css");\r
- if (strpos($flux,"css/$ui_plug.css")===false){// si pas déjà chargé\r
- $ins_css .= "\n<link rel='stylesheet' href='$ui_plug_css' type='text/css' media='all' />\n";\r
- }\r
- }\r
- }\r
- }\r
-\r
- $flux = substr_replace($flux, $ins_css, $pi, 0);\r
- // On insère le JS à la fin du <head>\r
- $pos_head = strpos($flux, '</head');\r
- $js = find_in_path('javascript/saisies.js');\r
- $ins_js = "\n<script type='text/javascript' src='$js'></script>\n";\r
- $flux = substr_replace($flux, $ins_js, $pos_head, 0);\r
- }\r
- return $flux;\r
-}\r
-\r
-// Déclaration des pipelines\r
-function saisies_saisies_autonomes($flux) { return $flux; }\r
-function saisies_formulaire_saisies($flux) { return $flux; }\r
-\r
-// Déclarer automatiquement les champs d'un CVT si on les trouve dans un tableau de saisies et s'ils ne sont pas déjà déclarés\r
-function saisies_formulaire_charger($flux){\r
- // Si le flux data est inexistant, on quitte : Le CVT d'origine a décidé de ne pas continuer\r
- if (!is_array($flux['data'])){\r
- return $flux;\r
- }\r
-\r
- // Il faut que la fonction existe et qu'elle retourne bien un tableau\r
- if (include_spip('inc/saisies')\r
- and $saisies = saisies_chercher_formulaire($flux['args']['form'], $flux['args']['args'])\r
- ){\r
- // On ajoute au contexte les champs à déclarer\r
- $contexte = saisies_lister_valeurs_defaut($saisies);\r
- $flux['data'] = array_merge($contexte, $flux['data']);\r
-\r
- // On ajoute le tableau complet des saisies\r
- $flux['data']['_saisies'] = $saisies;\r
- }\r
- return $flux;\r
-}\r
-\r
-// 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\r
-function saisies_styliser($flux){\r
- // Si on cherche un squelette de formulaire\r
- if (strncmp($flux['args']['fond'],'formulaires/',12)==0\r
- // Et qu'il y a des saisies dans le contexte\r
- and isset($flux['args']['contexte']['_saisies'])\r
- // Et que le fichier choisi est vide ou n'existe pas\r
- and include_spip('inc/flock')\r
- and $ext = $flux['args']['ext']\r
- and lire_fichier($flux['data'].'.'.$ext, $contenu_squelette)\r
- and !trim($contenu_squelette)\r
- ){\r
- $flux['data'] = preg_replace("/\.$ext$/", '', find_in_path("formulaires/inc-saisies-cvt.$ext"));\r
- }\r
-\r
- return $flux;\r
-}\r
-\r
-// Ajouter les vérifications déclarées dans la fonction "saisies" du CVT\r
-function saisies_formulaire_verifier($flux){\r
- // Il faut que la fonction existe et qu'elle retourne bien un tableau\r
- if (include_spip('inc/saisies') and $saisies = saisies_chercher_formulaire($flux['args']['form'], $flux['args']['args'])){\r
- // On ajoute au contexte les champs à déclarer\r
- $erreurs = saisies_verifier($saisies);\r
- if ($erreurs and !isset($erreurs['message_erreur']))\r
- $erreurs['message_erreur'] = _T('saisies:erreur_generique');\r
- $flux['data'] = array_merge($erreurs, $flux['data']);\r
- }\r
-\r
-\r
- return $flux;\r
-}\r
-\r
-?>\r
+<?php
+
+/**
+ * Utilisation des pipelines
+ *
+ * @package SPIP\Saisies\Pipelines
+**/
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Ajoute les scripts JS et CSS de saisies dans l'espace privé
+ *
+ * @param string $flux
+ * @return string
+**/
+function saisies_header_prive($flux){
+ $js = find_in_path('javascript/saisies.js');
+ $flux .= "\n<script type='text/javascript' src='$js'></script>\n";
+ $css = generer_url_public('saisies.css');
+ $flux .= "\n<link rel='stylesheet' href='$css' type='text/css' media='all' />\n";
+ $css_constructeur = find_in_path('css/formulaires_constructeur.css');
+ $flux .= "\n<link rel='stylesheet' href='$css_constructeur' type='text/css' />\n";
+ return $flux;
+}
+
+/**
+ * Ajoute les scripts JS et CSS de saisies dans l'espace public
+ *
+ * Ajoute également de quoi gérer le datepicker de la saisie date si
+ * celle-ci est utilisée dans la page.
+ *
+ * @param string $flux
+ * @return string
+**/
+function saisies_affichage_final($flux){
+ if (
+ $GLOBALS['html'] // si c'est bien du HTML
+ and ($p = strpos($flux,"<!--!inserer_saisie_editer-->")) !== false // et qu'on a au moins une saisie
+ and strpos($flux,'<head') !== false // et qu'on a la balise <head> quelque part
+ ){
+ // On insère la CSS devant le premier <link> trouvé
+ if (!$pi = strpos($flux, "<link") AND !$pi=strpos($flux, '</head')) {
+ $pi = $p; // si pas de <link inserer comme un goret entre 2 <li> de saisies
+ }
+ $css = generer_url_public('saisies.css');
+ $ins_css = "\n<link rel='stylesheet' href='$css' type='text/css' media='all' />\n";
+
+ if (strpos($flux,"saisie_date")!==false){//si on a une saisie de type date, on va charger les css de jquery_ui
+ include_spip("jqueryui_pipelines");
+ if (function_exists("jqueryui_dependances")){
+ $ui_plugins = jqueryui_dependances(array("jquery.ui.datepicker"));
+ $theme_css = "jquery.ui.theme";
+ $ui_css_dir = "css";
+ // compatibilité SPIP 3.1 et jQuery UI 1.11
+ $version = explode(".",$GLOBALS['spip_version_branche']);
+ if ($version[0]>3 OR ($version[0]==3 AND $version[1]>0)) {
+ $theme_css = "theme";
+ $ui_css_dir = "css/ui";
+ }
+ array_push($ui_plugins,$theme_css);
+ foreach ($ui_plugins as $ui_plug){
+ $ui_plug_css = find_in_path("$ui_css_dir/$ui_plug.css");
+ if (strpos($flux,"$ui_css_dir/$ui_plug.css")===false){// si pas déjà chargé
+ $ins_css .= "\n<link rel='stylesheet' href='$ui_plug_css' type='text/css' media='all' />\n";
+ }
+ }
+ }
+ }
+
+ $flux = substr_replace($flux, $ins_css, $pi, 0);
+ // On insère le JS à la fin du <head>
+ $pos_head = strpos($flux, '</head');
+ $js = find_in_path('javascript/saisies.js');
+ $ins_js = "\n<script type='text/javascript' src='$js'></script>\n";
+ $flux = substr_replace($flux, $ins_js, $pos_head, 0);
+ }
+ return $flux;
+}
+
+
+/**
+ * Déclarer automatiquement les champs d'un formulaire CVT qui déclare des saisies
+ *
+ * Recherche une fonction `formulaires_XX_saisies_dist` et l'utilise si elle
+ * est présente. Cette fonction doit retourner une liste de saisies dont on se
+ * sert alors pour calculer les champs utilisés dans le formulaire.
+ *
+ * @param array $flux
+ * @return array
+**/
+function saisies_formulaire_charger($flux){
+ // Si le flux data est inexistant, on quitte : Le CVT d'origine a décidé de ne pas continuer
+ if (!is_array($flux['data'])){
+ return $flux;
+ }
+
+ // Il faut que la fonction existe et qu'elle retourne bien un tableau
+ include_spip('inc/saisies');
+ $saisies = saisies_chercher_formulaire($flux['args']['form'], $flux['args']['args']);
+
+ if ($saisies) {
+ // On ajoute au contexte les champs à déclarer
+ $contexte = saisies_lister_valeurs_defaut($saisies);
+ $flux['data'] = array_merge($contexte, $flux['data']);
+
+ // On ajoute le tableau complet des saisies
+ $flux['data']['_saisies'] = $saisies;
+ }
+ return $flux;
+}
+
+/**
+ * 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
+ *
+ * Dans le cadre d'un formulaire CVT demandé, si ce formulaire a déclaré des saisies, et
+ * qu'il n'y a pas de squelette spécifique pour afficher le HTML du formulaire,
+ * alors on utilise le formulaire générique intégré au plugin saisie, qui calculera le HTML
+ * à partir de la déclaration des saisies indiquées.
+ *
+ * @see saisies_formulaire_charger()
+ *
+ * @param array $flux
+ * @return array
+**/
+function saisies_styliser($flux){
+ // Si on cherche un squelette de formulaire
+ if (strncmp($flux['args']['fond'],'formulaires/',12)==0
+ // Et qu'il y a des saisies dans le contexte
+ and isset($flux['args']['contexte']['_saisies'])
+ // Et que le fichier choisi est vide ou n'existe pas
+ and include_spip('inc/flock')
+ and $ext = $flux['args']['ext']
+ and lire_fichier($flux['data'].'.'.$ext, $contenu_squelette)
+ and !trim($contenu_squelette)
+ ){
+ $flux['data'] = preg_replace("/\.$ext$/", '', find_in_path("formulaires/inc-saisies-cvt.$ext"));
+ }
+
+ return $flux;
+}
+
+/**
+ * Ajouter les vérifications déclarées dans la fonction "saisies" du CVT
+ *
+ * Si un formulaire CVT a déclaré des saisies, on utilise sa déclaration
+ * pour effectuer les vérifications du formulaire.
+ *
+ * @see saisies_formulaire_charger()
+ * @uses saisies_verifier()
+ *
+ * @param array $flux
+ * Liste des erreurs du formulaire
+ * @return array
+ * iste des erreurs
+ */
+function saisies_formulaire_verifier($flux){
+ // Il faut que la fonction existe et qu'elle retourne bien un tableau
+ include_spip('inc/saisies');
+ $saisies = saisies_chercher_formulaire($flux['args']['form'], $flux['args']['args']);
+ if ($saisies) {
+ // On ajoute au contexte les champs à déclarer
+ $erreurs = saisies_verifier($saisies);
+ if ($erreurs and !isset($erreurs['message_erreur']))
+ $erreurs['message_erreur'] = _T('saisies:erreur_generique');
+ $flux['data'] = array_merge($erreurs, $flux['data']);
+ }
+
+ return $flux;
+}
+
+