% 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
+% Some functions to manage the database like creating, updating, backuping etc.\r
%\r
% @author G.Burri\r
\r
-\r
-module(euphorik_bd_admin).\r
+\r
-export([\r
version_bd/0,\r
create/0,\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
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
{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
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
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
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
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
{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
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
% 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
\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
% 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
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
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
{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
{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