/** * 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; }