[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins / saisies / saisies_pipelines.php
index ff94b5e..f262d21 100644 (file)
-<?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) {
-       if (
-               // Si on cherche un squelette de formulaire
-               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;
-}
+<?php\r
+\r
+/**\r
+ * Utilisation des pipelines\r
+ *\r
+ * @package SPIP\Saisies\Pipelines\r
+**/\r
+\r
+// Sécurité\r
+if (!defined('_ECRIRE_INC_VERSION')) {\r
+       return;\r
+}\r
+\r
+/**\r
+ * Ajoute les scripts JS et CSS de saisies dans l'espace privé\r
+ *\r
+ * @param string $flux\r
+ * @return string\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
+       \r
+       return $flux;\r
+}\r
+\r
+/**\r
+ * Ajoute les scripts JS et CSS de saisies dans l'espace public\r
+ *\r
+ * Ajoute également de quoi gérer le datepicker de la saisie date si\r
+ * celle-ci est utilisée dans la page.\r
+ *\r
+ * @param string $flux\r
+ * @return string\r
+**/\r
+function saisies_affichage_final($flux) {\r
+       if (\r
+               $GLOBALS['html'] // si c'est bien du HTML\r
+               and ($p = strpos($flux, '<!--!inserer_saisie_editer-->')) !== false // et qu'on a au moins une saisie\r
+               and strpos($flux, '<head') !== false // et qu'on a la balise <head> quelque part\r
+       ) {\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
+               }\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
+                               $theme_css = 'jquery.ui.theme';\r
+                               $ui_css_dir = 'css';\r
+                               // compatibilité SPIP 3.1 et jQuery UI 1.11\r
+                               $version = explode('.', $GLOBALS['spip_version_branche']);\r
+                               if ($version[0] > 3 or ($version[0] == 3 and $version[1] > 0)) {\r
+                                       $theme_css = 'theme';\r
+                                       $ui_css_dir = 'css/ui';\r
+                               }\r
+                               array_push($ui_plugins, $theme_css);\r
+                               foreach ($ui_plugins as $ui_plug) {\r
+                                               // compatibilité pour les versions < SPIP 3.2\r
+                                               if ($version[0] < 3 or ($version[0] == 3 and $version[1] < 2)) {\r
+                                                       $ui_plug_css = find_in_path("$ui_css_dir/$ui_plug.css");\r
+                                                       if (strpos($flux, "$ui_css_dir/$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
+                               // compatibilité SPIP 3.2 et jQuery UI 1.12\r
+                if ($version[0] == 3 and $version[1] > 1) {\r
+                               $ins_css .= "\n<link rel='stylesheet' type='text/css' media='all' href='" . find_in_path('css/ui/jquery-ui.css') . "' />\n";\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
+       \r
+       return $flux;\r
+}\r
+\r
+\r
+/**\r
+ * Déclarer automatiquement les champs d'un formulaire CVT qui déclare des saisies\r
+ *\r
+ * Recherche une fonction `formulaires_XX_saisies_dist` et l'utilise si elle\r
+ * est présente. Cette fonction doit retourner une liste de saisies dont on se\r
+ * sert alors pour calculer les champs utilisés dans le formulaire.\r
+ *\r
+ * @param array $flux\r
+ * @return array\r
+**/\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
+       include_spip('inc/saisies');\r
+       $saisies = saisies_chercher_formulaire($flux['args']['form'], $flux['args']['args']);\r
+\r
+       if ($saisies) {\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
+/**\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
+ *\r
+ * Dans le cadre d'un formulaire CVT demandé, si ce formulaire a déclaré des saisies, et\r
+ * qu'il n'y a pas de squelette spécifique pour afficher le HTML du formulaire,\r
+ * alors on utilise le formulaire générique intégré au plugin saisie, qui calculera le HTML\r
+ * à partir de la déclaration des saisies indiquées.\r
+ *\r
+ * @see saisies_formulaire_charger()\r
+ *\r
+ * @param array $flux\r
+ * @return array\r
+**/\r
+function saisies_styliser($flux) {\r
+       if (\r
+               // Si on cherche un squelette de formulaire\r
+               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
+/**\r
+ * Ajouter les vérifications déclarées dans la fonction "saisies" du CVT\r
+ *\r
+ * Si un formulaire CVT a déclaré des saisies, on utilise sa déclaration\r
+ * pour effectuer les vérifications du formulaire.\r
+ *\r
+ * @see saisies_formulaire_charger()\r
+ * @uses saisies_verifier()\r
+ *\r
+ * @param array $flux\r
+ *     Liste des erreurs du formulaire\r
+ * @return array\r
+ *     iste des erreurs\r
+ */\r
+function saisies_formulaire_verifier($flux) {\r
+       // Il faut que la fonction existe et qu'elle retourne bien un tableau\r
+       include_spip('inc/saisies');\r
+       $saisies = saisies_chercher_formulaire($flux['args']['form'], $flux['args']['args']);\r
+       if ($saisies) {\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
+               }\r
+\r
+               $flux['data'] = array_merge($erreurs, $flux['data']);\r
+\r
+       }\r
+\r
+       return $flux;\r
+}\r