function saisies_groupe_inserer($formulaire_actuel, $saisie){
	include_spip('inclure/configurer_saisie_fonctions');
	
		//le groupe de saisies
		$saisies_charger_infos = saisies_charger_infos($saisie,$saisies_repertoire = "saisies/groupes");
		
		//le tableau est-il en options ou en saisies ?
		$classique_yaml=count($saisies_charger_infos['options']);
		$formidable_yaml=count($saisies_charger_infos['saisies']);
		if($classique_yaml>0) {
			$champ_options = 'options';
		}
		if($formidable_yaml>0) { 
			$champ_options = 'saisies';
		}
		
		//les champs du groupe 
		foreach($saisies_charger_infos[$champ_options] as $info_saisie){
			unset($info_saisie['identifiant']);
			$saisies_disponibles = saisies_lister_disponibles();
			$construire_nom = $info_saisie[$champ_options]['nom'] ? $info_saisie[$champ_options]['nom'] : $info_saisie['saisie'];
			$nom = $info_saisie[$champ_options]['nom'] = saisies_generer_nom($formulaire_actuel,$construire_nom);
			
			$formulaire_actuel = saisies_inserer($formulaire_actuel, $info_saisie);
		}
		return $formulaire_actuel;
}
Example #2
0
/**
 * Transforme les noms d'une liste de saisies pour qu'ils soient
 * uniques dans le formulaire donné.
 *
 * @param array $formulaire
 *     Le formulaire à analyser 
 * @param array $saisies
 *     Un tableau décrivant les saisies.
 * @return array
 *     Retourne le tableau modifié des saisies
 */
function saisies_transformer_noms_auto($formulaire, $saisies)
{
    if (is_array($saisies)) {
        foreach ($saisies as $cle => $saisie) {
            $saisies[$cle]['options']['nom'] = saisies_generer_nom($formulaire, $saisie['saisie']);
            // il faut prendre en compte dans $formulaire les saisies modifiees
            // sinon on aurait potentiellement 2 champs successifs avec le meme nom.
            // on n'ajoute pas les saisies dont les noms ne sont pas encore calculees.
            $new = $saisies[$cle];
            unset($new['saisies']);
            $formulaire[] = $new;
            if (is_array($saisie['saisies'])) {
                $saisies[$cle]['saisies'] = saisies_transformer_noms_auto($formulaire, $saisie['saisies']);
            }
        }
    }
    return $saisies;
}
function formulaires_construire_formulaire_traiter($identifiant, $formulaire_initial = array(), $options = array())
{
    include_spip('inc/saisies');
    $retours = array();
    $saisies_disponibles = saisies_lister_disponibles();
    // 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);
    // Si on demande à ajouter une saisie
    if ($ajouter_saisie = _request('ajouter_saisie')) {
        $nom = saisies_generer_nom($formulaire_actuel, $ajouter_saisie);
        $saisie = array('saisie' => $ajouter_saisie, 'options' => array('nom' => $nom));
        // S'il y a des valeurs par défaut pour ce type de saisie, on les ajoute
        if ($defaut = $saisies_disponibles[$ajouter_saisie]['defaut'] and is_array($defaut)) {
            $defaut = _T_ou_typo($defaut, 'multi');
            //Compatibilite PHP<5.3.0
            //source : http://www.php.net/manual/en/function.array-replace-recursive.php#92574
            if (!function_exists('array_replace_recursive')) {
                function array_replace_recursive($array, $array1)
                {
                    function recurse($array, $array1)
                    {
                        foreach ($array1 as $key => $value) {
                            // create new key in $array, if it is empty or not an array
                            if (!isset($array[$key]) || isset($array[$key]) && !is_array($array[$key])) {
                                $array[$key] = array();
                            }
                            // overwrite the value in the base array
                            if (is_array($value)) {
                                $value = recurse($array[$key], $value);
                            }
                            $array[$key] = $value;
                        }
                        return $array;
                    }
                    // handle the arguments, merge one by one
                    $args = func_get_args();
                    $array = $args[0];
                    if (!is_array($array)) {
                        return $array;
                    }
                    for ($i = 1; $i < count($args); $i++) {
                        if (is_array($args[$i])) {
                            $array = recurse($array, $args[$i]);
                        }
                    }
                    return $array;
                }
            }
            $saisie = array_replace_recursive($saisie, $defaut);
        }
        $formulaire_actuel = saisies_inserer($formulaire_actuel, $saisie);
    }
    // Si on demande à dupliquer une saisie
    if ($dupliquer_saisie = _request('dupliquer_saisie')) {
        $formulaire_actuel = saisies_dupliquer($formulaire_actuel, $dupliquer_saisie);
    }
    // Si on demande à supprimer une saisie
    if ($supprimer_saisie = _request('supprimer_saisie')) {
        $formulaire_actuel = saisies_supprimer($formulaire_actuel, $supprimer_saisie);
    }
    // Si on enregistre la conf d'une saisie
    if ($nom = _request('enregistrer_saisie')) {
        // On récupère ce qui a été modifié
        $saisie_modifiee = _request("saisie_modifiee_{$nom}");
        // On regarde s'il y a une position à modifier
        if (isset($saisie_modifiee['position'])) {
            $position = $saisie_modifiee['position'];
            unset($saisie_modifiee['position']);
            // On ne déplace que si ce n'est pas la même chose
            if ($position != $nom) {
                $formulaire_actuel = saisies_deplacer($formulaire_actuel, $nom, $position);
            }
        }
        // On regarde s'il y a des options de vérification à modifier
        if (isset($saisie_modifiee['verifier']['type']) and ($type_verif = $saisie_modifiee['verifier']['type']) != '') {
            $saisie_modifiee['verifier'] = array('type' => $type_verif, 'options' => $saisie_modifiee['verifier'][$type_verif]);
        } else {
            unset($saisie_modifiee['verifier']);
        }
        // On récupère les options postées en enlevant les chaines vides
        $saisie_modifiee['options'] = array_filter($saisie_modifiee['options'], 'saisie_option_contenu_vide');
        if (isset($saisie_modifiee['verifier']['options']) and $saisie_modifiee['verifier']['options']) {
            $saisie_modifiee['verifier']['options'] = array_filter($saisie_modifiee['verifier']['options'], 'saisie_option_contenu_vide');
        }
        // On désinfecte à la main
        if (is_array($saisie_modifiee['options'])) {
            spip_desinfecte($saisie_modifiee['options']);
        }
        // On modifie enfin
        $formulaire_actuel = saisies_modifier($formulaire_actuel, $nom, $saisie_modifiee);
    }
    // Si on demande à réinitialiser
    if (_request('reinitialiser') == 'oui') {
        $formulaire_actuel = $formulaire_initial;
    }
    // On enregistre en session la nouvelle version du formulaire
    session_set($identifiant, $formulaire_actuel);
    // Le formulaire reste éditable
    $retours['editable'] = true;
    return $retours;
}