$v) { $m = "('$hache', '$k')"; $values[] = $m; $l .= " $k";} spip_query(" INSERT IGNORE INTO spip_" . $type . _SUFFIXE_DES_CACHES . " (hache, " . $type . ") VALUES " . join(", ", $values)); spip_log("Dépendances $type: " . join(", ", $values)); } } // Regarde dans une table de nom de caches ceux vérifiant une condition donnée // Les retire de cette table et de la table générale des caches // Si la condition est vide, c'est une simple purge générale function suivre_invalideur($cond, $table) { $result = spip_query(" SELECT DISTINCT hache FROM $table WHERE $cond "); $tous = array(); while ($row = spip_fetch_array($result)) { $tous[] = $row['hache']; } spip_log("suivre: " . join(' ' , $tous)); applique_invalideur($tous); } function applique_invalideur($depart) { global $spip_tables_principales; if ($depart) { $tous = join("', '", $depart); $tous = "'$tous'"; $niveau = $tous; while ($niveau) { # le NOT IN est théoriquement superflu, mais protège des tables endommagées $result = spip_query(" SELECT DISTINCT hache FROM spip_inclure" . _SUFFIXE_DES_CACHES . " WHERE inclure IN ($niveau) AND hache NOT IN ($tous) "); $niveau = array(); while ($row = spip_fetch_array($result)) { $niveau[] = "'" . $row['hache'] . "'"; $depart[] = $row['hache']; $tous .= ", '" . $row['hache'] . "'";} $niveau = join(', ', $niveau); } spip_query(" DELETE FROM spip_inclure" . _SUFFIXE_DES_CACHES . " WHERE hache IN ($tous) "); foreach($spip_tables_principales as $a) { spip_query(" DELETE FROM spip_" . $GLOBALS[$a . '_key']["PRIMARY KEY"] . _SUFFIXE_DES_CACHES ." WHERE hache IN ($tous) "); } retire_caches($depart); } } // Une petite fonction de mise au point qui devrait etre dans inc_db_mysql function spip_query_log($r) { $l = spip_query($r); # $e = mysql_info(); # absent de certaines versions de MySQL spip_log($r . $e); return $l; } ?>