X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=modules%2Ferl%2Feuphorik_bd.erl;h=187d6eaea9c722223ddb47f48d5b8c7e001747c5;hp=13acf968d73b0ff78ef79ee237bb449fe8795874;hb=64ef87442b933d47f4dbc9dfec9a5a16e522c375;hpb=65a4c4e621c5cfc52f20097db8ede10714a7c0f6 diff --git a/modules/erl/euphorik_bd.erl b/modules/erl/euphorik_bd.erl index 13acf96..187d6ea 100755 --- a/modules/erl/euphorik_bd.erl +++ b/modules/erl/euphorik_bd.erl @@ -29,6 +29,7 @@ connect/0, connect/1, reset/0, + update/0, % users : nouveau_user/2, @@ -46,6 +47,7 @@ user_by_login_password/2, user_by_mess/1, toggle_ek_master/1, + css_from_user_cookie/1, % messages : nouveau_message/3, @@ -110,6 +112,10 @@ create_tables() -> {attributes, record_info(fields, counter)}, {disc_copies, [node()]} ]), + mnesia:create_table(proprietes, [ + {attributes, record_info(fields, proprietes)}, + {disc_copies, [node()]} + ]), mnesia:create_table(minichat, [ {attributes, record_info(fields, minichat)}, {index, [auteur_id, troll_id]}, @@ -154,13 +160,45 @@ reset() -> mnesia:clear_table(troll), mnesia:clear_table(ip_table), % crée l'utilisateur root - mnesia:transaction(fun() -> + mnesia:transaction(fun() -> + mnesia:write(#proprietes{nom = version, valeur = ?VERSION_BD}), User = #user{id = 0, pseudo = "Sys", login = "Sys", date_creation = now(), date_derniere_connexion = now(), ek_master = true}, mnesia:write(User), User end). +% Met à jour la bd, compare ?VERSION_BD avec la version dans la table 'proprietes' +% et exécute les patchs nécessaires. +update() -> + mnesia:transaction( + fun() -> + case mnesia:read({proprietes, version}) of + [#proprietes{nom = Version}] -> + update(Version); + _ -> + erreur + end + end + ). + + +% Mise à jour de la BD. +% attention : il est nécessaire de se trouver dans une transaction. +update(?VERSION_BD) -> fini; +update(Version) -> + patch(Version), + update(Version + 1). + + +% Applique une modification de la BD pour passer d'une version à la suivante. +% 1 -> 2 +patch(1) -> + ok. +% 2 -> 3 +%patch(2) -> + + % Ajoute un nouveau user et le renvoie nouveau_user(Pseudo, Cookie) -> F = fun() -> @@ -361,7 +399,19 @@ toggle_ek_master(User_id) -> end )). + +% Renvoie une chaine représentant le cookie ou undefined si pas trouvé. +css_from_user_cookie(Cookie) -> + case user_by_cookie(Cookie) of + {ok, User} -> + User#user.css; + _ -> + undefined + end. + + + user_by_login_password(Login, Password) -> resultat_transaction(mnesia:transaction( fun() ->