Browse Source

Ajout de l'api rubrique_lire().

Ne pas renvoyer le type plugin si la rubrique est dans le secteur plugin mais n'est ni une catégorie ni un préfixe : de cette façon l'icone est distinct et permet de repérer plus facilement le problème.
master
Eric Lupinacci 4 years ago
parent
commit
7dd3e735b3
  1. 70
      inc/contrib_rubrique.php

70
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',

Loading…
Cancel
Save