Changeset 113830 in spip-zone
- Timestamp:
- Feb 9, 2019, 7:41:18 PM (2 years ago)
- Location:
- _plugins_/cache/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
_plugins_/cache/trunk/cache/cache.php
r113804 r113830 39 39 // Initialisation du tableau de configuration avec les valeurs par défaut du plugin Cache. 40 40 $configuration_defaut = array( 41 'racine' => _DIR_CACHE, 42 'nom' => array('nom'), 43 'extension' => '.txt', 44 'securisation' => false, 45 'serialisation' => true, 46 'separateur' => '_' 41 'racine' => _DIR_CACHE, 42 'sous_dossier' => false, 43 'nom_obligatoire' => array('nom'), 44 'nom_facultatif' => array(), 45 'extension' => '.txt', 46 'securisation' => false, 47 'serialisation' => true, 48 'separateur' => '_' 47 49 ); 48 50 … … 76 78 $configuration['racine'] = rtrim($configuration['racine'], '/') . '/'; 77 79 } 80 78 81 // -- Sous-dossier spécifique au plugin 79 82 $sous_dossier = ($configuration['racine'] == _DIR_VAR) ? "cache-${plugin}" : "$plugin"; … … 81 84 include_spip('inc/flock'); 82 85 $configuration['dossier_base'] = sous_repertoire($configuration['racine'], $sous_dossier); 83 86 87 // -- Construction du tableau des composants du nom : dans l'ordre on a toujours les composants obligatoires 88 // suivis des composants faclutatifs. 89 $configuration['nom'] = array_merge($configuration['nom_obligatoire'], $configuration['nom_facultatif']); 90 84 91 // Enregistrement de la configuration du plugin utilisateur dans la meta prévue. 85 92 // Si une configuration existe déjà on l'écrase. … … 123 130 // de base des caches du plugin. 124 131 $dir_cache = $configuration['dossier_base']; 125 if (!empty($cache['sous_dossier'])) { 126 // Si le cache nécessite un sous-dossier, appelé service dans l'identifiant du cache. 127 $dir_cache .= rtrim($cache['sous_dossier'], '/') . '/'; 132 if ($configuration['sous_dossier']) { 133 if (!empty($cache['sous_dossier'])) { 134 // Si le cache nécessite un sous-dossier, appelé service dans l'identifiant du cache. 135 $dir_cache .= rtrim($cache['sous_dossier'], '/') . '/'; 136 } else { 137 // C'est une erreur, le sous-dossier n'a pas été fourni alors qu'il est requis. 138 $dir_cache = ''; 139 } 128 140 } 129 141 … … 132 144 // fournie par le plugin (liste ordonnée de composant). 133 145 $nom_cache = ''; 134 foreach ($configuration['nom'] as $_composant) { 135 if (isset($cache[$_composant])) { 136 $nom_cache .= ($nom_cache ? $configuration['separateur'] : '') . $cache[$_composant]; 146 if ($dir_cache) { 147 foreach ($configuration['nom'] as $_composant) { 148 if (isset($cache[$_composant])) { 149 $nom_cache .= ($nom_cache ? $configuration['separateur'] : '') . $cache[$_composant]; 150 } 137 151 } 138 152 } … … 204 218 205 219 220 /** 221 * Complète la description canonique d'un cache. 222 * 223 * Le plugin Cache Factory ne complète pas la description canonique. 224 * 225 * @uses cache_chercher_service() 226 * 227 * @param string $plugin 228 * Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier 229 * ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe. 230 * @param array $cache 231 * Tableau identifiant le cache pour lequel on veut construire le nom. 232 * @param array $configuration 233 * Configuration complète des caches du plugin utlisateur lue à partir de la meta de stockage. 234 * 235 * @return array 236 * Description du cache complétée par un ensemble de données propres au plugin. 237 */ 238 function cache_cache_completer($plugin, $cache, $configuration) { 239 240 // Le plugin utilisateur peut fournir un service propre pour construire le chemin complet du fichier cache. 241 // Néanmoins, étant donné la généricité du mécanisme offert par le plugin Cache cela devrait être rare. 242 if ($completer = cache_chercher_service($plugin, 'cache_completer')) { 243 // On passe le plugin appelant à la fonction car cela permet ainsi de mutualiser les services de stockage. 244 $cache = $completer($plugin, $cache, $configuration); 245 } 246 247 return $cache; 248 } 249 250 206 251 // ----------------------------------------------------------------------- 207 252 // ----------------- UTILITAIRE PROPRE AU PLUGIN CACHE ------------------- -
_plugins_/cache/trunk/inc/cache.php
r113781 r113830 50 50 if (is_array($cache)) { 51 51 // Création du répertoire du cache à créer, si besoin. 52 if (!empty($cache['sous_dossier'])) { 53 // Si le conteneur nécessite un sous-dossier, appelé service dans l'identifiant du conteneur. 54 sous_repertoire($configuration[$plugin]['dossier_base'], rtrim($cache['sous_dossier'], '/')); 55 } 56 57 // Détermination du chemin du cache : 52 $erreur_sous_dossier = false; 53 if ($configuration[$plugin]['sous_dossier']) { 54 if (!empty($cache['sous_dossier'])) { 55 // Si le cache nécessite un sous-dossier on crée le répertoire au besoin. 56 sous_repertoire($configuration[$plugin]['dossier_base'], rtrim($cache['sous_dossier'], '/')); 57 } else { 58 // C'est une erreur, le sous-dossier n'a pas été fourni alors qu'il est requis. On arrête l'écriture. 59 $erreur_sous_dossier = true; 60 } 61 } 62 63 // Détermination du chemin du cache si pas d'erreur sur le sous-dossier : 58 64 // - le nom sans extension est construit à partir des éléments fournis sur le conteneur et 59 65 // de la configuration du nom pour le plugin. 60 $fichier_cache = cache_cache_composer($plugin, $cache, $configuration[$plugin]); 66 if (!$erreur_sous_dossier) { 67 $fichier_cache = cache_cache_composer($plugin, $cache, $configuration[$plugin]); 68 } 61 69 } elseif (is_string($cache)) { 62 70 // Le chemin complet du fichier cache est fourni. Aucune vérification ne peut être faite … … 316 324 317 325 /** 318 * Supprime le ou les caches spécifiés d'un plugin donné. 319 * A AMELIORER 326 * Retourne la description complète des caches d'un plugin filtrés sur une liste de critères. 327 * 328 * @api 329 * 330 * @uses cache_configuration_lire() 331 * @uses cache_cache_configurer() 332 * @uses cache_cache_composer() 333 * @uses cache_cache_decomposer() 334 * @uses cache_cache_completer() 335 * 336 * @param string $plugin 337 * Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier 338 * ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe. 339 * @param array $filtres 340 * Tableau associatif `[champ] = valeur` ou `[champ] = !valeur` de critères de filtres sur les composants 341 * de caches. Les opérateurs égalité et inégalité sont possibles. 342 * 343 * @return array 344 * Tableau des descriptions des fichiers cache créés par le plugin indexé par le chemin complet de 345 * chaque fichier cache. 346 */ 347 function cache_repertorier($plugin, $filtres = array()) { 348 349 // Initialisation de la liste des caches 350 $caches = array(); 351 352 // Lecture de la configuration des caches du plugin. 353 // Si celle-ci n'existe pas encore elle est créée (cas d'un premier appel, peu probable pour une lecture). 354 static $configuration = array(); 355 include_spip('cache/cache'); 356 if (empty($configuration[$plugin]) and (!$configuration[$plugin] = cache_configuration_lire($plugin))) { 357 $configuration[$plugin] = cache_cache_configurer($plugin); 358 } 359 360 // Rechercher les caches du plugin sans appliquer de filtre si ce n'est sur le sous-dossier éventuellement. 361 // Les autres filtres seront appliqués sur les fichiers récupérés. 362 $pattern_fichier = $configuration[$plugin]['dossier_base']; 363 if ($configuration[$plugin]['sous_dossier']) { 364 if (array_key_exists('sous_dossier', $filtres)) { 365 $pattern_fichier .= rtrim($filtres['sous_dossier'], '/') . '/'; 366 } else { 367 $pattern_fichier .= '*/'; 368 } 369 } 370 371 // On complète le pattern avec une recherche d'un nom quelconque mais avec l'extension configurée. 372 $pattern_fichier .= '*' . $configuration[$plugin]['extension']; 373 374 // On recherche les fichiers correspondant au pattern. 375 $fichiers_cache = glob($pattern_fichier); 376 377 if ($fichiers_cache) { 378 foreach ($fichiers_cache as $_fichier_cache) { 379 // On décompose le chemin de chaque cache afin de renvoyer l'identifiant canonique du cache. 380 $cache = cache_cache_decomposer($plugin, $_fichier_cache, $configuration[$plugin]); 381 382 // Maintenant que les composants sont déterminés on applique les filtres pour savoir si on 383 // complète et stocke le cache. 384 $cache_conforme = true; 385 foreach ($filtres as $_critere => $_valeur) { 386 $operateur_egalite = true; 387 $valeur = $_valeur; 388 if (substr($_valeur, 0, 1) == '!') { 389 $operateur_egalite = false; 390 $valeur = ltrim($_valeur, '!'); 391 } 392 if (isset($cache[$_critere]) 393 and (($operateur_egalite and ($cache[$_critere] != $valeur)) 394 or (!$operateur_egalite and ($cache[$_critere] == $valeur)))) { 395 $cache_conforme = false; 396 break; 397 } 398 } 399 400 if ($cache_conforme) { 401 // On permet au plugin de completer la description canonique 402 $cache = cache_cache_completer($plugin, $cache, $configuration[$plugin]); 403 404 // On stocke la description du fichier cache dans le tableau de sortie. 405 $caches[$_fichier_cache] = $cache; 406 } 407 } 408 } 409 410 return $caches; 411 } 412 413 414 /** 415 * Supprime, pour un plugin donné, les caches désignés par leur chemin complet. 320 416 * 321 417 * @api … … 325 421 * ou un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe. 326 422 * @param array $caches 327 * Liste des fichiers caches (chemin complet) à supprimer.423 * Liste des fichiers caches désignés par leur chemin complet. 328 424 * 329 425 * @return bool 426 * True si la suppression s'est bien passée, false sinon. 330 427 */ 331 428 function cache_vider($plugin, $caches) {
Note: See TracChangeset
for help on using the changeset viewer.