Пример #1
0
/**
 * Duplique une saisie (ou groupe de saisies)
 * en placant la copie à la suite de la saisie d'origine.
 * Modifie automatiquement les identifiants des saisies
 *
 * @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 a dupliquer
 * @return array Retourne le tableau modifié des saisies
 */
function saisies_dupliquer($saisies, $id_ou_nom_ou_chemin)
{
    // On récupère le contenu de la saisie à déplacer
    $saisie = saisies_chercher($saisies, $id_ou_nom_ou_chemin);
    if ($saisie) {
        list($clone) = saisies_transformer_noms_auto($saisies, array($saisie));
        // insertion apres quoi ?
        $chemin_validation = saisies_chercher($saisies, $id_ou_nom_ou_chemin, true);
        // 1 de plus pour mettre APRES le champ trouve
        $chemin_validation[count($chemin_validation) - 1]++;
        // On ajoute "copie" après le label du champs
        $clone['options']['label'] .= ' ' . _T('saisies:construire_action_dupliquer_copie');
        // Création de nouveau identifiants pour le clone
        $clone = saisie_identifier($clone, true);
        $saisies = saisies_inserer($saisies, $clone, $chemin_validation);
    }
    return $saisies;
}
Пример #2
0
function formulaires_construire_formulaire_verifier($identifiant, $formulaire_initial=array(), $options=array()){
	include_spip('inc/saisies');
	$erreurs = array();
	// l'une ou l'autre sera presente
	$configurer_saisie = $enregistrer_saisie = '';

	// Pas d'erreur si l'on ne demande rien
	if (!($nom_ou_id = $configurer_saisie  = _request('configurer_saisie')
	OR    $nom_ou_id = $enregistrer_saisie = _request('enregistrer_saisie'))) {
		return $erreurs;
	}

	// 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);

	// On récupère les saisies actuelles, par identifiant ou par nom
	if ($nom_ou_id[0] == '@') {
		$saisies_actuelles = saisies_lister_par_identifiant($formulaire_actuel);
		$nom = $saisies_actuelles[$nom_ou_id]['options']['nom'];
	} else {
		$saisies_actuelles = saisies_lister_par_nom($formulaire_actuel);
		$nom = $nom_ou_id;
	}
	$noms_autorises = array_keys($saisies_actuelles);

	// le nom (ou identifiant) doit exister
	if (!in_array($nom_ou_id, $noms_autorises)) {
		return $erreurs;
	}
	
	// La liste des saisies
	$saisies_disponibles = saisies_lister_disponibles();
	
	$saisie = $saisies_actuelles[$nom_ou_id];
	$formulaire_config = $saisies_disponibles[$saisie['saisie']]['options'];
	array_walk_recursive($formulaire_config, 'formidable_transformer_nom', "saisie_modifiee_${nom}[options][@valeur@]");
	$formulaire_config = saisie_identifier(array('saisies'=>$formulaire_config));
	$formulaire_config = $formulaire_config['saisies'];
	
	// Si la saisie possede un identifiant, on l'ajoute
	// au formulaire de configuration pour ne pas le perdre en route
	if (isset($saisie['identifiant']) and $saisie['identifiant']) {
		$formulaire_config = saisies_inserer(
			$formulaire_config,
			array(
				'saisie' => 'hidden',
				'options' => array(
					'nom' => "saisie_modifiee_${nom}[identifiant]",
					'defaut' => $saisie['identifiant']
				),
			)
		);
	}
	
	// S'il y a l'option adéquat, on ajoute le champ pour modifier le nom
	if (isset($options['modifier_nom']) and $options['modifier_nom']
	  and $chemin_nom = saisies_chercher($formulaire_config, "saisie_modifiee_${nom}[options][description]", true))
	{
		$chemin_nom[] = 'saisies';
		$chemin_nom[] = '0';

		$formulaire_config = saisies_inserer(
			$formulaire_config,
			array(
				'saisie' => 'input',
				'options' => array(
					'nom' => "saisie_modifiee_${nom}[options][nom]",
					'label' => _T('saisies:option_nom_label'),
					'explication' => _T('saisies:option_nom_explication'),
					'obligatoire' => 'oui',
					'size' => 50
				),
				'verifier' => array(
					'type' => 'regex',
					'options' => array(
						'modele' => '/^[\w]+$/'
					)
				)
			),
			$chemin_nom
		);
	}

	// liste des options de vérification
	$verif_options = array();

	// S'il y a un groupe "validation" alors on va construire le formulaire des vérifications
	if ($chemin_validation = saisies_chercher($formulaire_config, "saisie_modifiee_${nom}[options][validation]", true)){
		include_spip('inc/verifier');
		$liste_verifications = verifier_lister_disponibles();
		$chemin_validation[] = 'saisies';
		$chemin_validation[] = 1000000; // à la fin
		
		// On construit la saisie à insérer et les fieldset des options
		$saisie_liste_verif = array(
			'saisie' => 'selection',
			'options' => array(
				'nom' => "saisie_modifiee_${nom}[verifier][type]",
				'label' => _T('saisies:construire_verifications_label'),
				'option_intro' => _T('saisies:construire_verifications_aucune'),
				'conteneur_class' => 'liste_verifications',
				'datas' => array()
			)
		);

		foreach ($liste_verifications as $type_verif => $verif){
			$saisie_liste_verif['options']['datas'][$type_verif] = $verif['titre'];
			// Si le type de vérif a des options, on ajoute un fieldset
			if (isset($verif['options']) and $verif['options'] and is_array($verif['options'])){
				$groupe = array(
					'saisie' => 'fieldset',
					'options' => array(
						'nom' => 'options',
						'label' => $verif['titre'],
						'conteneur_class' => "$type_verif options_verifier"
					),
					'saisies' => $verif['options']
				);
				array_walk_recursive($groupe, 'formidable_transformer_nom', "saisie_modifiee_${nom}[verifier][$type_verif][@valeur@]");
				$verif_options[$type_verif] = $groupe;
			}
		}
		$verif_options = array_merge(array($saisie_liste_verif), $verif_options);
	}
	
	
	if ($enregistrer_saisie){
		// La saisie modifié
		$saisie_modifiee = _request("saisie_modifiee_${nom}");
		// On cherche les erreurs de la configuration
		$vraies_erreurs = saisies_verifier($formulaire_config);
		// Si on autorise à modifier le nom ET qu'il doit être unique : on vérifie
		if (isset($options['modifier_nom']) and $options['modifier_nom']
		  and isset($options['nom_unique']) and $options['nom_unique'])
		{
			$nom_modifie = $saisie_modifiee['options']['nom'];
			if ($nom_modifie != $enregistrer_saisie and saisies_chercher($formulaire_actuel, $nom_modifie))
				$vraies_erreurs["saisie_modifiee_${nom}[options][nom]"] = _T('saisies:erreur_option_nom_unique');
		}
		// On regarde s'il a été demandé un type de vérif
		if (isset($saisie_modifiee['verifier']['type'])
		  and (($type_verif = $saisie_modifiee['verifier']['type']) != '')
		  and $verif_options[$type_verif])
		{
			// On ne vérifie que les options du type demandé
			$vraies_erreurs = array_merge($vraies_erreurs, saisies_verifier($verif_options[$type_verif]['saisies']));
		}
	}

	// On insère chaque saisie des options de verification
	if ($verif_options){
		foreach ($verif_options as $saisie_verif){
			$formulaire_config = saisies_inserer($formulaire_config, $saisie_verif, $chemin_validation);
		}
	}
	$erreurs['configurer_'.$nom] = $formulaire_config;
	$erreurs['positionner'] = '#configurer_'.$nom;

	if ($enregistrer_saisie) {
		if ($vraies_erreurs) {
			$erreurs = array_merge($erreurs, $vraies_erreurs);
		} else {
			$erreurs = array();
		}
	} else {
		$erreurs['message_erreur'] = ''; // on ne veut pas du message_erreur automatique
	}

	return $erreurs;
}
Пример #3
0
/**
 * Crée un identifiant Unique
 * pour toutes les saisies donnees qui n'en ont pas
 *
 * @param Array $saisies Tableau de saisies
 * @param Bool $regenerer Régénère un nouvel identifiant pour toutes les saisies ?
 * @return Array Tableau de saisies complété des identifiants
 */
