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