diff --git a/ecrire/base/admin_repair.php b/ecrire/base/admin_repair.php index 10497da29e64de58faabb27f8d125599931d238f..0cf4b1c5fbc55b6fc857003280fb2faef287dfe0 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 24a60d01360116520bb301f59560a6b16607b151..8a36d3c6a5f048538a8318a59f53a4058769bd4e 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 e3d52fee4c74324bd38b7be8a33626e0ef140a4d..d3c6ce3fb5a73be69eeba8a4ce8b5b6e23e71b7f 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