Merge branch 'master' of gburri.org:euphorik
[euphorik.git] / modules / erl / euphorik_bd_admin.erl
index e5c20bc..84fe459 100644 (file)
 % You should have received a copy of the GNU General Public License\r
 % along with Euphorik.  If not, see <http://www.gnu.org/licenses/>.\r
 %\r
-% Module mettant à disposition tout un tas de fonction pour l'administration de la base de données euphorik comme :\r
-%  - Création de la BD\r
-%  - Mise à jour de la BD\r
-%  - Backup et restauration\r
-%  - Copie de la BD à partir d'un autre noeud\r
-\r
+% Some functions to manage the database like creating, updating, backuping etc.\r
+%\r
+% @author G.Burri\r
 \r
 -module(euphorik_bd_admin).\r
 -author("Greg Burri <greg.burri@gmail.com>").\r
    print_users/1,\r
    print_user/1\r
 ]).\r
+\r
 -import(qlc, [e/2, q/1, cursor/2]).\r
+\r
 -include("../include/euphorik_bd.hrl").\r
 -include("../include/euphorik_defines.hrl").\r
 -include_lib("stdlib/include/qlc.hrl").\r
 \r
-\r
-% Renvoie la version courante de la BD.\r
+% Return the current version of the DB.\r
 version_bd() ->\r
    euphorik_bd:resultat_transaction(mnesia:transaction(\r
       fun() ->\r
@@ -56,12 +54,11 @@ version_bd() ->
       end\r
    )).\r
 \r
-\r
-% Instructions pour créer une nouvelle base :\r
-% $erl -sname yaws -mnesia dir '"/projets/euphorik/BD"'\r
-% voir doc/installation.txt\r
-% >l(euphorik_bd).\r
-% >euphorik_bd:create().\r
+% Create a the database. Warning: it will delete all existent data.\r
+% Example:\r
+%  $erl -sname yaws -mnesia dir '"/projects/euphorik/DB"'\r
+%  >l(euphorik_admin).\r
+%  >euphorik_bd:create().\r
 create() ->\r
    mnesia:stop(),\r
    mnesia:delete_schema([node()]),\r
@@ -106,12 +103,11 @@ create_tables() ->
       {attributes, record_info(fields, troll)},\r
       {disc_copies, [node()]}\r
    ]),\r
-   creer_indexes().\r
+   create_indexes().\r
 \r
