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.

149 lines
4.7 KiB

<?php
5 years ago
/**
* Ce fichier contient les fonctions de gestion des caches utilisés par N-Core.
*
* @package SPIP\NCORE\CACHE
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
if (!defined('_NCORE_DIRCACHE')) {
/**
* Dossier racine dans lesquels tous les caches de N-Core seront rangés.
* Les caches sont répartis suivant le plugin dans un sous-dossier `/${plugin}`.
*/
define('_NCORE_DIRCACHE', _DIR_CACHE . 'ncore/');
}
if (!defined('_NCORE_NOMCACHE_NOISETTE_SIGNATURE')) {
/**
* Cache des signatures des fichiers YAML de noisettes.
* Contient le tableau sérialisé `[noisette] = signature`.
*/
define('_NCORE_NOMCACHE_NOISETTE_SIGNATURE', 'noisettes_signature.php');
}
if (!defined('_NCORE_NOMCACHE_NOISETTE_DESCRIPTION')) {
/**
* Cache des descriptions de noisettes issues des fichiers YAML.
* Contient le tableau sérialisé `[noisette] = tableau de la description complète`.
* Chaque description contient aussi l'identifiant de la noisette déjà utilisé en index et la signature.
*/
define('_NCORE_NOMCACHE_NOISETTE_DESCRIPTION', 'noisettes_description.php');
}
if (!defined('_NCORE_NOMCACHE_NOISETTE_AJAX')) {
/**
* Cache du paramétrage ajax des noisettes.
* Contient le tableau sérialisé `[noisette] = true/false`.
*/
define('_NCORE_NOMCACHE_NOISETTE_AJAX', 'noisettes_ajax.php');
}
if (!defined('_NCORE_NOMCACHE_NOISETTE_INCLUSION')) {
/**
* Cache du paramétrage d'inclusion dynamique des noisettes.
* Contient le tableau sérialisé `[noisette] = true/false`.
*/
define('_NCORE_NOMCACHE_NOISETTE_INCLUSION', 'noisettes_inclusion.php');
}
if (!defined('_NCORE_NOMCACHE_NOISETTE_CONTEXTE')) {
/**
* Cache des contextes de noisettes issues des fichiers YAML.
* Contient le tableau sérialisé `[noisette] = tableau des éléments du contexte`.
*/
define('_NCORE_NOMCACHE_NOISETTE_CONTEXTE', 'noisettes_contexte.php');
}
/**
* Lit le cache spécifié d'un plugin donné et renvoie le contenu sous forme de tableau
* éventuellement vide.
*
* @api
* @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 string $nom_cache
* Nom et extension du fichier cache.
*
* @return array
* Contenu du fichier sous la forme d'un tableau éventuellement vide.
*/
function cache_lire($plugin, $nom_cache) {
// Initialisation du contenu du cache
$cache = array();
// Détermination du nom du cache en fonction du plugin appelant et du type
$fichier_cache = _NCORE_DIRCACHE . "${plugin}/${nom_cache}";
include_spip('inc/flock');
if (lire_fichier_securise($fichier_cache, $contenu)) {
$cache = unserialize($contenu);
}
return $cache;
}
/**
* Ecrit le contenu d'un tableau dans le cache spécifié d'un plugin donné.
*
* @api
* @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 string $nom_cache
* Nom et extension du fichier cache.
* @param array $contenu_cache
* Contenu sous forme de tableau à stocker dans un fichier cache après sérialisation.
*
* @return void
*/
function cache_ecrire($plugin, $nom_cache, $contenu_cache) {
// Création du répertoire du cache si besoin
$dir_cache = sous_repertoire(_DIR_CACHE, 'ncore');
$dir_cache = sous_repertoire($dir_cache, $plugin);
// Détermination du nom du cache en fonction du plugin appelant et du type
$fichier_cache = "${dir_cache}${nom_cache}";
// On vérifie que le contenu est bien un tableau. Si ce n'est pas le cas on le transforme en tableau.
if (!is_array($contenu_cache)) {
$contenu_cache = $contenu_cache ? array($contenu_cache) : array();
}
// Ecriture du fichier cache
include_spip('inc/flock');
ecrire_fichier_securise($fichier_cache, serialize($contenu_cache));
}
/**
* Supprime le cache cache spécifié d'un plugin donné.
*
* @api
* @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 string $nom_cache
* Nom et extension du fichier cache.
*
* @return void
*/
function cache_supprimer($plugin, $nom_cache) {
// Détermination du nom du cache en fonction du plugin appelant et du type
$fichier_cache = _NCORE_DIRCACHE . "${plugin}/${nom_cache}";
// Suppression du fichier cache
include_spip('inc/flock');
supprimer_fichier($fichier_cache);
}