Skip to content
Extraits de code Groupes Projets
Valider 13ceb9ef rédigé par esj's avatar esj
Parcourir les fichiers

Tâche #685, suite de [7991]: la fusion est à présent blindée contre une...

Tâche #685, suite de [7991]: la fusion est à présent blindée contre une reprise pour cause de TimeOut ou autre. Et la 2e passe est provoquée par un 302, c'est plus clair.
parent c9a8ef17
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -116,9 +116,36 @@ function exec_import_all_dist()
// precaution inutile I think (esj)
list($my_date) = spip_fetch_array(spip_query("SELECT UNIX_TIMESTAMP(maj) AS d FROM spip_meta WHERE nom='debut_restauration'"), SPIP_NUM);
if ($my_date) echo import_tables($request, $dir);
if ($my_date) {
if ($request['insertion'] == 'passe2') {
include_spip('inc/import_insere');
$trans = translate_init($request);
} else $trans = array();
$res = import_tables($request, $dir, $trans);
}
echo $res, "</body></html>\n";
if ($request['insertion'] == 'on') {
$request['insertion'] = 'passe2';
import_all_debut($request);
redirige_par_entete('./');
} else if ($request['insertion'])
spip_query("DROP TABLE spip_translate");
if ($charset = $GLOBALS['meta']['charset_restauration']) {
ecrire_meta('charset', $charset);
ecrire_metas();
}
detruit_restaurateur();
import_all_fin();
include_spip('inc/rubriques');
calculer_rubriques();
if (!$res) ecrire_acces(); // Mise a jour du fichier htpasswd
}
// http://doc.spip.org/@import_all_debut
......
......@@ -164,8 +164,8 @@ function import_tables($request, $dir, $trans=array()) {
// ou initialisation de la table des translations,
// mais pas lors d'une reprise.
include_spip('inc/import_insere');
if ($request['insertion']=='on') {
include_spip('inc/import_insere');
$request['init'] = (!$my_pos) ? 'insere_1_init' : 'insere_2_init'; $request['boucle'] = 'import_insere';
} elseif ($request['insertion']=='passe2') {
$request['init'] = 'insere_2_init';
......@@ -200,7 +200,7 @@ function import_tables($request, $dir, $trans=array()) {
ecrire_meta('charset_restauration', $charset);
else ecrire_meta('charset_insertion', $charset);
ecrire_metas();
spip_log("Debut de l'importation ($charset $version_archive)" . ($i ? ' en mode insertion' : ''));
spip_log("Debut de l'importation (charset: $charset, archive: $version_archive)" . ($i ? " insertion $i" : ''));
} else {
spip_log("Reprise de l'importation interrompue en $my_pos");
$_fseek = ($gz) ? gzseek : fseek;
......@@ -222,39 +222,21 @@ function import_tables($request, $dir, $trans=array()) {
// au debut de la restauration
ecrire_meta("status_restauration", "$abs_pos");
if ($oldtable != $table) {
spip_log("Restauration de $table");
affiche_progression_javascript($abs_pos,$size,$table);
if ($oldtable) spip_log("Fin de restauration de $oldtable");
$time_javascript = time();
$oldtable = $table;
}
}
if (!$import_ok)
$res = _T('avis_archive_invalide');
else {
affiche_progression_javascript('100 %', $size);
if ($request['insertion'] == 'on') {
$request['insertion'] = 'passe2';
import_all_debut($request);
$trans = translate_init($request);
spip_log("import_all passe 2");
import_tables($request, $dir, $trans);
spip_query("DROP TABLE spip_translate");
}
if ($charset = $GLOBALS['meta']['charset_restauration']) {
ecrire_meta('charset', $charset);
ecrire_metas();
}
include_spip('inc/rubriques');
calculer_rubriques();
$res = '';
affiche_progression_javascript('100 %', $size);
}
detruit_restaurateur();
if (!$res) ecrire_acces(); // Mise a jour du fichier htpasswd
return $res . "</body></html>\n";;
return $res ;
}
// http://doc.spip.org/@import_affiche_javascript
......
......@@ -87,7 +87,7 @@ function import_insere($values, $table, $desc, $request, $trans) {
}
// et memoriser la correspondance dans la table auxiliaire
// si different et pas de recherche dessus plus tard
if (($n != $values[$type_id]) OR $table != 'id_groupe') {
if (($n != $values[$type_id]) OR $type_id == 'id_groupe') {
if (is_array($n))
list($id, $titre) = $n;
else {$id = $n; $titre = "";}
......@@ -97,8 +97,18 @@ function import_insere($values, $table, $desc, $request, $trans) {
}
}
// Renumerotation des entites collectees
// Le tableau de correspondance est passe en reference pour que le nouveau
// numero d'une entite soit calcule une seule fois, a sa premiere occurrence.
// Si une allocation est finalement necessaire, la renumerotation
// est repercutee sur la table SQL temporaire pour qu'en cas de reprise
// sur Time-Out il n'y ait pas reallocation.
// Autrement on evite cet acces SQL, quitte a recalculer le nouveau numero
// si une autre occurrence est rencontree a la reprise. Pas dramatique.
// http://doc.spip.org/@import_translate
function import_translate($values, $table, $desc, $request, $trans) {
function import_translate($values, $table, $desc, $request, &$trans) {
$vals = '';
foreach ($values as $k => $v) {
......@@ -107,17 +117,13 @@ function import_translate($values, $table, $desc, $request, $trans) {
if (isset($trans[$k]) AND isset($trans[$k][$v])) {
list($g, $titre, $ajout) = $trans[$k][$v];
if ($g < 0) {
// cas du parent a verifier en plus du titre
// pour l'instant il n'y a que spip_mots
if (!($g = import_identifie_mot_si_groupe(0-$g, $titre, $trans))) {
$g = spip_abstract_insert('spip_mots', '', '()');
$trans[$k][$v][2]=1;
}
// Memoriser le nouveau numero pour ne pas recalculer
// Mise a jour de spip_translate pas indispensable,
// on evite: si vraiment une interrupt a lieu et
// retombe dessus, elle recalculera, pas dramatique
$f = 'import_identifie_parent_' . $k;
$g = $f(0-$g, $titre, $trans, $v);
if ($g > 0)
// memoriser qu'on insere
$trans[$k][$v][2]=1;
else $g = (0-$g);
$trans[$k][$v][0] = $g;
}
$v = $g;
......@@ -125,8 +131,7 @@ function import_translate($values, $table, $desc, $request, $trans) {
$vals .= "," . _q($v);
}
// si le champ titre est la, c'est une equivalence avec un existant
// pas la peine d'ecraser avec les memes valerurs
// pas la peine d'ecraser avec les memes valeurs si rien de neuf
$p = $desc['key']["PRIMARY KEY"];
$v = $values[$p];
if (!isset($trans[$p]) OR !isset($trans[$p][$v]) OR $trans[$p][$v][2])
......@@ -135,7 +140,7 @@ function import_translate($values, $table, $desc, $request, $trans) {
// deux groupes de mots ne peuvent avoir le meme titre ==> identification
function import_identifie_id_groupe($values, $table, $desc, $request, $trans) {
function import_identifie_id_groupe($values, $table, $desc, $request, $trans) {
$r = spip_fetch_array(spip_query($q = "SELECT id_groupe, titre FROM spip_groupes_mots WHERE titre=" . _q($values['titre'])), SPIP_NUM);
return $r;
}
......@@ -147,17 +152,19 @@ function import_identifie_id_mot($values, $table, $desc, $request, $trans) {
}
// mot de meme titre et de meme groupe ==> identification
function import_identifie_mot_si_groupe($id_groupe, $titre, $trans)
// mot de meme titre et de meme groupe ==> identification
function import_identifie_parent_id_mot($id_groupe, $titre, $trans, $v)
{
if (!(isset($trans['id_groupe'])
AND isset($trans['id_groupe'][$id_groupe])))
return false;
$new = $trans['id_groupe'][$id_groupe][0];
$r = spip_fetch_array(spip_query("SELECT id_mot FROM spip_mots WHERE titre=" . _q($titre) . " AND id_groupe=$new" ));
$titre = _q($titre);
if (isset($trans['id_groupe'])
AND isset($trans['id_groupe'][$id_groupe])) {
$new = $trans['id_groupe'][$id_groupe][0];
$r = spip_fetch_array(spip_query("SELECT id_mot FROM spip_mots WHERE titre=$titre AND id_groupe=$new" ));
if ($r) return (0 - $r['id_mot']);
}
$r = spip_abstract_insert('spip_mots', '', '()');
spip_query("REPLACE spip_translate (id_old, id_new, titre, type, ajout) VALUES ($v,$r,$titre,'id_mot',1)");
return !$r ? false : $r['id_mot'];
}
?>
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter