Browse Source

Le commit précédent avait introduit une régression dans la fonction cache_repertorier() pour les caches inclus dans un sous-dossier n'utilisant pas le nom du type de cache.

On corrige ce cas en ajoutant une nouvelle configuration sous_dossier_auto pour forcer l'utilisation du type de cache par défaut et donc restaurer le comportement précédent dans les autres cas.
master v1.2.1
Eric Lupinacci 11 months ago
parent
commit
dbb76184da
  1. BIN
      Guide - Le plugin Cache Factory.pdf
  2. 104
      ezcache/ezcache.php
  3. 6
      inc/ezcache_cache.php
  4. 2
      paquet.xml

BIN
Guide - Le plugin Cache Factory.pdf

Binary file not shown.

104
ezcache/ezcache.php vendored

@ -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<string, mixed> 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<string, mixed> $cache Tableau identifiant le cache pour lequel on veut construire le nom.
* @param array<string, mixed> $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<string, mixed> 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.
*/

6
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.
*

2
paquet.xml

@ -1,7 +1,7 @@
<paquet
prefix="ezcache"
categorie="outil"
version="1.2.0"
version="1.2.1"
etat="stable"
compatibilite="[3.2.0;4.0.*]"
logo="ezcache-64.png"

Loading…
Cancel
Save