From c7ecb7bfc6f4e611b930610a7501ad615dc8a287 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Sat, 11 Aug 2007 08:29:21 +0000
Subject: [PATCH] =?UTF-8?q?Permettre=20la=20surcharge=20des=20fonctions=20?=
 =?UTF-8?q?appel=C3=A9es=20par=20'''cron'''.=20Cr=C3=A9ation=20d'un=20r?=
 =?UTF-8?q?=C3=A9pertoire=20'''cron'''=20accueillant=20les=20fonctions=20'?=
 =?UTF-8?q?''cron=5F*'''=20dont=20le=20nom=20se=20terminent=20maintenant?=
 =?UTF-8?q?=20par=20'''=5Fdist'''=20et=20sont=20d=C3=A9finies=20dans=20le?=
 =?UTF-8?q?=20fichier=20homonyme.=20La=20fonction=20'''cron'''=20accepte?=
 =?UTF-8?q?=20un=20argument=20suppl=C3=A9mentaire=20d=C3=A9crivant=20le=20?=
 =?UTF-8?q?tableau=20des=20t=C3=A2ches,=20transmis=20=C3=A0=20'''inc=5Fcro?=
 =?UTF-8?q?n''',=20ce=20qui=20permet=20de=20reconfigurer=20ponctuellement?=
 =?UTF-8?q?=20l'ordonnancement=20des=20t=C3=A2ches=20en=20profitant=20des?=
 =?UTF-8?q?=20verrouillages.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .gitattributes                       |  6 +++---
 ecrire/action/editer_site.php        | 26 ++++++++++++++++----------
 ecrire/{inc => cron}/mail.php        | 10 +---------
 ecrire/{inc => cron}/maintenance.php |  2 +-
 ecrire/{base => cron}/optimiser.php  | 15 ++++++++++-----
 ecrire/{inc => cron}/popularites.php | 16 ++--------------
 ecrire/{inc => cron}/syndic.php      | 11 +++++------
 ecrire/{inc => cron}/visites.php     |  2 +-
 ecrire/inc/charger_plugin.php        |  2 +-
 ecrire/inc/commencer_page.php        |  2 +-
 ecrire/inc/cron.php                  | 26 +++++++++++---------------
 ecrire/inc/invalideur.php            | 10 ----------
 ecrire/inc/rubriques.php             |  6 ------
 ecrire/inc/utils.php                 | 10 +++++++---
 ecrire/inc/vieilles_defs.php         |  8 ++++++++
 15 files changed, 67 insertions(+), 85 deletions(-)
 rename ecrire/{inc => cron}/mail.php (89%)
 rename ecrire/{inc => cron}/maintenance.php (98%)
 rename ecrire/{base => cron}/optimiser.php (98%)
 rename ecrire/{inc => cron}/popularites.php (92%)
 rename ecrire/{inc => cron}/syndic.php (99%)
 rename ecrire/{inc => cron}/visites.php (99%)

diff --git a/.gitattributes b/.gitattributes
index a503f2978b..7e091f3b68 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -444,6 +444,9 @@ ecrire/configuration/syndications.php -text
 ecrire/configuration/transcodeur.php -text
 ecrire/configuration/versionneur.php -text
 ecrire/configuration/visiteurs.php -text
+ecrire/cron/maintenance.php -text
+ecrire/cron/popularites.php -text
+ecrire/cron/syndic.php -text
 ecrire/exec/accueil.php -text
 ecrire/exec/admin_effacer.php -text
 ecrire/exec/admin_plugin.php -text
@@ -583,7 +586,6 @@ ecrire/inc/instituer_auteur.php -text
 ecrire/inc/joindre.php -text
 ecrire/inc/lang_liste.php -text
 ecrire/inc/legender.php -text
-ecrire/inc/maintenance.php -text
 ecrire/inc/message_select.php -text
 ecrire/inc/minipres.php -text
 ecrire/inc/modifier.php -text
@@ -591,7 +593,6 @@ ecrire/inc/notifications.php -text
 ecrire/inc/petitionner.php -text
 ecrire/inc/plonger.php -text
 ecrire/inc/plugin.php -text
-ecrire/inc/popularites.php -text
 ecrire/inc/puce_statut.php -text
 ecrire/inc/rechercher.php -text
 ecrire/inc/referencer_traduction.php -text
@@ -601,7 +602,6 @@ ecrire/inc/securiser_action.php -text
 ecrire/inc/selectionner.php -text
 ecrire/inc/selectionner_auteur.php -text
 ecrire/inc/suivi_versions.php -text
-ecrire/inc/syndic.php -text
 ecrire/inc/tourner.php -text
 ecrire/inc/traduire.php -text
 ecrire/inc/utils.php -text
diff --git a/ecrire/action/editer_site.php b/ecrire/action/editer_site.php
index 053abc3ecf..834814ec0b 100644
--- a/ecrire/action/editer_site.php
+++ b/ecrire/action/editer_site.php
@@ -18,9 +18,11 @@ function action_editer_site_dist() {
 
 	$securiser_action = charger_fonction('securiser_action', 'inc');
 	$arg = $securiser_action();
+	$resyndiquer = false;
+
 	if (preg_match(',options/(\d+),',$arg, $r)) {
 		$id_syndic = $r[1];
-		editer_site_options($id_syndic);
+		$resyndiquer = editer_site_options($id_syndic);
 	// Envoi depuis le formulaire d'edition d'un site existant
 	} else if ($id_syndic = intval($arg)) {
 
@@ -40,9 +42,9 @@ function action_editer_site_dist() {
 			set_request('reload', 'oui');
 
 		revisions_sites($id_syndic);
-	}
+	
 	// Envoi depuis le formulaire de creation d'un site
-	else if ($arg == 'oui') {
+	} else if ($arg == 'oui') {
 		set_request('reload', 'oui');
 		$id_syndic = insert_syndic(_request('id_parent'));
 		revisions_sites($id_syndic);
@@ -78,8 +80,6 @@ function action_editer_site_dist() {
 
 		$s = spip_query("SELECT id_syndic, descriptif FROM spip_syndic WHERE id_syndic=$id_syndic AND syndication IN ('oui', 'sus', 'off') LIMIT 1");
 		if ($t = spip_abstract_fetch($s)) {
-			include_spip('inc/syndic');
-			syndic_a_jour($id_syndic);
 
 			// Si on n'a pas de descriptif ou pas de logo, on va le chercher
 			$chercher_logo = charger_fonction('chercher_logo', 'inc');
@@ -94,9 +94,14 @@ function action_editer_site_dist() {
 					@rename($auto['logo'],
 					_DIR_IMG . 'siteon'.$id_syndic.'.'.$auto['format_logo']);
 			}
+			$resyndiquer = true;
 		}
 	}
 
+	if ($resyndiquer) {
+		include_spip('cron/syndic');
+		syndic_a_jour($id_syndic);		
+	}
 	// Rediriger le navigateur
 	$redirect = parametre_url(urldecode(_request('redirect')),
 		'id_syndic', $id_syndic, '&');
@@ -353,6 +358,8 @@ function analyser_site($url) {
 	return $result;
 }
 
+// Enregistrre les options et retourne True s'il faut syndiquer.
+
 // http://doc.spip.org/@editer_site_options
 function editer_site_options($id_syndic)
 {
@@ -368,11 +375,10 @@ function editer_site_options($id_syndic)
 	if ($oubli == 'oui' OR $oubli == 'non')
 		spip_query("UPDATE spip_syndic SET oubli='$oubli' WHERE id_syndic=$id_syndic");
 
-	if ($resume == 'oui' OR $resume == 'non') {
-		spip_query("UPDATE spip_syndic SET resume='$resume'	WHERE id_syndic=$id_syndic");
-		include_spip('inc/syndic');
-		syndic_a_jour($id_syndic);
-	}
+	if (!($resume == 'oui' OR $resume == 'non')) return false;
+
+	spip_query("UPDATE spip_syndic SET resume='$resume'	WHERE id_syndic=$id_syndic");
+	return true;
 }
 
 ?>
diff --git a/ecrire/inc/mail.php b/ecrire/cron/mail.php
similarity index 89%
rename from ecrire/inc/mail.php
rename to ecrire/cron/mail.php
index 3ee55d81d3..b023df76f5 100644
--- a/ecrire/inc/mail.php
+++ b/ecrire/cron/mail.php
@@ -12,19 +12,11 @@
 
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
-// http://doc.spip.org/@envoyer_mail
-function envoyer_mail($email, $sujet, $texte, $from = "", $headers = "") {
-	$envoyer_mail = charger_fonction('envoyer_mail','inc');
-	return $envoyer_mail($email,$sujet,$texte,$from,$headers);
-}
-
-
-
 //
 // Mail des nouveautes
 //
 // http://doc.spip.org/@cron_mail
-function cron_mail($t) {
+function cron_mail_dist($t) {
 	$adresse_neuf = $GLOBALS['meta']['adresse_neuf'];
 	$jours_neuf = $GLOBALS['meta']['jours_neuf'];
 	// $t = 0 si le fichier de lock a ete detruit
diff --git a/ecrire/inc/maintenance.php b/ecrire/cron/maintenance.php
similarity index 98%
rename from ecrire/inc/maintenance.php
rename to ecrire/cron/maintenance.php
index b59f5ed24d..f03f65599a 100644
--- a/ecrire/inc/maintenance.php
+++ b/ecrire/cron/maintenance.php
@@ -14,7 +14,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 
 // Diverses taches de maintenance
 // http://doc.spip.org/@cron_maintenance
-function cron_maintenance ($t) {
+function cron_maintenance_dist ($t) {
 
 	// (re)mettre .htaccess avec deny from all
 	// dans les deux repertoires dits inaccessibles par http
diff --git a/ecrire/base/optimiser.php b/ecrire/cron/optimiser.php
similarity index 98%
rename from ecrire/base/optimiser.php
rename to ecrire/cron/optimiser.php
index a474c8d1dd..9f27d36a16 100644
--- a/ecrire/base/optimiser.php
+++ b/ecrire/cron/optimiser.php
@@ -10,9 +10,18 @@
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
-
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
+
+// Cas particulier : optimiser est dans base/optimiser, et pas dans inc/
+// il faut donc definir la fonction _cron ici.
+// http://doc.spip.org/@cron_optimiser
+function cron_optimiser_dist($t) {
+
+	optimiser_base();
+	return 1;
+}
+
 // heure de reference pour le garbage collector = 24h auparavant
 // http://doc.spip.org/@optimiser_base
 function optimiser_base($attente = 86400) {
@@ -28,10 +37,6 @@ function optimiser_base($attente = 86400) {
 }
 
 
-	//
-	// MySQL
-	//
-
 // http://doc.spip.org/@optimiser_base_une_table
 function optimiser_base_une_table() {
 
diff --git a/ecrire/inc/popularites.php b/ecrire/cron/popularites.php
similarity index 92%
rename from ecrire/inc/popularites.php
rename to ecrire/cron/popularites.php
index 6092aadd7e..4d576aeb43 100644
--- a/ecrire/inc/popularites.php
+++ b/ecrire/cron/popularites.php
@@ -10,23 +10,21 @@
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
-
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
-
 //
 // Popularite, modele logarithmique
 //
 
 // http://doc.spip.org/@calculer_popularites
-function calculer_popularites() {
+function cron_popularites_dist($t) {
 
 	// Si c'est le premier appel, ne pas calculer
 	$t = $GLOBALS['meta']['date_popularites'];
 	ecrire_meta('date_popularites', time());
 	ecrire_metas();
 	if (!$t)
-		return;
+		return 1;
 
 	$duree = time() - $t;
 	// duree de demi-vie d'une visite dans le calcul de la popularite (en jours)
@@ -69,14 +67,4 @@ function calculer_popularites() {
 
 }
 
-//
-// Applique la regle de decroissance des popularites
-//
-// http://doc.spip.org/@cron_popularites
-function cron_popularites($t) {
-	calculer_popularites();
-	return 1;
-}
-
-
 ?>
diff --git a/ecrire/inc/syndic.php b/ecrire/cron/syndic.php
similarity index 99%
rename from ecrire/inc/syndic.php
rename to ecrire/cron/syndic.php
index 2c2d1ad79c..e1e45b38e2 100644
--- a/ecrire/inc/syndic.php
+++ b/ecrire/cron/syndic.php
@@ -12,6 +12,11 @@
 
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
+// http://doc.spip.org/@cron_syndic
+function cron_syndic_dist($t) {
+	return executer_une_syndication();
+}
+
 //
 // Effectuer la syndication d'un unique site, retourne 0 si aucun a faire.
 //
@@ -574,10 +579,4 @@ function my_strtotime($la_date) {
 	return false;
 }
 
-
-// http://doc.spip.org/@cron_syndic
-function cron_syndic($t) {
-	return executer_une_syndication();
-}
-
 ?>
diff --git a/ecrire/inc/visites.php b/ecrire/cron/visites.php
similarity index 99%
rename from ecrire/inc/visites.php
rename to ecrire/cron/visites.php
index e53fc5cc95..25f70f6e0f 100644
--- a/ecrire/inc/visites.php
+++ b/ecrire/cron/visites.php
@@ -179,7 +179,7 @@ function calculer_visites($t) {
 // Calcule les stats en plusieurs etapes
 //
 // http://doc.spip.org/@cron_visites
-function cron_visites($t) {
+function cron_visites_dist($t) {
 	$encore = calculer_visites($t);
 
 	// Si ce n'est pas fini on redonne la meme date au fichier .lock
diff --git a/ecrire/inc/charger_plugin.php b/ecrire/inc/charger_plugin.php
index d18638faa9..850ae46106 100644
--- a/ecrire/inc/charger_plugin.php
+++ b/ecrire/inc/charger_plugin.php
@@ -437,7 +437,7 @@ function essaie_ajouter_liste_plugins($url) {
 // http://doc.spip.org/@chercher_enclosures_zip
 function chercher_enclosures_zip($rss, $desc = '') {
 	$liste = array();
-	include_spip('inc/syndic');
+	include_spip('cron/syndic');
 	foreach(analyser_backend($rss) as $item)
 		if ($item['enclosures']
 		AND $zips = extraire_balises($item['enclosures'], 'a'))
diff --git a/ecrire/inc/commencer_page.php b/ecrire/inc/commencer_page.php
index 6aec5cd2fc..72aeafe828 100644
--- a/ecrire/inc/commencer_page.php
+++ b/ecrire/inc/commencer_page.php
@@ -206,7 +206,7 @@ function alertes_auteur() {
 
 	if (isset($GLOBALS['meta']['message_crash_tables'])
 	AND autoriser('detruire')) {
-		include_spip('inc/maintenance');
+		include_spip('cron/maintenance');
 		if ($msg = message_crash_tables())
 			$alertes[] = $msg;
 	}
diff --git a/ecrire/inc/cron.php b/ecrire/inc/cron.php
index 25b6c9d8ca..f0cfa24c32 100644
--- a/ecrire/inc/cron.php
+++ b/ecrire/inc/cron.php
@@ -21,7 +21,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 // - les scripts usuels standard sont limites a 30 secondes
 
 // Solution:
-// Toute connexion a SPIP s'achevent  par un appel a la fonction cron()
+// Toute connexion a SPIP s'acheve par un appel a la fonction cron()
 // qui appelle la fonction surchargeable inc_cron().
 // Sa definition standard ci-dessous prend dans une liste de taches
 // la plus prioritaire, leurs dates etant donnees par leur fichier-verrou.
@@ -50,8 +50,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 // Elle doit etre definie dans le fichier homonyme du repertoire "inc/"
 // qui est automatiquement lu.
 
-// Une seule tache est executee pour eviter la guillotine des 30 secondes.
-
 // http://doc.spip.org/@inc_cron_dist
 function inc_cron_dist($taches = array()) {
 
@@ -83,10 +81,9 @@ function inc_cron_dist($taches = array()) {
 	if ($tache) {
 
 		spip_timer('tache');
-		include_spip("inc/$tache");
-		$f = 'cron_' . $tache;
-		$retour = $f($last);
 		touch($lock);
+		$cron = charger_fonction($tache, 'cron');
+		$retour = $cron($last);
 		// si la tache a eu un effet : log
 		if ($retour) {
 			spip_log("cron: $tache (" . spip_timer('tache') . ") $retour");
@@ -139,16 +136,15 @@ function taches_generales() {
 	return pipeline('taches_generales_cron',$taches_generales);
 }
 
+// Pas de fichier a part pour une fonction aussi petite:
+// - elle peut retirer les fichiers perimes
+// - elle fait appliquer le quota
+// En cas de quota sur le CACHE/, nettoyer les fichiers les plus vieux
+// http://doc.spip.org/@cron_invalideur
+function cron_invalideur_dist($t) {
 
-// Cas particulier : optimiser est dans base/optimiser, et pas dans inc/
-// il faut donc definir la fonction _cron ici.
-// http://doc.spip.org/@cron_optimiser
-function cron_optimiser($t) {
-
-	include_spip('base/optimiser');
-	optimiser_base();
-	// relacher le verrour
+	include_spip('inc/invalideur');
+	appliquer_quota_cache();
 	return 1;
 }
-
 ?>
diff --git a/ecrire/inc/invalideur.php b/ecrire/inc/invalideur.php
index 79bae2a96e..b52fe81a66 100644
--- a/ecrire/inc/invalideur.php
+++ b/ecrire/inc/invalideur.php
@@ -133,16 +133,6 @@ function appliquer_quota_cache() {
 }
 
 
-// Cette fonction fait le menage dans le cache :
-// - elle peut retirer les fichiers perimes
-// - elle fait appliquer le quota
-// http://doc.spip.org/@cron_invalideur
-function cron_invalideur($t) {
-	// En cas de quota sur le CACHE/, nettoyer les fichiers les plus vieux
-	appliquer_quota_cache();
-	return 1;
-}
-
 //
 // Destruction des fichiers caches invalides
 //
diff --git a/ecrire/inc/rubriques.php b/ecrire/inc/rubriques.php
index 575f6b201c..7b3ed2ea20 100644
--- a/ecrire/inc/rubriques.php
+++ b/ecrire/inc/rubriques.php
@@ -398,12 +398,6 @@ function calculer_prochain_postdate($check= false) {
 	ecrire_metas(); // attention, sert aussi aux appelants
 }
 
-// http://doc.spip.org/@cron_rubriques
-function cron_rubriques($t) {
-	calculer_rubriques();
-	return 1;
-}
-
 
 // creer_rubrique_nommee('truc/machin/chose') va creer
 // une rubrique truc, une sous-rubrique machin, et une sous-sous-rubrique
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 21155be221..2b927dbb0c 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -594,12 +594,14 @@ function action_cron() {
 // cron() : execution des taches de fond
 // quand il est appele par public.php il n'est pas gourmand;
 // quand il est appele par ?action=cron, il est gourmand
+// On peut lui passer en 2e arg le tableau de taches attendu par inc_cron()
+// Retourne Vrai si un tache a pu etre effectuee
 
 // http://doc.spip.org/@cron
-function cron ($gourmand=false) {
+function cron ($gourmand=false, $taches= array()) {
 
 	// Si base inaccessible, laisser tomber.
-	if (!spip_connect()) return; 
+	if (!spip_connect()) return false; 
 
 	// Si on est gourmand, ou si le fichier gourmand n'existe pas
 	// ou est trop vieux (> 60 sec), on va voir si un cron est necessaire.
@@ -616,13 +618,15 @@ function cron ($gourmand=false) {
 		if (spip_touch(_DIR_TMP.'cron.lock', 2)) {
 			$cron = charger_fonction('cron', 'inc', true);
 			if ($cron) {
-				$cron();
+				$cron($taches);
 				// redater a la fin du cron
 				// car il peut prendre plus de 2 secondes.
 				spip_touch(_DIR_TMP.'cron.lock', 0);
+				return true;
 			}
 		}# else spip_log("busy");
 	}
+	return false;
 }
 
 
diff --git a/ecrire/inc/vieilles_defs.php b/ecrire/inc/vieilles_defs.php
index 82bb25fa28..31a927d071 100644
--- a/ecrire/inc/vieilles_defs.php
+++ b/ecrire/inc/vieilles_defs.php
@@ -397,4 +397,12 @@ function spip_fetch_array($r, $t=MYSQL_ASSOC) {
 	if ($r) return mysql_fetch_array($r, $t);
 }
 
+
+// http://doc.spip.org/@envoyer_mail
+function envoyer_mail($email, $sujet, $texte, $from = "", $headers = "") {
+spip_log('creer_objet_multi() '.$GLOBALS['REQUEST_URI'].' - '.$_SERVER['SCRIPT_NAME'], 'vieilles_defs');
+	$envoyer_mail = charger_fonction('envoyer_mail','inc');
+	return $envoyer_mail($email,$sujet,$texte,$from,$headers);
+}
+
 ?>
-- 
GitLab