Exemplo n.º 1
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;
}
/**
 * Ajouter les champs extras sur les formulaires CVT editer_xx
 *
 * Liste les champs extras de l'objet, et s'il y en a les ajoute
 * sur le formulaire d'édition en ayant filtré uniquement les saisies
 * que peut voir le visiteur et en ayant ajouté des champs hidden
 * servant à champs extras.
 * 
 * @pipeline editer_contenu_objet
 * @param array $flux Données du pipeline
 * @return array      Données du pipeline
**/
function cextras_editer_contenu_objet($flux)
{
    // recuperer les saisies de l'objet en cours
    $objet = $flux['args']['type'];
    include_spip('inc/cextras');
    if ($saisies = champs_extras_objet(table_objet_sql($objet))) {
        // filtrer simplement les saisies que la personne en cours peut voir
        $saisies = champs_extras_autorisation('modifier', $objet, $saisies, $flux['args']);
        // pour chaque saisie presente, de type champs extras (hors fieldset et autres)
        // ajouter un flag d'edition
        $saisies = champs_extras_ajouter_drapeau_edition($saisies);
        // ajouter au formulaire
        $ajout = recuperer_fond('inclure/generer_saisies', array_merge($flux['args']['contexte'], array('saisies' => $saisies)));
        // div par défaut en 3.1+, mais avant ul / li
        $balise = saisie_balise_structure_formulaire('ul');
        $flux['data'] = preg_replace('%(<!--extra-->)%is', "<{$balise} class='editer-groupe champs_extras'>{$ajout}</{$balise}>\n" . '$1', $flux['data']);
    }
    return $flux;
}