La fabrique de caches pour plugins
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.8 KiB

<?php
/**
* Ce fichier contient les balises de Cache Factory.
*
* @package SPIP\CACHE\BALISE
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Compile la balise `#CACHE_LISTE` qui fournit la liste des caches pour un plugin utilisateur donné
* et conformes aux filtres éventuellement fournis. Pour se focaliser sur un type de cache donné du plugin
* il faut le fournir en filtre avec pour critère `type_cache`.
* La signature de la balise est : `#CACHE_LISTE{plugin[, filtres]}`.
*
* @balise
*
* @uses traiter_balise_cache_liste()
*
* @example
* ```
* #CACHE_LISTE{ezcheck}, renvoie tous les caches du plugin ezcheck
* #CACHE_LISTE{ezcheck, #ARRAY{type_cache, dashboard}}, renvoie tous les caches du type 'dashboard' du plugin ezcheck
* #CACHE_LISTE{ezcheck, #ARRAY{type_cache, dashboard, objet, repo}}, renvoie les caches de type dashboard du plugin ezcheck dont l'objet est 'repo'
* ```
*
* @param Champ $p Pile au niveau de la balise.
*
* @return Champ Pile complétée par le code à générer.
*/
function balise_CACHE_LISTE_dist($p) {
// Récupération des arguments.
// -- le plugin est toujours nécessaire
$plugin = interprete_argument_balise(1, $p);
$plugin = isset($plugin) ? str_replace('\'', '"', $plugin) : '""';
// -- les filtres sont optionnels
$filtres = interprete_argument_balise(2, $p);
$filtres = isset($filtres) ? str_replace('\'', '"', $filtres) : 'array()';
// Appel de la fonction de listage (cache_repertorier).
$p->code = "traiter_balise_cache_liste(${plugin}, ${filtres})";
return $p;
}
/**
* Renvoie la liste des caches.
* Cette fonction encapsule l'API `cache_repertorier`.
*
* @internal
*
* @uses cache_repertorier()
*
* @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
*/
function traiter_balise_cache_liste($plugin, $filtres = array()) {
// Initialisation de la sortie
$caches = array();
// Déterminer si on veut les caches d'un type de cache ou de tous les types de caches du plugin
include_spip('inc/ezcheck_cache');
if (isset($filtres['type_cache'])) {
// Recherche d'un filtre sur le type de cache
$types_cache = array($filtres['type_cache']);
unset($filtres['type_cache']);
} else {
$configurations = configuration_cache_lire($plugin);
$types_cache = array_keys($configurations);
}
foreach ($types_cache as $_type_cache) {
$caches = array_merge($caches, cache_repertorier($plugin, $_type_cache, $filtres));
}
return $caches;
}