function saisies_identifier($saisies, $regenerer = false)
{
    if (!is_array($saisies)) {
        return array();
    }
    foreach ($saisies as $k => $saisie) {
        $saisies[$k] = saisie_identifier($saisie, $regenerer);
    }
    return $saisies;
}
 // si le champs est deja decrit dans la nouvelle structure, on passe
 foreach ($ici as $c) {
     if ($c['options']['nom'] == $champ) {
         unset($champs[$champ]);
         continue 2;
     }
 }
 // nous sommes face a un champs extras ancien, non encore
 // pris en compte dans la nouvelle version
 // selon les anciennes saisies, on redirige sur les nouvelles
 if (!isset($nsaisie[$extra['type']])) {
     // saisie inconnue
     echo "- Type de saisie non trouvé : {$extra['type']}. Passage en textarea.<br />\n";
     $extra['type'] = 'bloc';
 }
 $nouveau = saisie_identifier(array());
 $nouveau['saisie'] = $nsaisie[$extra['type']];
 $nouveau['options'] = array('nom' => $champ);
 // cas particulier des auteurs
 if ($extra['type'] == 'auteurs') {
     $nouveau['options']['multiple'] = 'on';
 }
 foreach (array('champ' => 'nom', 'label' => 'label', 'sql' => 'sql', 'explication' => 'explication', 'attention' => 'attention', 'obligatoire' => 'obligatoire', 'traitements' => 'traitements', 'rechercher' => 'rechercher', 'enum' => 'datas', 'type' => '', 'table' => '', '_id' => '', '_type' => '', '_objet' => '', '_table_sql' => '', 'saisie_parametres/class' => 'class', 'saisie_parametres/li_class' => 'conteneur_class', 'saisie_parametres/explication' => 'explication', 'saisie_parametres/attention' => 'attention', '__PHP_Incomplete_Class_Name' => '') as $old => $new) {
     // si $new est vide : on utilise pas.
     // si le contenu de $old est vide, on ne prend pas.
     // si iextras_upgrade_to_saisies_$old() existe,
     // on l'utilise pour calculer la nouvelle valeur
     if (!function_exists($f = 'iextras_upgrade_to_saisies_' . str_replace('/', '_', $old))) {
         $f = 'iextras_upgrade_to_saisies_all';
     }
     $old = explode('/', $old);