@ -8,42 +8,38 @@ if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Ecrit un contenu donné dans un cache spécifié par son identifiant relatif ou par son chemin complet.
*
* @api
*
* @uses configuration_cache_lire()
* @uses cache_cache_composer()
* @uses ez cache_cache_composer()
* @uses sous_repertoire()
* @uses ecrire_fichier()
* @uses ecrire_fichier_securise()
*
* @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 $cache
* Identifiant du cache sous la forme d'une chaine (le chemin du fichier) ou d'un tableau fournissant
* les composants canoniques du nom.
* @param array|string $contenu
* Contenu sous forme de tableau à sérialiser ou sous la forme d'une chaine.
* @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 $cache Identifiant du cache sous la forme d'une chaine (le chemin du fichier) ou d'un tableau fournissant
* les composants canoniques du nom.
* @param array|string $contenu Contenu sous forme de tableau à sérialiser ou sous la forme d'une chaine.
*
* @return bool
* True si l'écriture s'est bien passée, false sinon.
* True si l'écriture s'est bien passée, false sinon.
*/
function cache_ecrire($plugin, $cache, $contenu) {
// Initialisation du retour de la fonction
$cache_ecrit = false;
// Lecture de la configuration des caches du plugin.
$configuration = configuration_cache_lire($plugin);
// 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 = '';
include_spip('cache/cache');
include_spip('ez cache/ez cache');
if (is_array($cache)) {
// Vérification de la conformité entre la configuration et le sous-dossier du cache.
if (!$configuration['sous_dossier']
@ -51,15 +47,15 @@ function cache_ecrire($plugin, $cache, $contenu) {
// 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 = cache_cache_composer($plugin, $cache, $configuration);
$fichier_cache = ez cache_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.
$fichier_cache = $cache;
$cache = cache_cache_decomposer($plugin, $fichier_cache, $configuration);
$cache = ez cache_cache_decomposer($plugin, $fichier_cache, $configuration);
}
if ($fichier_cache) {
// On crée les répertoires si besoin
include_spip('inc/flock');
@ -71,7 +67,7 @@ function cache_ecrire($plugin, $cache, $contenu) {
sous_repertoire($dir_cache, rtrim($cache['sous_dossier'], '/'));
}
// Suivant que la configuration demande une sérialisation ou pas, on vérife le format du contenu
// Suivant que la configuration demande une sérialisation ou pas, on vérife le format du contenu
// de façon à toujours écrire une chaine.
$contenu_cache = '';
if ($configuration['serialisation']) {
@ -107,11 +103,10 @@ function cache_ecrire($plugin, $cache, $contenu) {
pipeline('post_cache', $flux);
}
}
return $cache_ecrit;
}
/**
* Lit le cache spécifié par son identifiant relatif ou son chemin complet et renvoie le contenu sous forme
* de tableau ou de chaine suivant l’attribut de sérialisation.
@ -120,19 +115,16 @@ function cache_ecrire($plugin, $cache, $contenu) {
* @api
*
* @uses configuration_cache_lire()
* @uses cache_cache_composer()
* @uses ez cache_cache_composer()
* @uses lire_fichier()
* @uses lire_fichier_securise()
*
* @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 $cache
* Identifiant du cache sous la forme d'une chaine (le chemin du fichier) ou d'un tableau fournissant
* les composants canoniques du nom.
* @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 $cache Identifiant du cache sous la forme d'une chaine (le chemin du fichier) ou d'un tableau fournissant
* les composants canoniques du nom.
*
* @return array|string|bool
* Contenu du fichier sous la forme d'un tableau, d'une chaine ou false si une erreur s'est produite.
* @return array|bool|string Contenu du fichier sous la forme d'un tableau, d'une chaine ou false si une erreur s'est produite.
*/
function cache_lire($plugin, $cache) {
@ -145,12 +137,12 @@ function cache_lire($plugin, $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 = '';
include_spip('cache/cache');
include_spip('ez cache/ez cache');
if (is_array($cache)) {
// 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 = cache_cache_composer($plugin, $cache, $configuration);
$fichier_cache = ez cache_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.
@ -167,14 +159,14 @@ function cache_lire($plugin, $cache) {
}
$contenu_cache = '';
$lecture_ok = $lire($fichier_cache, $contenu_cache);
if ($lecture_ok) {
if ($configuration['serialisation']) {
$cache_lu = unserialize($contenu_cache);
} else {
$cache_lu = $contenu_cache;
if ($configuration['decodage']) {
$cache_lu = cache_cache_decoder($plugin, $cache_lu, $configuration);
$cache_lu = ez cache_cache_decoder($plugin, $cache_lu, $configuration);
}
}
}
@ -183,7 +175,6 @@ function cache_lire($plugin, $cache) {
return $cache_lu;
}
/**
* Teste l'existence d'un cache sur le disque spécifié par son identifiant relatif ou par son chemin complet et,
* si il existe, teste si la date d'expiration du fichier n'est pas dépassée. Si le fichier existe et n'est pas périmé,
@ -192,17 +183,14 @@ function cache_lire($plugin, $cache) {
* @api
*
* @uses configuration_cache_lire()
* @uses cache_cache_composer()
* @uses ez cache_cache_composer()
*
* @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 $cache
* Identifiant du cache sous la forme d'une chaine (le chemin du fichier) ou d'un tableau fournissant
* les composants canoniques du nom.
* @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 $cache Identifiant du cache sous la forme d'une chaine (le chemin du fichier) ou d'un tableau fournissant
* les composants canoniques du nom.
*
* @return string
* Le chemin complet du fichier si valide, la chaine vide sinon.
* @return string Le chemin complet du fichier si valide, la chaine vide sinon.
*/
function cache_est_valide($plugin, $cache) {
@ -216,8 +204,8 @@ function cache_est_valide($plugin, $cache) {
// 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('cache/cache');
$fichier_cache = cache_cache_composer($plugin, $cache, $configuration);
include_spip('ez cache/ez cache');
$fichier_cache = ez cache_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 cache_existe() pour calculer le fichier au préalable.
@ -246,21 +234,18 @@ function cache_est_valide($plugin, $cache) {
return $fichier_cache;
}
/**
* Renvoie le chemin complet du cache sans tester son existence.
* Cette fonction est une encapsulation du service cache_cache_composer().
* Cette fonction est une encapsulation du service ez cache_cache_composer().
*
* @api
*
* @uses configuration_cache_lire()
* @uses cache_cache_composer()
* @uses ez cache_cache_composer()
*
* @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
* Identifiant du cache sous la forme d'un tableau fournissant les composants canoniques du nom.
* @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 Identifiant du cache sous la forme d'un tableau fournissant les composants canoniques du nom.
*
* @return string
*/
@ -275,32 +260,28 @@ function cache_nommer($plugin, $cache) {
// 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('cache/cache');
$fichier_cache = cache_cache_composer($plugin, $cache, $configuration);
include_spip('ez cache/ez cache');
$fichier_cache = ez cache_cache_composer($plugin, $cache, $configuration);
}
return $fichier_cache;
}
/**
* Supprime le cache spécifié par son identifiant relatif ou par son chemin complet.
*
* @api
*
* @uses configuration_cache_lire()
* @uses cache_cache_composer()
* @uses ez cache_cache_composer()
* @uses supprimer_fichier()
*
* @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 $cache
* Identifiant du cache sous la forme d'une chaine (le chemin du fichier) ou d'un tableau fournissant
* les composants canoniques du nom.
* @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 $cache Identifiant du cache sous la forme d'une chaine (le chemin du fichier) ou d'un tableau fournissant
* les composants canoniques du nom.
*
* @return bool
* True si la suppression s'est bien passée, false sinon.
* @return bool `true` si la suppression s'est bien passée, `false` sinon.
*/
function cache_supprimer($plugin, $cache) {
@ -313,17 +294,17 @@ function cache_supprimer($plugin, $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 = '';
include_spip('cache/cache');
include_spip('ez cache/ez cache');
if (is_array($cache)) {
// 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 = cache_cache_composer($plugin, $cache, $configuration);
$fichier_cache = ez cache_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 cache_existe() pour calculer le fichier au préalable.
$fichier_cache = $cache;
$cache = cache_cache_decomposer($plugin, $fichier_cache, $configuration);
$cache = ez cache_cache_decomposer($plugin, $fichier_cache, $configuration);
}
// Détermination du nom du cache en fonction du plugin appelant et du type
@ -349,7 +330,6 @@ function cache_supprimer($plugin, $cache) {
return $cache_supprime;
}
/**
* Retourne la description des caches d'un plugin utilisateur filtrée sur un ensemble de critères. La description
* de base fournie par Cache Factory contient les éléments de l’identifiant relatif mais peut-être remplacée ou
@ -359,19 +339,16 @@ function cache_supprimer($plugin, $cache) {
* @api
*
* @uses configuration_cache_lire()
* @uses cache_cache_decomposer()
* @uses cache_cache_completer()
*
* @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 $filtres
* Tableau associatif `[champ] = valeur` ou `[champ] = !valeur` de critères de filtres sur les composants
* de caches. Les opérateurs égalité et inégalité sont possibles.
*
* @return array
* Tableau des descriptions des fichiers cache créés par le plugin indexé par le chemin complet de
* chaque fichier cache.
* @uses ezcache_cache_decomposer()
* @uses ezcache_cache_completer()
*
* @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 $filtres Tableau associatif `[champ] = valeur` ou `[champ] = !valeur` de critères de filtres sur les composants
* de caches. Les opérateurs égalité et inégalité sont possibles.
*
* @return array Tableau des descriptions des fichiers cache créés par le plugin indexé par le chemin complet de
* chaque fichier cache.
*/
function cache_repertorier($plugin, $filtres = array()) {
@ -401,8 +378,8 @@ function cache_repertorier($plugin, $filtres = array()) {
if ($fichiers_cache) {
foreach ($fichiers_cache as $_fichier_cache) {
// On décompose le chemin de chaque cache afin de renvoyer l'identifiant canonique du cache.
include_spip('cache/cache');
$cache = cache_cache_decomposer($plugin, $_fichier_cache, $configuration);
include_spip('ez cache/ez cache');
$cache = ez cache_cache_decomposer($plugin, $_fichier_cache, $configuration);
// Maintenant que les composants sont déterminés on applique les filtres pour savoir si on
// complète et stocke le cache.
@ -424,7 +401,7 @@ function cache_repertorier($plugin, $filtres = array()) {
if ($cache_conforme) {
// On permet au plugin de completer la description canonique
$cache = cache_cache_completer($plugin, $cache, $_fichier_cache, $configuration);
$cache = ez cache_cache_completer($plugin, $cache, $_fichier_cache, $configuration);
// On stocke la description du fichier cache dans le tableau de sortie.
$caches[$_fichier_cache] = $cache;
@ -435,7 +412,6 @@ function cache_repertorier($plugin, $filtres = array()) {
return $caches;
}
/**
* Supprime, pour un plugin donné, les caches désignés par leur chemin complet.
*
@ -443,14 +419,11 @@ function cache_repertorier($plugin, $filtres = array()) {
*
* @uses supprimer_fichier()
*
* @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 $caches
* Liste des fichiers caches désignés par leur chemin complet.
* @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 $caches Liste des fichiers caches désignés par leur chemin complet.
*
* @return bool
* True si la suppression s'est bien passée, false sinon.
* @return bool `true` si la suppression s'est bien passée, `false` sinon.
*/
function cache_vider($plugin, $caches) {
@ -465,7 +438,7 @@ function cache_vider($plugin, $caches) {
$configuration = configuration_cache_lire($plugin);
// Suppression des caches
include_spip('cache/cache');
include_spip('ez cache/ez cache');
include_spip('inc/flock');
foreach ($fichiers_cache as $_fichier) {
supprimer_fichier($_fichier);
@ -477,7 +450,7 @@ function cache_vider($plugin, $caches) {
'plugin' => $plugin,
'fonction' => 'supprimer',
'fichier_cache' => $_fichier,
'cache' => cache_cache_decomposer($plugin, $_fichier, $configuration),
'cache' => ez cache_cache_decomposer($plugin, $_fichier, $configuration),
'configuration' => $configuration
),
);
@ -485,11 +458,10 @@ function cache_vider($plugin, $caches) {
}
$cache_vide = true;
}
return $cache_vide;
}
/**
* Lit la configuration standard des caches d'un plugin utilisateur ou de tous les plugins utilisateur
* ayant enregistrés une configuration.
@ -497,19 +469,16 @@ function cache_vider($plugin, $caches) {
* @api
*
* @uses lire_config()
* @uses cache_cache_configurer()
* @uses ez cache_cache_configurer()
*
* @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.
* Si vide, toutes les configurations sont fournies.
* @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.
* Si vide, toutes les configurations sont fournies.
*
* @return array
* Tableau de configuration des caches d'un plugin utilisateur ou tableau vide si aucune configuration n'est encore
* enregistrée.
* @return array Tableau de configuration des caches d'un plugin utilisateur ou tableau vide si aucune configuration n'est encore
* enregistrée.
*/
function configuration_cache_lire($plugin = '') {
static $configuration = array();
// Retourner la configuration du plugin ou de tous les plugins utilisateur.
@ -517,8 +486,8 @@ function configuration_cache_lire($plugin = '') {
if ($plugin) {
// Lecture de la configuration des caches du plugin. Si celle-ci n'existe pas encore elle est créée.
if (empty($configuration[$plugin]) and (!$configuration[$plugin] = lire_config("cache/${plugin}", array()))) {
include_spip('cache/cache');
$configuration[$plugin] = cache_cache_configurer($plugin);
include_spip('ez cache/ez cache');
$configuration[$plugin] = ez cache_cache_configurer($plugin);
}
$configuration_lue = $configuration[$plugin];
} else {
@ -528,7 +497,6 @@ function configuration_cache_lire($plugin = '') {
return $configuration_lue;
}
/**
* Efface la configuration standard des caches d'un plugin utilisateur ou de tous les plugins utilisateur
* ayant enregistrés une configuration.
@ -538,13 +506,11 @@ function configuration_cache_lire($plugin = '') {
* @uses lire_config()
* @uses effacer_config()
*
* @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.
* Si vide, toutes les configurations sont effacées.
* @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.
* Si vide, toutes les configurations sont effacées.
*
* @return bool
* True si la suppression s'est bien passée, false sinon.
* @return bool `true` si la suppression s'est bien passée, `false` sinon.
*/
function configuration_cache_effacer($plugin = '') {