/**
 * 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
/**
 * Retourne les saisies de champs extras d'un objet éditorial indiqué
 * 
 * Les saisies sont filtrées, par défaut par l'autorisation de modifier chaque champs extras.
 * Des options peuvent modifier le comportement.
 *
 * @param string $objet 
 *     Type de l'objet éditorial
 * @param int|null $id_objet 
 *     Identifiant de l'objet (si connu) peut servir aux autorisations.
 * @param array $options {
 *     @var string $autoriser 
 *         'voir' ou 'modifier' (par défaut) : type d'autorisation testé, appellera voirextra ou modifierextra…
 *     @var string[] $whitelist
 *         Liste blanche de noms de champs : ces champs seront à afficher, et uniquement eux (modulo l'autorisation sur chaque champ)
 *     @var string[] $blacklist
 *         Liste noire de noms de champs : ces champs ne seront pas affichés (quelque soit l'autorisation sur chaque champ)
 * }
 * @return array 
 *     Liste de saisies, les champs extras sur l'objet indiqué
**/
function cextras_obtenir_saisies_champs_extras($objet, $id_objet = null, $options = array())
{
    $options += array('autoriser' => 'modifier', 'whitelist' => array(), 'blacklist' => array());
    include_spip('cextras_pipelines');
    if ($saisies = champs_extras_objet(table_objet_sql($objet))) {
        // type d'autorisation
        if (!in_array($options['autoriser'], array('voir', 'modifier'))) {
            $options['autoriser'] = 'modifier';
        }
        // listes inclusions et exclusions
        $whitelist = array_unique(array_filter($options['whitelist']));
        $blacklist = array_unique(array_filter($options['blacklist']));
        // Conserver uniquement les saisies souhaitées
        if (count($whitelist)) {
            foreach ($saisies as $i => $saisie) {
                if (empty($saisie['options']['nom']) or !in_array($saisie['options']['nom'], $whitelist)) {
                    unset($saisies[$i]);
                }
            }
        }
        // Enlever les saisies non souhaitées
        if (count($blacklist)) {
            foreach ($saisies as $i => $saisie) {
                if (in_array($saisie['options']['nom'], $blacklist)) {
                    unset($saisies[$i]);
                }
            }
        }
        // filtrer simplement les saisies que la personne en cours peut voir
        $saisies = champs_extras_autorisation($options['autoriser'], $objet, $saisies, array('id_objet' => $id_objet));
        if ($saisies) {
            // pour chaque saisie presente, de type champs extras (hors fieldset et autres) ajouter un flag d'edition
            $saisies = champs_extras_ajouter_drapeau_edition($saisies);
            $valeurs['_saisies'] = $saisies;
        }
    }
    return $saisies;
}
/**
 * Insertion dans le pipeline revisions_chercher_label (Plugin révisions)
 * Trouver le bon label à afficher sur les champs dans les listes de révisions
 * 
 * Si un champ est un champ extra, son label correspond au label défini du champs extra
 * 
 * @pipeline revisions_chercher_label
 * @param array $flux Données du pipeline
 * @return array      Données du pipeline
**/
function cextras_revisions_chercher_label($flux)
{
    $table = table_objet_sql($flux['args']['objet']);
    $saisies_tables = champs_extras_objet($table);
    foreach ($saisies_tables as $champ) {
        if ($champ['options']['nom'] == $flux['args']['champ']) {
            $flux['data'] = $champ['options']['label'];
            break;
        }
    }
    return $flux;
}