-\r
-% mis à part car lors de la reprise de données avec load_textfile les indexes ne sont pas recréés\r
-creer_indexes() ->\r
-   % commence par supprimer les anciens indexes\r
+% Create all the needed indexes on the tables.\r
+create_indexes() ->\r
+   % Delete all existing indexes.\r
    lists:foreach(fun(T) ->\r
          lists:foreach(fun(P) ->\r
                mnesia:del_table_index(T, P)\r
@@ -128,16 +124,14 @@ creer_indexes() ->
    mnesia:add_table_index(troll, date_post),\r
    mnesia:add_table_index(troll, id_minichat).\r
 \r
-\r
-% Connexion à la base de données de yaws sur overnux\r
+% To connect to an remote database node.\r
 connect() ->\r
-   connect(yaws@flynux).\r
+   connect(yaws@x220).\r
 connect(Node) ->\r
    mnesia:start(),\r
    mnesia:change_config(extra_db_nodes, [Node]).\r
 \r
-\r
-% Efface toutes les données de la base de données.\r
+% Remove all data.\r
 reset() ->\r
    mnesia:clear_table(counter),\r
    mnesia:clear_table(proprietes),\r
@@ -147,17 +141,16 @@ reset() ->
    mnesia:clear_table(minichat),\r
    mnesia:clear_table(troll),\r
    mnesia:clear_table(ip_table),\r
-   % crée l'utilisateur root\r
+   % Create the root user.\r
    mnesia:transaction(fun() ->\r
-      mnesia:write(#proprietes{nom = version, valeur = ?VERSION_BD}),\r
+      mnesia:write(#proprietes{nom = version, valeur = ?DB_VERSION}),\r
       User = #user{id = 0, profile = #profile{pseudo = "Sys"}, login = "Sys", date_creation = erlang:timestamp(), date_derniere_connexion = erlang:timestamp(), ek_master = true},\r
       mnesia:write(User),\r
       User\r
    end),\r
-   peupler_texte().\r
-\r
+   populate_text().\r
 \r
-peupler_texte() ->\r
+populate_text() ->\r
    mnesia:transaction(fun() ->\r
       mnesia:write(#texte{ id = 10, fr = "Login déjà existant"}),\r
       mnesia:write(#texte{ id = 20, fr = "Trop de register (flood)"}),\r
@@ -168,7 +161,7 @@ peupler_texte() ->
       mnesia:write(#texte{ id = 70, fr = "Page inconnue"}),\r
       mnesia:write(#texte{ id = 80, fr = "Vous êtes banni pour encore ~s"}),\r
       mnesia:write(#texte{ id = 90, fr = "Message vide"}),\r
-      mnesia:write(#texte{ id = 100, fr = "Impossible d'ajouter un nouveau message. Raison : ~s"}),\r
+      mnesia:write(#texte{ id = 100, fr = "Impossible d'ajouter un nouveau message. Cause : ~s"}),\r
       mnesia:write(#texte{ id = 110, fr = "Utilisateur inconnu"}),\r
       mnesia:write(#texte{ id = 120, fr = "Il n'est pas possible de s'auto bannir"}),\r
       mnesia:write(#texte{ id = 130, fr = "L'utilisateur est lui même un ekMaster"}),\r
@@ -179,32 +172,26 @@ peupler_texte() ->
       mnesia:write(#texte{ id = 230, fr = "Seul les ekMaster peuvent connaitre la liste des ips bannies"})\r
    end).\r
 \r
-\r
-% Met à jour la bd, compare ?VERSION_BD avec la version dans la table 'proprietes'\r
-% et exécute les patchs nécessaires.\r
+% Update the database to the latest version (?DB_VERSION).\r
 update() ->\r
    case mnesia:dirty_read({proprietes, version}) of\r
       [#proprietes{valeur = Version}] ->\r
          update(Version);\r
       _ ->\r
-         erreur\r
+         error\r
    end.\r
-\r
-\r
-% Mise à jour de la BD.\r
-% attention : il est nécessaire de se trouver dans une transaction.\r
-update(?VERSION_BD) -> fini;\r
+update(?DB_VERSION) -> finished;\r
 update(Version) ->\r
-   case mnesia:backup(fichier_backup(Version)) of\r
+   case mnesia:backup(backup_file_path(Version)) of\r
       ok ->\r
          case patch(Version) of\r
             ok ->\r
                mnesia:dirty_write(#proprietes{nom = version, valeur = Version + 1}),\r
                update(Version + 1);\r
-            Erreur ->\r
-               Erreur\r
+            Error ->\r
+               Error\r
          end;\r
-      {error, Raison} -> {error, lists:flatten(io_lib:format("Erreur de création du backup de la version ~w : ~w", [Version, Raison]))}\r
+      {error, Message} -> {error, lists:flatten(io_lib:format("Error: unable to create a backup file prior updating the database to the version ~w: ~w", [Version, Message]))}\r
    end.\r
 \r
 \r
@@ -255,7 +242,7 @@ patch(1) ->
       {attributes, record_info(fields, texte)},\r
       {disc_copies, [node()]}\r
    ]),\r
-   peupler_texte(),\r
+   populate_text(),\r
    % traitement des users\r
    mnesia:transform_table(\r
       user,\r
@@ -279,7 +266,7 @@ patch(1) ->
          lists:foreach(fun(M) -> Traiter_message(M, M#minichat.id) end, Messages)\r
       end\r
    ) of\r
-      {aborted, Raison} -> {erreur, Raison};\r
+      {aborted, Cause} -> {error, Cause};\r
       {atomic, _} -> ok\r
    end;\r
 % 2 -> 3\r
@@ -319,7 +306,7 @@ patch(2) ->
       % la table troll utilise maintenant son index et pas celui de la table minichat (correction d'un vieux bug)\r
       mnesia:write(#counter{key = troll, value = mnesia:table_info(minichat, size)})\r
    end),\r
-   creer_indexes(). % uniquement pour l'indice sur id_minichat de la table troll\r
+   create_indexes(). % uniquement pour l'indice sur id_minichat de la table troll\r
 \r
 \r
 % Renvoie le dossier dans lequel les backups sont effectué, ce dossier doit être en écriture.\r
@@ -328,7 +315,7 @@ dossier_backups() ->
 \r
 \r
 % Renvoie le fichier (avec le chemin) correspondant à la version Version, par exemple : "/var/euphorik/BD/backups/backup1"\r
-fichier_backup(Version) when is_integer(Version) ->\r
+backup_file_path(Version) when is_integer(Version) ->\r
    dossier_backups() ++ "backup" ++ integer_to_list(Version).\r
 \r
 \r
@@ -343,7 +330,7 @@ restore(Fichier) when is_list(Fichier) ->
 % Reviens à une version précédente de la base de données.\r
 % (les données insérées durant les versions plus récentes sont perdues).\r
 restore(Version) when is_integer(Version) ->\r
-   mnesia:restore(fichier_backup(Version), []). % [{default_op, recreate_tables}]).\r
+   mnesia:restore(backup_file_path(Version), []). % [{default_op, recreate_tables}]).\r
 \r
 \r
 % Change le nom du noeud d'un backup.\r
@@ -380,24 +367,6 @@ change_node_name(From, To, Source, Target) ->
         end,\r
     mnesia:traverse_backup(Source, Target, Convert, switched).\r
 \r
-\r
-% Obsolète\r
-%~ backup_text(File) ->\r
-   %~ mnesia:dump_to_textfile(File).\r
-%~ restore_text(File) ->\r
-   %~ mnesia:stop(),\r
-   %~ mnesia:delete_schema([node()]),\r
-   %~ mnesia:start(),\r
-   %~ create_tables(),\r
-   %~ case mnesia:load_textfile(File) of\r
-      %~ {atomic, ok} ->\r
-         %~ update(),\r
-         %~ creer_indexes();\r
-      %~ Erreur ->\r
-         %~ Erreur\r
-   %~ end.\r
-\r
-\r
 toggle_ek_master(User_id) ->\r
    euphorik_bd:resultat_transaction(mnesia:transaction(\r
       fun() ->\r
@@ -405,7 +374,7 @@ toggle_ek_master(User_id) ->
          case Users of\r
             [User] ->\r
                mnesia:write(User#user{ek_master = not User#user.ek_master});\r
-            _ -> erreur\r
+            _ -> error\r
          end\r
       end\r
    )).\r
@@ -468,7 +437,7 @@ print_user(Login) when is_list(Login) ->
       {ok, User} ->\r
          print_user(User);\r
       _ ->\r
-         {erreur, "Login pas trouvé : " ++ Login}\r
+         {error, "Login pas trouvé : " ++ Login}\r
    end;\r
 % Affichage d'un user en fonction de son id\r
 print_user(Id) when is_integer(Id) ->\r
@@ -476,6 +445,6 @@ print_user(Id) when is_integer(Id) ->
       {ok, User} ->\r
          print_user(User);\r
       _ ->\r
-         {erreur, "Id pas trouvé : " ++ integer_to_list(Id)}\r
+         {error, "Id pas trouvé : " ++ integer_to_list(Id)}\r
    end.\r
 \r