/** * Traiter * @return array */ function formulaires_sauvegarder_traiter_dist() { $status_file = base_dump_meta_name(0); $dir_dump = dump_repertoire(); $archive = $dir_dump . basename(_request('nom_sauvegarde'), ".sqlite"); if (_request('tout_sauvegarder')) { // ici on prend toutes les tables sauf celles exclues par defaut // (tables de cache en pratique) $exclude = lister_tables_noexport(); list($tables, ) = base_liste_table_for_dump($exclude); $tables = base_lister_toutes_tables('', $tables, $exclude); } else { $tables = _request('tables'); } include_spip('inc/dump'); $res = dump_init($status_file, $archive, $tables); if ($res === true) { // on lance l'action sauvegarder qui va realiser la sauvegarde // et finira par une redirection vers la page sauvegarde_fin include_spip('inc/actions'); $redirect = generer_action_auteur('sauvegarder', $status_file); return array('message_ok' => 'ok', 'redirect' => $redirect); } else { return array('message_erreur' => $res); } }
/** * Initialiser une migration vers * @param string $status_file * @param array $tables * @param array $files * @param array $where * @param string $action * @return bool|string */ function migrer_vers_init($status_file, $tables=null, $files = null,$where=array(),$action='migration_vers'){ $status_file = _DIR_TMP.basename($status_file).".txt"; if (lire_fichier($status_file, $status) AND $status = unserialize($status) AND $status['etape']!=='fini' AND filemtime($status_file)>=time()-120) // si le fichier status est trop vieux c'est un abandon return _T("migration:erreur_{$action}_deja_en_cours"); if (!$tables) list($tables,) = base_liste_table_for_dump(lister_tables_noexport()); if (!$files){ $files = preg_files(_DIR_IMG,'.'); } $squelettes = ''; $dir_squels = explode(':',migration_determiner_dossier_squelette()); if (count($dir_squels)){ $squelettes = array(); foreach($dir_squels as $dir_squel) $squelettes[$dir_squel] = preg_files($dir_squel,'.'); } $status = array('tables'=>$tables,'files'=>$files,'squelettes'=>$squelettes,'where'=>$where); $status['etape'] = 'init'; if (!ecrire_fichier($status_file, serialize($status))) return _T('migration:avis_probleme_ecriture_fichier',array('fichier'=>$status_file)); return true; }
function formulaires_assistant_migration_traiter_dist(){ $s = lire_migration_vers_status(); include_spip('base/dump'); $status_file = base_dump_meta_name(substr(md5($s['target']),0,8)); // ici on prend toutes les tables sauf celles exclues par defaut // (tables de cache en pratique) $exclude = lister_tables_noexport(); list($tables,) = base_liste_table_for_dump($exclude); $tables = base_lister_toutes_tables('',$tables,$exclude); include_spip('inc/migrer_vers'); $res = migrer_vers_init($status_file, $tables); if ($res===true) { // on lance l'action sauvegarder qui va realiser la sauvegarde // et finira par une redirection vers la page sauvegarde_fin include_spip('inc/actions'); $redirect = generer_action_auteur('migrer_vers', $status_file); return array('message_ok'=>_T('migration:message_connexion_ok'),'redirect'=>$redirect); } else return array('message_erreur'=>$res); }
/** * Initialiser un dump * * @param string $status_file Fichier contenant les informations serialisees sur le statut de l'export * @param string $archive Nom de l'archive (stockee dans le fichier de statut) * @param array $tables Liste des tables a exporter (autocaculee par defaut) * @param array $where Condition sur l'export * @param string $action Pour differencier la sauvegarde de l'import * @return bool/string */ function dump_init($status_file, $archive, $tables = null, $where = array(), $action = 'sauvegarde') { $status_file = _DIR_TMP . basename($status_file) . ".txt"; if (lire_fichier($status_file, $status) and $status = unserialize($status) and $status['etape'] !== 'fini' and filemtime($status_file) >= time() - 120) { return _T("dump:erreur_" . $action . "_deja_en_cours"); } if (!($type_serveur = dump_type_serveur())) { return _T('dump:erreur_sqlite_indisponible'); } if (!$tables) { list($tables, ) = base_liste_table_for_dump(lister_tables_noexport()); } $status = array('tables' => $tables, 'where' => $where, 'archive' => $archive); $status['connect'] = dump_connect_args($archive); dump_serveur($status['connect']); if (!spip_connect('dump')) { return _T('dump:erreur_creation_base_sqlite'); } // la constante sert a verifier qu'on utilise bien le connect/dump du plugin, // et pas une base externe homonyme if (!defined('_DUMP_SERVEUR_OK')) { return _T('erreur_connect_dump', array('dump' => 'dump')); } $status['etape'] = 'init'; if (!ecrire_fichier($status_file, serialize($status))) { return _T('dump:avis_probleme_ecriture_fichier', array('fichier' => $status_file)); } return true; }
function export_all_start($meta, $archive, $rub, $tables){ // si pas de tables listees en post, utiliser la liste par defaut if (!$tables) list($tables,) = base_liste_table_for_dump(lister_tables_noexport()); // en mode partiel, commencer par les articles et les rubriques // pour savoir quelles parties des autres tables sont a sauver if ($rub) { if ($t = array_search('spip_rubriques', $tables)) { unset($tables[$t]); array_unshift($tables, 'spip_rubriques'); } if ($t = array_search('spip_articles', $tables)) { unset($tables[$t]); array_unshift($tables, 'spip_articles'); } if ($t = array_search('spip_documents', $tables)) { unset($tables[$t]); array_push($tables, 'spip_documents'); } } return $tables; }
function options_avancees_dump(){ list($tables,) = base_liste_table_for_dump(lister_tables_noexport()); return controle_tables_en_base('export', $tables); }