function inc_import_1_2_dist($f, $request, $gz='fread') { global $import_ok; static $field_desc = array (); static $tables, $a_importer; if (!$tables) { $init = $request['init']; $a_importer = $init($request); $tables = array( 'article' => 'spip_articles', 'auteur' => 'spip_auteurs', 'breve' => 'spip_breves', 'document' => 'spip_documents', 'forum' => 'spip_forum', 'groupe_mots' => 'spip_groupes_mots', 'message' => 'spip_messages', 'mot' => 'spip_mots', 'petition' => 'spip_petitions', 'rubrique' => 'spip_rubriques', 'signature' => 'spip_signatures', 'syndic' => 'spip_syndic', 'syndic_article' => 'spip_syndic_articles', 'type_document' => 'spip_types_documents' ); } $import_ok = false; $b = false; // Lire le type d'objet if (!($type = xml_fetch_tag($f, $b, $gz))) return false; if ($type == '/SPIP') return !($import_ok = true); $id = "id_$type"; $id_objet = 0; $table = isset($tables[$type]) ? $tables[$type] : $type; if (in_array($table, $a_importer) AND !isset($field_desc[$table])) { // recuperer la description de la table pour connaitre ses champs valides $desc = description_table($table); if (isset($desc['field'])) $field_desc[$table] = $desc['field']; else $field_desc[$table] = NULL; } $fields = $field_desc[$table]; $char = $GLOBALS['meta']['charset_insertion']; if ($char == $GLOBALS['meta']['charset_restauration']) $char = ''; $values = array(); // Lire les champs de l'objet for (;;) { $b = false; if (!($col = xml_fetch_tag($f, $b, $gz))) return false; if ($col == '/'.$type) break; $value = true; if (!xml_fetch_tag($f, $value, $gz)) return false; if (substr($col, 0, 5) == 'lien:') { $type_lien = substr($col, 5); $liens[$type_lien][] = '('.$id_objet.','.$value.')'; } else if ($col != 'maj') { // tentative de restauration d'une base sauvegardee avec le champ 'images' ; d'experience, ca arrive... // mieux vaut accepter que canner silencieusement... if (($type == 'article') && ($col == 'images')) { if ($value) { // ne pas afficher de message si on a un champ suppl mais vide echo "--><br /><span style='color: red; font-weight: bold;'>"._T('avis_erreur_sauvegarde', array('type' => $type, 'id_objet' => $id_objet))."</span>\n<span style='color: black'>"._T('avis_colonne_inexistante', array('col' => $col)); if ($col == 'images') echo _T('info_verifier_image'); echo "</span>\n<!--"; $GLOBALS['erreur_restauration'] = true; } } else if ($fields==NULL or isset($fields[$col])) { if ($char) $value = importer_charset($value, $char); $values[$col] = $value; if ($col == $id) $id_objet = $value; } } } if ($values) { if (!sql_replace($table, $values, $desc)) { echo "--><br /><span style='color: red; font-weight: bold;'>"._T('avis_erreur_mysql')."</span>\n<span style='color: black'><tt>".sql_error()."</tt></span>\n<!--"; $GLOBALS['erreur_restauration'] = true; } if ($type == 'article') { sql_delete("spip_auteurs_articles", "id_article=$id_objet"); sql_delete("spip_documents_articles", "id_article=$id_objet"); } else if ($type == 'rubrique') { sql_delete("spip_auteurs_rubriques", "id_rubrique=$id_objet"); sql_delete("spip_documents_rubriques", "id_rubrique=$id_objet"); } else if ($type == 'breve') { sql_delete("spip_documents_breves", "id_breve=$id_objet"); } else if ($type == 'mot') { sql_delete("spip_mots_articles", "id_mot=$id_objet"); sql_delete("spip_mots_breves", "id_mot=$id_objet"); sql_delete("spip_mots_forum", "id_mot=$id_objet"); sql_delete("spip_mots_rubriques", "id_mot=$id_objet"); sql_delete("spip_mots_syndic", "id_mot=$id_objet"); } else if ($type == 'auteur') { sql_delete("spip_auteurs_rubriques", "id_auteur=$id_objet"); } else if ($type == 'message') { sql_delete("spip_auteurs_messages", "id_message=$id_objet"); } if ($liens) { reset($liens); while (list($type_lien, $t) = each($liens)) { if ($type == 'auteur' OR $type == 'mot' OR $type == 'document') if ($type_lien == 'syndic' OR $type_lien == 'forum') $table_lien = 'spip_'.$type.'s_'.$type_lien; else $table_lien = 'spip_'.$type.'s_'.$type_lien.'s'; else $table_lien = 'spip_'.$type_lien.'s_'.$type.'s'; sql_insert($table_lien, "($id, id_$type_lien)", join(',', $t)); } } } return $import_ok = " "; }
function inc_import_0_0_dist($f, $request, $gz='fread') { global $import_ok; // detruire les tables a restaurer $init = $request['init']; $tables = $init($request); $import_ok = false; $b = false; if (!($type = xml_fetch_tag($f, $b, $gz))) return false; if ($type == '/SPIP') return !($import_ok = true); $is_art = ($type == 'article'); $is_mot = ($type == 'mot'); for (;;) { $b = false; if (!($col = xml_fetch_tag($f, $b, $gz))) return false; if ($col == ("/$type")) break; $value = true; if (!xml_fetch_tag($f, $value, $gz)) return false; if ($is_art AND $col == 'id_auteur') { $auteurs[] = $value; } else if ($is_mot AND $col == 'id_article') { $articles[] = $value; } else if ($is_mot AND $col == 'id_breve') { $breves[] = $value; } else if ($is_mot AND $col == 'id_forum') { $forums[] = $value; } else if ($is_mot AND $col == 'id_rubrique') { $rubriques[] = $value; } else if ($is_mot AND $col == 'id_syndic') { $syndics[] = $value; } else if ($col != 'maj') { $cols[] = $col; $values[] = sql_quote($value); if ($is_art && ($col == 'id_article')) $id_article = $value; if ($is_mot && ($col == 'id_mot')) $id_mot = $value; } } $table = "spip_$type"; if ($type != 'forum' AND $type != 'syndic') $table .= 's'; spip_query("REPLACE $table (" . join(",", $cols) . ") VALUES (" . join(",", $values) . ")"); if ($is_art && $id_article) { sql_delete("spip_auteurs_articles", "id_article=$id_article"); if ($auteurs) { reset ($auteurs); while (list(, $auteur) = each($auteurs)) { sql_insert("spip_auteurs_articles", "(id_auteur, id_article)", "($auteur, $id_article)"); } } } if ($is_mot && $id_mot) { sql_delete("spip_mots_articles", "id_mot=$id_mot"); sql_delete("spip_mots_breves", "id_mot=$id_mot"); sql_delete("spip_mots_forum", "id_mot=$id_mot"); sql_delete("spip_mots_rubriques", "id_mot=$id_mot"); sql_delete("spip_mots_syndic", "id_mot=$id_mot"); if ($articles) { reset ($articles); while (list(, $article) = each($articles)) { sql_insert("spip_mots_articles", "(id_mot, id_article)", "($id_mot, $article)"); } } if ($breves) { reset ($breves); while (list(, $breve) = each($breves)) { sql_insert("spip_mots_breves", "(id_mot, id_breve)", "($id_mot, $breve)"); } } if ($forums) { reset ($forums); while (list(, $forum) = each($forums)) { sql_insert("spip_mots_forum", "(id_mot, id_forum)", "($id_mot, $forum)"); } } if ($rubriques) { reset ($rubriques); while (list(, $rubrique) = each($rubriques)) { sql_insert("spip_mots_rubriques", "(id_mot, id_rubrique)", "($id_mot, $id_rubrique)"); } } if ($syndics) { reset ($syndics); while (list(, $syndic) = each($syndics)) { sql_insert("spip_mots_syndic", "(id_mot, id_syndic)", "($id_mot, $syndic)"); } } } return $import_ok = " "; }
/** * Lire l'entete du fichier importe * Balise ouvrante: * 'SPIP' si fait par spip, nom de la base source si fait par phpmyadmin * * @param resource $f * @param string $gz * @return array */ function import_debut($f, $gz='fread') { // Pour les anciennes archives, indiquer le charset par defaut: $charset = 'iso-8859-1'; // les + recentes l'ont en debut de ce fichier $flag_phpmyadmin = false; $b = false; while ($t = xml_fetch_tag($f, $b, $gz, '')) { $r = xml_parse_tag($t); if ($r[0] == '?xml' AND $r[1]['encoding']) $charset = strtolower($r[1]['encoding']); elseif ($r[0] == "SPIP") {$r[2] = $charset; return $r;} if (($r[0] == "!--") && (preg_match(",phpmyadmin\sxml\sdump,is",$r[1]))){ // c'est un dump xml phpmyadmin // on interprete le commentaire pour recuperer la version de phpmydadmin $version = preg_replace(",(.*?)version\s*([0-9a-z\.\-]*)\s(.*),is","\\2",$r[1]); $flag_phpmyadmin = true; } if (($r[0] != "!--") && ($flag_phpmyadmin == true)){ $r[1] = array('version_archive'=>"phpmyadmin::$version"); $r[2] = $charset; return $r; } } }
function import_lire_champs($f, $fields, $gz, $phpmyadmin, $table, $atts) { $values = array(); $dir_img = 0; if (($atts['version_base'] < '1.934') AND $table == '/spip_documents') { $dir_img = '@^'. preg_quote (isset($atts['dir_img']) ? $atts['dir_img']:'IMG/') . '@'; } if (!isset($GLOBALS['meta']['charset_insertion'])) $charset = ''; else { $charset = $GLOBALS['meta']['charset_insertion']; if ($charset == $GLOBALS['meta']['charset']) $charset = ''; } for (;;) { $b = false; if (!($col = xml_fetch_tag($f, $b, $gz))) return false; if ($col[0] == '/') { if ($col != $table) { spip_log("table $table, tag fermant inattendu:$col"); } break; } $value = $b = (($col != 'maj') AND (isset($fields[$col]))); if (!xml_fetch_tag($f, $value, $gz)) return false; if ($b) { if ($phpmyadmin) $value = str_replace($phpmyadmin[0],$phpmyadmin[1],$value); elseif ($dir_img) { $value = preg_replace($dir_img, '', $value); } if ($charset) $value = importer_charset($value, $charset); $values[$col]= $value; } } return $values; }