X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fecrire%2Faction%2Fexport_all.php;fp=www%2Fecrire%2Faction%2Fexport_all.php;h=ca76e37447a04d821d7dfc3ad171b04a484a1775;hp=ec06d3c05732ef587a8dee9231dac8a9af2429f7;hb=e99f0878011913365e49b30d90e496c24c301393;hpb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed diff --git a/www/ecrire/action/export_all.php b/www/ecrire/action/export_all.php index ec06d3c..ca76e37 100644 --- a/www/ecrire/action/export_all.php +++ b/www/ecrire/action/export_all.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2011 * + * Copyright (c) 2001-2014 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -22,87 +22,138 @@ function action_export_all_dist() $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); - @list(, $gz, $archive, $rub, $version) = explode(',', $arg); + @list(, , $archive, $rub) = explode(',', $arg); $meta = base_dump_meta_name($rub); + $file = ramasse_parties($rub, $archive, $meta); + $size = !$file ? 0 : @(!file_exists($file) ? 0 : filesize($file)); + $metatable = $meta . '_tables'; + $tables = isset($GLOBALS['meta'][$metatable])?unserialize($GLOBALS['meta'][$metatable]):array(); + effacer_meta($metatable); + effacer_meta($meta); + utiliser_langue_visiteur(); + if (!$size) + $corps = _T('avis_erreur_sauvegarde', array('type'=>'.', 'id_objet'=>'. .')); + else { + $corps = export_all_report_size($file, $rub, $size, generer_url_ecrire()) + . export_all_report_tables($tables); + } + include_spip('inc/minipres'); + echo minipres(_T('info_sauvegarde'), $corps); +} + +function export_all_rename($nom, $subdir) +{ + $dir = dirname($subdir); + $dest = $dir . '/' . $nom; + if (file_exists($dest)) { + $n = 1; + while (@file_exists($new = "$dir/$n-$nom")) $n++; + spip_log("renomme vieux $dest en $new"); + @rename($dest, $new); + } + return $dest; +} + +// Concatenation des tranches + +// http://doc.spip.org/@ramasse_parties +function ramasse_parties($rub, $archive, $meta) +{ $dir = base_dump_dir($meta); - $file = $dir . $archive; + $files = preg_files($dir . $archive . ".part_[0-9]+_[0-9]+[.gz]?"); + if (!$files) return false; + $ok = true; + $files_o = array(); + $but = export_all_rename($archive, $dir); + // creer l'en tete du fichier + ecrire_fichier($but, export_entete(_VERSION_ARCHIVE),false); + foreach($files as $f) { + $contenu = ""; + if (lire_fichier ($f, $contenu)) { + if (!ecrire_fichier($but,$contenu,false,false)) + { $ok = false; break;} + } + spip_unlink($f); + $files_o[]=$f; + } + ecrire_fichier($but, export_enpied(),false,false); + spip_unlink($dir); + spip_log("concatenation " . join(' ', $files_o)); + return $ok ? $but : false; +} - utiliser_langue_visiteur(); - export_all_fin($file, $meta, $rub); +function export_all_end($meta, $archive){ + $dir = base_dump_dir($meta); + $file = $dir . $archive; } -// http://doc.spip.org/@export_all_fin -function export_all_fin($file, $meta, $rub) +// http://doc.spip.org/@export_entete +function export_entete($version_archive) { - global $spip_lang_left,$spip_lang_right; + return +"<" . "?xml version=\"1.0\" encoding=\"". +$GLOBALS['meta']['charset']."\"?".">\n" . +"\n"; +} - $metatable = $meta . '_tables'; - $tables_sauvegardees = isset($GLOBALS['meta'][$metatable])?unserialize($GLOBALS['meta'][$metatable]):array(); - effacer_meta($meta); - effacer_meta($metatable); - $size = @(!file_exists($file) ? 0 : filesize($file)); +// production de l'en-pied du fichier d'archive +// http://doc.spip.org/@export_enpied +function export_enpied () { return "\n";} + +function export_all_report_size($dest, $rub, $size, $retour) +{ + global $spip_lang_left,$spip_lang_right; - if (!$size) { - $corps = _T('avis_erreur_sauvegarde', array('type'=>'.', 'id_objet'=>'. .')); - - } else { - $subdir = dirname($file); - $dir = dirname($subdir); - $nom = basename($file); - $dest = $dir . '/' . $nom; - if (file_exists($dest)) { - $n = 1; - while (@file_exists($new = "$dir/$n-$nom")) $n++; - @rename($dest, $new); - } - if (@rename($file, $dest)) { - spip_unlink($subdir); - spip_log("$file renomme en $dir/$nom"); - } // ne pas effrayer inutilement: il peut y avoir moins de fichiers // qu'annonce' si certains etaient vides - $n = _T('taille_octets', array('taille' => number_format($size, 0, ' ', ' '))); + $n = _T('taille_octets', array('taille' => number_format($size, 0, ' ', ' '))); // cette chaine est a refaire car il y a double ambiguite: // - si plusieurs SPIP dans une base SQL (cf table_prefix) // - si on exporte seulement une rubrique # _T('info_sauvegarde_reussi_02', - if ($rub) { + if ($rub) { $titre = sql_getfetsel('titre', 'spip_rubriques', "id_rubrique=$rub"); $titre = _T('info_sauvegarde_rubrique_reussi', - array('archive' => ':
'.joli_repertoire("$dir/$nom")." ($n)", 'titre' => "$titre")); - } - else + array('archive' => ':
'.joli_repertoire($dest)." ($n)", 'titre' => "$titre")); + } else $titre = _T('info_sauvegarde_reussi_02', - array('archive' => ':
'.joli_repertoire("$dir/$nom")." ($n)")); + array('archive' => ':
'.joli_repertoire($dest)." ($n)")); - $corps = "

". + include_spip('inc/filtres'); + return "

". $titre . - " ". + " ". _T('info_sauvegarde_reussi_03') . " " ._T('info_sauvegarde_reussi_04') - . "

\n"; - - include_spip('inc/filtres'); - $corps .= "
" - . bouton_action(_T("retour"), generer_url_ecrire()) - . "
"; - - // afficher la liste des tables qu'on a sauvegarde - sort($tables_sauvegardees); - $n = floor(count($tables_sauvegardees)/2); - $corps .= "
" - . "
" - . "
"; - } - include_spip('inc/minipres'); - echo minipres(_T('info_sauvegarde'), $corps); - exit; + . "

\n" + . "
" + . bouton_action(_T("retour"), $retour) + . "
" ; } - +function export_all_report_tables($tables_sauvegardees) +{ + sort($tables_sauvegardees); + $n = floor(count($tables_sauvegardees)/2); + + return "
" + . "
" + . "
"; +} ?>