/** * 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; }
function formulaires_construire_formulaire_verifier($identifiant, $formulaire_initial=array(), $options=array()){ include_spip('inc/saisies'); $erreurs = array(); // l'une ou l'autre sera presente $configurer_saisie = $enregistrer_saisie = ''; // Pas d'erreur si l'on ne demande rien if (!($nom_ou_id = $configurer_saisie = _request('configurer_saisie') OR $nom_ou_id = $enregistrer_saisie = _request('enregistrer_saisie'))) { return $erreurs; } // On ajoute un préfixe devant l'identifiant $identifiant = 'constructeur_formulaire_'.$identifiant; // On récupère le formulaire à son état actuel $formulaire_actuel = session_get($identifiant); // On récupère les saisies actuelles, par identifiant ou par nom if ($nom_ou_id[0] == '@') { $saisies_actuelles = saisies_lister_par_identifiant($formulaire_actuel); $nom = $saisies_actuelles[$nom_ou_id]['options']['nom']; } else { $saisies_actuelles = saisies_lister_par_nom($formulaire_actuel); $nom = $nom_ou_id; } $noms_autorises = array_keys($saisies_actuelles); // le nom (ou identifiant) doit exister if (!in_array($nom_ou_id, $noms_autorises)) { return $erreurs; } // La liste des saisies $saisies_disponibles = saisies_lister_disponibles(); $saisie = $saisies_actuelles[$nom_ou_id]; $formulaire_config = $saisies_disponibles[$saisie['saisie']]['options']; array_walk_recursive($formulaire_config, 'formidable_transformer_nom', "saisie_modifiee_${nom}[options][@valeur@]"); $formulaire_config = saisie_identifier(array('saisies'=>$formulaire_config)); $formulaire_config = $formulaire_config['saisies']; // Si la saisie possede un identifiant, on l'ajoute // au formulaire de configuration pour ne pas le perdre en route if (isset($saisie['identifiant']) and $saisie['identifiant']) { $formulaire_config = saisies_inserer( $formulaire_config, array( 'saisie' => 'hidden', 'options' => array( 'nom' => "saisie_modifiee_${nom}[identifiant]", 'defaut' => $saisie['identifiant'] ), ) ); } // S'il y a l'option adéquat, on ajoute le champ pour modifier le nom if (isset($options['modifier_nom']) and $options['modifier_nom'] and $chemin_nom = saisies_chercher($formulaire_config, "saisie_modifiee_${nom}[options][description]", true)) { $chemin_nom[] = 'saisies'; $chemin_nom[] = '0'; $formulaire_config = saisies_inserer( $formulaire_config, array( 'saisie' => 'input', 'options' => array( 'nom' => "saisie_modifiee_${nom}[options][nom]", 'label' => _T('saisies:option_nom_label'), 'explication' => _T('saisies:option_nom_explication'), 'obligatoire' => 'oui', 'size' => 50 ), 'verifier' => array( 'type' => 'regex', 'options' => array( 'modele' => '/^[\w]+$/' ) ) ), $chemin_nom ); } // liste des options de vérification $verif_options = array(); // S'il y a un groupe "validation" alors on va construire le formulaire des vérifications if ($chemin_validation = saisies_chercher($formulaire_config, "saisie_modifiee_${nom}[options][validation]", true)){ include_spip('inc/verifier'); $liste_verifications = verifier_lister_disponibles(); $chemin_validation[] = 'saisies'; $chemin_validation[] = 1000000; // à la fin // On construit la saisie à insérer et les fieldset des options $saisie_liste_verif = array( 'saisie' => 'selection', 'options' => array( 'nom' => "saisie_modifiee_${nom}[verifier][type]", 'label' => _T('saisies:construire_verifications_label'), 'option_intro' => _T('saisies:construire_verifications_aucune'), 'conteneur_class' => 'liste_verifications', 'datas' => array() ) ); foreach ($liste_verifications as $type_verif => $verif){ $saisie_liste_verif['options']['datas'][$type_verif] = $verif['titre']; // Si le type de vérif a des options, on ajoute un fieldset if (isset($verif['options']) and $verif['options'] and is_array($verif['options'])){ $groupe = array( 'saisie' => 'fieldset', 'options' => array( 'nom' => 'options', 'label' => $verif['titre'], 'conteneur_class' => "$type_verif options_verifier" ), 'saisies' => $verif['options'] ); array_walk_recursive($groupe, 'formidable_transformer_nom', "saisie_modifiee_${nom}[verifier][$type_verif][@valeur@]"); $verif_options[$type_verif] = $groupe; } } $verif_options = array_merge(array($saisie_liste_verif), $verif_options); } if ($enregistrer_saisie){ // La saisie modifié $saisie_modifiee = _request("saisie_modifiee_${nom}"); // On cherche les erreurs de la configuration $vraies_erreurs = saisies_verifier($formulaire_config); // Si on autorise à modifier le nom ET qu'il doit être unique : on vérifie if (isset($options['modifier_nom']) and $options['modifier_nom'] and isset($options['nom_unique']) and $options['nom_unique']) { $nom_modifie = $saisie_modifiee['options']['nom']; if ($nom_modifie != $enregistrer_saisie and saisies_chercher($formulaire_actuel, $nom_modifie)) $vraies_erreurs["saisie_modifiee_${nom}[options][nom]"] = _T('saisies:erreur_option_nom_unique'); } // On regarde s'il a été demandé un type de vérif if (isset($saisie_modifiee['verifier']['type']) and (($type_verif = $saisie_modifiee['verifier']['type']) != '') and $verif_options[$type_verif]) { // On ne vérifie que les options du type demandé $vraies_erreurs = array_merge($vraies_erreurs, saisies_verifier($verif_options[$type_verif]['saisies'])); } } // On insère chaque saisie des options de verification if ($verif_options){ foreach ($verif_options as $saisie_verif){ $formulaire_config = saisies_inserer($formulaire_config, $saisie_verif, $chemin_validation); } } $erreurs['configurer_'.$nom] = $formulaire_config; $erreurs['positionner'] = '#configurer_'.$nom; if ($enregistrer_saisie) { if ($vraies_erreurs) { $erreurs = array_merge($erreurs, $vraies_erreurs); } else { $erreurs = array(); } } else { $erreurs['message_erreur'] = ''; // on ne veut pas du message_erreur automatique } return $erreurs; }