Subversion Repositories Sites.tela-botanica.org

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4 david 1
<?php
2
 
3
/***************************************************************************\
4
 *  SPIP, Systeme de publication pour l'internet                           *
5
 *                                                                         *
6
 *  Copyright (c) 2001-2005                                                *
7
 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8
 *                                                                         *
9
 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10
 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11
\***************************************************************************/
12
 
13
 
14
// Ce fichier ne sera execute qu'une fois
15
if (defined("_ECRIRE_INVALIDEUR")) return;
16
define("_ECRIRE_INVALIDEUR", "1");
17
 
18
include_ecrire('inc_serialbase.php3');
19
 
20
function supprime_invalideurs() {
21
	spip_query("DELETE FROM spip_caches");
22
}
23
 
24
 
25
// Compilateur : ajouter un invalideur "$type/$valeur" a un code donne
26
// Attention le type est compile, pas forcement la valeur
27
function ajouter_invalideur($type, $valeur, $code) {
28
	return '
29
	// invalideur '.$type.'
30
	(!($Cache[\''.$type.'\']['.$valeur."]=1) ? '':\n\t" . $code .")\n";
31
}
32
 
33
 
34
//
35
// Calcul des pages : noter dans la base les liens d'invalidation
36
//
37
function maj_invalideurs ($fichier, $invalideurs, $delais) {
38
	$fichier = addslashes($fichier); #parano
39
	if ($fichier == '') return;	// ne pas noter les POST et les delais=0
40
	spip_query("DELETE FROM spip_caches WHERE fichier='$fichier'");
41
 
42
	// invalidation des forums (l'invalideur est : 'id_forum/a23')
43
	insere_invalideur($invalideurs['id_forum'], 'id_forum', $fichier);
44
 
45
	// invalidation des petitions et autres
46
	// (l'invalideur est par exemple : 'varia/petition')
47
	insere_invalideur($invalideurs['varia'], 'varia', $fichier);
48
 
49
	// invalidation du reste - experimental a activer dans mes_options
50
	if ($GLOBALS['invalider_caches']) {
51
		insere_invalideur($invalideurs['id_article'],'id_article', $fichier);
52
		insere_invalideur($invalideurs['id_breve'], 'id_breve', $fichier);
53
		insere_invalideur($invalideurs['id_rubrique'],'id_rubrique', $fichier);
54
		insere_invalideur($invalideurs['id_syndic'],'id_syndic', $fichier);
55
	}
56
}
57
 
58
function insere_invalideur($a, $type, $fichier) {
59
	if (is_array($a)) {
60
		$values = array();
61
		foreach($a as $k => $v)
62
			$values[] = "('$fichier', '$type/$k')";
63
		spip_query ("INSERT IGNORE INTO spip_caches
64
			(fichier, id) VALUES " . join(", ", $values));
65
	}
66
}
67
 
68
 
69
//
70
// Invalider les caches lies a telle condition
71
//
72
function suivre_invalideur($cond) {
73
	$result = spip_query("SELECT DISTINCT fichier FROM spip_caches WHERE $cond");
74
	$tous = array();
75
	while ($row = spip_fetch_array($result))
76
		$tous[] = $row['fichier'];
77
 
78
	spip_log("suivre $cond");
79
	applique_invalideur($tous);
80
}
81
 
82
 
83
//
84
// Supprimer les vieux caches
85
//
86
function retire_vieux_caches() {
87
	$condition = "type='t' AND id<".time();
88
	suivre_invalideur($condition);
89
}
90
 
91
 
92
//
93
// Marquer les fichiers caches invalides comme etant a supprimer
94
//
95
function applique_invalideur($depart) {
96
 
97
	if ($depart) {
98
		$tous = "'".join("', '", $depart)."'";
99
		spip_log("applique $tous");
100
 
101
		spip_query("UPDATE spip_caches SET type='x'"
102
		. ' WHERE ' . calcul_mysql_in('fichier', $tous));
103
 
104
		// Demander a inc-public.php3 de retirer les caches
105
		// invalides ;
106
		// - le signal (meta='invalider') indique
107
		// qu'il faut faire attention ;
108
		// - le signal (meta='invalider_caches') indique qu'on
109
		// peut effacer 100 caches invalides
110
		// (Signaux differents pour eviter de la concurrence entre
111
		// les processus d'invalidation)
112
		ecrire_meta('invalider', 'oui'); // se verifier soi-meme
113
		ecrire_meta('invalider_caches', 'oui'); // supprimer les autres
114
		ecrire_metas();
115
		if (_DIR_RESTREINT) {
116
			include_local('inc-cache.php3');
117
			retire_caches();
118
		}
119
	}
120
}
121
 
122
?>