source: spip-zone/_plugins_/taxonomie/trunk/taxonomie_fonctions.php @ 114150

Last change on this file since 114150 was 114150, checked in by eric@…, 7 months ago

Renommer la fonction regne_lister() en regne_lister_defaut() et créer la fonction regne_repertorier() qui retourne les règnes chargés en base.
Ne pas afficher d'espèce si le règne n'est pas chargé.
Corriger les affichages si la liste des taxons est vide.

  • Property svn:eol-style set to native
File size: 5.1 KB
Line 
1<?php
2/**
3 * Ce fichier contient les fonctions d'API du plugin Taxonomie utilisées comme filtre dans les squelettes.
4 * Les autres fonctions de l'API sont dans le fichier `inc/taxonomie`.
5 *
6 */
7if (!defined('_ECRIRE_INC_VERSION')) {
8        return;
9}
10
11
12/**
13 * Fournit l'ascendance taxonomique d'un taxon donné, par consultation dans la base de données.
14 *
15 * @package SPIP\TAXONOMIE\TAXON
16 *
17 * @api
18 * @filtre
19 *
20 * @param int    $id_taxon
21 *        Id du taxon pour lequel il faut fournir l'ascendance.
22 * @param int    $tsn_parent
23 *        TSN du parent correspondant au taxon id_taxon. Ce paramètre permet d'optimiser le traitement
24 *        mais n'est pas obligatoire. Si il n'est pas connu lors de l'appel il faut passer `null`.
25 * @param string $ordre
26 *        Classement de la liste des taxons : `descendant`(défaut) ou `ascendant`.
27 *
28 * @return array
29 *        Liste des taxons ascendants. Chaque taxon est un tableau associatif contenant les informations
30 *        suivantes : `id_taxon`, `tsn_parent`, `nom_scientifique`, `nom_commun`, `rang`, `statut` et l'indicateur
31 *        d'espèce `espèce`.
32 */
33function taxon_informer_ascendance($id_taxon, $tsn_parent = null, $ordre = 'descendant') {
34
35        $ascendance = array();
36
37        // Si on ne passe pas le tsn du parent correspondant au taxon pour lequel on cherche l'ascendance
38        // alors on le cherche en base de données.
39        // Le fait de passer ce tsn parent est uniquement une optimisation.
40        if (is_null($tsn_parent)) {
41                $tsn_parent = sql_getfetsel('tsn_parent', 'spip_taxons', 'id_taxon=' . intval($id_taxon));
42        }
43
44        while ($tsn_parent > 0) {
45                $select = array('id_taxon', 'tsn_parent', 'nom_scientifique', 'nom_commun', 'rang_taxon', 'statut', 'espece');
46                $where = array('tsn=' . intval($tsn_parent));
47                $taxon = sql_fetsel($select, 'spip_taxons', $where);
48                if ($taxon) {
49                        $ascendance[] = $taxon;
50                        $tsn_parent = $taxon['tsn_parent'];
51                }
52        }
53
54        if ($ascendance and ($ordre == 'descendant')) {
55                $ascendance = array_reverse($ascendance);
56        }
57
58        return $ascendance;
59}
60
61
62/**
63 * Fournit les phrases de crédit des sources d'information ayant permis de compléter le taxon.
64 * La référence ITIS n'est pas répétée dans le champ `sources` de chaque taxon car elle est
65 * à la base de chaque règne. Elle est donc insérée par la fonction.
66 *
67 * @package SPIP\TAXONOMIE\TAXON
68 *
69 * @api
70 * @filtre
71 *
72 * @param int    $id_taxon
73 *        Id du taxon pour lequel il faut fournir les crédits
74 * @param string $sources_specifiques
75 *        Tableau sérialisé des sources possibles autres qu'ITIS (CINFO, WIKIPEDIA...) telles qu'enregistrées
76 *        en base de données dans le champ `sources`.
77 *        Ce paramètre permet d'optimiser le traitement mais n'est pas obligatoire.
78 *
79 * @return array
80 *        Tableau des phrases de crédits indexées par source.
81 */
82function taxon_crediter($id_taxon, $sources_specifiques = null) {
83
84        $sources = array();
85
86        // Si on ne passe pas les sources du taxon concerné alors on le cherche en base de données.
87        // Le fait de passer ce champ sources est uniquement une optimisation.
88        if (is_null($sources_specifiques)) {
89                $sources_specifiques = sql_getfetsel('sources', 'spip_taxons', 'id_taxon=' . intval($id_taxon));
90        }
91
92        // On merge ITIS et les autres sources
93        $liste_sources = array('itis' => array());
94        if ($sources_specifiques) {
95                $liste_sources = array_merge($liste_sources, unserialize($sources_specifiques));
96        }
97
98        // Puis on construit la liste des sources pour l'affichage
99        foreach ($liste_sources as $_service => $_infos_source) {
100                include_spip("services/${_service}/${_service}_api");
101                if (function_exists($citer = "${_service}_credit")) {
102                        $sources[$_service] = $citer($id_taxon, $_infos_source);
103                }
104        }
105
106        return $sources;
107}
108
109
110/**
111 * Affiche la puce de statut d'un taxon sans proposer le formulaire de changement de statut.
112 *
113 * @package SPIP\TAXONOMIE\TAXON
114 *
115 * @api
116 * @filtre
117 *
118 * @param string $statut
119 *        Statut du taxon, `prop`, `publie`ou `poubelle`.
120 * @param int    $id_taxon
121 *        Id du taxon.
122 *
123 * @return array
124 *        Image de la puce.
125 */
126function taxon_afficher_statut($statut, $id_taxon = 0) {
127
128        // On évite de charger la fonction n fois.
129        static $afficher_puce = null;
130
131        if (!$afficher_puce) {
132                // Chargement de la fonction d'affichage
133                $afficher_puce = charger_fonction('puce_statut', 'inc');
134        }
135
136        // On affiche la puce sans proposer le formulaire rapide de changement de statut qui pose un problème avec
137        // l'ajax sachant qu'un changement peut en provoquer d'autres, la liste n'est plus à jour.
138        $puce = $afficher_puce($id_taxon, $statut, 0, 'taxon', false, false);
139
140        return $puce;
141}
142
143
144/**
145 * Renvoie la liste des règnes effectivement chargés en base de données.
146 *
147 * @package SPIP\TAXONOMIE\REGNE
148 *
149 * @api
150 * @filtre
151 *
152 * @return array
153 *        Liste des noms scientifiques (en minuscules) des règnes chargés.
154 */
155function regne_repertorier() {
156
157        // Initialisation de la liste.
158        static $regnes = null;
159
160        if ($regnes === null) {
161                include_spip('inc/taxonomie');
162                foreach (regne_lister_defaut() as $_regne) {
163                        if (regne_existe($_regne, $meta_regne)) {
164                                $regnes[] = $_regne;
165                        }
166                }
167        }
168
169        return $regnes;
170}
Note: See TracBrowser for help on using the repository browser.