From 90815a4694ed887f5b223a15b7c6b84b5c72d6dc Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Mon, 20 Sep 2010 20:58:26 +0000
Subject: [PATCH] page pour vider le cache en squelette + integration de la
 fonction 'desactiver temporairement le cache'/'reactiver le cache' Dans tous
 les cas, le cache se reactive automatiquement au bout de 24h pour eviter tout
 oubli.

---
 .gitattributes                                |   3 +-
 ecrire/action/purger.php                      |  63 +++++----
 ecrire/exec/admin_vider.php                   | 127 ------------------
 ecrire/public/cacher.php                      |   1 +
 .../squelettes/contenu/page-admin_vider.html  |  52 +++++++
 .../contenu/page-admin_vider_fonctions.php    |  49 +++++++
 prive/style_prive_plugins.html                |   2 +-
 7 files changed, 141 insertions(+), 156 deletions(-)
 delete mode 100644 ecrire/exec/admin_vider.php
 create mode 100644 prive/squelettes/contenu/page-admin_vider.html
 create mode 100644 prive/squelettes/contenu/page-admin_vider_fonctions.php

diff --git a/.gitattributes b/.gitattributes
index c797d88646..2f3827b896 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -114,7 +114,6 @@ ecrire/exec/admin_effacer.php -text
 ecrire/exec/admin_plugin.php -text
 ecrire/exec/admin_repair.php -text
 ecrire/exec/admin_tech.php -text
-ecrire/exec/admin_vider.php -text
 ecrire/exec/aide_index.php -text
 ecrire/exec/articles.php -text
 ecrire/exec/articles_edit.php -text
@@ -737,6 +736,8 @@ prive/rss/signatures.html -text
 prive/spip_pass.html -text
 prive/spip_style.css -text
 prive/squelettes/body.html -text
+prive/squelettes/contenu/page-admin_vider.html -text
+prive/squelettes/contenu/page-admin_vider_fonctions.php -text
 prive/squelettes/contenu/page-breves.html -text
 prive/squelettes/contenu/page-charte.html -text
 prive/squelettes/contenu/page-configurer.html -text
diff --git a/ecrire/action/purger.php b/ecrire/action/purger.php
index d0ea45a680..cfd2679ca3 100644
--- a/ecrire/action/purger.php
+++ b/ecrire/action/purger.php
@@ -13,41 +13,50 @@
 if (!defined("_ECRIRE_INC_VERSION")) return; // securiser
 
 // http://doc.spip.org/@action_purger_dist
-function action_purger_dist()
+function action_purger_dist($arg=null)
 {
-	$securiser_action = charger_fonction('securiser_action', 'inc');
-	$arg = $securiser_action();
+	if (is_null($arg)) {
+		$securiser_action = charger_fonction('securiser_action', 'inc');
+		$arg = $securiser_action();
+	}
 
 	include_spip('inc/invalideur');
 
 	spip_log("purger $arg");
 
 	switch ($arg) {
+		case 'inhibe_cache':
+			// inhiber le cache pendant 24h
+			ecrire_meta('cache_inhib',$_SERVER['REQUEST_TIME']+24*3600);
+			break;
+		case 'reactive_cache':
+			effacer_meta('cache_inhib');
+			break;
+
+		case 'cache':
+			supprime_invalideurs();
+			@spip_unlink(_CACHE_RUBRIQUES);
+			@spip_unlink(_CACHE_PIPELINES);
+			@spip_unlink(_CACHE_PLUGINS_PATH);
+			@spip_unlink(_CACHE_PLUGINS_OPT);
+			@spip_unlink(_CACHE_PLUGINS_FCT);
+			@spip_unlink(_CACHE_PLUGINS_VERIF);
+			@spip_unlink(_CACHE_CHEMIN);
+			purger_repertoire(_DIR_CACHE,array('subdir'=>true));
+			purger_repertoire(_DIR_AIDE);
+			purger_repertoire(_DIR_VAR.'cache-css');
+			purger_repertoire(_DIR_VAR.'cache-js');
+			break;
+
+		case 'squelettes':
+			purger_repertoire(_DIR_SKELS);
+			break;
 
-	case 'cache': 
-		supprime_invalideurs();
-		@spip_unlink(_CACHE_RUBRIQUES);
-		@spip_unlink(_CACHE_PIPELINES);
-		@spip_unlink(_CACHE_PLUGINS_PATH);
-		@spip_unlink(_CACHE_PLUGINS_OPT);
-		@spip_unlink(_CACHE_PLUGINS_FCT);
-		@spip_unlink(_CACHE_PLUGINS_VERIF);
-		@spip_unlink(_CACHE_CHEMIN);
-		purger_repertoire(_DIR_CACHE,array('subdir'=>true));
-		purger_repertoire(_DIR_AIDE);
-		purger_repertoire(_DIR_VAR.'cache-css');
-		purger_repertoire(_DIR_VAR.'cache-js');
-		break;
-
-	case 'squelettes':
-		purger_repertoire(_DIR_SKELS);
-		break;
-
-	case 'vignettes':
-		purger_repertoire(_DIR_VAR,array('subdir'=>true));
-		supprime_invalideurs();
-		purger_repertoire(_DIR_CACHE);
-		break;
+		case 'vignettes':
+			purger_repertoire(_DIR_VAR,array('subdir'=>true));
+			supprime_invalideurs();
+			purger_repertoire(_DIR_CACHE);
+			break;
 	}
 
 }
