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