/** * Lorsque l'on valide les formulaires, les saisies ayant une option afficher_si_remplissage * et dont les conditions ne sont pas remplies ne doivent pas être vérifiées * * @param array $saisies * Tableau de descriptions de saisies */ function saisies_verifier_afficher_si_remplissage($saisies, $env = null) { // eviter une erreur par maladresse d'appel :) if (!is_array($saisies)) { return array(); } foreach ($saisies as $cle => $saisie) { if (isset($saisie['options']['afficher_si_remplissage'])) { $condition = $saisie['options']['afficher_si_remplissage']; // On gère le cas @plugin:non_plugin@ preg_match_all('#@plugin:(. )@#U', $condition, $matches); foreach ($matches[1] as $plug) { if (defined('_DIR_PLUGIN_'.strtoupper($plug))) { $condition = preg_replace('#@plugin:'.$plug.'@#U', 'true', $condition); } else { $condition = preg_replace('#@plugin:'.$plug.'@#U', 'false', $condition); } } // On gère le cas @config:plugin:meta@ suivi d'un test preg_match_all('#@config:(. ):(. )@#U', $condition, $matches); foreach ($matches[1] as $plugin) { $config = lire_config($plugin); $condition = preg_replace('#@config:'.$plugin.':'.$matches[2][0].'@#U', '"'.$config[$matches[2][0]].'"', $condition); } // On transforme en une condition valide if (is_null($env)) { $condition = preg_replace('#@(. )@#U', '_request('$1')', $condition); } else { $condition = preg_replace('#@(. )@#U', '$env["valeurs"]['$1']', $condition); } eval('$ok = '.$condition.';'); if (!$ok) { unset($saisies[$cle]); if (is_null($env)) { set_request($saisie['options']['nom'], null); } } } if (isset($saisies[$cle]['saisies'])) { // S'il s'agit d'un fieldset ou equivalent, verifier les sous-saisies $saisies[$cle]['saisies'] = saisies_verifier_afficher_si_remplissage($saisies[$cle]['saisies'], $env); } } return $saisies; }