diff --git a/ecrire/exec/admin_vider.php b/ecrire/exec/admin_vider.php
deleted file mode 100644
index 29331cfb99..0000000000
--- a/ecrire/exec/admin_vider.php
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-
-/***************************************************************************\
- *  SPIP, Systeme de publication pour l'internet                           *
- *                                                                         *
- *  Copyright (c) 2001-2010                                                *
- *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
- *                                                                         *
- *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
- *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
-\***************************************************************************/
-
-if (!defined("_ECRIRE_INC_VERSION")) return;
-
-include_spip('inc/presentation');
-include_spip('inc/actions');
-
-
-// http://doc.spip.org/@calculer_taille_dossier
-function calculer_taille_dossier ($dir) {
-	$handle = @opendir($dir);
-	if (!$handle) return;
-	$taille = 0;
-	while (($fichier = @readdir($handle)) !== false) {
-		// Eviter ".", "..", ".htaccess", etc.
-		if ($fichier[0] == '.') continue;
-		if (is_file($d = "$dir/$fichier")) {
-			$taille += filesize($d);
-		}
-		else if (is_dir($d))
-			$taille += calculer_taille_dossier($d);
-	}
-	closedir($handle);
-	return $taille;
-}
-
-
-
-// http://doc.spip.org/@afficher_taille_cache_vignettes
-function afficher_taille_cache_vignettes() {
-	$taille = calculer_taille_dossier(_DIR_VAR);
-	return _T('ecrire:taille_cache_image',
-		array(
-			'dir' => joli_repertoire(_DIR_VAR),
-			'taille' => "<b>".taille_en_octets($taille)."</b>"
-			)
-		);
-}
-
-// http://doc.spip.org/@exec_admin_vider_dist
-function exec_admin_vider_dist()
-{
-	global $quota_cache, $spip_lang;
-
-	// autorisation a affiner 
-	if (!autoriser('configurer', 'admin_vider')){
-		include_spip('inc/minipres');
-		echo minipres();
-	} else {
-		$commencer_page = charger_fonction('commencer_page', 'inc');
-		echo $commencer_page(_T('onglet_vider_cache'), "configuration", "cache");
-
-		echo gros_titre(_T('titre_admin_vider'),'', false);
-// barre_onglets("administration", "vider");
-
-		echo debut_gauche("",true);
-
-		echo debut_boite_info(true);
-
-		echo _T('info_gauche_admin_vider');
-
-		echo fin_boite_info(true);
-
-		echo debut_droite("",true);
-
-		echo debut_cadre_trait_couleur("cache-24.png", true, "", _T('texte_vider_cache'));
-
-		echo "\n<p style='text-align: justify;'>"._T('texte_suppression_fichiers')."</p>",
-		  "<p style='text-align: justify;'>"._T('texte_recalcul_page')."</p>";
-
-		echo "\n<div>&nbsp;</div>";
-
-//
-// Quota et taille du cache
-//
-		echo debut_cadre_relief("", true, "", _T('taille_repertoire_cache'));
-
-		include_spip('inc/invalideur');
-		if (($n = taille_du_cache())>250*1024)
-		  $info = _T('taille_cache_octets', array('octets' => taille_en_octets($n)));
-		else
-		  $info = _T('taille_cache_vide');
-
-		echo "<p style='text-align: justify;'><b>$info</b></p>\n";
-
-		echo "\n<p style='text-align: justify;'>";
-		if ($quota_cache) {
-		  echo _T('taille_cache_maxi',
-			  array('octets' => taille_en_octets($quota_cache*1024*1024)));
-		} else {
-		  echo _T('taille_cache_infinie');
-		}
-
-		echo ' (', _T('cache_modifiable_webmestre'),')</p>', 
-			redirige_action_post('purger', 'cache', "admin_vider", '',
-					 "\n<div style='text-align: right'><input class='fondo' type='submit' value=\"" .
-			 str_replace('"', '&quot;', _T('bouton_vider_cache')) .
-					 "\" /></div>");
-		echo fin_cadre_relief(true);
-
-		echo debut_cadre_relief("image-24.gif", true, "", _T('info_images_auto'));
-
-		echo afficher_taille_cache_vignettes();
-
-		echo redirige_action_post('purger', 'vignettes', "admin_vider",'',
-					    "\n<div style='text-align: right'><input class='fondo' type='submit' value=\"" .
-					    str_replace('"', '&quot;', _T('bouton_vider_cache')) .
-					    "\" /></div>");
-
-		echo fin_cadre_relief(true);
-
-		echo fin_cadre_trait_couleur(true);
-		echo "<br />";
-		echo fin_gauche(), fin_page();
-	}
-}
-?>
diff --git a/ecrire/public/cacher.php b/ecrire/public/cacher.php
index 7b3b2e796d..43db5c81c0 100644
--- a/ecrire/public/cacher.php
+++ b/ecrire/public/cacher.php
@@ -95,6 +95,7 @@ function gunzip_page(&$page) {
 function cache_valide(&$page, $date) {
 
 	if (isset($GLOBALS['var_nocache']) AND $GLOBALS['var_nocache']) return -1;
+	if (isset($GLOBALS['meta']['cache_inhib']) AND $_SERVER['REQUEST_TIME']<$GLOBALS['meta']['cache_inhib']) return -1;
 	if (defined('_NO_CACHE')) return (_NO_CACHE==0 AND !isset($page['texte']))?1:_NO_CACHE;
 	if (!$page OR !isset($page['texte']) OR !isset($page['entetes']['X-Spip-Cache'])) return 1;
 
diff --git a/prive/squelettes/contenu/page-admin_vider.html b/prive/squelettes/contenu/page-admin_vider.html
new file mode 100644
index 0000000000..0abe39344c
--- /dev/null
+++ b/prive/squelettes/contenu/page-admin_vider.html
@@ -0,0 +1,52 @@
+[(#AUTORISER{configurer,admin_vider}|interdire_acces)]
+
+<h1><:texte_vider_cache:></h1>
+
+<p><:texte_suppression_fichiers:></p>
+<p><:texte_recalcul_page:></p>
+
+
+#BOITE_OUVRIR{#CHEMIN_IMAGE{cache-24.png}|balise_img{'',cadre-icone}|concat{#VAL{taille_repertoire_cache}|_T}|wrap{'<h3>'},'simple','titrem'}
+#SET{taille,#REM|taille_du_cache}
+
+<p><b>
+	[(#GET{taille}|intval|>{250000}|non) <:taille_cache_vide:>]
+	[(#GET{taille}|intval|>{250000}|oui)
+		#SET{taille,#GET{taille}|taille_en_octets}
+		<:taille_cache_octets{octets=#GET{taille}}:>
+	]
+</b></p>
+
+#SET{quota,#EVAL{$GLOBALS}|table_valeur{quota_cache}}
+<p>
+	[(#GET{quota}|non) <:taille_cache_infinie:>]
+	[(#GET{quota}|oui)
+		#SET{quota,#GET{quota}|mult{1024}|mult{1024}|taille_en_octets}
+		<:taille_cache_maxi{octets=#GET{quota}}:>
+	]
+	(<:cache_modifiable_webmestre:>)
+</p>
+
+#SET{cache_inhib,#CONFIG{cache_inhib}|sinon{0}|>{#REM|time}|oui}
+
+[(#GET{cache_inhib}|oui)
+<div><strong>Le cache est temporairement desactivé.</strong> [(#BOUTON_ACTION{Reactiver le cache,#URL_ACTION_AUTEUR{purger,reactive_cache,#SELF},ajax link})]
+</div>
+]
+[(#GET{cache_inhib}|non)
+<div>[(#BOUTON_ACTION{Desactiver temporairement le cache,#URL_ACTION_AUTEUR{purger,inhibe_cache,#SELF},ajax link})]
+</div>
+]
+
+#BOITE_PIED
+	[(#BOUTON_ACTION{<:bouton_vider_cache:>,#URL_ACTION_AUTEUR{purger,cache,#SELF},ajax})]
+#BOITE_FERMER
+
+
+#BOITE_OUVRIR{#CHEMIN_IMAGE{image-24.png}|balise_img{'',cadre-icone}|concat{#VAL{info_images_auto}|_T}|wrap{'<h3>'},'simple','titrem'}
+
+[<p>(#REM|afficher_taille_cache_vignettes{})</p>]
+
+#BOITE_PIED
+	[(#BOUTON_ACTION{<:bouton_vider_cache:>,#URL_ACTION_AUTEUR{purger,vignettes,#SELF},ajax})]
+#BOITE_FERMER
diff --git a/prive/squelettes/contenu/page-admin_vider_fonctions.php b/prive/squelettes/contenu/page-admin_vider_fonctions.php
new file mode 100644
index 0000000000..cd06f3ccd5
--- /dev/null
+++ b/prive/squelettes/contenu/page-admin_vider_fonctions.php
@@ -0,0 +1,49 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2009                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+include_spip('inc/invalideur');
+
+// http://doc.spip.org/@calculer_taille_dossier
+function calculer_taille_dossier ($dir) {
+	$handle = @opendir($dir);
+	if (!$handle) return;
+	$taille = 0;
+	while (($fichier = @readdir($handle)) !== false) {
+		// Eviter ".", "..", ".htaccess", etc.
+		if ($fichier[0] == '.') continue;
+		if (is_file($d = "$dir/$fichier")) {
+			$taille += filesize($d);
+		}
+		else if (is_dir($d))
+			$taille += calculer_taille_dossier($d);
+	}
+	closedir($handle);
+	return $taille;
+}
+
+
+
+// http://doc.spip.org/@afficher_taille_cache_vignettes
+function afficher_taille_cache_vignettes() {
+	$taille = calculer_taille_dossier(_DIR_VAR);
+	return _T('ecrire:taille_cache_image',
+		array(
+			'dir' => joli_repertoire(_DIR_VAR),
+			'taille' => "<b>".taille_en_octets($taille)."</b>"
+			)
+		);
+}
+
+
+?>
\ No newline at end of file
diff --git a/prive/style_prive_plugins.html b/prive/style_prive_plugins.html
index 74c7520340..7e2aca4772 100644
--- a/prive/style_prive_plugins.html
+++ b/prive/style_prive_plugins.html
@@ -61,7 +61,7 @@ ul.menu li a:hover {background-color:[#(#GET{claire}|couleur_eclaircir|couleur_e
 ul.menu li .on {background-color:[#(#GET{claire}|couleur_eclaircir|couleur_eclaircir)];}
 
 /* les boutons action */
-form.bouton_action_post.link, form.bouton_action_post.lien div {display:inline;}
+form.bouton_action_post.link, form.bouton_action_post.link div {display:inline;}
 form.bouton_action_post.link button.submit, .formulaire_spip .boutons input.link,.formulaire_spip .boutons button.link {margin:0;font-weight:normal;}
 
 .formulaire_spip .boutons button {cursor:pointer;}
-- 
GitLab