Valider 2ce35a78 rédigé par Fil's avatar Fil
Parcourir les fichiers

Gestion des invalideurs depuis l'espace privé & simplification du truc :

- on n'a désormais plus qu'une table spip_caches, sous la forme :
+-----------------------------------------------+-----------------+-------+
| hache                                         | id              | suppr |
+-----------------------------------------------+-----------------+-------+
| CACHE/c/86400/cle%3Fid_article%3D884.9595d74a | id_article/884  | NULL  |
| CACHE/c/86400/cle%3Fid_article%3D884.9595d74a | id_article/907  | NULL  |
... / ...
| CACHE/2/86400/le%3Fid_article%3D2505.5d9390a2 | id_forum/a2505  | NULL  |
| CACHE/2/86400/le%3Fid_article%3D2505.5d9390a2 | id_article/2505 | NULL  |
| CACHE/2/86400/le%3Fid_article%3D2505.5d9390a2 | id_article/2442 | NULL  |
... / ...

ici hache est le nom du fichier cache ; id l'identifiant (composite) de l'invalideur, et suppr est mis à 'x' quand on demande de supprimer. Un message est alors posé dans lire_meta() pour dire à inc-public.php3 de faire le ménage avant d'aller chercher un fichier cache.


Dans ecrire/articles.php3 il y a à deux endroits l'appel à l'invalidation
parent 81c8bed1
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+18 −4
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -112,12 +112,18 @@ if ($statut_nouv) {
	}
}

// reindexer
// 'publie' => reindexer
if ($ok_nouveau_statut AND $statut_nouv == 'publie' AND $statut_nouv != $statut_ancien AND (lire_meta('activer_moteur') == 'oui')) {
	include_ecrire ("inc_index.php3");
	indexer_article($id_article);
}

// 'dpublie' => invalider les caches
if ($ok_nouveau_statut AND $statut_ancien == 'publie' AND $statut_nouv != $statut_ancien AND $invalider_caches) {
	include_ecrire ("inc_invalideur.php3");
	suivre_invalideur("id='id_article/$id_article'", 'spip_caches');
}

if ($jour && $flag_editable) {
	if ($annee == "0000") $mois = "00";
	if ($mois == "00") $jour = "00";
@@ -229,10 +235,18 @@ if ($titre && !$ajout_forum && $flag_editable) {
	$query = "UPDATE spip_articles SET surtitre=\"$surtitre\", titre=\"$titre\", soustitre=\"$soustitre\", $change_rubrique descriptif=\"$descriptif\", chapo=\"$chapo\", texte=\"$texte\", ps=\"$ps\", url_site=\"$url_site\", nom_site=\"$nom_site\" $add_extra WHERE id_article=$id_article";
	$result = spip_query($query);
	calculer_rubriques();
	if ($statut_article == 'publie' AND lire_meta('activer_moteur') == 'oui') {

	// invalider et reindexer
	if ($statut_article == 'publie') {
		if ($invalider_caches) {
			include_ecrire ("inc_invalideur.php3");
			suivre_invalideur("id='id_article/$id_article'", 'spip_caches');
		}
		if (lire_meta('activer_moteur') == 'oui') {
			include_ecrire ("inc_index.php3");
			indexer_article($id_article);
		}
	}

	// -- Experimental --
	// Stockage des versions
+19 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -17,6 +17,7 @@ include_ecrire("inc_urls.php3");
include_ecrire("inc_layer.php3");
include_ecrire("inc_rubriques.php3");
include_ecrire("inc_calendrier.php");
include_ecrire("inc_forum.php3");


if (!@file_exists("data/inc_meta_cache.php3")) ecrire_metas();
@@ -259,5 +260,23 @@ if ($supp_rubrique = intval($supp_rubrique) AND $connect_statut == '0minirezo' A
	calculer_rubriques();
}

// Modifs forum
if ($controle_forum AND $id_controle_forum) {
	include_ecrire('inc_admin.php3');
	if (verifier_action_auteur("$controle_forum$id_controle_forum",
	$hash, $connect_id_auteur)) {
		switch($controle_forum) {
			case 'supp_forum':
				changer_statut_forum($id_controle_forum, 'off');
				break;
			case 'supp_forum_priv':
				changer_statut_forum($id_controle_forum, 'privoff');
				break;
			case 'valid_forum':
				changer_statut_forum($id_controle_forum, 'publie');
				break;
		}
	}
}

?>
+27 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -287,6 +287,26 @@ $spip_versions_fragments = array(
$spip_versions_fragments_key = array(
	     "PRIMARY KEY"	=> "id_article, id_fragment, version_min");

$spip_caches = array(
		"hache" => "char (64) NOT NULL",
		"id" => "char (64) NOT NULL",
		"suppr" => "CHAR (1)");
$spip_caches_key = array(
		"PRIMARY KEY"	=> "hache, id",
		"KEY hache" => "hache",
		"KEY id" => "id");

/*
$spip_caches_inclus = array(
		"hache" => "char (64) NOT NULL",
		"id" => "char (64) NOT NULL",
		"suppr" => "CHAR (1)");
$spip_caches_inclus_key = array(
		"PRIMARY KEY"	=> "hache, id",
		"KEY hache" => "hache",
		"KEY id" => "id");
*/

global $tables_auxiliaires;

$tables_auxiliaires  = 
@@ -352,6 +372,12 @@ $tables_auxiliaires =
	'versions'	=> array('field' => &$spip_versions,
					 'key' => &$spip_versions_key),
	'versions_fragments'	=> array('field' => &$spip_versions_fragments,
					 'key' => &$spip_versions_fragments_key)
					 'key' => &$spip_versions_fragments_key),
	'caches'	=> array('field' => &$spip_caches,
					 'key' => &$spip_caches_key)
	/*,
	'caches_inclus'	=> array('field' => &$spip_caches_inclus,
					 'key' => &$spip_caches_inclus_key)
	*/
	);
?>
+6 −3
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -15,8 +15,6 @@ include_ecrire("inc_majbase.php3");
// champs: champ => type
// cles: type-de-cle => champ(s)
// si $autoinc, c'est une auto-increment (i.e. serial) sur la Primary Key
// si en  plus la Primary Key reference un champ unique,
// on cree aussi une table des dependances de caches selon ce champ.
// Le nom des caches doit etre inferieur a 64 caracteres

function spip_create_table($nom, $champs, $cles, $autoinc=false) {
@@ -42,6 +40,7 @@ function spip_create_table($nom, $champs, $cles, $autoinc=false) {
		")\n";
	spip_query($query);  

/*
if (($autoinc && !strpos($p, ","))) {
		$t = "spip_" . $p . _SUFFIXE_DES_CACHES;
		spip_query("DROP TABLE IF EXISTS $t");
@@ -49,8 +48,12 @@ function spip_create_table($nom, $champs, $cles, $autoinc=false) {
		spip_query("CREATE TABLE $t (hache char (64) NOT NULL,
			$p char (64) NOT NULL, KEY hache (hache), KEY $p ($p))");
	}
*/

}



function creer_base() {
	global $tables_principales, $tables_auxiliaires;

+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -160,7 +160,7 @@ function spip_release_lock($nom) {
//
// IN (...) est limite a 255 elements, d'ou cette fonction assistante
//
function calcul_mysql_in($val, $valeurs, $not) {
function calcul_mysql_in($val, $valeurs, $not='') {
	if (!$valeurs) return '0=0';
	$s = split(',', $valeurs, 255);
	if (count($s) < 255) {
Chargement en cours