ADD fonction pour restaurer une BD à partir d'un fichier texte dans euphorik_bd_admin
[euphorik.git] / modules / erl / euphorik_bd_admin.erl
index 38fabfe..843d830 100644 (file)
@@ -32,8 +32,9 @@
    connect/1,
    reset/0,
    update/0,
-   backup/1,
-   restore/1,
+   
+   backup_text/1,
+   restore_text/1,
    
    toggle_ek_master/1,
    print_users/0,
@@ -79,18 +80,15 @@ create_tables() ->
    ]),
    mnesia:create_table(minichat, [
       {attributes, record_info(fields, minichat)},
-      {index, [auteur_id, troll_id]},
       {disc_copies, [node()]}
    ]),
    mnesia:create_table(reponse_minichat, [
       {type, bag},
       {attributes, record_info(fields, reponse_minichat)},
-      {index, [cible]},
       {disc_copies, [node()]}
    ]),
    mnesia:create_table(user, [
       {attributes, record_info(fields, user)},
-      {index, [cookie, login]},
       {disc_copies, [node()]}
    ]),
    mnesia:create_table(ip_table, [
@@ -99,9 +97,19 @@ create_tables() ->
    ]),
    mnesia:create_table(troll, [
       {attributes, record_info(fields, troll)},
-      {index, [date_post]},
       {disc_copies, [node()]}
-   ]).
+   ]),
+   creer_indexes().
+   
+   
+% mis à part car lors de la reprise de données avec load_textfile les indexes ne sont pas recréés
+creer_indexes() ->
+   mnesia:add_table_index(minichat, auteur_id),
+   mnesia:add_table_index(minichat, troll_id),
+   mnesia:add_table_index(reponse_minichat, cible),
+   mnesia:add_table_index(user, cookie),
+   mnesia:add_table_index(user, login),
+   mnesia:add_table_index(troll, date_post).
    
    
 % Connexion à la base de données de yaws sur overnux
@@ -191,14 +199,12 @@ patch(1) ->
       {aborted, Raison} -> {erreur, Raison};
       {atomic, _} -> ok
    end.
-% 2 -> 3
-%patch(2) ->
-
+   
 
 % Prend un chemin vers la feuille de style de type "css/1/euphorik.css"
 % et renvoie "styles/1/euphorik.css"
-patch1_transforme_css(["css" | Reste]) ->
-   ["styles" | Reste];
+patch1_transforme_css("css" ++ Reste) ->
+   "styles" ++ Reste;
 patch1_transforme_css(F) ->
    F.
 
@@ -214,14 +220,14 @@ patch_1_traiter_message(M, Racine) ->
    ).
 
 % crée un backup dont le nom est fournit dans le repertoire backups qui se trouve dans le repertoire de la BD.
-backup(Nom) ->
-   mnesia:backup(mnesia:system_info(directory) ++ "/backups/" ++ Nom).
+%backup(Nom) ->
+%   mnesia:backup(mnesia:system_info(directory) ++ "/backups/" ++ Nom).
    
 
 % Reviens à une version précédente de la base de données
 % (les données insérées durant les versions plus récentes sont perdues)
-restore(N) ->
-   mnesia:restore(fichier_backup(N), [{default_op, recreate_tables}]).
+%restore(N) ->
+%   mnesia:restore(fichier_backup(N), [{default_op, recreate_tables}]).
 
 
 % Renvoie le fichier (avec le chemin) correspondant à la version Version, par exemple : "/var/euphorik/BD/backups/backup1"
@@ -229,6 +235,20 @@ fichier_backup(Version) ->
    mnesia:system_info(directory) ++ "/backups/" ++ if is_integer(Version) -> "backup" ++ integer_to_list(Version); true -> Version end.
 
 
+backup_text(_) -> todo.
+restore_text(File) -> 
+   mnesia:stop(),
+   mnesia:delete_schema([node()]),
+   mnesia:start(),
+   case mnesia:load_textfile(File) of
+      {atomic, ok} ->
+         update(),
+         creer_indexes();
+      Erreur ->
+         Erreur
+   end.
+
+
 toggle_ek_master(User_id) ->
    euphorik_bd:resultat_transaction(mnesia:transaction(
       fun() ->