Changeset 125397 in spip-zone


Ignore:
Timestamp:
Aug 15, 2020, 4:39:41 PM (8 months ago)
Author:
Eric Lupinacci
Message:

Mise en place de la notion de type de cache afin de permettre à un plugin utilisateur d'utilisation plusieurs configurations différentes de cache.
Les API embarque donc un argument supplémentaire, le type de cache.
Ensuite la configuration elle est transmise à tous les services et contient aussi le type de cache.
Les formulaires de vidage des caches sont associés au couple (plugin, type de cache).

Location:
_plugins_/cache/trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/cache/trunk

    • Property subgit:lock:3ad134c3ecf763abf3a5ffb7dca26ef64bb7b1f9 deleted
    • Property subgit:lock:d5ceea65584729baa21a76cc6fae40d14faf3ff6 set to 2020-08-15T18:53:27.282
  • _plugins_/cache/trunk/ezcache/ezcache.php

    r125395 r125397  
    1818
    1919/**
    20  * Récupère la configuration des caches d'un plugin, la complète et la stocke dans une meta.
     20 * Récupère ou charge la configuration des types de cache d'un plugin, la complète et la stocke dans une meta.
    2121 *
    2222 * Le plugin Cache Factory propose une configuration par défaut des caches.
     
    2929 *                       un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
    3030 *
    31  * @return array Tableau de la configuration complétée des caches d'un plugin venant d'être enregistrée.
     31 * @return array Tableau des configurations complétée des caches d'un plugin venant d'être enregistrée.
    3232 */
    3333function ezcache_cache_configurer($plugin) {
     34
     35        // Initialisation du tableau des configurations qui sera retourné.
     36        $configurations = array();
    3437
    3538        // Initialisation du tableau de configuration avec les valeurs par défaut du plugin Cache.
     
    4851        );
    4952
    50         // Le plugin utilisateur doit fournir un service propre pour la configuration de ses caches.
    51         // Cette configuration peut-être partielle, dans ce cas les données manquantes sont complétées
     53        // Le plugin utilisateur doit fournir un service propre pour la ou les configurations de ses caches.
     54        // Chaque configuration peut-être partielle, dans ce cas les données manquantes seront complétées
    5255        // par celles par défaut.
    53         $configuration_plugin = array();
     56        $configurations_plugin = array();
    5457        if ($configurer = service_cache_chercher($plugin, 'cache_configurer')) {
    55                 $configuration_plugin = $configurer($plugin);
    56         }
    57 
    58         // On merge la configuration du plugin avec celle par défaut pour assure la complétude.
    59         $configuration = array_merge($configuration_defaut, $configuration_plugin);
    60 
    61         // On vérifie que la durée de conservation du cache est bien un entier supérieur ou égal à 0.
    62         // La durée est exprimée en secondes.
    63         $configuration['conservation'] = abs(intval($configuration['conservation']));
    64 
    65         // On vérifie en priorité la sécurisation. Si le cache doit être sécurisé :
    66         // - le décodage n'est pas possible
    67         // - l'extension du cache doit absolument être .php. Si ce n'est pas le cas on la force.
    68         if ($configuration['securisation']) {
    69                 $configuration['decodage'] = false;
    70                 if ($configuration['extension'] != '.php') {
    71                         $configuration['extension'] = '.php';
    72                 }
    73         }
    74 
    75         // On vérifie ensuite la sérialisation. Si le cache est sérialisé :
    76         // - le décodage n'est pas possible.
    77         if ($configuration['serialisation']) {
    78                 $configuration['decodage'] = false;
    79         }
    80 
    81         // On vérifie en dernier le décodage. Si le cache demande un décodage :
    82         // - sécurisation et sérialisation ne sont pas possibles mais ont été traitées précédemment
    83         // - le cache n'accepte que les extensions : json, xml ou yaml.
    84         if ($configuration['decodage']) {
    85                 if ((($configuration['extension'] == 'yaml') or ($configuration['extension'] == 'yml'))
    86                 and (!defined('_DIR_PLUGIN_YAML'))) {
     58                $configurations_plugin = $configurer($plugin);
     59        }
     60
     61        // On boucle sur les différentes configuration de cache du plugin (appelée type de cache).
     62        foreach ($configurations_plugin as $_type_cache => $_configuration_type_cache) {
     63                // On merge la configuration du plugin avec celle par défaut pour assure la complétude.
     64                $configuration = array_merge($configuration_defaut, $_configuration_type_cache);
     65
     66                // On rajoute le type de cache dans la configuration de façon à toujours l'avoir à disposition quand on fournit
     67                // le tableau de configuration
     68                $configuration['type_cache'] = $_type_cache;
     69
     70                // On vérifie que la durée de conservation du cache est bien un entier supérieur ou égal à 0.
     71                // La durée est exprimée en secondes.
     72                $configuration['conservation'] = abs(intval($configuration['conservation']));
     73
     74                // On vérifie en priorité la sécurisation. Si le cache doit être sécurisé :
     75                // - le décodage n'est pas possible
     76                // - l'extension du cache doit absolument être .php. Si ce n'est pas le cas on la force.
     77                if ($configuration['securisation']) {
    8778                        $configuration['decodage'] = false;
    88                 }
    89         }
    90 
    91         // Pour faciliter la construction du chemin des caches on stocke les éléments récurrents composant
    92         // le dossier de base.
    93         // -- Vérification de la localisation de la racine qui ne peut être que dans les trois dossiers SPIP
    94         //    prévus.
    95         if (!in_array($configuration['racine'], array('_DIR_CACHE', '_DIR_TMP', '_DIR_ETC', '_DIR_VAR'))) {
    96                 $configuration['racine'] = $configuration_defaut['racine'];
    97         }
    98         // -- Sous-dossier spécifique au plugin
    99         $configuration['dossier_plugin'] = ($configuration['racine'] == '_DIR_VAR') ? "cache-${plugin}/" : "${plugin}/";
    100 
    101         // Construction du tableau des composants du nom : dans l'ordre on a toujours les composants obligatoires
    102         // suivis des composants facultatifs.
    103         // -- Traitement du préfixe: si il existe on le positionne comme premier composant obligatoire
    104         if ($configuration['nom_prefixe']) {
    105                 $configuration['nom_obligatoire'] = array_merge(array('_prefixe'), $configuration['nom_obligatoire']);
    106                 // Eviter une erreur si le séparateur est vide : on le force à '_'
    107                 if (!$configuration['separateur']) {
    108                         $configuration['separateur'] = '_';
    109                 }
    110         }
    111         // -- Calcul du nom complet
    112         $configuration['nom'] = array_merge($configuration['nom_obligatoire'], $configuration['nom_facultatif']);
    113 
    114         // Si le nom ne comporte qu'un seul composant forcer le séparateur à '' pour ne pas interdire d'utiliser les
    115         // caractères '_' ou '-' dans le composant unique.
    116         if (count($configuration['nom']) == 1) {
    117                 $configuration['separateur'] = '';
    118         }
     79                        if ($configuration['extension'] != '.php') {
     80                                $configuration['extension'] = '.php';
     81                        }
     82                }
     83
     84                // On vérifie ensuite la sérialisation. Si le cache est sérialisé :
     85                // - le décodage n'est pas possible.
     86                if ($configuration['serialisation']) {
     87                        $configuration['decodage'] = false;
     88                }
     89
     90                // On vérifie en dernier le décodage. Si le cache demande un décodage :
     91                // - sécurisation et sérialisation ne sont pas possibles mais ont été traitées précédemment
     92                // - le cache n'accepte que les extensions : json, xml ou yaml.
     93                if ($configuration['decodage']) {
     94                        if ((($configuration['extension'] == 'yaml') or ($configuration['extension'] == 'yml'))
     95                        and (!defined('_DIR_PLUGIN_YAML'))) {
     96                                $configuration['decodage'] = false;
     97                        }
     98                }
     99
     100                // Pour faciliter la construction du chemin des caches on stocke les éléments récurrents composant
     101                // le dossier de base.
     102                // -- Vérification de la localisation de la racine qui ne peut être que dans les trois dossiers SPIP
     103                //    prévus.
     104                if (!in_array($configuration['racine'], array('_DIR_CACHE', '_DIR_TMP', '_DIR_ETC', '_DIR_VAR'))) {
     105                        $configuration['racine'] = $configuration_defaut['racine'];
     106                }
     107                // -- Sous-dossier spécifique au plugin
     108                $configuration['dossier_plugin'] = ($configuration['racine'] == '_DIR_VAR') ? "cache-${plugin}/" : "${plugin}/";
     109
     110                // Construction du tableau des composants du nom : dans l'ordre on a toujours les composants obligatoires
     111                // suivis des composants facultatifs.
     112                // -- Traitement du préfixe: si il existe on le positionne comme premier composant obligatoire
     113                if ($configuration['nom_prefixe']) {
     114                        $configuration['nom_obligatoire'] = array_merge(array('_prefixe'), $configuration['nom_obligatoire']);
     115                        // Eviter une erreur si le séparateur est vide : on le force à '_'
     116                        if (!$configuration['separateur']) {
     117                                $configuration['separateur'] = '_';
     118                        }
     119                }
     120                // -- Calcul du nom complet
     121                $configuration['nom'] = array_merge($configuration['nom_obligatoire'], $configuration['nom_facultatif']);
     122
     123                // Si le nom ne comporte qu'un seul composant forcer le séparateur à '' pour ne pas interdire d'utiliser les
     124                // caractères '_' ou '-' dans le composant unique.
     125                if (count($configuration['nom']) == 1) {
     126                        $configuration['separateur'] = '';
     127                }
     128
     129                // On range la configuration élaborée dans le tableau des configurations du plugin
     130                $configurations[$_type_cache] = $configuration;
     131        }
     132
    119133
    120134        // Enregistrement de la configuration du plugin utilisateur dans la meta prévue.
     
    122136        include_spip('inc/config');
    123137        $meta_cache = lire_config('cache', array());
    124         $meta_cache[$plugin] = $configuration;
     138        $meta_cache[$plugin] = $configurations;
    125139        ecrire_config('cache', $meta_cache);
    126140
    127         return $configuration;
     141        return $configurations;
    128142}
    129143
     
    265279 * Complète la description d'un cache issue du service `cache_decomposer()`.
    266280 *
    267  * Le plugin Cache Factory complète la description canonique avec le nom sans extension et l'extension du fichier.
     281 * Le plugin Cache Factory complète la description canonique avec le nom sans extension, l'extension du fichier,
     282 * la date et la taille du fichier.
    268283 *
    269284 * @uses service_cache_chercher()
     
    424439        $valeurs['_nom_plugin'] = $informer($plugin, 'nom', true);
    425440
     441        // Stocker le type de cache pour l'afficher dans le titre du formulaire.
     442        $valeurs['_type_cache'] = $configuration['type_cache'];
     443
    426444        // On répertorie les caches pour vérifier qu'ils existent. Si non, on n'appelle aucune fonction spécifique.
    427445        $valeurs['_caches'] = array();
    428         $caches = cache_repertorier($plugin, array());
     446        $caches = cache_repertorier($plugin, $configuration['type_cache'], array());
    429447
    430448        // Le plugin utilisateur peut fournir un service propre pour construire le tableau des valeurs du formulaire.
  • _plugins_/cache/trunk/formulaires/cache_vider.html

    r122775 r125397  
    1 <div class="formulaire_spip formulaire_vider_cache formulaire_vider_cache_#ENV{_prefixe}" id="#ENV{_prefixe}">
     1<div class="formulaire_spip formulaire_vider_cache formulaire_vider_cache_#ENV{_prefixe}_#ENV{_type_cache}" id="#ENV{_prefixe}_#ENV{_type_cache}">
    22
    3         <h3 class="titrem"><:cache:cache_vider_titre_form{plugin=#ENV{_nom_plugin}}:></h3>
     3        <h3 class="titrem">
     4                <:cache:cache_vider_titre_form{plugin=#ENV{_nom_plugin}}:>&nbsp;(<:cache:cache_vider_type_cache_form{type=#ENV{_type_cache}}:>)
     5        </h3>
    46
    57        [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
     
    1012                #ACTION_FORMULAIRE{#ENV{action}}
    1113
    12                 [(#CHEMIN{[formulaires/inc-(#ENV{_prefixe})_cache_vider.html]}|oui)
    13                         <INCLURE{fond=formulaires/inc-#ENV{_prefixe}_cache_vider, env} />
     14                [(#CHEMIN{[formulaires/inc-(#ENV{_prefixe})_[(#ENV{_type_cache})_]cache_vider.html]}|oui)
     15                        <INCLURE{fond=formulaires/inc-#ENV{_prefixe}_#ENV{_type_cache}_cache_vider, env} />
    1416                ]
    15                 [(#CHEMIN{[formulaires/inc-(#ENV{_prefixe})_cache_vider.html]}|non)
     17                [(#CHEMIN{[formulaires/inc-(#ENV{_prefixe})_[(#ENV{_type_cache})_]cache_vider.html]}|non)
    1618                        <INCLURE{fond=formulaires/inc-ezcache_cache_vider, env} />
    1719                ]
  • _plugins_/cache/trunk/formulaires/cache_vider.php

    r125391 r125397  
    1616 * @uses ezcache_cache_formulaire_charger()
    1717 *
    18  * @param string $plugin  Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
    19  *                        ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
    20  * @param array  $options Tableau d'options qui peut être fourni par un plugin utilisateur uniquement si celui-ci fait appel
    21  *                        au formulaire. La page cache_vider de Cache Factory n'utilise pas ce paramètre.
    22  *                        Le tableau est passé à la fonction de service de chargement du formulaire uniquement.
     18 * @param string $plugin     Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
     19 *                           ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
     20 * @param string $type_cache Type de cache identifiant la configuration dans la liste des configurations de cache du plugin
     21 * @param array  $options    Tableau d'options qui peut être fourni par un plugin utilisateur uniquement si celui-ci fait appel
     22 *                           au formulaire. La page cache_vider de Cache Factory n'utilise pas ce paramètre.
     23 *                           Le tableau est passé à la fonction de service de chargement du formulaire uniquement.
    2324 *
    2425 * @return array Tableau des données à charger par le formulaire (affichage). Aucune donnée chargée n'est un
     
    2627 *               - `_caches`    : (affichage) liste des descriptions des caches du plugin rangés par groupes
    2728 */
    28 function formulaires_cache_vider_charger($plugin, $options = array()) {
     29function formulaires_cache_vider_charger($plugin, $type_cache, $options = array()) {
    2930
    3031        // Lecture de la configuration des caches du plugin.
    3132        include_spip('inc/ezcache_cache');
    32         $configuration = configuration_cache_lire($plugin);
     33        $configuration = configuration_cache_lire($plugin, $type_cache);
    3334
    3435        // On appelle le service de chargement des variables qui est soit celui par défaut de Cache Factory
     
    4344 * Vérification des saisies : il est obligatoire de choisir un cache à supprimer.
    4445 *
    45  * @param string $plugin  Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
    46  *                        ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
    47  * @param array  $options Tableau d'options qui peut être fourni par un plugin utilisateur uniquement si celui-ci fait appel
    48  *                        au formulaire. La page cache_vider de Cache Factory n'utilise pas ce paramètre.
    49  *                        Le tableau est passé à la fonction de service de chargement du formulaire uniquement.
     46 * @param string $plugin     Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
     47 *                           ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
     48 * @param string $type_cache Type de cache identifiant la configuration dans la liste des configurations de cache du plugin
     49 * @param array  $options    Tableau d'options qui peut être fourni par un plugin utilisateur uniquement si celui-ci fait appel
     50 *                           au formulaire. La page cache_vider de Cache Factory n'utilise pas ce paramètre.
     51 *                           Le tableau est passé à la fonction de service de chargement du formulaire uniquement.
    5052 *
    5153 * @return array Tableau des erreurs qui se limite à la non sélection d'au moins un cache.
    5254 */
    53 function formulaires_cache_vider_verifier($plugin, $options = array()) {
     55function formulaires_cache_vider_verifier($plugin, $type_cache, $options = array()) {
    5456        $erreurs = array();
    5557
     
    6971 * @uses cache_vider()
    7072 *
    71  * @param string $plugin  Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
    72  *                        ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
    73  * @param array  $options Tableau d'options qui peut être fourni par un plugin utilisateur uniquement si celui-ci fait appel
    74  *                        au formulaire. La page cache_vider de Cache Factory n'utilise pas ce paramètre.
    75  *                        Le tableau est passé à la fonction de service de chargement du formulaire uniquement.
     73 * @param string $plugin     Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
     74 *                           ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
     75 * @param string $type_cache Type de cache identifiant la configuration dans la liste des configurations de cache du plugin
     76 * @param array  $options    Tableau d'options qui peut être fourni par un plugin utilisateur uniquement si celui-ci fait appel
     77 *                           au formulaire. La page cache_vider de Cache Factory n'utilise pas ce paramètre.
     78 *                           Le tableau est passé à la fonction de service de chargement du formulaire uniquement.
    7679 *
    7780 * @return array Tableau retourné par le formulaire contenant toujours un message de bonne exécution. L'indicateur
    7881 *               editable est toujours à vrai.
    7982 */
    80 function formulaires_cache_vider_traiter($plugin, $options = array()) {
     83function formulaires_cache_vider_traiter($plugin, $type_cache, $options = array()) {
    8184        $retour = array();
    8285
     
    8689        // On appelle l'API des caches
    8790        include_spip('inc/ezcache_cache');
    88         cache_vider($plugin, $caches);
     91        cache_vider($plugin, $type_cache, $caches);
    8992
    9093        $retour['message_ok'] = _T('cache:cache_vider_succes');
  • _plugins_/cache/trunk/inc/ezcache_cache.php

    r125395 r125397  
    2020 * @uses ecrire_fichier_securise()
    2121 *
    22  * @param string       $plugin  Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
    23  *                              ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
    24  * @param array|string $cache   Identifiant du cache sous la forme d'une chaine (le chemin du fichier) ou d'un tableau fournissant
    25  *                              les composants canoniques du nom.
    26  * @param array|string $contenu Contenu sous forme de tableau à sérialiser ou sous la forme d'une chaine.
     22 * @param string       $plugin     Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
     23 *                                 ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
     24 * @param string       $type_cache Type de cache identifiant la configuration dans la liste des configurations de cache du plugin
     25 * @param array|string $cache      Identifiant du cache sous la forme d'une chaine (le chemin du fichier) ou d'un tableau fournissant
     26 *                                 les composants canoniques du nom.
     27 * @param array|string $contenu    Contenu sous forme de tableau à sérialiser ou sous la forme d'une chaine.
    2728 *
    2829 * @return bool
    2930 *              True si l'écriture s'est bien passée, false sinon.
    3031 */
    31 function cache_ecrire($plugin, $cache, $contenu) {
     32function cache_ecrire($plugin, $type_cache, $cache, $contenu) {
    3233
    3334        // Initialisation du retour de la fonction
     
    3536
    3637        // Lecture de la configuration des caches du plugin.
    37         $configuration = configuration_cache_lire($plugin);
     38        $configuration = configuration_cache_lire($plugin, $type_cache);
    3839
    3940        // Le cache peut-être fourni soit sous la forme d'un chemin complet soit sous la forme d'un
     
    118119 * @uses lire_fichier_securise()
    119120 *
    120  * @param string       $plugin Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
    121  *                             ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
    122  * @param array|string $cache  Identifiant du cache sous la forme d'une chaine (le chemin du fichier) ou d'un tableau fournissant
    123  *                             les composants canoniques du nom.
     121 * @param string       $plugin     Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
     122 *                                 ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
     123 * @param string       $type_cache Type de cache identifiant la configuration dans la liste des configurations de cache du plugin
     124 * @param array|string $cache      Identifiant du cache sous la forme d'une chaine (le chemin du fichier) ou d'un tableau fournissant
     125 *                                 les composants canoniques du nom.
    124126 *
    125127 * @return array|bool|string Contenu du fichier sous la forme d'un tableau, d'une chaine ou false si une erreur s'est produite.
    126128 */
    127 function cache_lire($plugin, $cache) {
     129function cache_lire($plugin, $type_cache, $cache) {
    128130
    129131        // Initialisation du contenu du cache
     
    131133
    132134        // Lecture de la configuration des caches du plugin.
    133         $configuration = configuration_cache_lire($plugin);
     135        $configuration = configuration_cache_lire($plugin, $type_cache);
    134136
    135137        // Le cache peut-être fourni soit sous la forme d'un chemin complet soit sous la forme d'un
     
    185187 * @uses ezcache_cache_valider()
    186188 *
    187  * @param string       $plugin Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
    188  *                             ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
    189  * @param array|string $cache  Identifiant du cache sous la forme d'une chaine (le chemin du fichier) ou d'un tableau fournissant
    190  *                             les composants canoniques du nom.
     189 * @param string       $plugin     Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
     190 *                                 ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
     191 * @param string       $type_cache Type de cache identifiant la configuration dans la liste des configurations de cache du plugin
     192 * @param array|string $cache      Identifiant du cache sous la forme d'une chaine (le chemin du fichier) ou d'un tableau fournissant
     193 *                                 les composants canoniques du nom.
    191194 *
    192195 * @return string Le chemin complet du fichier si valide, la chaine vide sinon.
    193196 */
    194 function cache_est_valide($plugin, $cache) {
     197function cache_est_valide($plugin, $cache, $type_cache) {
    195198
    196199        // Lecture de la configuration des caches du plugin.
    197         $configuration = configuration_cache_lire($plugin);
     200        $configuration = configuration_cache_lire($plugin, $type_cache);
    198201
    199202        // Le cache peut-être fourni soit sous la forme d'un chemin complet soit sous la forme d'un
     
    232235 * @uses ezcache_cache_composer()
    233236 *
    234  * @param string $plugin Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
    235  *                       ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
    236  * @param array  $cache  Identifiant du cache sous la forme d'un tableau fournissant les composants canoniques du nom.
     237 * @param string $plugin     Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
     238 *                           ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
     239 * @param string $type_cache Type de cache identifiant la configuration dans la liste des configurations de cache du plugin
     240 * @param array  $cache      Identifiant du cache sous la forme d'un tableau fournissant les composants canoniques du nom.
    237241 *
    238242 * @return string
    239243 */
    240 function cache_nommer($plugin, $cache) {
     244function cache_nommer($plugin, $type_cache, $cache) {
    241245
    242246        // Lecture de la configuration des caches du plugin.
    243         $configuration = configuration_cache_lire($plugin);
     247        $configuration = configuration_cache_lire($plugin, $type_cache);
    244248
    245249        // Le cache est toujours fourni sous la forme d'un tableau permettant de calculer le chemin complet.
     
    265269 * @uses supprimer_fichier()
    266270 *
    267  * @param string       $plugin Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
    268  *                             ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
    269  * @param array|string $cache  Identifiant du cache sous la forme d'une chaine (le chemin du fichier) ou d'un tableau fournissant
    270  *                             les composants canoniques du nom.
     271 * @param string       $plugin     Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
     272 *                                 ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
     273 * @param string       $type_cache Type de cache identifiant la configuration dans la liste des configurations de cache du plugin
     274 * @param array|string $cache      Identifiant du cache sous la forme d'une chaine (le chemin du fichier) ou d'un tableau fournissant
     275 *                                 les composants canoniques du nom.
    271276 *
    272277 * @return bool `true` si la suppression s'est bien passée, `false` sinon.
    273278 */
    274 function cache_supprimer($plugin, $cache) {
     279function cache_supprimer($plugin, $type_cache, $cache) {
    275280
    276281        // Initialisation du contenu du cache
     
    278283
    279284        // Lecture de la configuration des caches du plugin.
    280         $configuration = configuration_cache_lire($plugin);
     285        $configuration = configuration_cache_lire($plugin, $type_cache);
    281286
    282287        // Le cache peut-être fourni soit sous la forme d'un chemin complet soit sous la forme d'un
     
    331336 * @uses ezcache_cache_completer()
    332337 *
    333  * @param string $plugin  Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
    334  *                        ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
    335  * @param array  $filtres Tableau associatif `[champ] = valeur` ou `[champ] = !valeur` de critères de filtres sur les composants
    336  *                        de caches. Les opérateurs égalité et inégalité sont possibles.
     338 * @param string $plugin     Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
     339 *                           ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
     340 * @param string $type_cache Type de cache identifiant la configuration dans la liste des configurations de cache du plugin
     341 * @param array  $filtres    Tableau associatif `[champ] = valeur` ou `[champ] = !valeur` de critères de filtres sur les composants
     342 *                           de caches. Les opérateurs égalité et inégalité sont possibles.
    337343 *
    338344 * @return array Tableau des descriptions des fichiers cache créés par le plugin indexé par le chemin complet de
    339345 *               chaque fichier cache.
    340346 */
    341 function cache_repertorier($plugin, $filtres = array()) {
     347function cache_repertorier($plugin, $type_cache, $filtres = array()) {
    342348
    343349        // Initialisation de la liste des caches
     
    345351
    346352        // Lecture de la configuration des caches du plugin.
    347         $configuration = configuration_cache_lire($plugin);
     353        $configuration = configuration_cache_lire($plugin, $type_cache);
    348354
    349355        // Rechercher les caches du plugin sans appliquer de filtre si ce n'est sur le sous-dossier ou l'extension
     
    417423 * @uses supprimer_fichier()
    418424 *
    419  * @param string $plugin Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
    420  *                       ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
    421  * @param array  $caches Liste des fichiers caches désignés par leur chemin complet.
     425 * @param string $plugin     Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
     426 *                           ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
     427 * @param string $type_cache Type de cache identifiant la configuration dans la liste des configurations de cache du plugin
     428 * @param array  $caches     Liste des fichiers caches désignés par leur chemin complet.
    422429 *
    423430 * @return bool `true` si la suppression s'est bien passée, `false` sinon.
    424431 */
    425 function cache_vider($plugin, $caches) {
     432function cache_vider($plugin, $type_cache, $caches) {
    426433
    427434        // Initialisation du retour
     
    433440
    434441                // Lecture de la configuration des caches du plugin.
    435                 $configuration = configuration_cache_lire($plugin);
     442                $configuration = configuration_cache_lire($plugin, $type_cache);
    436443
    437444                // Suppression des caches
     
    461468
    462469/**
    463  * Lit la configuration standard des caches d'un plugin utilisateur ou de tous les plugins utilisateur
    464  * ayant enregistrés une configuration.
     470 * Lit la configuration standard d'un type de cache d'un plugin utilisateur, de tous les types de caches ou de tous
     471 * les plugins utilisateur ayant enregistrés une configuration.
    465472 *
    466473 * @api
     
    469476 * @uses ezcache_cache_configurer()
    470477 *
    471  * @param string $plugin Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
    472  *                       ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
    473  *                       Si vide, toutes les configurations sont fournies.
     478 * @param string $plugin     Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
     479 *                           ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
     480 *                           Si vide, toutes les configurations sont fournies.
     481 * @param string $type_cache Type de cache identifiant la configuration dans la liste des configurations de cache du plugin
     482 *                           Si vide toutes les configurations du plugin sont renvoyées.
    474483 *
    475484 * @return array Tableau de configuration des caches d'un plugin utilisateur ou tableau vide si aucune configuration n'est encore
    476485 *               enregistrée.
    477486 */
    478 function configuration_cache_lire($plugin = '') {
     487function configuration_cache_lire($plugin = '', $type_cache = '') {
    479488        static $configuration = array();
    480489
    481         // Retourner la configuration du plugin ou de tous les plugins utilisateur.
     490        // Retourner la configuration d'un type de cache d'un plugin, de tous les types de cache d'un plugin ou
     491        // de tous les plugins utilisateur.
    482492        include_spip('inc/config');
    483493        if ($plugin) {
    484                 // Lecture de la configuration des caches du plugin. Si celle-ci n'existe pas encore elle est créée.
    485                 if (empty($configuration[$plugin]) and (!$configuration[$plugin] = lire_config("cache/${plugin}", array()))) {
     494                // Lecture de la configuration des types de cache du plugin. Si celle-ci n'existe pas encore elle est créée.
     495                // On recharge toujours l'ensemble des types de cache d'un plugin
     496                if (
     497                        empty($configuration[$plugin])
     498                        and (!$configuration[$plugin] = lire_config("cache/${plugin}", array()))
     499                ) {
    486500                        include_spip('ezcache/ezcache');
    487501                        $configuration[$plugin] = ezcache_cache_configurer($plugin);
    488502                }
    489                 $configuration_lue = $configuration[$plugin];
     503
     504                // Suivant que la demande concerne un type de cache ou tous les types de caches du plugin
     505                if ($type_cache) {
     506                        $configuration_lue = isset($configuration[$plugin][$type_cache])
     507                                ? $configuration[$plugin][$type_cache]
     508                                : array();
     509                } else {
     510                        $configuration_lue = $configuration[$plugin];
     511                }
    490512        } else {
    491513                $configuration_lue = lire_config('cache', array());
     
    496518
    497519/**
    498  * Efface la configuration standard des caches d'un plugin utilisateur ou de tous les plugins utilisateur
     520 * Efface les configurations standard de types de cache d'un plugin utilisateur ou de tous les plugins utilisateur
    499521 * ayant enregistrés une configuration.
    500522 *
  • _plugins_/cache/trunk/lang/cache_fr.php

    r122484 r125397  
    66$GLOBALS[$GLOBALS['idx_lang']] = array(
    77        // C
    8         'cache_vider_titre_form'   => 'Caches du plugin @plugin@',
    9         'cache_vider_titre_page'   => 'Cache Factory',
    10         'cache_vider_menu'         => 'Vider les caches des plugins',
    11         'cache_vider_label_choix'  => 'Choisir les caches à supprimer',
    12         'cache_vider_notice_aucun' => 'Aucun cache n\'a encore été créé par le plugin.',
    13         'cache_vider_succes'       => 'Les caches sélectionnés ont bien été supprimés.',
    14         'cache_vider_cocher_rien'  => 'Tout décocher',
    15         'cache_vider_cocher_tout'  => 'Tout cocher',
     8        'cache_vider_titre_form'      => 'Caches du plugin @plugin@',
     9        'cache_vider_type_cache_form' => 'type de cache «@type@»',
     10        'cache_vider_titre_page'      => 'Cache Factory',
     11        'cache_vider_menu'            => 'Vider les caches des plugins',
     12        'cache_vider_label_choix'     => 'Choisir les caches à supprimer',
     13        'cache_vider_notice_aucun'    => 'Aucun cache n\'a encore été créé par le plugin.',
     14        'cache_vider_succes'          => 'Les caches sélectionnés ont bien été supprimés.',
     15        'cache_vider_cocher_rien'     => 'Tout décocher',
     16        'cache_vider_cocher_tout'     => 'Tout cocher',
    1617
    1718        // F
  • _plugins_/cache/trunk/paquet.xml

    r125388 r125397  
    22        prefix="ezcache"
    33        categorie="outil"
    4         version="0.8.6"
    5         etat="stable"
    6         compatibilite="[3.0.0;3.2.*]"
     4        version="1.0.0"
     5        etat="dev"
     6        compatibilite="[3.2.0;3.2.*]"
    77        logo="ezcache_logo-64.png"
    88        documentation="https://contrib.spip.net/Cache-Factory"
  • _plugins_/cache/trunk/prive/squelettes/contenu/cache_vider.html

    r113942 r125397  
    11[(#AUTORISER{configurer}|sinon_interdire_acces)]
    22<h1 class="grostitre"><:cache:cache_vider_titre_page:>&nbsp;-&nbsp;<:cache:cache_vider_menu:></h1>
    3 #SET{plugins, #ARRAY}
    4 #SET{config_cache, #CONFIG{cache}}
    5 [(#GET{config_cache}|oui) #SET{plugins, #GET{config_cache}|unserialize|array_keys}]
    6 <BOUCLE_plugins_cache(DATA){source table, #GET{plugins}}{par valeur}>
    7 [<div class="ajax">
    8         (#FORMULAIRE_CACHE_VIDER*{#VALEUR})
    9 </div>]
     3
     4[(#REM) <!-- On boucle sur la meta "cache": par plugin puis par type de cache dans chaque plugin -->]
     5<BOUCLE_plugins_cache(DATA){source table, #CONFIG{cache}}{par cle}>
     6        <BOUCLE_types_cache(DATA){source table, #VALEUR}{par cle}>
     7        [<div class="ajax">
     8                (#FORMULAIRE_CACHE_VIDER*{#_plugins_cache:CLE, #CLE})
     9        </div>]
     10        </BOUCLE_types_cache>
    1011</BOUCLE_plugins_cache>
Note: See TracChangeset for help on using the changeset viewer.