source: spip-zone/_plugins_/cache/trunk/cache/cache.php @ 113741

Last change on this file since 113741 was 113741, checked in by root, 3 months ago

Premier jet d'API.
Ca demande encore réflexion.

  • Property svn:eol-style set to native
File size: 6.0 KB
Line 
1<?php
2/**
3 * Ce fichier contient les fonctions de service du plugin Cache.
4 *
5 * Chaque fonction, soit aiguille, si elle existe, vers une fonction "homonyme" propre au plugin appelant
6 * soit déroule sa propre implémentation.
7 * Ainsi, les plugins externes peuvent, si elle leur convient, utiliser l'implémentation proposée par Cache
8 * en codant un minimum de fonctions.
9 */
10if (!defined('_ECRIRE_INC_VERSION')) {
11        return;
12}
13
14if (!defined('_CACHE_RACINE')) {
15        /**
16         * Dossier racine dans lesquels tous les caches par défaut seront rangés.
17         * Les caches sont répartis suivant le plugin appelant dans un sous-dossier `/${plugin}`.
18         */
19        define('_CACHE_RACINE', _DIR_CACHE);
20}
21
22if (!defined('_CACHE_EXTENSION')) {
23        /**
24         * Extension par défaut d'un cache.
25         */
26        define('_CACHE_EXTENSION', '.txt');
27}
28
29if (!defined('_CACHE_SECURISE')) {
30        /**
31         * Extension par défaut d'un cache.
32         */
33        define('_CACHE_SECURISE', false);
34}
35
36if (!defined('_CACHE_CONTENU_SERIALISE')) {
37        /**
38         * Extension par défaut d'un cache.
39         */
40        define('_CACHE_CONTENU_SERIALISE', true);
41}
42
43if (!defined('_CACHE_SEPARATEUR')) {
44        /**
45         * Dossier racine dans lesquels tous les caches par défaut seront rangés.
46         * Les caches sont répartis suivant le plugin appelant dans un sous-dossier `/${plugin}`.
47         */
48        define('_CACHE_SEPARATEUR', '_');
49}
50
51
52// -----------------------------------------------------------------------
53// ---------------------- SERVICES SURCHARGEABLES ------------------------
54// -----------------------------------------------------------------------
55
56/**
57 * Complète la description d'un type de noisette issue de la lecture de son fichier YAML.
58 *
59 * Le plugin N-Core ne complète pas les types de noisette.
60 *
61 * @package SPIP\NCORE\TYPE_NOISETTE\SERVICE
62 *
63 * @uses ncore_chercher_service()
64 *
65 * @param string $plugin
66 *        Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou
67 *        un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
68 * @param array  $description
69 *        Description du type de noisette issue de la lecture du fichier YAML. Suivant le plugin utilisateur elle
70 *        nécessite d'être compléter avant son stockage.
71 * @param string $stockage
72 *        Identifiant du service de stockage à utiliser si précisé.
73 *
74 * @return array
75 *        Description du type de noisette éventuellement complétée par le plugin utilisateur.
76 */
77function cache_cache_configurer($plugin) {
78
79        // Initialisation du tableau de configuration avec les valeurs par défaut du plugin Cache.
80        $configuration_defaut = array(
81                'racine'        => _CACHE_RACINE,
82                'nom'           => array('nom'),
83                'extension'     => _CACHE_EXTENSION,
84                'securisation'  => _CACHE_SECURISE,
85                'serialisation' => _CACHE_CONTENU_SERIALISE,
86                'separateur'    => _CACHE_SEPARATEUR
87        );
88
89        // Si le plugin utilisateur complète la description avec des champs spécifiques il doit proposer un service
90        // de complément propre.
91        $configuration_plugin = array();
92        if ($configurer = cache_chercher_service($plugin, 'cache_configurer')) {
93                // On passe le plugin appelant à la fonction car cela permet ainsi de mutualiser les services de stockage.
94                $configuration_plugin = $configurer($plugin);
95        }
96
97        // On merge la configuration du plugin avec celle par défaut pour assure la complétude.
98        $configuration_plugin = array_merge($configuration_defaut, $configuration_plugin);
99
100        // On vérifie l'indicateur de sécurisation : si le cache doit être sécurisé alors son extension
101        // doit absolument être .php. Si ce n'est pas le cas on la force.
102        if ($configuration_plugin['securisation']
103        and ($configuration_plugin['extension'] != '.php')) {
104                $configuration_plugin['extension'] = '.php';
105        }
106
107        // Pour faciliter la construction du chemin des caches on détermine une fois pour toute le dossier
108        // de base des caches du plugin.
109        // -- Vérification de la localisation de la racine qui ne peut être que dans les trois dossiers SPIP
110        //    prévus et de la présence du / final.
111        if (!in_array($configuration_plugin['racine'], array(_DIR_CACHE, _DIR_TMP, _DIR_VAR))) {
112                $configuration_plugin['racine'] = $configuration_defaut['racine'];
113        } else {
114                $configuration_plugin['racine'] = rtrim($configuration_plugin['racine'], '/') . '/';
115        }
116        // -- Sous-dossier spécifique au plugin
117        $sous_dossier = ($configuration_plugin['racine'] == _DIR_VAR) ? "cache-${plugin}" : "$plugin";
118        // -- Création et enregistrement du dossier de base
119        sous_repertoire($configuration_plugin['racine'], $sous_dossier);
120        $configuration['dossier_base'] = $configuration_plugin['racine'] . "${sous_dossier}/";
121       
122        // Enregistrement de la configuration du plugin utilisateur dans la meta prévue.
123        // Si une configuration existe déjà on l'écrase.
124        include_spip('inc/config');
125        $meta_cache = lire_config('cache', array());
126        $meta_cache[$plugin] = $configuration;
127        ecrire_cache('cache', $meta_cache);
128
129        return $configuration_plugin;
130}
131
132
133// -----------------------------------------------------------------------
134// ----------------- UTILITAIRE PROPRE AU PLUGIN CACHE -------------------
135// -----------------------------------------------------------------------
136
137/**
138 * Cherche une fonction donnée en se basant sur le plugin appelant.
139 * Si le plugin utilisateur ne fournit pas la fonction demandée la chaîne vide est renvoyée.
140 *
141 * @internal
142 *
143 * @param string $plugin
144 *        Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou
145 *        un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
146 * @param bool   $fonction
147 *        Nom de la fonction de service à chercher.
148 *
149 * @return string
150 *        Nom complet de la fonction si trouvée ou chaine vide sinon.
151 */
152function cache_chercher_service($plugin, $fonction) {
153
154        $fonction_trouvee = '';
155
156        // Eviter la réentrance si on demande explicitement le stockage N-Core
157        if ($plugin != 'cache') {
158                include_spip("cache/${plugin}");
159                $fonction_trouvee = "${plugin}_${fonction}";
160                if (!function_exists($fonction_trouvee)) {
161                        $fonction_trouvee = '';
162                }
163        }
164
165        return $fonction_trouvee;
166}
Note: See TracBrowser for help on using the repository browser.