X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=modules%2Ferl%2Feuphorik_bd.erl;h=187d6eaea9c722223ddb47f48d5b8c7e001747c5;hp=91d6f67ecf9f1e6b8d451db142b1c539b6335ba7;hb=64ef87442b933d47f4dbc9dfec9a5a16e522c375;hpb=5f6ea43b8825c6df005e0130f9e4fa54b1931831 diff --git a/modules/erl/euphorik_bd.erl b/modules/erl/euphorik_bd.erl index 91d6f67..187d6ea 100755 --- a/modules/erl/euphorik_bd.erl +++ b/modules/erl/euphorik_bd.erl @@ -29,11 +29,12 @@ connect/0, connect/1, reset/0, + update/0, % users : nouveau_user/2, nouveau_user/3, - set_profile/9, + set_profile/11, update_date_derniere_connexion/1, update_ip/2, update_pseudo_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() -> @@ -184,12 +222,12 @@ nouveau_user(Login, Password, Cookie) -> % Mise à par Cookie les autres peuvent être undefined ce qui veut dire qu'ils ne seront pas modifié. -set_profile(Cookie, Login, Password, Pseudo, Email, Css, Nick_format, Page_principale, Conversations) -> +set_profile(Cookie, Login, Password, Pseudo, Email, Css, Nick_format, View_times, View_tooltips, Page_principale, Conversations) -> if Nick_format =:= nick; Nick_format =:= login; Nick_format =:= nick_login -> resultat_transaction(mnesia:transaction( fun() -> case user_by_cookie(Cookie) of - {ok, User} -> + {ok, User} -> case user_by_login(Login) of {ok, U} when Login =/= [], U#user.id =/= User#user.id -> login_deja_pris; @@ -203,6 +241,8 @@ set_profile(Cookie, Login, Password, Pseudo, Email, Css, Nick_format, Page_princ email = if is_list(Email) -> Email; true -> User#user.email end, css = if is_list(Css) -> Css; true -> User#user.css end, nick_format = Nick_format, + view_times = View_times, + view_tooltips = View_tooltips, page_principale = if is_integer(Page_principale), Page_principale > 0 -> Page_principale; true -> User#user.page_principale end, conversations = if is_list(Conversations) -> Conversations; true -> User#user.conversations end }, @@ -359,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() ->