Example #1
0
/**
 * Exec de la page de destruction des tables de SPIP
**/
function exec_base_delete_all_dist()
{
    include_spip('inc/autoriser');
    if (!autoriser('detruire')) {
        include_spip('inc/minipres');
        echo minipres();
    } else {
        include_spip('base/dump');
        $res = base_lister_toutes_tables('', array(), array(), true);
        if (!$res) {
            include_spip('inc/minipres');
            spip_log("Erreur base de donnees");
            echo minipres(_T('info_travaux_titre'), _T('titre_probleme_technique') . "<p><tt>" . sql_errno() . " " . sql_error() . "</tt></p>");
        } else {
            $res = base_saisie_tables('delete', $res);
            include_spip('inc/headers');
            $res = "\n<ol style='text-align:left'><li>\n" . join("</li>\n<li>", $res) . '</li></ol>';
            $admin = charger_fonction('admin', 'inc');
            $res = $admin('delete_all', _T('titre_page_delete_all'), $res);
            if (!$res) {
                redirige_url_ecrire('install', '');
            } else {
                echo $res;
            }
        }
    }
}
Example #2
0
/**
 * 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);
    }
}
Example #3
0
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);
}
Example #4
0
/**
 * Mise à jour des bdd SQLite pour réparer les collation des champs texte
 * pour les passer en NOCASE
 *
 * @uses base_lister_toutes_tables()
 * @uses _sqlite_remplacements_definitions_table()
 **/
function maj_collation_sqlite()
{
    include_spip('base/dump');
    $tables = base_lister_toutes_tables();
    // rien a faire si base non sqlite
    if (strncmp($GLOBALS['connexions'][0]['type'], 'sqlite', 6) !== 0) {
        return;
    }
    $trouver_table = charger_fonction('trouver_table', 'base');
    // forcer le vidage de cache
    $trouver_table('');
    // cas particulier spip_auteurs : retablir le collate binary sur le login
    $desc = $trouver_table("spip_auteurs");
    spip_log("spip_auteurs : " . var_export($desc['field'], true), "maj." . _LOG_INFO_IMPORTANTE);
    if (stripos($desc['field']['login'], "BINARY") === false) {
        spip_log("Retablir champ login BINARY sur table spip_auteurs", "maj");
        sql_alter("table spip_auteurs change login login VARCHAR(255) BINARY");
        $trouver_table('');
        $new_desc = $trouver_table("spip_auteurs");
        spip_log("Apres conversion spip_auteurs : " . var_export($new_desc['field'], true), "maj." . _LOG_INFO_IMPORTANTE);
    }
    foreach ($tables as $table) {
        if (time() >= _TIME_OUT) {
            return;
        }
        if ($desc = $trouver_table($table)) {
            $desc_collate = _sqlite_remplacements_definitions_table($desc['field']);
            if ($d = array_diff($desc['field'], $desc_collate)) {
                spip_log("Table {$table} COLLATE incorrects", "maj");
                // cas particulier spip_urls :
                // supprimer les doublons avant conversion sinon echec (on garde les urls les plus recentes)
                if ($table == 'spip_urls') {
                    // par date DESC pour conserver les urls les plus recentes
                    $data = sql_allfetsel("*", "spip_urls", '', '', 'date DESC');
                    $urls = array();
                    foreach ($data as $d) {
                        $key = $d['id_parent'] . "::" . strtolower($d['url']);
                        if (!isset($urls[$key])) {
                            $urls[$key] = true;
                        } else {
                            spip_log("Suppression doublon dans spip_urls avant conversion : " . serialize($d), "maj." . _LOG_INFO_IMPORTANTE);
                            sql_delete("spip_urls", "id_parent=" . sql_quote($d['id_parent']) . " AND url=" . sql_quote($d['url']));
                        }
                    }
                }
                foreach ($desc['field'] as $field => $type) {
                    if ($desc['field'][$field] !== $desc_collate[$field]) {
                        spip_log("Conversion COLLATE table {$table}", "maj." . _LOG_INFO_IMPORTANTE);
                        sql_alter("table {$table} change {$field} {$field} " . $desc_collate[$field]);
                        $trouver_table('');
                        $new_desc = $trouver_table($table);
                        spip_log("Apres conversion {$table} : " . var_export($new_desc['field'], true), "maj." . _LOG_INFO_IMPORTANTE);
                        continue 2;
                        // inutile de continuer pour cette table : un seul alter remet tout a jour en sqlite
                    }
                }
            }
        }
    }
    // forcer le vidage de cache
    $trouver_table('');
}
Example #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);
    }
}