Пример #1
0
function dump_afficher_tables_sauvegardees($status_file)
{
    $status = dump_lire_status($status_file);
    $tables = $status['tables_copiees'];
    // lister les tables sauvegardees et aller verifier dans le dump
    // qu'on a le bon nombre de donnees
    dump_serveur($status['connect']);
    spip_connect('dump');
    foreach ($tables as $t => $n) {
        $n = abs(intval($n));
        $n_dump = intval(sql_countsel($t, '', '', '', 'dump'));
        $res = "{$t} ";
        if ($n_dump == 0 and $n == 0) {
            $res .= "(" . _T('dump:aucune_donnee') . ")";
        } else {
            $res .= "({$n_dump}/{$n})";
        }
        if ($n !== $n_dump) {
            $res = "<strong>{$res}</strong>";
        }
        $tables[$t] = $res;
    }
    $n = floor(count($tables) / 2);
    $corps = "<div style='width:49%;float:left;'><ul class='spip'><li class='spip'>" . join("</li><li class='spip'>", array_slice($tables, 0, $n)) . "</li></ul></div>" . "<div style='width:49%;float:left;'><ul class='spip'><li>" . join("</li><li class='spip'>", array_slice($tables, $n)) . "</li></ul></div>" . "<div class='nettoyeur'></div>";
    return $corps;
}
Пример #2
0
function base_restaurer_dist($titre = '', $reprise = false)
{
    $status_file = _DUMP_STATUS_FILE;
    $status_file = _DIR_TMP . basename($status_file) . ".txt";
    if (!lire_fichier($status_file, $status) or !($status = unserialize($status))) {
    } else {
        $redirect = parametre_url(generer_action_auteur('restaurer', _DUMP_STATUS_FILE), "step", intval(_request('step') + 1), '&');
        $timeout = ini_get('max_execution_time');
        // valeur conservatrice si on a pas reussi a lire le max_execution_time
        if (!$timeout) {
            $timeout = 30;
        }
        // parions sur une valeur tellement courante ...
        $max_time = time() + $timeout / 2;
        include_spip('inc/minipres');
        @ini_set("zlib.output_compression", "0");
        // pour permettre l'affichage au fur et a mesure
        $titre = _T('dump:restauration_en_cours') . " (" . count($status['tables']) . ") ";
        $balise_img = chercher_filtre('balise_img');
        $titre .= $balise_img(chemin_image('searching.gif'));
        echo install_debut_html($titre);
        // script de rechargement auto sur timeout
        echo http_script("window.setTimeout('location.href=\"" . $redirect . "\";'," . $timeout * 1000 . ")");
        echo "<div style='text-align: left'>\n";
        dump_serveur($status['connect']);
        spip_connect('dump');
        // au premier coup on ne fait rien sauf afficher l'ecran de sauvegarde
        if (_request('step')) {
            $options = array('callback_progression' => 'dump_afficher_progres', 'max_time' => $max_time, 'no_erase_dest' => lister_tables_noerase(), 'where' => $status['where'] ? $status['where'] : array(), 'desc_tables_dest' => array());
            if ($desc = sql_getfetsel('valeur', 'spip_meta', "nom='dump_structure_temp'", '', '', '', '', 'dump') and $desc = unserialize($desc)) {
                $options['desc_tables_dest'] = $desc;
            }
            #var_dump(sql_allfetsel('nom,valeur','spip_meta',"",'','','','','dump'));
            #die();
            $res = base_copier_tables($status_file, $status['tables'], 'dump', '', $options);
        } else {
            // mais on en profite pour reparer les version base pour etre sur de ne pas les perdre
            sql_updateq("spip_meta", array('impt' => 'oui'), "nom='version_installee'", '', 'dump');
            sql_updateq("spip_meta", array('impt' => 'oui'), "nom LIKE '%_base_version'", '', 'dump');
        }
        echo "</div>\n";
        if (!$res) {
            echo dump_relance($redirect);
        }
        echo install_fin_html();
        ob_end_flush();
        flush();
        if (!$res) {
            exit;
        }
        // quand on sort de $export avec true c'est qu'on a fini
        dump_end(_DUMP_STATUS_FILE, 'restaurer');
        include_spip('inc/headers');
        echo redirige_formulaire(generer_url_ecrire("restaurer", 'status=' . _DUMP_STATUS_FILE, '', true, true));
    }
}
Пример #3
0
function inc_sauvegarder_dist($status_file, $redirect = '')
{
    $status_file = _DIR_TMP . basename($status_file) . ".txt";
    if (!lire_fichier($status_file, $status) or !($status = unserialize($status))) {
    } else {
        $timeout = ini_get('max_execution_time');
        // valeur conservatrice si on a pas reussi a lire le max_execution_time
        if (!$timeout) {
            $timeout = 30;
        }
        // parions sur une valeur tellement courante ...
        $max_time = time() + $timeout / 2;
        include_spip('inc/minipres');
        @ini_set("zlib.output_compression", "0");
        // pour permettre l'affichage au fur et a mesure
        $titre = _T('dump:sauvegarde_en_cours') . " (" . count($status['tables']) . ") ";
        $balise_img = chercher_filtre('balise_img');
        $titre .= $balise_img(chemin_image('searching.gif'));
        echo install_debut_html($titre);
        // script de rechargement auto sur timeout
        echo http_script("window.setTimeout('location.href=\"" . $redirect . "\";'," . $timeout * 1000 . ")");
        echo "<div style='text-align: left'>\n";
        dump_serveur($status['connect']);
        spip_connect('dump');
        // au premier coup on ne fait rien sauf afficher l'ecran de sauvegarde
        $res = false;
        if (_request('step')) {
            $options = array('callback_progression' => 'dump_afficher_progres', 'max_time' => $max_time, 'no_erase_dest' => lister_tables_noerase(), 'where' => $status['where'] ? $status['where'] : array());
            $res = base_copier_tables($status_file, $status['tables'], '', 'dump', $options);
        }
        echo "</div>\n";
        if (!$res and $redirect) {
            echo dump_relance($redirect);
        }
        echo install_fin_html();
        ob_end_flush();
        flush();
        return $res;
    }
}
Пример #4
0
/**
 * Marquer la procédure de dump comme finie
 *
 * @param string $status_file
 *     Fichier qui mémorise les infos utiles concernant la sauvegarde en cours
 * @param string $action
 *     Type d'action supplémentaire à réaliser :
 *
 *     - restaurer : supprimer la structure qui était stockée dans le dump
 *     - 'auvegarder : stocker dans le dump la structure de la base source
 */
