From 7dd3e735b31e46a25668632c8126b25743bc31d7 Mon Sep 17 00:00:00 2001 From: Eric Lupinacci Date: Mon, 29 Jul 2019 21:19:40 +0200 Subject: [PATCH] =?UTF-8?q?Ajout=20de=20l'api=20rubrique=5Flire().=20Ne=20?= =?UTF-8?q?pas=20renvoyer=20le=20type=20plugin=20si=20la=20rubrique=20est?= =?UTF-8?q?=20dans=20le=20secteur=20plugin=20mais=20n'est=20ni=20une=20cat?= =?UTF-8?q?=C3=A9gorie=20ni=20un=20pr=C3=A9fixe=20:=20de=20cette=20fa?= =?UTF-8?q?=C3=A7on=20l'icone=20est=20distinct=20et=20permet=20de=20rep?= =?UTF-8?q?=C3=A9rer=20plus=20facilement=20le=20probl=C3=A8me.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/contrib_rubrique.php | 70 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 66 insertions(+), 4 deletions(-) diff --git a/inc/contrib_rubrique.php b/inc/contrib_rubrique.php index 33c2e43..bac851e 100644 --- a/inc/contrib_rubrique.php +++ b/inc/contrib_rubrique.php @@ -3,6 +3,63 @@ if (!defined('_ECRIRE_INC_VERSION')) { return; } +/** + * Retourne la description complète ou une liste de champs précisés dans l'appel + * d'un objet plugin identifié par son préfixe. + * + * @param int $id_rubrique Id de la rubrique. + * @param array|string $informations Identifiant d'un champ ou de plusieurs champs de la description d'une rubrique. + * Si l'argument est vide, la fonction renvoie la description complète. + * + * @return mixed La description brute complète ou partielle de la rubrique : + * - sous la forme d'une valeur simple si l'information demandée est unique (chaine) + * - sous la forme d'un tabelau associatif indexé par le nom du champ sinon. + */ +function rubrique_lire($id_rubrique, $informations = array()) { + + // Initialisation du tableau statique des descriptions + static $descriptions_rubrique = array(); + + if (($id_rubrique = intval($id_rubrique)) + and !isset($descriptions_rubrique[$id_rubrique])) { + // Initialisation des attributs de la requête. + $from = array('spip_rubriques'); + $where[] = 'id_rubrique=' . $id_rubrique; + + // Acquisition de tous les champs du plugin et sauvegarde de celle-ci à l'index du préfixe. + $descriptions_rubrique[$id_rubrique] = array(); + if ($description = sql_fetsel('*', $from, $where)) { + $descriptions_rubrique[$id_rubrique] = $description; + } + } + + // On extrait la description complète maintenant que l'on sait qu'elle existe. + $description = $descriptions_rubrique[$id_rubrique]; + + // On ne retourne que les champs demandés + if ($description and $informations) { + // Extraction des seules informations demandées. + // -- si on demande une information unique on renvoie la valeur simple, sinon on renvoie un tableau. + // -- si une information n'est pas un champ valide elle n'est pas renvoyée sans monter d'erreur. + if (is_array($informations)) { + if (count($informations) == 1) { + // Tableau d'une seule information : on revient à une chaine unique. + $informations = array_shift($informations); + } else { + // Tableau des informations valides + $description = array_intersect_key($description, array_flip($informations)); + } + } + + if (is_string($informations)) { + // Valeur unique demandée. + $description = isset($description[$informations]) ? $description[$informations] : ''; + } + } + + return $description; +} + function rubrique_lire_profondeur($id_rubrique) { static $profondeurs = array(); @@ -70,16 +127,21 @@ function rubrique_determiner_type($id_rubrique) { static $types = array(); if (!isset($types[$id_rubrique])) { + $types[$id_rubrique] = ''; if (rubrique_dans_secteur_plugin($id_rubrique)) { - $types[$id_rubrique] = 'plugin'; + // On vérifie que la rubrique est soit une catégorie de profondeur inférieure à 1, soit un plugin de + // profondeur 2 + $rubrique = rubrique_lire($id_rubrique); + if ((($rubrique['profondeur'] <= 1) and $rubrique['categorie']) + or (($rubrique['profondeur'] == 2) and $rubrique['prefixe'])) { + $types[$id_rubrique] = 'plugin'; + } } elseif (rubrique_dans_secteur_apropos($id_rubrique)) { $types[$id_rubrique] = 'apropos'; } elseif (rubrique_dans_secteur_carnet($id_rubrique)) { $types[$id_rubrique] = 'carnet'; } elseif (rubrique_dans_secteur_galaxie($id_rubrique)) { $types[$id_rubrique] = 'galaxie'; - } else { - $types[$id_rubrique] = ''; } } @@ -194,7 +256,7 @@ function rubrique_dans_secteur_plugin($id_rubrique) { */ function rubrique_lister_secteur_plugin() { - // On sélectionne les rubriques de profndeur nulle et ayant une catégorie. + // On sélectionne les rubriques de profondeur nulle et ayant une catégorie. $from = 'spip_rubriques'; $where = array( 'profondeur=0',