[PLUGINS] ~saisie 1.31.4 --> 1.38.6
[ptitvelo/web/www.git] / www / plugins / saisies / inc / saisies.php
index 4a713a5..c2e87f3 100644 (file)
@@ -245,32 +245,85 @@ function saisies_verifier($formulaire, $saisies_masquees_nulles=true){
        return $erreurs;\r
 }\r
 \r
+/*\r
+ * Applatie une description tabulaire\r
+ * @param string $tab, le tableau à aplatir\r
+ * @return $nouveau_tab\r
+ */\r
+function saisies_aplatir_tableau($tab){\r
+    $nouveau_tab = array();\r
+    foreach($tab as $entree=>$contenu){\r
+        if (is_array($contenu)){\r
+            foreach ($contenu as $cle => $valeur){\r
+                $nouveau_tab[$cle] = $valeur;\r
+                }\r
+            }\r
+        else{\r
+            $nouveau_tab[$entree] = $contenu;\r
+            }\r
+        }\r
+    return $nouveau_tab;\r
+}\r
+\r
+/*\r
+ * Applatie une description chaînée, en supprimant les sous-groupes.\r
+ * @param string $chaine, la chaîne à aplatir\r
+ * @return $chaine\r
+ */\r
+function saisies_aplatir_chaine($chaine){\r
+    return trim(preg_replace("#(?:^|\n)(\*(?:.*)|/\*)\n#i","\n",$chaine));\r
+    }\r
 /*\r
  * Transforme une chaine en tableau avec comme principe :\r
  * - une ligne devient une case\r
  * - si la ligne est de la forme truc|bidule alors truc est la clé et bidule la valeur\r
- *\r
+ * - si la ligne commence par * alors on commence un sous-tableau\r
+ * - si la ligne est égale à /*, alors on fini le sous-tableau\r
  * @param string $chaine Une chaine à transformer\r
  * @return array Retourne un tableau PHP\r
  */\r
 function saisies_chaine2tableau($chaine, $separateur="\n"){\r
        if ($chaine and is_string($chaine)){\r
                $tableau = array();\r
+               $soustab = False;\r
                // On découpe d'abord en lignes\r
                $lignes = explode($separateur, $chaine);\r
                foreach ($lignes as $i=>$ligne){\r
                        $ligne = trim(trim($ligne), '|');\r
                        // Si ce n'est pas une ligne sans rien\r
                        if ($ligne !== ''){\r
-                               // Si on trouve un découpage dans la ligne on fait cle|valeur\r
-                               if (strpos($ligne, '|') !== false){\r
-                                       list($cle,$valeur) = explode('|', $ligne, 2);\r
-                                       // permettre les traductions de valeurs au passage\r
-                                       $tableau[$cle] = _T_ou_typo($valeur, 'multi');\r
+                               // si ca commence par * c'est qu'on va faire un sous tableau\r
+                               if (strpos($ligne,"*")===0){\r
+                                       $soustab=True;\r
+                                       $soustab_cle    = _T_ou_typo(substr($ligne,1), 'multi');\r
+                                       if (!isset($tableau[$soustab_cle])){\r
+                                               $tableau[$soustab_cle] = array();\r
+                                       }\r
+                               }\r
+                               elseif ($ligne=="/*"){//si on finit sous tableau\r
+                                       $soustab=False;\r
                                }\r
+                               else{//sinon c'est une entrée normale\r
+                               // Si on trouve un découpage dans la ligne on fait cle|valeur\r
+                                       if (strpos($ligne, '|') !== false){\r
+                                               list($cle,$valeur) = explode('|', $ligne, 2);\r
+                                               // permettre les traductions de valeurs au passage\r
+                                               if ($soustab == True){\r
+                                                       $tableau[$soustab_cle][$cle] = _T_ou_typo($valeur, 'multi');\r
+                                                       }\r
+                                               else{\r
+                                                       $tableau[$cle] = _T_ou_typo($valeur, 'multi');\r
+                                                       }\r
+                                       }\r
                                // Sinon on génère la clé\r
-                               else{\r
-                                       $tableau[$i] = $ligne;\r
+                                       else{\r
+                                               if ($soustab == True){\r
+                                                       $tableau[$soustab_cle][$i] = _T_ou_typo($ligne,'multi');\r
+                                                       }\r
+                                               else{\r
+                                                       $tableau[$i] = _T_ou_typo($ligne,'multi');\r
+                                                       }\r
+                                       }\r
                                }\r
                        }\r
                }\r
@@ -289,14 +342,28 @@ function saisies_chaine2tableau($chaine, $separateur="\n"){
  * Transforme un tableau en chaine de caractères avec comme principe :\r
  * - une case de vient une ligne de la chaine\r
  * - chaque ligne est générée avec la forme cle|valeur\r
+ * - si une entrée du tableau est elle même un tableau, on met une ligne de la forme *clef\r
+ * - pour marquer que l'on quitte un sous-tableau, on met une ligne commencant par /*, sauf si on bascule dans un autre sous-tableau.\r
  */\r
 function saisies_tableau2chaine($tableau){\r
        if ($tableau and is_array($tableau)){\r
                $chaine = '';\r
-       \r
+               $avant_est_tableau = False;\r
                foreach($tableau as $cle=>$valeur){\r
-                       $ligne = trim("$cle|$valeur");\r
-                       $chaine .= "$ligne\n";\r
+                       if (is_array($valeur)){\r
+                               $avant_est_tableau = True;\r
+                               $ligne=trim("*$cle");\r
+                               $chaine .= "$ligne\n";\r
+                               $chaine .= saisies_tableau2chaine($valeur)."\n";\r
+                               }\r
+                       else{   \r
+                               if ($avant_est_tableau == True){\r
+                                               $avant_est_tableau = False;\r
+                                               $chaine.="/*\n";\r
+                                       }\r
+                               $ligne = trim("$cle|$valeur");\r
+                               $chaine .= "$ligne\n";\r
+                       }\r
                }\r
                $chaine = trim($chaine);\r
        \r
@@ -403,4 +470,20 @@ function saisies_afficher_si($saisies) {
        return false;\r
 }\r
 \r
+\r
+/*\r
+ * Le tableau de saisies a-t-il une option afficher_si_remplissage ?\r
+ *\r
+ * @param array $saisies Un tableau de saisies\r
+ * @return boolean\r
+ */\r
+function saisies_afficher_si_remplissage($saisies) {\r
+       $saisies = saisies_lister_par_nom($saisies,true);\r
+       // Dès qu'il y a au moins une option afficher_si_remplissage, on l'active\r
+       foreach ($saisies as $saisie) {\r
+               if (isset($saisie['options']['afficher_si_remplissage']))\r
+                       return true;\r
+       }\r
+       return false;\r
+}\r
 ?>\r