/** * 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 inc_import_1_3_dist($lecteur, $request, $gz='fread', $atts=array()) { global $import_ok, $tables_trans, $trans; static $tables = ''; static $phpmyadmin, $fin; static $field_desc = array (); static $defaut = array('field' => array()); // au premier appel, init des invariants de boucle if (!$tables OR $trans) { $init = $request['init']; $tables = $init($request); if (!$tables) return ($import_ok = false); $phpmyadmin = preg_match("{^phpmyadmin::}is", $GLOBALS['meta']['restauration_version_archive']) ? array(array('"','>'),array('"','>')) : false; $fin = '/' . $GLOBALS['meta']['restauration_tag_archive']; } $b = false; if (!($table = xml_fetch_tag($lecteur, $b, $gz))) return false; if ($table == $fin) return !($import_ok = true); if (strpos($table,'=')!==FALSE) { list($table, $attl) = xml_parse_tag($table); $atts = array_merge($atts, $attl); } $new = isset($tables_trans[$table]) ? $tables_trans[$table]: $table; // indique a la fois la fonction a appliquer // et les infos qu'il faut lui communiquer $boucle = $request['boucle']; if (!in_array($new,$tables)) $field_desc[$boucle][$table] = $desc = $defaut; elseif (isset($field_desc[$boucle][$table])) $desc = $field_desc[$boucle][$table]; else { // recuperer la description de la table pour connaitre ses champs valides $desc = description_table($table); if (!isset($desc['field'])) $desc = $defaut; elseif (isset($request['insertion']) AND $request['insertion']=='on') $desc['field'] = import_collecte($desc); $field_desc[$boucle][$table] = $desc; #spip_log("$table :".var_export($field_desc[$boucle][$table],1),'dbrest'); } $values = import_lire_champs($lecteur, $desc['field'], $gz, $phpmyadmin, '/' . $table, $atts); if ($values === false) return ($import_ok = false); if ($values) $boucle($values, $new, $desc, $request, $atts); return $import_ok = $new; }