示例#1
0
/**
 * 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;
}
示例#2
0
/**
 * 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);
    }
}