Browse Source

On change le préfixe du plugin de cache en ezcache qui est moins générique et ne posera donc plus de souci de collision.

C'est une grosse modification qui va nécessiter la mise à jour des plugins ezcheck, ezrest, rainette, n-core, taxonomie et spiperipsum
svn/root/tags/v0.8.1
Eric Lupinacci 3 years ago
parent
commit
eea85f452d
  1. BIN
      Guide - Le plugin Cache Factory.pdf
  2. 20
      cache_pipelines.php
  3. 89
      ezcache/ezcache.php
  4. 2
      formulaires/cache_vider.html
  5. 65
      formulaires/cache_vider.php
  6. 0
      formulaires/inc-ezcache_cache_vider.html
  7. 194
      inc/ezcache_cache.php
  8. 22
      lang/cache_fr.php
  9. 13
      lang/paquet-cache_fr.php
  10. 12
      lang/paquet-ezcache_fr.php
  11. 2
      paquet.xml
  12. 60
      prive/squelettes/liste/caches.html
  13. 42
      prive/squelettes/liste/fichiers.html

BIN
Guide - Le plugin Cache Factory.pdf

Binary file not shown.

20
cache_pipelines.php

@ -8,7 +8,6 @@ if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Supprime la meta stockant la configuration des caches de tous les plugins utilisateur quand
* la page d'administration des plugins est affiché.
@ -19,17 +18,14 @@ if (!defined('_ECRIRE_INC_VERSION')) {
*
* @uses configuration_cache_lire()
* @uses configuration_cache_effacer()
* @uses cache_cache_configurer()
* @uses ezcache_cache_configurer()
*
* @param $flux
* Tableau des données permettant de caractériser la page concernée et de déclencher le traitement uniquement
* sur la page `admin_plugin`.
* @param array $flux Tableau des données permettant de caractériser la page concernée et de déclencher le traitement uniquement
* sur la page `admin_plugin`.
*
* @return mixed
* Le flux entrant n'est pas modifié.
* @return array Le flux entrant n'est pas modifié.
*/
function cache_affiche_milieu($flux) {
function ezcache_affiche_milieu($flux) {
if (isset($flux['args']['exec'])) {
// Initialisation de la page du privé
$exec = $flux['args']['exec'];
@ -41,17 +37,17 @@ function cache_affiche_milieu($flux) {
// plugins utilisateur si besoin.
// Recharge la configuration des plugins utilisateur :
// -- on lit la meta pour obtenir la liste des plugins
include_spip('inc/cache');
include_spip('inc/ezcache_cache');
$configuration = configuration_cache_lire();
if ($configuration) {
$plugins = array_keys($configuration);
// -- on supprime la meta
configuration_cache_effacer();
// -- on reconfigure chaque plugin
include_spip('cache/cache');
include_spip('ezcache/ezcache');
foreach ($plugins as $_plugin) {
if (defined('_DIR_PLUGIN_' . strtoupper($_plugin))) {
cache_cache_configurer($_plugin);
ezcache_cache_configurer($_plugin);
}
}
}

89
cache/cache.php → ezcache/ezcache.php vendored

@ -25,14 +25,12 @@ if (!defined('_ECRIRE_INC_VERSION')) {
* @uses lire_config()
* @uses ecrire_config()
*
* @param string $plugin
* Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou
* @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 de la configuration complétée des caches d'un plugin venant d'être enregistrée.
* @return array Tableau de la configuration complétée des caches d'un plugin venant d'être enregistrée.
*/
function cache_cache_configurer($plugin) {
function ezcache_cache_configurer($plugin) {
// Initialisation du tableau de configuration avec les valeurs par défaut du plugin Cache.
$configuration_defaut = array(
@ -124,17 +122,14 @@ function cache_cache_configurer($plugin) {
*
* @uses cache_service_chercher()
*
* @param string $plugin
* Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
* @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 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 cache_cache_composer($plugin, $cache, $configuration) {
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.
@ -202,18 +197,14 @@ function cache_cache_composer($plugin, $cache, $configuration) {
*
* @uses cache_service_chercher()
*
* @param string $plugin
* Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
* @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 $fichier_cache
* Le chemin complet du fichier à phraser.
* @param array $configuration
* Configuration complète des caches du plugin utlisateur lue à partir de la meta de stockage.
* @param string $fichier_cache Le chemin complet du fichier à phraser.
* @param array $configuration Configuration complète des caches du plugin utlisateur lue à partir de la meta de stockage.
*
* @return array
* Tableau des composants constitutifs du cache
* @return array Tableau des composants constitutifs du cache
*/
function cache_cache_decomposer($plugin, $fichier_cache, $configuration) {
function ezcache_cache_decomposer($plugin, $fichier_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.
@ -258,20 +249,15 @@ function cache_cache_decomposer($plugin, $fichier_cache, $configuration) {
*
* @uses cache_service_chercher()
*
* @param string $plugin
* Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
* @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 string $fichier_cache
* Fichier cache désigné par son chemin complet.
* @param array $configuration
* Configuration complète des caches du plugin utilisateur lue à partir de la meta de stockage.
* @param array $cache Tableau identifiant le cache pour lequel on veut construire le nom.
* @param string $fichier_cache Fichier cache désigné par son chemin complet.
* @param array $configuration Configuration complète des caches du plugin utilisateur lue à partir de la meta de stockage.
*
* @return array
* Description du cache complétée par un ensemble de données propres au plugin.
* @return array Description du cache complétée par un ensemble de données propres au plugin.
*/
function cache_cache_completer($plugin, $cache, $fichier_cache, $configuration) {
function ezcache_cache_completer($plugin, $cache, $fichier_cache, $configuration) {
// Cache Factory complète la description avec le nom sans extension et l'extension du fichier cache avant
// de passer la main au plugin utilisateur.
@ -295,18 +281,14 @@ function cache_cache_completer($plugin, $cache, $fichier_cache, $configuration)
*
* @uses cache_service_chercher()
*
* @param string $plugin
* Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
* @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 $contenu
* Contenu du fichier cache au format chaine.
* @param array $configuration
* Configuration complète des caches du plugin utilisateur lue à partir de la meta de stockage.
* @param string $contenu Contenu du fichier cache au format chaine.
* @param array $configuration Configuration complète des caches du plugin utilisateur lue à partir de la meta de stockage.
*
* @return array
* Contenu du cache décodé si la fonction idoine a été appliqué ou tel que fourni en entrée sinon.
* @return array Contenu du cache décodé si la fonction idoine a été appliqué ou tel que fourni en entrée sinon.
*/
function cache_cache_decoder($plugin, $contenu, $configuration) {
function ezcache_cache_decoder($plugin, $contenu, $configuration) {
// Cache Factory décode le contenu du fichier cache en fonction de l'extension (json, yaml, yml ou xml).
$encodage = ltrim($configuration['extension'], '.');
@ -352,20 +334,16 @@ function cache_cache_decoder($plugin, $contenu, $configuration) {
* @uses cache_service_chercher()
* @uses cache_repertorier()
*
* @param string $plugin
* Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier
* @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 $options
* Tableau d'options qui peut être fourni par un plugin utilisateur uniquement si celui-ci fait appel
* @param array $options Tableau d'options qui peut être fourni par un plugin utilisateur uniquement si celui-ci fait appel
* au formulaire. La page cache_vider de Cache Factory n'utilise pas ce paramètre.
* Le tableau est passé à la fonction de service de chargement du formulaire uniquement.
* @param array $configuration
* Configuration complète des caches du plugin utilisateur lue à partir de la meta de stockage.
* @param array $configuration Configuration complète des caches du plugin utilisateur lue à partir de la meta de stockage.
*
* @return array
* Description du cache complétée par un ensemble de données propres au plugin.
* @return array Description du cache complétée par un ensemble de données propres au plugin.
*/
function cache_cache_formulaire_charger($plugin, $options, $configuration) {
function ezcache_cache_formulaire_charger($plugin, $options, $configuration) {
// Stocker le préfixe et le nom du plugin de façon systématique.
$valeurs = array('_prefixe' => $plugin);
@ -397,21 +375,18 @@ function cache_cache_formulaire_charger($plugin, $options, $configuration) {
*
* @internal
*
* @param string $plugin
* Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou
* @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 bool $fonction
* Nom de la fonction de service à chercher.
* @param bool $fonction Nom de la fonction de service à chercher.
*
* @return string
* Nom complet de la fonction si trouvée ou chaine vide sinon.
* @return string Nom complet de la fonction si trouvée ou chaine vide sinon.
*/
function cache_service_chercher($plugin, $fonction) {
$fonction_trouvee = '';
// Eviter la réentrance si on demande explicitement le service du plugin Cache Factory.
if ($plugin != 'cache') {
include_spip("cache/${plugin}");
include_spip("ezcache/${plugin}");
$fonction_trouvee = "${plugin}_${fonction}";
if (!function_exists($fonction_trouvee)) {
$fonction_trouvee = '';

2
formulaires/cache_vider.html

@ -13,7 +13,7 @@
<INCLURE{fond=formulaires/inc-#ENV{_prefixe}_cache_vider, env} />
]
[(#CHEMIN{[formulaires/inc-(#ENV{_prefixe})_cache_vider.html]}|non)
<INCLURE{fond=formulaires/inc-cache_cache_vider, env} />
<INCLURE{fond=formulaires/inc-ezcache_cache_vider, env} />
]
<p class="boutons">

65
formulaires/cache_vider.php

@ -15,56 +15,49 @@ if (!defined('_ECRIRE_INC_VERSION')) {
* @uses configuration_cache_lire()
* @uses cache_formulaire_charger()
*
* @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 $options
* Tableau d'options qui peut être fourni par un plugin utilisateur uniquement si celui-ci fait appel
* au formulaire. La page cache_vider de Cache Factory n'utilise pas ce paramètre.
* Le tableau est passé à la fonction de service de chargement du formulaire uniquement.
* @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 $options Tableau d'options qui peut être fourni par un plugin utilisateur uniquement si celui-ci fait appel
* au formulaire. La page cache_vider de Cache Factory n'utilise pas ce paramètre.
* Le tableau est passé à la fonction de service de chargement du formulaire uniquement.
*
* @return array
* Tableau des données à charger par le formulaire (affichage). Aucune donnée chargée n'est un
* champ de saisie, celle-ci sont systématiquement remises à zéro. Le tableau comprend à minima l'index suivant:
* - `_caches` : (affichage) liste des descriptions des caches rangés par service
* @return array Tableau des données à charger par le formulaire (affichage). Aucune donnée chargée n'est un
* champ de saisie, celle-ci sont systématiquement remises à zéro. Le tableau comprend à minima l'index suivant:
* - `_caches` : (affichage) liste des descriptions des caches rangés par service
*/
function formulaires_cache_vider_charger($plugin, $options = array()) {
// Lecture de la configuration des caches du plugin.
include_spip('inc/cache');
include_spip('inc/ezcache_cache');
$configuration = configuration_cache_lire($plugin);
// On appelle le service de chargement des variables qui est soit celui par défaut de Cache Factory
// soit celui spécifique au plugin si il existe.
include_spip('cache/cache');
$valeurs = cache_cache_formulaire_charger($plugin, $options, $configuration);
include_spip('ezcache/ezcache');
$valeurs = ezcache_cache_formulaire_charger($plugin, $options, $configuration);
return $valeurs;
}
/**
* Vérification des saisies : il est obligatoire de choisir un cache à supprimer.
*
* @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 $options
* Tableau d'options qui peut être fourni par un plugin utilisateur uniquement si celui-ci fait appel
* au formulaire. La page cache_vider de Cache Factory n'utilise pas ce paramètre.
* Le tableau est passé à la fonction de service de chargement du formulaire uniquement.
* @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 $options Tableau d'options qui peut être fourni par un plugin utilisateur uniquement si celui-ci fait appel
* au formulaire. La page cache_vider de Cache Factory n'utilise pas ce paramètre.
* Le tableau est passé à la fonction de service de chargement du formulaire uniquement.
*
* @return array
* Tableau des erreurs qui se limite à la non sélection d'au moins un cache.
* @return array Tableau des erreurs qui se limite à la non sélection d'au moins un cache.
*/
function formulaires_cache_vider_verifier($plugin, $options = array()) {
$erreurs = array();
$obligatoires = array('caches');
foreach ($obligatoires as $_obligatoire) {
if (!_request($_obligatoire))
if (!_request($_obligatoire)) {
$erreurs[$_obligatoire] = _T('info_obligatoire');
}
}
return $erreurs;
@ -75,27 +68,23 @@ function formulaires_cache_vider_verifier($plugin, $options = array()) {
*
* @uses cache_vider()
*
* @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 $options
* Tableau d'options qui peut être fourni par un plugin utilisateur uniquement si celui-ci fait appel
* au formulaire. La page cache_vider de Cache Factory n'utilise pas ce paramètre.
* Le tableau est passé à la fonction de service de chargement du formulaire uniquement.
* @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 $options Tableau d'options qui peut être fourni par un plugin utilisateur uniquement si celui-ci fait appel
* au formulaire. La page cache_vider de Cache Factory n'utilise pas ce paramètre.
* Le tableau est passé à la fonction de service de chargement du formulaire uniquement.
*
* @return array
* Tableau retourné par le formulaire contenant toujours un message de bonne exécution. L'indicateur
* editable est toujours à vrai.
* @return array Tableau retourné par le formulaire contenant toujours un message de bonne exécution. L'indicateur
* editable est toujours à vrai.
*/
function formulaires_cache_vider_traiter($plugin, $options = array()) {
$retour = array();
// On récupère les caches à supprimer
$caches = _request('caches');
// On appelle l'API des caches
include_spip('inc/cache');
include_spip('inc/ezcache_cache');
cache_vider($plugin, $caches);
$retour['message_ok'] = _T('cache:cache_vider_succes');

0
formulaires/inc-cache_cache_vider.html → formulaires/inc-ezcache_cache_vider.html

194
inc/cache.php → inc/ezcache_cache.php

@ -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 ezcache_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('ezcache/ezcache');
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 = 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.
$fichier_cache = $cache;
$cache = cache_cache_decomposer($plugin, $fichier_cache, $configuration);
$cache = ezcache_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 ezcache_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('ezcache/ezcache');
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 = 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.
@ -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 = ezcache_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 ezcache_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('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
// 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 ezcache_cache_composer().
*
* @api
*
* @uses configuration_cache_lire()
* @uses cache_cache_composer()
* @uses ezcache_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('ezcache/ezcache');
$fichier_cache = ezcache_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 ezcache_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('ezcache/ezcache');
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 = 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 cache_existe() pour calculer le fichier au préalable.
$fichier_cache = $cache;
$cache = cache_cache_decomposer($plugin, $fichier_cache, $configuration);
$cache = ezcache_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('ezcache/ezcache');
$cache = ezcache_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 = ezcache_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('ezcache/ezcache');
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' => ezcache_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 ezcache_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('ezcache/ezcache');
$configuration[$plugin] = ezcache_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 = '') {

22
lang/cache_fr.php

@ -4,14 +4,18 @@ if (!defined('_ECRIRE_INC_VERSION')) {
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// C
'cache_vider_titre_form' => 'Caches du plugin @plugin@',
'cache_vider_titre_page' => 'Cache Factory',
'cache_vider_menu' => 'Vider les caches des plugins',
'cache_vider_label_choix' => 'Choisir les caches à supprimer',
// C
'cache_vider_titre_form' => 'Caches du plugin @plugin@',
'cache_vider_titre_page' => 'Cache Factory',
'cache_vider_menu' => 'Vider les caches des plugins',
'cache_vider_label_choix' => 'Choisir les caches à supprimer',
'cache_vider_notice_aucun' => 'Aucun cache n\'a encore été créé par le plugin.',
'cache_vider_succes' => 'Les caches sélectionnés ont bien été supprimés.',
'cache_vider_cocher_rien' => 'Tout décocher',
'cache_vider_cocher_tout' => 'Tout cocher',
'cache_vider_succes' => 'Les caches sélectionnés ont bien été supprimés.',
'cache_vider_cocher_rien' => 'Tout décocher',
'cache_vider_cocher_tout' => 'Tout cocher',
// I
'info_1_cache' => 'Un cache',
'info_nb_cache' => '@nb@ caches',
'info_aucun_cache' => 'Aucun cache',
);

13
lang/paquet-cache_fr.php

@ -1,13 +0,0 @@
<?php
// Ceci est un fichier langue de SPIP -- This is a SPIP language file
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// N
'cache_description' => 'Framework de gestion des caches pour plugins. Ce plugin fournit les API et les mécanismes permettant d\'écrire, de lire et de supprimer des caches spécifiques à un plugin utilisateur.',
'cache_slogan' => 'La fabrique de caches pour plugins',
);

12
lang/paquet-ezcache_fr.php

@ -0,0 +1,12 @@
<?php
// Ceci est un fichier langue de SPIP -- This is a SPIP language file
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// N
'ezcache_description' => 'Framework de gestion des caches pour plugins. Ce plugin fournit les API et les mécanismes permettant d\'écrire, de lire et de supprimer des caches spécifiques à un plugin utilisateur.',
'ezcache_slogan' => 'La fabrique de caches pour plugins',
);

2
paquet.xml

@ -1,5 +1,5 @@
<paquet
prefix="cache"
prefix="ezcache"
categorie="outil"
version="0.6.0"
etat="test"

60
prive/squelettes/liste/caches.html

@ -0,0 +1,60 @@
[(#SET{defaut_tri,#ARRAY{
date, -1,
type_controle, 1,
points, -1
}})]
<B_liste_caches>
#ANCRE_PAGINATION
<div class="liste-objets caches">
<table class="spip liste">
[<caption>
<strong class="caption">
(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{cache:info_1_cache,pays:info_nb_cache}})
</strong>
</caption>]
<thead>
<tr class="first_row">
[(#ENV{type_controle}|non)
<th class="titre" scope="col">[(#TRI{titre,<:controle:champ_type_controle_label:>,ajax})]</th>
]
<th class="id principale" scope="col">[(#TRI{id_controle,<:info_numero_abbreviation:>,ajax})]</th>
<th class="auteur" scope="col"><:auteur:></th>
<th class="nb" scope="col">[(#TRI{nb_anomalies,<:controle:champ_nb_anomalies_label:>,ajax})]</th>
<th class="date" scope="col">[(#TRI{date,<:controle:champ_date_label:>,ajax})]</th>
<th class="etat" scope="col">[(#TRI{date,<:controle:champ_etat_execution_label:>,ajax})]</th>
</tr>
</thead>
<tbody>
<BOUCLE_liste_caches(DATA)
{id_controle?}
{type_controle?}
{id_auteur?}
{id_controle !IN #ENV{exclus, #ARRAY}}
{where?}
{recherche?}
{tri #ENV{par, date}, #GET{defaut_tri}}
{pagination #ENV{nb,10}}>
<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd, row_even})]">
[(#ENV{type_controle}|non)
<td class="titre">#INFO_TITRE{controle, #ID_CONTROLE}</td>
]
<td class="id principale">#ID_CONTROLE</td>
<td class="auteur">
<div class="inner">
<BOUCLE_auteurs(AUTEURS){id_auteur}>
<a href="[(#ID_AUTEUR|generer_url_entite{auteur})]">#NOM</a>
</BOUCLE_auteurs>
</div>
</td>
<td class="nb">#NB_ANOMALIES</td>
<td class="date">[(#DATE|affdate_heure)]</td>
<td class="etat">#ETAT_EXECUTION</td>
</tr>
</BOUCLE_liste_caches>
</tbody>
</table>
[<p class="pagination">(#PAGINATION{prive})</p>]
</div>
</B_liste_caches>[
<div class="liste-objets controles caption-wrap"><strong class="caption">(#ENV*{sinon, ''})</strong></div>
]<//B_liste_caches>

42
prive/squelettes/liste/fichiers.html

@ -0,0 +1,42 @@
[(#SET{defaut_tri,#ARRAY{
date, -1,
type_controle, 1,
points, -1
}})]
<B_telechager>
#ANCRE_PAGINATION
<div class="liste-objets caches">
<table class="spip liste">
<thead>
<caption><strong class="caption"><:mes_fichiers:titre_boite_telecharger:></strong></caption>
<tr class="first_row">
<th scope="col"><:mes_fichiers:colonne_nom:></th>
<th scope="col"><:label_poids_fichier:></th>
<th scope="col"><:date:></th>
<th scope="col"></th>
<th scope="col"></th>
</tr>
</thead>
<tbody>
<BOUCLE_telechager(DATA){source table, #GET{fichiers}}{pagination 10}>
<tr id="zip_#COMPTEUR_BOUCLE"[ class="(#COMPTEUR_BOUCLE|alterner{row_even, row_odd})"]>
<td class="fichier principale">[<label[ for="zip_(#CLE|plus{1})"]>(#VALEUR|basename)</label>]</td>
<td class="taille">[(#VALEUR|filesize|taille_en_octets)]</td>
<td class="date">[(#VAL{'Y-m-d H:i:s'}|date{#VALEUR|filemtime}|affdate_heure)]</td>
<td>[(#BOUTON_ACTION{<:bouton_telecharger:>, #URL_ACTION_AUTEUR{mes_fichiers_telecharger, #VALEUR}})]</td>
<td><a class="voir_zip" href="#info_zip_#COMPTEUR_BOUCLE" rel="info_zip_#COMPTEUR_BOUCLE" title="<:mes_fichiers:bulle_bouton_voir:>"><:mes_fichiers:bouton_voir:></a></td>
</tr>
<tr>
<td colspan="5" style="padding-top:0;padding-bottom:0;"><div id="info_zip_#COMPTEUR_BOUCLE" class="resume_zip" style="padding:10px 0;">[(#VALEUR|mes_fichiers_resumer_zip)]</div></td>
</tr>
</BOUCLE_telechager>
</tbody>
</table>
[<p class='pagination'>(#PAGINATION{#ENV{pagination,prive}})</p>]
</div>
</B_telechager>
#BOITE_OUVRIR{'', notice}
<:mes_fichiers:message_rien_a_telecharger:>
#BOITE_FERMER
<//B_telechager>
Loading…
Cancel
Save