function dump_end($status_file, $action = '')
{
    $status_file = _DIR_TMP . basename($status_file) . ".txt";
    if (!lire_fichier($status_file, $status) or !($status = unserialize($status))) {
        return;
    }
    switch ($action) {
        case 'restaurer':
            // supprimer la structure qui etait stockee dans le dump
            sql_delete('spip_meta', "nom='dump_structure_temp'");
            break;
        case 'sauvegarder':
            // stocker dans le dump la structure de la base source
            $structure = array();
            foreach ($status['tables_copiees'] as $t => $n) {
                $structure[$t] = sql_showtable($t, true);
            }
            dump_serveur($status['connect']);
            spip_connect('dump');
            // si spip_meta n'a pas ete backup elle n'est pas dans le dump, il faut la creer pour y stocker cette meta
            if (!sql_showtable("spip_meta", true, "dump")) {
                $desc = sql_showtable("spip_meta", true);
                sql_create("spip_meta", $desc['field'], $desc['key'], false, false, "dump");
            }
            sql_delete('spip_meta', "nom='dump_structure_temp'", 'dump');
            #enlever une vieille structure deja la, au cas ou
            sql_insertq('spip_meta', array('nom' => 'dump_structure_temp', 'valeur' => serialize($structure), 'impt' => 'non'), array(), 'dump');
            break;
    }
    $status['etape'] = 'fini';
    ecrire_fichier($status_file, serialize($status));
}
Пример #5
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);
    }
}
Пример #6
0
<?php

/***************************************************************************\
 *  SPIP, Systeme de publication pour l'internet                           *
 *                                                                         *
 *  Copyright (c) 2001-2014                                                *
 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
 *                                                                         *
 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
\***************************************************************************/
if (!defined('_ECRIRE_INC_VERSION')) {
    return;
}
include_spip('inc/dump');
if ($args = dump_serveur()) {
    $GLOBALS['spip_connect_version'] = 0.7;
    if (call_user_func_array('spip_connect_db', $args)) {
        define('_DUMP_SERVEUR_OK', true);
    }
}