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
* 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
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