diff --git a/Guide - Le plugin Cache Factory.pdf b/Guide - Le plugin Cache Factory.pdf index ae2bf9d..c6c676e 100644 Binary files a/Guide - Le plugin Cache Factory.pdf and b/Guide - Le plugin Cache Factory.pdf differ diff --git a/ezcache/ezcache.php b/ezcache/ezcache.php index bb2b37f..41b51bd 100644 --- a/ezcache/ezcache.php +++ b/ezcache/ezcache.php @@ -28,7 +28,7 @@ if (!defined('_ECRIRE_INC_VERSION')) { * @param string $plugin Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou * un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe. * - * @return array Tableau des configurations complétée des caches d'un plugin venant d'être enregistrée. + * @return array Tableau des configurations complétée des caches d'un plugin venant d'être enregistrée. */ function ezcache_cache_configurer($plugin) { @@ -37,17 +37,18 @@ function ezcache_cache_configurer($plugin) { // Initialisation du tableau de configuration avec les valeurs par défaut du plugin Cache. $configuration_defaut = array( - 'racine' => '_DIR_CACHE', // Emplacement de base du répertoire des caches. Attention c'est la chaine de la constante SPIP - 'sous_dossier' => false, // Indicateur d'utilisation d'un sous-dossier - 'nom_prefixe' => '', // Préfixe du nom du cache : si non vide devient le premier composant obligatoire. - 'nom_obligatoire' => array(), // Composants obligatoires ordonnés de gauche à droite. - 'nom_facultatif' => array(), // Composants facultatifs - 'separateur' => '', // Caractère de séparation des composants du nom '_' ou '-' ou '' si un seul composant est utilisé - 'extension' => '.txt', // Extension du fichier cache (vaut .php si cache sécurisé) - 'securisation' => false, // Indicateur de sécurisation du fichier - 'serialisation' => true, // Indicateur de sérialisation - 'decodage' => false, // Permet d'appliquer une fonction de décodage à la lecture qui dépend de l'extension - 'conservation' => 0 // Durée de conservation du cache en secondes. 0 pour permanent + 'racine' => '_DIR_CACHE', // Emplacement de base du répertoire des caches. Attention c'est la chaine de la constante SPIP + 'sous_dossier' => false, // Indicateur d'utilisation d'un sous-dossier + 'sous_dossier_auto' => false, // Indique que la valeur par défaut du sous-dossier est le type de cache + 'nom_prefixe' => '', // Préfixe du nom du cache : si non vide devient le premier composant obligatoire. + 'nom_obligatoire' => array(), // Composants obligatoires ordonnés de gauche à droite. + 'nom_facultatif' => array(), // Composants facultatifs + 'separateur' => '', // Caractère de séparation des composants du nom '_' ou '-' ou '' si un seul composant est utilisé + 'extension' => '.txt', // Extension du fichier cache (vaut .php si cache sécurisé) + 'securisation' => false, // Indicateur de sécurisation du fichier + 'serialisation' => true, // Indicateur de sérialisation + 'decodage' => false, // Permet d'appliquer une fonction de décodage à la lecture qui dépend de l'extension + 'conservation' => 0 // Durée de conservation du cache en secondes. 0 pour permanent ); // Le plugin utilisateur doit fournir un service propre pour la ou les configurations de ses caches. @@ -106,6 +107,10 @@ function ezcache_cache_configurer($plugin) { } // -- Sous-dossier spécifique au plugin $configuration['dossier_plugin'] = ($configuration['racine'] == '_DIR_VAR') ? "cache-${plugin}/" : "${plugin}/"; + // -- Si le type sert de sous-dossier on force l'indicateur sous-dossier à vrai + if ($configuration['sous_dossier_auto']) { + $configuration['sous_dossier'] = true; + } // Construction du tableau des composants du nom : dans l'ordre on a toujours les composants obligatoires // suivis des composants facultatifs. @@ -148,56 +153,66 @@ function ezcache_cache_configurer($plugin) { return $configurations; } - /** * Vérifie l'identifiant relatif du cache et le complète le cas échéant si le plugin utilise un sous-dossier ou * un préfixe. * - * @param string $plugin Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier - * ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe. - * @param array $cache Tableau identifiant le cache pour lequel on veut construire le nom. - * @param array $configuration Configuration complète des caches du plugin utlisateur lue à partir de la meta de stockage. + * @param string $plugin Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier + * ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe. + * @param array $cache Tableau identifiant le cache pour lequel on veut construire le nom. + * @param array $configuration Configuration complète des caches du plugin utlisateur lue à partir de la meta de stockage. * - * @return array L'identifiant relatif du cache vérifié et éventuellement complété ou tableau vide si erreur. + * @return array L'identifiant relatif du cache vérifié et éventuellement complété ou tableau vide si erreur. */ function ezcache_cache_verifier($plugin, $cache, $configuration) { - // Cache avec sous-dossier: si la configuration impose un sous-dossier et que l'identifiant relatif $cache - // ne fournit pas cet index, c'est que le type de cache doit être utilisé comme nom de sous-dossier. - // -> on l'ajoute pour assurer un traitement standard. + // Vérifications : + // -- on vérifie la configuration du sous-dossier if ( $configuration['sous_dossier'] + and !$configuration['sous_dossier_auto'] and empty($cache['sous_dossier']) ) { - $cache['sous_dossier'] = $configuration['type_cache']; + $cache = []; } - - // Cache avec préfixe: si il existe on le rajoute dans le tableau $cache pour assurer un - // traitement standard. - if ($configuration['nom_prefixe']) { - $cache['_prefixe_nom'] = $configuration['nom_prefixe']; + // -- on vérifie la présence de tous les composants obligatoires du nom + if ($cache) { + foreach ($configuration['nom_obligatoire'] as $_composant) { + if (empty($cache[$_composant])) { + $cache = []; + break; + } + } } - // On vérifie la présence de tous les composants obligatoires du nom - foreach ($configuration['nom_obligatoire'] as $_composant) { - if (empty($cache[$_composant])) { - $cache = []; - break; + // Compléments : + // -- Cache avec sous-dossier: si la configuration impose un sous-dossier auto et que l'identifiant relatif $cache + // ne fournit pas cet index, c'est que le type de cache doit être utilisé comme nom de sous-dossier. + // -> on l'ajoute pour assurer un traitement standard. + if ($cache) { + if ( + $configuration['sous_dossier'] + and $configuration['sous_dossier_auto'] + and empty($cache['sous_dossier']) + ) { + $cache['sous_dossier'] = $configuration['type_cache']; } - } - // On passe la main à un service spécifique si aucune erreur n'a été détectée. - if ( - $cache - and ($verifier = service_cache_chercher($plugin, $configuration['type_cache'], 'cache_composer')) - ) { - $cache = $verifier($plugin, $cache, $configuration); + // Cache avec préfixe: si il existe on le rajoute dans le tableau $cache pour assurer un + // traitement standard. + if ($configuration['nom_prefixe']) { + $cache['_prefixe_nom'] = $configuration['nom_prefixe']; + } + + // On passe la main à un service spécifique si aucune erreur n'a été détectée. + if ($verifier = service_cache_chercher($plugin, $configuration['type_cache'], 'cache_composer')) { + $cache = $verifier($plugin, $cache, $configuration); + } } return $cache; } - /** * Construit le chemin complet du fichier cache. * @@ -246,10 +261,7 @@ function ezcache_cache_composer($plugin, $cache, $configuration) { $nom_cache .= $cache[$_composant]; } elseif ( $cache[$_composant] - or ( - !$cache[$_composant] - and in_array($_composant, $configuration['nom_obligatoire']) - ) + or in_array($_composant, $configuration['nom_obligatoire']) ) { // Le composant est à ajouter : non vide ou vide mais obligatoire (cas bizarre!) $nom_cache .= $configuration['separateur'] . $cache[$_composant]; @@ -333,7 +345,6 @@ function ezcache_cache_decomposer($plugin, $fichier_cache, $configuration) { return $cache; } - /** * Complète la description d'un cache issue du service `cache_decomposer()`. * @@ -424,7 +435,6 @@ function ezcache_cache_decoder($plugin, $contenu, $configuration) { return $contenu; } - /** * Vérifie la validité du fichier cache. * @@ -487,7 +497,7 @@ function ezcache_cache_valider($plugin, $fichier_cache, $cache, $configuration) * un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe. * @param string $type_cache Type de cache identifiant la configuration dans la liste des configurations de cache du plugin. * Si on veut forcer un service plugin uniquement il faut passer la chaine vide. - * @param bool $fonction Nom de la fonction de service à chercher. + * @param string $fonction Nom de la fonction de service à chercher. * * @return string Nom complet de la fonction si trouvée ou chaine vide sinon. */ diff --git a/inc/ezcache_cache.php b/inc/ezcache_cache.php index 6fc8546..58dce29 100644 --- a/inc/ezcache_cache.php +++ b/inc/ezcache_cache.php @@ -379,8 +379,10 @@ function cache_repertorier($plugin, $type_cache, $filtres = array()) { if (array_key_exists('sous_dossier', $filtres)) { $pattern_fichier .= rtrim($filtres['sous_dossier'], '/') . '/'; unset($filtres['sous_dossier']); - } else { + } elseif ($configuration['sous_dossier_auto']) { $pattern_fichier .= $type_cache . '/'; + } else { + $pattern_fichier .= '*/'; } } if ($configuration['nom_prefixe']) { @@ -452,7 +454,7 @@ function cache_repertorier($plugin, $type_cache, $filtres = array()) { * @param string $plugin Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier * ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe. * @param string $type_cache Type de cache identifiant la configuration dans la liste des configurations de cache du plugin - * @param array $caches Liste des fichiers caches désignés par leur chemin complet. + * @param array|string $caches Liste des fichiers caches désignés par leur chemin complet. * @param bool $post_cache `true` si on doit appeler le pipeline post_cache ou `false` sinon. Le défaut vaut `true`. * Permet d'utiliser l'API dans le pipeline post_cache. * diff --git a/paquet.xml b/paquet.xml index 13b0775..7b85a2e 100644 --- a/paquet.xml +++ b/paquet.xml @@ -1,7 +1,7 @@