/** * Duplique une saisie (ou groupe de saisies) * en placant la copie à la suite de la saisie d'origine. * Modifie automatiquement les identifiants des saisies * * @param array $saisies Un tableau décrivant les saisies * @param unknown_type $id_ou_nom_ou_chemin L'identifiant unique ou le nom ou le chemin de la saisie a dupliquer * @return array Retourne le tableau modifié des saisies */ function saisies_dupliquer($saisies, $id_ou_nom_ou_chemin) { // On récupère le contenu de la saisie à déplacer $saisie = saisies_chercher($saisies, $id_ou_nom_ou_chemin); if ($saisie) { list($clone) = saisies_transformer_noms_auto($saisies, array($saisie)); // insertion apres quoi ? $chemin_validation = saisies_chercher($saisies, $id_ou_nom_ou_chemin, true); // 1 de plus pour mettre APRES le champ trouve $chemin_validation[count($chemin_validation) - 1]++; // On ajoute "copie" après le label du champs $clone['options']['label'] .= ' ' . _T('saisies:construire_action_dupliquer_copie'); // Création de nouveau identifiants pour le clone $clone = saisie_identifier($clone, true); $saisies = saisies_inserer($saisies, $clone, $chemin_validation); } return $saisies; }
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; }
/** * Crée un identifiant Unique * pour toutes les saisies donnees qui n'en ont pas * * @param Array $saisies Tableau de saisies * @param Bool $regenerer Régénère un nouvel identifiant pour toutes les saisies ? * @return Array Tableau de saisies complété des identifiants */ function saisies_identifier($saisies, $regenerer = false) { if (!is_array($saisies)) { return array(); } foreach ($saisies as $k => $saisie) { $saisies[$k] = saisie_identifier($saisie, $regenerer); } return $saisies; }
// si le champs est deja decrit dans la nouvelle structure, on passe foreach ($ici as $c) { if ($c['options']['nom'] == $champ) { unset($champs[$champ]); continue 2; } } // nous sommes face a un champs extras ancien, non encore // pris en compte dans la nouvelle version // selon les anciennes saisies, on redirige sur les nouvelles if (!isset($nsaisie[$extra['type']])) { // saisie inconnue echo "- Type de saisie non trouvé : {$extra['type']}. Passage en textarea.<br />\n"; $extra['type'] = 'bloc'; } $nouveau = saisie_identifier(array()); $nouveau['saisie'] = $nsaisie[$extra['type']]; $nouveau['options'] = array('nom' => $champ); // cas particulier des auteurs if ($extra['type'] == 'auteurs') { $nouveau['options']['multiple'] = 'on'; } foreach (array('champ' => 'nom', 'label' => 'label', 'sql' => 'sql', 'explication' => 'explication', 'attention' => 'attention', 'obligatoire' => 'obligatoire', 'traitements' => 'traitements', 'rechercher' => 'rechercher', 'enum' => 'datas', 'type' => '', 'table' => '', '_id' => '', '_type' => '', '_objet' => '', '_table_sql' => '', 'saisie_parametres/class' => 'class', 'saisie_parametres/li_class' => 'conteneur_class', 'saisie_parametres/explication' => 'explication', 'saisie_parametres/attention' => 'attention', '__PHP_Incomplete_Class_Name' => '') as $old => $new) { // si $new est vide : on utilise pas. // si le contenu de $old est vide, on ne prend pas. // si iextras_upgrade_to_saisies_$old() existe, // on l'utilise pour calculer la nouvelle valeur if (!function_exists($f = 'iextras_upgrade_to_saisies_' . str_replace('/', '_', $old))) { $f = 'iextras_upgrade_to_saisies_all'; } $old = explode('/', $old);