Ejemplo n.º 1
0
 /**
 * une fonction qui regarde si $texte est une chaine de langue
 * de la forme <:qqch:>
 * si oui applique _T()
 * si non applique typo() suivant le mode choisi
 *
 * @param unknown_type $valeur Une valeur à tester. Si c'est un tableau, la fonction s'appliquera récursivement dessus.
 * @param string $mode_typo Le mode d'application de la fonction typo(), avec trois valeurs possibles "toujours", "jamais" ou "multi".
 * @return unknown_type Retourne la valeur éventuellement modifiée.
 */
function _T_ou_typo($valeur, $mode_typo='toujours') {
	
	// Si la valeur est bien une chaine (et pas non plus un entier déguisé)
	if (is_string($valeur) and !intval($valeur)){
		// Si la chaine est du type <:truc:> on passe à _T()
		if (preg_match('/^\<:(.*?):\>$/', $valeur, $match)) 
			$valeur = _T($match[1]);
		// Sinon on la passe a typo()
		else {
			if (!in_array($mode_typo, array('toujours', 'multi', 'jamais')))
				$mode_typo = 'toujours';
			
			if ($mode_typo == 'toujours' or ($mode_typo == 'multi' and strpos($valeur, '<multi>') !== false)){
				include_spip('inc/texte');
				$valeur = typo($valeur);
			}
		}
	}
	// Si c'est un tableau, on reapplique la fonction récursivement
	elseif (is_array($valeur)){
		foreach ($valeur as $cle => $valeur2){
			$valeur[$cle] = _T_ou_typo($valeur2, $mode_typo);
		}
	}

	return $valeur;

}
Ejemplo n.º 2
0
function verifier_generer_aide(){
	// On a déjà la liste par saisie
	$verifications = verifier_lister_disponibles();
	
	// On construit une liste par options
	$options = array();
	foreach ($verifications as $type_verif=>$verification){
		$options_verification = saisies_lister_par_nom($verification['options'], false);
		foreach ($options_verification 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_verif;
		}
		ksort($options_verification);
		$verifications[$type_verif]['options'] = $options_verification;
	}
	ksort($options);
	
	return array(
		'verifications' => $verifications,
		'options' => $options
	);
}
Ejemplo n.º 3
0
/**
 * Charger les informations contenues dans le yaml d'une vérification
 *
 * @param string $type_verif
 * 		Le type de la vérification
 *
 * @param string $repertoire
 * 		Dans quel repertoire chercher les yaml.
 *
 * @return array Un tableau contenant le YAML décodé
 */
function verifier_charger_infos($type_verif, $repertoire = 'verifier')
{
    include_spip('inc/yaml');
    $fichier = find_in_path("{$repertoire}/{$type_verif}.yaml");
    $verif = yaml_decode_file($fichier);
    if (is_array($verif)) {
        $verif['titre'] = (isset($verif['titre']) and $verif['titre']) ? _T_ou_typo($verif['titre']) : $type_verif;
        $verif['description'] = (isset($verif['description']) and $verif['description']) ? _T_ou_typo($verif['description']) : '';
        $verif['icone'] = (isset($verif['icone']) and $verif['icone']) ? _T_ou_typo($verif['icone']) : '';
    }
    return $verif;
}
Ejemplo n.º 4
0
/**
 * Charger les informations contenues dans le xml d'une composition
 *
 * @param string $nom
 * @param string $info
 * @return array|string
 */
function compositions_charger_infos($nom,$info=""){
		// on peut appeller avec le nom du squelette
		$nom = preg_replace(',[.]html$,i','',$nom).".xml";
		include_spip('inc/xml');
		$composition = array();
		if ($xml = spip_xml_load($nom,false)){
			if (count($xml['composition'])){
				$xml = reset($xml['composition']);
				$composition['nom'] = _T_ou_typo(spip_xml_aplatit($xml['nom']));
				$composition['description'] = isset($xml['description'])?_T_ou_typo(spip_xml_aplatit($xml['description'])):'';
				if (isset($xml['icon'])) {
					$icon = chemin_image(reset($xml['icon']));
					if (!$icon) {
						$icon = find_in_path(reset($xml['icon']));
					}
				} else {
					$icon = '';
				}
				$composition['image_exemple'] = isset($xml['image_exemple']) ? find_in_path(reset($xml['image_exemple'])) : '';
				$composition['icon'] = $icon;
				$composition['class'] = isset($xml['class']) ? trim(reset($xml['class'])) : '';
				$composition['configuration'] = isset($xml['configuration']) ? spip_xml_aplatit($xml['configuration']) : '';
				$composition['branche'] = array();
				if (spip_xml_match_nodes(',^branche,', $xml, $branches)){
					foreach (array_keys($branches) as $branche){
						list($balise, $attributs) = spip_xml_decompose_tag($branche);
						$composition['branche'][$attributs['type']] = $attributs['composition'];
					}
				}
			}
		}
		if (!$info)
			return $composition;
		else 
			return isset($composition[$info])?$composition[$info]:"";
}
Ejemplo n.º 5
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));
}
Ejemplo n.º 6
0
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 un groupe
	if ($ajouter_saisie = _request('ajouter_groupe_saisie')){ 
		$formulaire_actuel = saisies_groupe_inserer($formulaire_actuel, $ajouter_saisie);
	}
	
	// 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;
}
Ejemplo n.º 7
0
/**
 * Charger les informations contenues dans le YAML d'une saisie.
 *
 * @param string $type_saisie Le type de la saisie
 *
 * @return array Un tableau contenant le YAML décodé
 */
function saisies_charger_infos($type_saisie,$saisies_repertoire = "saisies") {
	if (defined('_DIR_PLUGIN_YAML')) {
		include_spip('inc/yaml');
		$fichier = find_in_path("$saisies_repertoire/$type_saisie.yaml");
		$saisie = yaml_decode_file($fichier);
		if (is_array($saisie)) {
			$saisie['titre'] = (isset($saisie['titre']) and $saisie['titre'])
				? _T_ou_typo($saisie['titre']) : $type_saisie;
			$saisie['description'] = (isset($saisie['description']) and $saisie['description'])
				? _T_ou_typo($saisie['description']) : '';
			$saisie['icone'] = (isset($saisie['icone']) and $saisie['icone'])
				? find_in_path($saisie['icone']) : '';
		}
	} else {
		$saisie = array();
	}

	return $saisie;
}
Ejemplo n.º 8
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);
}