Beispiel #1
0
/**
 * Génère une page d'aide listant toutes les saisies et leurs options
 *
 * Retourne le résultat du squelette `inclure/saisies_aide` auquel
 * on a transmis toutes les saisies connues.
 *
 * @return string Code HTML
 */
function saisies_generer_aide()
{
    // On a déjà la liste par saisie
    $saisies = saisies_lister_disponibles();
    // On construit une liste par options
    $options = array();
    foreach ($saisies as $type_saisie => $saisie) {
        $options_saisie = saisies_lister_par_nom($saisie['options'], false);
        foreach ($options_saisie as $nom => $option) {
            // Si l'option n'existe pas encore
            if (!isset($options[$nom])) {
                $options[$nom] = _T_ou_typo($option['options']);
            }
            // On ajoute toujours par qui c'est utilisé
            $options[$nom]['utilisee_par'][] = $type_saisie;
        }
        ksort($options_saisie);
        $saisies[$type_saisie]['options'] = $options_saisie;
    }
    ksort($options);
    return recuperer_fond('inclure/saisies_aide', array('saisies' => $saisies, 'options' => $options));
}
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;
}
Beispiel #3
0
/**
 * 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);
}
Beispiel #4
0
/**
 * Lister les saisies existantes ayant une définition SQL.
 *
 * @return array Un tableau listant des saisies et leurs options
 */
function saisies_lister_disponibles_sql($saisies_repertoire = "saisies") {
	$saisies = array();
	$saisies_disponibles = saisies_lister_disponibles($saisies_repertoire);
	foreach ($saisies_disponibles as $type => $saisie) {
		if (isset($saisie['defaut']['options']['sql']) and $saisie['defaut']['options']['sql']) {
			$saisies[$type] = $saisie;
		}
	}

	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;
}