From e7cd0688cb7eaff3be7dfe68fbfda88d79fe5af4 Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Mon, 20 Aug 2007 06:41:19 +0000 Subject: [PATCH] =?UTF-8?q?#209:=20la=20fonction=20'''calculer=5Frubriques?= =?UTF-8?q?'''=20n'est=20plus=20appel=C3=A9e=20que=20dans=20le=20cas=20d'u?= =?UTF-8?q?ne=20importation,=20et=20celle-ci=20est=20garantie=20de=20s'ex?= =?UTF-8?q?=C3=A9cuter=20en=20solo=20(identifiant=20de=20session=20introdu?= =?UTF-8?q?it=20par=20[9903]=20et=20refus=20des=20connexions=20de=20l'espa?= =?UTF-8?q?ce=20priv=C3=A9=20des=20non=20admins=20pendant=20une=20restaura?= =?UTF-8?q?tion=20=C3=A0=20pr=C3=A9sent).=20Grace=20=C3=A0=20=C3=A7a,=20le?= =?UTF-8?q?=20verrou=20MySQL=20de=20'''calculer=5Frubriques'''=20disparait?= =?UTF-8?q?.=20En=20revanche=20cette=20fonction=20est=20d=C3=A9sormais=20a?= =?UTF-8?q?ppel=C3=A9e=20=C3=A0=20la=20fin=20de=20'''admin=5Frepair'''=20p?= =?UTF-8?q?our=20r=C3=A9tablir=20la=20coh=C3=A9rence=20en=20cas=20de=20cra?= =?UTF-8?q?sh=20ou=20autre=20probl=C3=A8me.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pour les plugins qui appellent cette fonction, il faut soit l'encapsuler par '''spip_get_lock''' et '''spip_release_lock''' (mais ça ne marchera que dans la version MySQL l'absence de transactionnel reste un problème), soit appeler les fonctions spécfiques à la situation: '''calculer_rubriques_if''', '''publier_branche_rubrique''' ou '''depublier_branche_rubrique_if'''. Lire leur description dans le fichier source:spip/ecrire/inc/rubriques.php. --- ecrire/base/admin_repair.php | 3 +++ ecrire/inc/rubriques.php | 24 ++++++++++++------------ ecrire/index.php | 10 +++++----- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/ecrire/base/admin_repair.php b/ecrire/base/admin_repair.php index 10497da29e..0cf4b1c5fb 100644 --- a/ecrire/base/admin_repair.php +++ b/ecrire/base/admin_repair.php @@ -45,6 +45,9 @@ function base_admin_repair_dist() { } } + include_spip('inc/rubriques'); + calculer_rubriques(); + if (!$res) { $res = "<br /><br /><span style='color: red; font-weight: bold;'><tt>"._T('avis_erreur_mysql').' '.sql_errno().': '.sql_error() ."</tt></span><br /><br /><br />\n"; } diff --git a/ecrire/inc/rubriques.php b/ecrire/inc/rubriques.php index 24a60d0136..8a36d3c6a5 100644 --- a/ecrire/inc/rubriques.php +++ b/ecrire/inc/rubriques.php @@ -15,17 +15,19 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/meta'); // Fonction a appeler lorsque le statut d'un objet change dans une rubrique +// ou que la rubrique est déplacee. +// Le 2e arg est un tableau ayant un index "statut" (indiquant le nouveau) +// et eventuellement un index "id_rubrique" (indiquant le deplacement) -// Si l'objet passe a "publie" -// consequence sur ses parentes et les langues -// Idem s'il est depublie' -// s'il est deplace' alors qu'il etait publieé, double consequence. -// (a refaire a terme par une Cascade SQL) +// Si le statut passe a "publie", la rubrique et ses parents y passent aussi +// et les langues utilisées sont recalculées. +// Conséquences symétriques s'il est depublie'. +// S'il est deplace' alors qu'il etait publieé, double consequence. +// Tout cela devrait passer en SQL, sous forme de Cascade SQL. // http://doc.spip.org/@calculer_rubriques_if function calculer_rubriques_if ($id_rubrique, $modifs, $statut_ancien='') { - $neuf = false; if ($statut_ancien == 'publie') { if (isset($modifs['statut']) OR isset($modifs['id_rubrique'])) @@ -102,12 +104,12 @@ function depublier_branche_rubrique_if($id_rubrique) } // -// Fonction appelee lorsqu'on (de)publie dans une rubrique. -// Restreindre ses appels le plus possible -// +// Fonction appelee apres importation: +// calculer les meta-donnes resultantes, +// remettre de la cohérence au cas où la base importee en manquait +// Cette fonction doit etre invoque sans processus concurrent potentiel. // http://doc.spip.org/@calculer_rubriques function calculer_rubriques() { - if (!spip_get_lock($t="calcul_rubriques")) return; calculer_rubriques_publiees(); @@ -121,8 +123,6 @@ function calculer_rubriques() { // on calcule la date du prochain article post-date calculer_prochain_postdate(); // fera le ecrire_metas(); - - spip_release_lock($t); } // Recalcule l'ensemble des donnees associees a l'arborescence des rubriques diff --git a/ecrire/index.php b/ecrire/index.php index e3d52fee4c..d3c6ce3fb5 100644 --- a/ecrire/index.php +++ b/ecrire/index.php @@ -129,11 +129,11 @@ AND ($GLOBALS['spip_version'] != (str_replace(',','.',$GLOBALS['meta']['version_ $exec = 'demande_mise_a_jour'; // Si interruption d'une longue restauration -// detourner le script demande pour qu'il reprenne le boulot -// mais virer les Ajax pour eviter plusieurs restaurations en parallele -elseif (isset($_COOKIE['spip_admin']) -AND isset($GLOBALS['meta']["import_all"])) { - if (isset($var_ajaxcharset)) exit; +// detourner le script demande pour qu'il reprenne le boulot, et +// refuser Ajax et non-admin pour eviter des restaurations paralleles +elseif (isset($GLOBALS['meta']["import_all"])) { + if (isset($var_ajaxcharset) OR !isset($_COOKIE['spip_admin'])) + die('Importation en cours, revenez plus tard.'); $exec = 'import_all'; } // si nom pas plausible, prendre le script par defaut -- GitLab