コード例 #1
0
/**
 * 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;
}
コード例 #2
0
/**
 * 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;
}
コード例 #3
0
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;
}
コード例 #4
0
ファイル: saisies_afficher.php プロジェクト: loorenzooo/aslfc
/**
 * 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);
}