/** * Génère un nom unique pour un champ d'un formulaire donné * * @param array $formulaire * Le formulaire à analyser * @param string $type_saisie * Le type de champ dont on veut un identifiant * @return string * Un nom unique par rapport aux autres champs du formulaire */ function saisies_generer_nom($formulaire, $type_saisie) { $champs = saisies_lister_champs($formulaire); // Tant que type_numero existe, on incrémente le compteur $compteur = 1; while (array_search($type_saisie . '_' . $compteur, $champs) !== false) { $compteur++; } // On a alors un compteur unique pour ce formulaire return $type_saisie . '_' . $compteur; }
/** * A utiliser dans une fonction charger d'un formulaire CVT, * cette fonction renvoie le tableau de contexte correspondant * de la forme $contexte['nom_champ'] = ''. * * @param array $contenu Le contenu d'un formulaire (un tableau de saisies) * * @return array Un tableau de contexte */ function saisies_charger_champs($contenu) { // array_fill_keys est disponible uniquement avec PHP >= 5.2.0 // return array_fill_keys(saisies_lister_champs($contenu, false), ''); $champs = array(); foreach (saisies_lister_champs($contenu, false) as $champ) { $champs[$champ] = ''; } return $champs; }
function formidable_generer_saisie_configurable($saisie, $env){ // On récupère le nom $nom = $saisie['options']['nom']; $identifiant = isset($saisie['identifiant']) ? $saisie['identifiant'] : ""; // On cherche si ya un formulaire de config $formulaire_config = isset($env['erreurs']['configurer_'.$nom]) ? $env['erreurs']['configurer_'.$nom] : ""; // On ajoute une classe if (!isset($saisie['options']['conteneur_class'])) { $saisie['options']['conteneur_class'] = ''; // initialisation } // Compat ancien nom li_class if (isset($saisie['options']['li_class'])) { $saisie['options']['conteneur_class'] .= " " . $saisie['options']['li_class']; // initialisation } $saisie['options']['conteneur_class'] .= ' configurable'; // On ajoute l'option "tout_afficher" $saisie['options']['tout_afficher'] = 'oui'; // On ajoute les boutons d'actions, mais seulement s'il n'y a pas de configuration de lancée if (!$env['erreurs']) { $saisie = saisies_inserer_html( $saisie, recuperer_fond( 'formulaires/inc-construire_formulaire-actions', array( 'nom' => $nom, 'identifiant' => $identifiant, 'formulaire_config' => $formulaire_config, 'deplacable' => $env['_chemin_ui'] ) ), 'debut' ); } // On ajoute une ancre pour s'y déplacer $saisie = saisies_inserer_html( $saisie, "\n<a id=\"configurer_$nom\"></a>\n", 'debut' ); // Si ya un form de config on l'ajoute à la fin if (is_array($formulaire_config)){ // On double l'environnement $env2 = $env; // On ajoute une classe $saisie['options']['conteneur_class'] .= ' en_configuration'; // Si possible on met en readonly $saisie['options']['readonly'] = 'oui'; // On vire les sous-saisies s'il y en a if (isset($saisie['saisies']) and $saisie['saisies'] and is_array($saisie['saisies'])){ $nb_champs_masques = count(saisies_lister_champs($saisie['saisies'])); $saisie['saisies'] = array( array( 'saisie' => 'explication', 'options' => array( 'nom' => 'truc', 'texte' => _T('saisies:construire_info_nb_champs_masques', array('nb'=>$nb_champs_masques)), ) ) ); } // On va ajouter le champ pour la position if (!($chemin_description = saisies_chercher($formulaire_config, "saisie_modifiee_${nom}[options][description]", true))){ $chemin_description = array(0); $formulaire_config = saisies_inserer( $formulaire_config, array( 'saisie' => 'fieldset', 'options' => array( 'nom' => "saisie_modifiee_${nom}[options][description]", 'label' => _T('saisies:option_groupe_description') ), 'saisies' => array() ), 0 ); } $chemin_description[] = 'saisies'; $chemin_description[] = '0'; // tout au début $formulaire_config = saisies_inserer( $formulaire_config, array( 'saisie' => 'position_construire_formulaire', 'options' => array( 'nom' => "saisie_modifiee_${nom}[position]", 'label' => _T('saisies:construire_position_label'), 'explication' => _T('saisies:construire_position_explication'), 'formulaire' => $env['_contenu'], 'saisie_a_positionner' => $nom ) ), $chemin_description ); $env2['saisies'] = $formulaire_config; // Un test pour savoir si on prend le _request ou bien $erreurs_test = $env['erreurs']; unset($erreurs_test['configurer_'.$nom]); unset($erreurs_test['positionner']); unset($erreurs_test['message_erreur']); if ($erreurs_test){ // Là aussi on désinfecte à la main if (isset($env2["saisie_modifiee_$nom"]['options']) and is_array($env2["saisie_modifiee_$nom"]['options'])) { spip_desinfecte($env2["saisie_modifiee_$nom"]['options']); } } else{ $env2["saisie_modifiee_$nom"] = $env2['_saisies_par_nom'][$nom]; // il n'y a pas toujours de verification... if (isset($env2["saisie_modifiee_$nom"]['verifier'])) { $env2["saisie_modifiee_$nom"]['verifier'][ $env2["saisie_modifiee_$nom"]['verifier']['type'] ] = $env2["saisie_modifiee_$nom"]['verifier']['options']; } } $env2['fond_generer'] = 'inclure/generer_saisies'; $saisie = saisies_inserer_html( $saisie, '<div class="formulaire_configurer"><'.saisie_balise_structure_formulaire('ul').' class="editer-groupe formulaire_configurer-contenus">' .recuperer_fond( 'inclure/generer_saisies', $env2 ) .'<'.saisie_balise_structure_formulaire('li').' class="boutons"> <input type="hidden" name="enregistrer_saisie" value="'.$nom.'" /> <button type="submit" class="submit link" name="enregistrer_saisie" value="">'._T('bouton_annuler').'</button> <input type="submit" class="submit" name="enregistrer" value="'._T('bouton_valider').'" /> </'.saisie_balise_structure_formulaire('li').'>' .'</'.saisie_balise_structure_formulaire('ul').'></div>', 'fin' ); } // On génère le HTML de la saisie $html = saisies_generer_html($saisie, $env); return $html; }
/** * Génère une vue d'une saisie à partir d'un tableau la décrivant * * @see saisies_generer_html() * @param array $saisie * Tableau de description d'une saisie * @param array $env * L'environnement, contenant normalement la réponse à la saisie * @param array $env_obligatoire * ??? * @return string * Code HTML de la vue de la saisie */ function saisies_generer_vue($saisie, $env = array(), $env_obligatoire = array()) { // Si le paramètre n'est pas bon, on génère du vide if (!is_array($saisie)) { return ''; } $contexte = array(); // On sélectionne le type de saisie $contexte['type_saisie'] = $saisie['saisie']; // Peut-être des transformations à faire sur les options textuelles $options = $saisie['options']; foreach ($options as $option => $valeur) { if ($option == 'datas') { // exploser une chaine datas en tableau (applique _T_ou_typo sur chaque valeur) $options[$option] = saisies_chaine2tableau($valeur); } else { $options[$option] = _T_ou_typo($valeur, 'multi'); } } // On ajoute les options propres à la saisie $contexte = array_merge($contexte, $options); // Si env est définie dans les options ou qu'il y a des enfants, on ajoute tout l'environnement if (isset($contexte['env']) or isset($saisie['saisies']) and is_array($saisie['saisies'])) { unset($contexte['env']); // on sauve l'ancien environnement // car les sous-saisies ne doivent pas être affectees // par les modification sur l'environnement servant à generer la saisie mère $contexte['_env'] = $env; // À partir du moment où on passe tout l'environnement, il faut enlever // certains éléments qui ne doivent absolument provenir que des options $saisies_disponibles = saisies_lister_disponibles(); if (is_array($saisies_disponibles[$contexte['type_saisie']]['options'])) { $options_a_supprimer = saisies_lister_champs($saisies_disponibles[$contexte['type_saisie']]['options']); foreach ($options_a_supprimer as $option_a_supprimer) { unset($env[$option_a_supprimer]); } } $contexte = array_merge($env, $contexte); } // Dans tous les cas on récupère de l'environnement la valeur actuelle du champ // On regarde en priorité s'il y a un tableau listant toutes les valeurs if ($env['valeurs'] and is_array($env['valeurs']) and isset($env['valeurs'][$contexte['nom']])) { $contexte['valeur'] = $env['valeurs'][$contexte['nom']]; } elseif (preg_match('/([\\w]+)((\\[[\\w]+\\])+)/', $contexte['nom'], $separe)) { $contexte['valeur'] = $env[$separe[1]]; preg_match_all('/\\[([\\w]+)\\]/', $separe[2], $index); // On va chercher au fond du tableau foreach ($index[1] as $cle) { $contexte['valeur'] = $contexte['valeur'][$cle]; } } else { // certains n'ont pas de nom (fieldset) $contexte['valeur'] = isset($env[$contexte['nom']]) ? $env[$contexte['nom']] : ''; } // Si ya des enfants on les remonte dans le contexte if (isset($saisie['saisies']) and is_array($saisie['saisies'])) { $contexte['saisies'] = $saisie['saisies']; } if (is_array($env_obligatoire)) { $contexte = array_merge($contexte, $env_obligatoire); } // On génère la saisie return recuperer_fond('saisies-vues/_base', $contexte); }