/**
 * Retourne la description d'un champ extra indiqué
 *
 * Retourne le tableau de description des options de saisies
 * ou un des attributs de ce tableau
 *
 * @param string $objet
 *     Type d'objet
 * @param string $colonne
 *     Nom de la colonne SQL
 * @param string $demande
 *     Nom du paramètre demandé.
 *     Non renseigné, tout le tableau de description est retourné
 * @return mixed
 *     - Tableau si toute la description est demandée
 *     - Indéfini si un élément spécifique de la description est demandé.
 *     - Chaine vide si le champs extra n'est pas trouvé
 */
function calculer_balise_CHAMP_EXTRA($objet, $colonne, $demande='') {
	// Si la balise n'est pas dans une boucle, on cherche un objet explicite dans le premier argument
	// de la forme "trucs/colonne" ou "spip_trucs/colonne"
	if (!$objet and $decoupe = explode('/', $colonne) and count($decoupe) == 2){
		$objet = $decoupe[0];
		$colonne = $decoupe[1];
	}
	
	// recuperer la liste des champs extras existants
	include_spip('cextras_pipelines');
	if (!$saisies = champs_extras_objet( $table = table_objet_sql($objet) )) {
		return '';
	}
	
	include_spip('inc/saisies');
	if (!$saisie = saisies_chercher($saisies, $colonne)) {
		return '';
	}

	if (!$demande) {
		return $saisie['options']; // retourne la description de la saisie...
	}

	if (array_key_exists($demande, $saisie['options'])) {
		return $saisie['options'][$demande];
	}

	return '';
}
Example #2
0
/**
 * Cherche une saisie par son id, son nom ou son chemin et renvoie soit la saisie, soit son chemin
 *
 * @param array $saisies Un tableau décrivant les saisies
 * @param unknown_type $id_ou_nom_ou_chemin L'identifiant ou le nom de la saisie à chercher ou le chemin sous forme d'une liste de clés
 * @param bool $retourner_chemin Indique si on retourne non pas la saisie mais son chemin
 * @return array Retourne soit la saisie, soit son chemin, soit null
 */
function saisies_chercher($saisies, $id_ou_nom_ou_chemin, $retourner_chemin = false)
{
    if (is_array($saisies) and $id_ou_nom_ou_chemin) {
        if (is_string($id_ou_nom_ou_chemin)) {
            $nom = $id_ou_nom_ou_chemin;
            // identifiant ? premier caractere @
            $id = $nom[0] == '@';
            foreach ($saisies as $cle => $saisie) {
                $chemin = array($cle);
                // notre saisie est la bonne ?
                if ($nom == ($id ? $saisie['identifiant'] : $saisie['options']['nom'])) {
                    return $retourner_chemin ? $chemin : $saisie;
                    // sinon a telle des enfants ? et si c'est le cas, cherchons dedans
                } elseif (isset($saisie['saisies']) and is_array($saisie['saisies']) and $saisie['saisies'] and $retour = saisies_chercher($saisie['saisies'], $nom, $retourner_chemin)) {
                    return $retourner_chemin ? array_merge($chemin, array('saisies'), $retour) : $retour;
                }
            }
        } elseif (is_array($id_ou_nom_ou_chemin)) {
            $chemin = $id_ou_nom_ou_chemin;
            $saisie = $saisies;
            // On vérifie l'existence quand même
            foreach ($chemin as $cle) {
                if (isset($saisie[$cle])) {
                    $saisie = $saisie[$cle];
                } else {
                    return null;
                }
            }
            // Si c'est une vraie saisie
            if ($saisie['saisie'] and $saisie['options']['nom']) {
                return $retourner_chemin ? $chemin : $saisie;
            }
        }
    }
    return null;
}
Example #3
0
/**
 * Modifie une saisie
 *
 * @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 à modifier
 * @param array $modifs Le tableau des modifications à apporter à la saisie
 * @return Retourne le tableau décrivant les saisies, mais modifié
 */
function saisies_modifier($saisies, $id_ou_nom_ou_chemin, $modifs)
{
    $chemin = saisies_chercher($saisies, $id_ou_nom_ou_chemin, true);
    $position = array_pop($chemin);
    $parent =& $saisies;
    foreach ($chemin as $cle) {
        $parent =& $parent[$cle];
    }
    // On récupère le type tel quel
    $modifs['saisie'] = $parent[$position]['saisie'];
    // On récupère le nom s'il n'y est pas
    if (!isset($modifs['options']['nom'])) {
        $modifs['options']['nom'] = $parent[$position]['options']['nom'];
    }
    // On récupère les enfants tels quels s'il n'y a pas des enfants dans la modif
    if (!isset($modifs['saisies']) and isset($parent[$position]['saisies']) and is_array($parent[$position]['saisies'])) {
        $modifs['saisies'] = $parent[$position]['saisies'];
    }
    // Si une option 'nouveau_type_saisie' est donnee, c'est que l'on souhaite
    // peut être changer le type de saisie !
    if (isset($modifs['options']['nouveau_type_saisie']) and $type = $modifs['options']['nouveau_type_saisie']) {
        $modifs['saisie'] = $type;
        unset($modifs['options']['nouveau_type_saisie']);
    }
    // On remplace tout
    $parent[$position] = $modifs;
    // Cette méthode ne marche pas trop
    //$parent[$position] = array_replace_recursive($parent[$position], $modifs);
    return $saisies;
}
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;
}