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