From 97eff7483242ba6ddf55e940331f6eeef3f1fb4a Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Fri, 4 Dec 2009 13:22:14 +0000 Subject: [PATCH] report de [14768] et [14776] sur l'invalidation selective des caches --- ecrire/inc/invalideur.php | 26 ++++++++++++++++++++++++-- ecrire/public/cacher.php | 4 +++- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/ecrire/inc/invalideur.php b/ecrire/inc/invalideur.php index 90b60c8469..b3a8135013 100644 --- a/ecrire/inc/invalideur.php +++ b/ecrire/inc/invalideur.php @@ -61,9 +61,31 @@ function taille_du_cache() { // ici on se contente de noter la date de mise a jour dans les metas // http://doc.spip.org/@suivre_invalideur function suivre_invalideur($cond, $modif=true) { - if ($modif) { - ecrire_meta('derniere_modif', time()); + if (!$modif) + return; + + // determiner l'objet modifie : forum, article, etc + if (preg_match(',id_([a-z]+),', $cond, $r)) + $objet = $r[1]; + // cas particulier des signatures + else if (strpos($cond, 'varia/pet')) + $objet = 'signature'; + + // stocker la date_modif_$objet (ne sert a rien pour le moment) + if (isset($objet)) + ecrire_meta('derniere_modif_'.$objet, time()); + + // si $derniere_modif_invalide est un array('forum', 'signature') + // n'affecter la meta que si un de ces objets est modifie + if (is_array($GLOBALS['derniere_modif_invalide'])) { + if (in_array($objet, $GLOBALS['derniere_modif_invalide'])) + ecrire_meta('derniere_modif', time()); } + // sinon, cas standard, toujours affecter la meta + else + ecrire_meta('derniere_modif', time()); + + } diff --git a/ecrire/public/cacher.php b/ecrire/public/cacher.php index ccf67bddcd..a3cfce2722 100644 --- a/ecrire/public/cacher.php +++ b/ecrire/public/cacher.php @@ -107,7 +107,9 @@ function cache_valide(&$page, $date) { if (!isset($page['entetes']['X-Spip-Statique']) OR $page['entetes']['X-Spip-Statique'] !== 'oui') { // Cache invalide par la meta 'derniere_modif' - if ($GLOBALS['derniere_modif_invalide'] + // sauf pour les bots, qui utilisent toujours le cache + if (!_IS_BOT + AND $GLOBALS['derniere_modif_invalide'] AND $date < $GLOBALS['meta']['derniere_modif']) return 1; -- GitLab