Si la configuration d'un type de cache indique l'utilisation d'un sous-dossier on permet de ne pas le fournir dans l'identifiant relatif en le forçant à la valeur du type de cache.

On en profite pour ajouter un service cache_verifier() pour vérifier et compléter l'identifiant relatif fourni et répondre aux besoins du sous-dossier et du préfixe.
master v1.2.0
Eric Lupinacci 1 year ago
parent f3b9a53228
commit 4d74795f1e

@ -134,12 +134,10 @@ function ezcache_cache_configurer($plugin) {
$configuration['separateur'] = '_';
}
// On range la configuration élaborée dans le tableau des configurations du plugin
$configurations[$_type_cache] = $configuration;
}
// Enregistrement de la configuration du plugin utilisateur dans la meta prévue.
// Si une configuration existe déjà on l'écrase.
include_spip('inc/config');
@ -150,19 +148,29 @@ function ezcache_cache_configurer($plugin) {
return $configurations;
}
/**
* Construit le chemin complet du fichier cache.
*
* @uses service_cache_chercher()
* 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.
*
* @return string
* @return array L'identifiant relatif du cache vérifié et éventuellement complété ou tableau vide si erreur.
*/
function ezcache_cache_composer($plugin, $cache, $configuration) {
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.
if (
$configuration['sous_dossier']
and empty($cache['sous_dossier'])
) {
$cache['sous_dossier'] = $configuration['type_cache'];
}
// Cache avec préfixe: si il existe on le rajoute dans le tableau $cache pour assurer un
// traitement standard.
@ -170,6 +178,40 @@ function ezcache_cache_composer($plugin, $cache, $configuration) {
$cache['_prefixe_nom'] = $configuration['nom_prefixe'];
}
// 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;
}
}
// 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);
}
return $cache;
}
/**
* Construit le chemin complet du fichier cache.
*
* @uses service_cache_chercher()
*
* @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 string
*/
function ezcache_cache_composer($plugin, $cache, $configuration) {
// Le plugin utilisateur peut fournir un service propre pour construire le chemin complet du fichier cache.
// Néanmoins, étant donné la généricité du mécanisme offert par le plugin Cache cela devrait être rare.
if ($composer = service_cache_chercher($plugin, $configuration['type_cache'], 'cache_composer')) {
@ -202,8 +244,13 @@ function ezcache_cache_composer($plugin, $cache, $configuration) {
if (!$nom_cache) {
// Il y a forcément un composant non vide en premier.
$nom_cache .= $cache[$_composant];
} elseif ($cache[$_composant]
or (!$cache[$_composant] and in_array($_composant, $configuration['nom_obligatoire']))) {
} elseif (
$cache[$_composant]
or (
!$cache[$_composant]
and in_array($_composant, $configuration['nom_obligatoire'])
)
) {
// Le composant est à ajouter : non vide ou vide mais obligatoire (cas bizarre!)
$nom_cache .= $configuration['separateur'] . $cache[$_composant];
}
@ -262,7 +309,7 @@ function ezcache_cache_decomposer($plugin, $fichier_cache, $configuration) {
// Détermination du nom du cache sans extension et décomposition suivant la configuration du nom.
$nom_cache = basename($fichier_cache, $configuration['extension']);
if (count($configuration['nom']) == 1) {
if (count($configuration['nom']) === 1) {
// Le nom est composé d'un seul composant : on le renvoie directement.
$cache[$configuration['nom'][0]] = $nom_cache;
} else {
@ -275,7 +322,10 @@ function ezcache_cache_decomposer($plugin, $fichier_cache, $configuration) {
}
// Identification d'un sous-dossier si il existe.
if ($configuration['sous_dossier'] and ($sous_dossier = dirname($fichier_cache))) {
if (
$configuration['sous_dossier']
and ($sous_dossier = dirname($fichier_cache))
) {
$cache['sous_dossier'] = $sous_dossier;
}
}

@ -28,8 +28,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
* @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.
*
* @return bool
* True si l'écriture s'est bien passée, false sinon.
* @return bool True si l'écriture s'est bien passée, false sinon.
*/
function cache_ecrire($plugin, $type_cache, $cache, $contenu, $post_cache = true) {
@ -43,15 +42,14 @@ function cache_ecrire($plugin, $type_cache, $cache, $contenu, $post_cache = true
// tableau permettant de calculer le chemin complet. On prend en compte ces deux cas.
$fichier_cache = '';
include_spip('ezcache/ezcache');
if (is_array($cache)) {
// Vérification de la conformité entre la configuration et le sous-dossier du cache.
if (!$configuration['sous_dossier']
or ($configuration['sous_dossier'] and !empty($cache['sous_dossier']))) {
// Détermination du chemin du cache si pas d'erreur sur le sous-dossier :
// - le nom sans extension est construit à partir des éléments fournis sur le conteneur et
// de la configuration du nom pour le plugin.
$fichier_cache = ezcache_cache_composer($plugin, $cache, $configuration);
}
if (
is_array($cache)
and ($cache = ezcache_cache_verifier($plugin, $cache, $configuration))
) {
// Détermination du chemin du cache :
// - le nom sans extension est construit à partir des éléments fournis sur le conteneur et
// de la configuration du nom pour le plugin.
$fichier_cache = ezcache_cache_composer($plugin, $cache, $configuration);
} elseif (is_string($cache)) {
// Le chemin complet du fichier cache est fourni. Aucune vérification ne peut être faite
// il faut donc que l'appelant ait utilisé l'API pour calculer le fichier au préalable.
@ -143,7 +141,10 @@ function cache_lire($plugin, $type_cache, $cache) {
// tableau permettant de calculer le chemin complet. On prend en compte ces deux cas.
$fichier_cache = '';
include_spip('ezcache/ezcache');
if (is_array($cache)) {
if (
is_array($cache)
and ($cache = ezcache_cache_verifier($plugin, $cache, $configuration))
) {
// Détermination du chemin du cache :
// - le nom sans extension est construit à partir des éléments fournis sur le conteneur et
// de la configuration du nom pour le plugin.
@ -207,11 +208,14 @@ function cache_est_valide($plugin, $type_cache, $cache) {
// Le cache peut-être fourni soit sous la forme d'un chemin complet soit sous la forme d'un
// tableau permettant de calculer le chemin complet. On prend en compte ces deux cas.
$fichier_cache = '';
if (is_array($cache)) {
include_spip('ezcache/ezcache');
if (
is_array($cache)
and ($cache = ezcache_cache_verifier($plugin, $cache, $configuration))
) {
// Détermination du chemin du cache :
// - le nom sans extension est construit à partir des éléments fournis sur le conteneur et
// de la configuration du nom pour le plugin.
include_spip('ezcache/ezcache');
$fichier_cache = ezcache_cache_composer($plugin, $cache, $configuration);
} elseif (is_string($cache)) {
// Le chemin complet du fichier cache est fourni. Aucune vérification ne peut être faite
@ -244,7 +248,7 @@ function cache_est_valide($plugin, $type_cache, $cache) {
* @param string $type_cache Type de cache identifiant la configuration dans la liste des configurations de cache du plugin
* @param array $cache Identifiant du cache sous la forme d'un tableau fournissant les composants canoniques du nom.
*
* @return string
* @return string Chemin complet du fichier cache
*/
function cache_nommer($plugin, $type_cache, $cache) {
@ -253,11 +257,14 @@ function cache_nommer($plugin, $type_cache, $cache) {
// Le cache est toujours fourni sous la forme d'un tableau permettant de calculer le chemin complet.
$fichier_cache = '';
if (is_array($cache)) {
include_spip('ezcache/ezcache');
if (
is_array($cache)
and ($cache = ezcache_cache_verifier($plugin, $cache, $configuration))
) {
// Détermination du chemin du cache :
// - le nom sans extension est construit à partir des éléments fournis sur le conteneur et
// de la configuration du nom pour le plugin.
include_spip('ezcache/ezcache');
$fichier_cache = ezcache_cache_composer($plugin, $cache, $configuration);
}
@ -295,7 +302,10 @@ function cache_supprimer($plugin, $type_cache, $cache, $post_cache = true) {
// tableau permettant de calculer le chemin complet. On prend en compte ces deux cas.
$fichier_cache = '';
include_spip('ezcache/ezcache');
if (is_array($cache)) {
if (
is_array($cache)
and ($cache = ezcache_cache_verifier($plugin, $cache, $configuration))
) {
// Détermination du chemin du cache :
// - le nom sans extension est construit à partir des éléments fournis sur le conteneur et
// de la configuration du nom pour le plugin.
@ -368,8 +378,9 @@ function cache_repertorier($plugin, $type_cache, $filtres = array()) {
if ($configuration['sous_dossier']) {
if (array_key_exists('sous_dossier', $filtres)) {
$pattern_fichier .= rtrim($filtres['sous_dossier'], '/') . '/';
unset($filtres['sous_dossier']);
} else {
$pattern_fichier .= '*/';
$pattern_fichier .= $type_cache . '/';
}
}
if ($configuration['nom_prefixe']) {

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

@ -4,8 +4,15 @@
<g id="logo" display="none">
<path d="M32,4.2 C45.8,4.2 57,15.4 57,29.2 L57,50 C57,55.4 52.7,59.7 47.3,59.7 C44.1,59.7 41.1,58.1 39.3,55.5 C37,59.5 32,60.9 28,58.7 C26.7,58 25.6,56.9 24.8,55.5 C21.8,59.9 15.7,61.1 11.3,58 C8.8,56.3 7.3,53.5 7.1,50.5 L7.1,29.2 C7,15.4 18.2,4.2 32,4.2 z M43.1,34.8 L37.5,34.8 C37.5,37.9 35,40.4 32,40.4 C29.1,40.4 26.6,38.2 26.4,35.2 L26.4,34.8 L20.8,34.8 L20.8,35.4 C21.1,41.5 26.3,46.2 32.5,45.9 C38.2,45.6 42.8,41.1 43,35.4 L43.1,34.8 z M32,18.1 C28.9,18.1 26.4,20.6 26.4,23.7 C26.4,26.8 28.9,29.3 32,29.3 C35.1,29.3 37.6,26.8 37.6,23.7 C37.6,20.6 35.1,18.1 32,18.1 z" fill="#666666"/>
</g>
<g id="vider">
<g id="vider" display="none">
<path d="M26.95,2.23 C40.75,2.231 51.95,13.431 51.95,27.231 L51.95,32.8 L34.2,32.8 L34.2,32.83 L32.45,32.83 C32.45,35.931 29.95,38.431 26.95,38.431 C24.05,38.431 21.55,36.231 21.35,33.231 L21.35,32.83 L15.75,32.83 L15.75,33.431 C16.05,39.531 21.25,44.231 27.45,43.931 C29.857,43.722 32.437,42.952 34.2,41.201 L34.2,53.609 C31.959,57.201 28.593,58.265 24.49,57.389 C23.944,57.272 23.463,56.95 22.95,56.73 C21.65,56.031 20.55,54.931 19.75,53.531 C16.75,57.931 10.65,59.131 6.25,56.031 C3.75,54.331 2.25,51.531 2.05,48.531 L2.05,27.23 C1.95,13.431 13.15,2.231 26.95,2.231 z M26.95,16.13 C23.85,16.131 21.35,18.631 21.35,21.731 C21.35,24.831 23.85,27.331 26.95,27.331 C30.05,27.331 32.55,24.831 32.55,21.731 C32.55,18.631 30.05,16.131 26.95,16.131 z" fill="#666666"/>
<path d="M55.6,40.162 L62.1,40.162 L62.1,42.762 L59.5,42.762 L59.5,59.662 C59.5,60.38 58.918,60.962 58.2,60.962 L40,60.962 C39.282,60.962 38.7,60.38 38.7,59.662 L38.7,42.762 L36.1,42.762 L36.1,40.162 L42.6,40.162 L42.6,36.262 C42.6,35.544 43.182,34.962 43.9,34.962 L54.3,34.962 C55.018,34.962 55.6,35.544 55.6,36.262 L55.6,40.162 z M45.2,46.662 L45.2,54.462 L47.8,54.462 L47.8,46.662 L45.2,46.662 z M50.4,46.662 L50.4,54.462 L53,54.462 L53,46.662 L50.4,46.662 z M45.2,37.562 L45.2,40.162 L53,40.162 L53,37.562 L45.2,37.562 z" fill="#1D83D4"/>
</g>
<g id="vider_2">
<path d="M44.752,17.765 L44.752,31.786 C38.144,33.242 34.265,39.739 33.988,46.08 L33.988,50.065 L12.452,50.065 L12.452,17.765 L44.752,17.765 z" fill="#FFFFFF"/>
<path d="M39.432,1.615 C40.952,1.615 42.092,2.85 42.092,4.275 L42.092,12.35 L55.583,12.35 L55.583,17.765 L50.167,17.765 L50.167,31.257 L48.82,31.189 C46.433,31.31 47.796,31.164 44.752,31.786 L44.752,17.765 L12.452,17.765 L12.452,50.065 L33.988,50.065 L33.988,55.385 L9.792,55.385 C8.272,55.385 7.132,54.15 7.132,52.725 L7.132,17.765 L1.717,17.765 L1.717,12.35 L15.207,12.35 L15.207,4.275 C15.207,2.755 16.442,1.615 17.867,1.615 L39.432,1.615 z M36.678,6.935 L20.527,6.935 L20.527,12.35 L36.678,12.35 L36.678,6.935 z" fill="#666666"/>
<path d="M36.677,25.84 L36.677,37.598 C35.706,38.913 34.887,40.361 34.564,41.99 L31.262,41.99 L31.262,25.84 L36.677,25.84 z" fill="#666666"/>
<path d="M25.942,25.84 L25.942,41.99 L20.527,41.99 L20.527,25.84 L25.942,25.84 z" fill="#666666"/>
<path d="M48.823,32.693 C56.295,32.693 62.36,38.758 62.36,46.23 L62.36,57.494 C62.36,60.418 60.032,62.746 57.108,62.746 C55.375,62.746 53.75,61.88 52.776,60.472 C51.53,62.638 48.823,63.396 46.657,62.205 C45.953,61.826 45.357,61.23 44.924,60.472 C43.299,62.854 39.996,63.504 37.614,61.826 C36.26,60.905 35.448,59.389 35.339,57.764 L35.339,46.23 C35.285,38.758 41.35,32.693 48.823,32.693 z M54.833,49.263 L51.801,49.263 C51.801,50.941 50.447,52.295 48.823,52.295 C47.252,52.295 45.899,51.104 45.79,49.479 L45.79,49.263 L42.758,49.263 L42.758,49.588 C42.92,52.891 45.736,55.436 49.094,55.273 C52.18,55.111 54.671,52.674 54.779,49.588 L54.833,49.263 z M48.823,40.22 C47.144,40.22 45.79,41.573 45.79,43.252 C45.79,44.931 47.144,46.285 48.823,46.285 C50.501,46.285 51.855,44.931 51.855,43.252 C51.855,41.573 50.501,40.22 48.823,40.22 z" fill="#119914"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Loading…
Cancel
Save