1 | <?php |
---|
2 | /** |
---|
3 | * Ce fichier contient l'ensemble des constantes et des fonctions de gestion des caches de Taxonomie. |
---|
4 | * |
---|
5 | * @package SPIP\TAXONOMIE\CACHE |
---|
6 | */ |
---|
7 | if (!defined('_ECRIRE_INC_VERSION')) { |
---|
8 | return; |
---|
9 | } |
---|
10 | |
---|
11 | |
---|
12 | /** |
---|
13 | * Supprime tout ou partie des fichiers cache taxonomiques. |
---|
14 | * |
---|
15 | * @package SPIP\TAXONOMIE\CACHE |
---|
16 | * |
---|
17 | * @param array|string $caches |
---|
18 | * Liste des fichiers à supprimer ou vide si tous les fichiers cache doivent être supprimés. |
---|
19 | * Il est possible de passer un seul fichier comme une chaine. |
---|
20 | * |
---|
21 | * @return boolean |
---|
22 | * Toujours à `true`. |
---|
23 | */ |
---|
24 | function cache_taxonomie_supprimer($caches = array()) { |
---|
25 | |
---|
26 | include_spip('inc/flock'); |
---|
27 | |
---|
28 | if ($caches) { |
---|
29 | $fichiers_cache = is_string($caches) ? array($caches) : $caches; |
---|
30 | } else { |
---|
31 | $fichiers_cache = glob(_DIR_VAR . 'cache-taxonomie/' . '*.*'); |
---|
32 | } |
---|
33 | |
---|
34 | if ($fichiers_cache) { |
---|
35 | foreach ($fichiers_cache as $_fichier) { |
---|
36 | supprimer_fichier($_fichier); |
---|
37 | } |
---|
38 | } |
---|
39 | |
---|
40 | return true; |
---|
41 | } |
---|
42 | |
---|
43 | /** |
---|
44 | * Répertorie les fichiers caches issu de l'utilisation de l'API d'un service donné. |
---|
45 | * La fonction renvoie une description de chaque fichier cache, à savoir, à minima, l'action lancée, le TSN |
---|
46 | * du taxon concerné et le nom du fichier cache. |
---|
47 | * |
---|
48 | * @package SPIP\TAXONOMIE\CACHE |
---|
49 | * |
---|
50 | * @param string $service |
---|
51 | * Alias en minuscules du service pour lequel on veut lister les caches créés ou chaine vide si on souhaite |
---|
52 | * tous les caches sans distinction de service. |
---|
53 | * |
---|
54 | * @return array |
---|
55 | * Tableau des descriptions des fichiers cache créés par le service indexé par le chemin complet de |
---|
56 | * chaque fichier cache. |
---|
57 | */ |
---|
58 | function cache_taxonomie_repertorier($service = '') { |
---|
59 | |
---|
60 | // Initialisation de la liste des descriptions des caches du service |
---|
61 | $descriptions_cache = array(); |
---|
62 | |
---|
63 | // Tableau des taxons pour éviter de faire des appels SQL à chaque cache. |
---|
64 | static $taxons = array(); |
---|
65 | |
---|
66 | // On constitue la liste des services requis par l'appel |
---|
67 | include_spip('inc/taxonomie'); |
---|
68 | $services = taxon_lister_services(); |
---|
69 | if ($service) { |
---|
70 | if (array_key_exists($service, $services)) { |
---|
71 | $services = array($service => $services[$service]); |
---|
72 | } else { |
---|
73 | $services = array(); |
---|
74 | } |
---|
75 | } |
---|
76 | |
---|
77 | if ($services) { |
---|
78 | foreach ($services as $_service => $_titre) { |
---|
79 | // Récupération des fichiers cache du service. |
---|
80 | $pattern_cache = _TAXONOMIE_CACHE_DIR . $_service . '_*.txt'; |
---|
81 | $fichiers_cache = glob($pattern_cache); |
---|
82 | |
---|
83 | if ($fichiers_cache) { |
---|
84 | foreach ($fichiers_cache as $_fichier_cache) { |
---|
85 | // On raz la description pour éviter de garder des éléments du cache précédent et on initialise avec |
---|
86 | // le nom du fichier qui peut servir d'id, le chemin complet et le service. |
---|
87 | $description = array(); |
---|
88 | $description['nom_cache'] = basename($_fichier_cache, '.txt'); |
---|
89 | $description['fichier_cache'] = $_fichier_cache; |
---|
90 | |
---|
91 | // On extrait le service qui sert toujours d'index principal du tableau |
---|
92 | $description['service'] = $_service; |
---|
93 | $description['titre_service'] = $_titre; |
---|
94 | |
---|
95 | // On décompose le nom pour récupérer l'action et le TSN correspondant ainsi que la langue. |
---|
96 | // Le nom du fichier est composé d'éléments séparés par un underscore. La structure est toujours |
---|
97 | // composée dans l'ordre du service, de l'action et du TSN et peut être complétée par la langue. |
---|
98 | $elements = explode('_', $description['nom_cache']); |
---|
99 | $description['action'] = $elements[1]; |
---|
100 | $description['tsn'] = intval($elements[2]); |
---|
101 | if (isset($elements[3])) { |
---|
102 | $description['langue'] = $elements[3]; |
---|
103 | } |
---|
104 | |
---|
105 | // On rajoute le nom scientifique du taxon pour un affichage plus compréhensible |
---|
106 | if (!isset($taxons[$description['tsn']])) { |
---|
107 | // Si pas encore stocké, on cherche le nom scientifique du taxon et on le sauvegarde. |
---|
108 | $where = array('tsn=' . $description['tsn']); |
---|
109 | $taxons[$description['tsn']] = sql_getfetsel('nom_scientifique', 'spip_taxons', $where); |
---|
110 | } |
---|
111 | $description['nom_scientifique'] = $taxons[$description['tsn']]; |
---|
112 | |
---|
113 | |
---|
114 | // On structure le tableau par service. |
---|
115 | $descriptions_cache[$_service]['titre_service'] = $_titre; |
---|
116 | $descriptions_cache[$_service]['caches'][] = $description; |
---|
117 | } |
---|
118 | } |
---|
119 | } |
---|
120 | } |
---|
121 | |
---|
122 | return $descriptions_cache; |
---|
123 | } |
---|