/** * 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; }
/** * Traiter * @return array */ function formulaires_restaurer_traiter_dist() { $archive = _request('fichier') ? _request('fichier') : _request('nom'); $dir_dump = dump_repertoire(); $archive = $dir_dump . basename($archive, ".sqlite"); $status_file = base_dump_meta_name(0) . "_restauration"; if (_request('tout_restaurer')) { $args = dump_connect_args($archive); dump_serveur($args); $tables = base_lister_toutes_tables('dump'); } else { $tables = _request('tables'); } include_spip('inc/dump'); $res = dump_init($status_file, $archive, $tables, array('spip_meta' => "impt='oui'")); if ($res === true) { // on lance l'action restaurer qui va realiser la sauvegarde // et finira par une redirection vers la page sauvegarde_fin include_spip('inc/actions'); $redirect = generer_action_auteur('restaurer', $status_file); return array('message_ok' => 'ok', 'redirect' => $redirect); } else { return array('message_erreur' => $res); } }