X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=modules%2Ferl%2Feuphorik_bd.erl;h=196a26e25f94cdccce7f651e79c41c7fdfe0a8a0;hp=f5fa2580a07c321c6bb96852eade4317259819b6;hb=4dfbbcf0f54cb3eb70856ea404d9ecef6aec5e26;hpb=11fe8f6d268a9b1c0a773294cc7d70ffdb6afb30 diff --git a/modules/erl/euphorik_bd.erl b/modules/erl/euphorik_bd.erl index f5fa258..196a26e 100755 --- a/modules/erl/euphorik_bd.erl +++ b/modules/erl/euphorik_bd.erl @@ -25,21 +25,17 @@ -module(euphorik_bd). -export([ % users : - nouveau_user/3, + nouveau_user/2, nouveau_user/4, - set_profile/1, + set_profile/4, update_date_derniere_connexion/1, update_ip/2, update_pseudo_user/2, - print_users/0, - print_users/1, - print_user/1, user_by_cookie/1, user_by_id/1, user_by_login/1, user_by_login_password/2, user_by_mess/1, - toggle_ek_master/1, css_from_user_cookie/1, is_ek_master_from_cookie/1, @@ -90,11 +86,10 @@ % Ajoute un nouveau user et le renvoie -% User_infos représente le profile de l'utilisateur, il est possibe qu'il soit vide -nouveau_user(Pseudo, Cookie, User_infos) -> +nouveau_user(Cookie, Profile) -> F = fun() -> Id = nouvel_id(user), - User = User_infos#user{id = Id, cookie = Cookie, pseudo = Pseudo, date_creation = now(), date_derniere_connexion = now()}, + User = #user{id = Id, cookie = Cookie, date_creation = now(), date_derniere_connexion = now(), profile = Profile}, mnesia:write(User), User end, @@ -102,32 +97,31 @@ nouveau_user(Pseudo, Cookie, User_infos) -> % Ajoute un nouveau user et le renvoie -% User_infos représente le profile de l'utilisateur, il est possibe qu'il soit vide -nouveau_user(Login, Password, Cookie, User_infos) -> +nouveau_user(Login, Password, Cookie, Profile) -> F = fun() -> Id = nouvel_id(user), - User = User_infos#user{id = Id, cookie = Cookie, pseudo = Login, login = Login, password = Password, date_creation = now(), date_derniere_connexion = now()}, + User = #user{id = Id, cookie = Cookie, login = Login, password = Password, date_creation = now(), date_derniere_connexion = now(), profile = Profile#profile{pseudo = Login}}, mnesia:write(User), User end, resultat_transaction(mnesia:transaction(F)). -% Définit les données d'une utilisateur. -set_profile(User) -> +% Définit les données du profile d'une utilisateur. +set_profile(Cookie, Login, Password, Profile) -> resultat_transaction(mnesia:transaction( fun() -> - case user_by_cookie(User#user.cookie) of + case user_by_cookie(Cookie) of {ok, User_existant} -> - case user_by_login(User#user.login) of - {ok, U} when User#user.login =/= [], U#user.id =/= User_existant#user.id -> + case user_by_login(Login) of + {ok, U} when Login =/= [], U#user.id =/= User_existant#user.id -> login_deja_pris; _ -> mnesia:write( - User#user{ - id = User_existant#user.id, - login = if User_existant#user.login =:= [] -> User#user.login; true -> User_existant#user.login end, % on ne peut pas changer de login sauf si on en a pas ! - password = if User#user.password =:= [] -> User_existant#user.password; true -> User#user.password end + User_existant#user{ + login = if User_existant#user.login =:= [] -> Login; true -> User_existant#user.login end, % on ne peut pas changer de login sauf si on en a pas ! + password = if Password =:= [] -> User_existant#user.password; true -> Password end, + profile = Profile } ), ok @@ -171,83 +165,14 @@ update_pseudo_user(UserId, Pseudo) -> mnesia:transaction( fun() -> case mnesia:wread({user, UserId}) of - [User] when User#user.pseudo =/= Pseudo -> - mnesia:write(User#user{pseudo = Pseudo}); + [#user{profile = Profile} = User] when Profile#profile.pseudo =/= Pseudo -> + mnesia:write(User#user{profile = Profile#profile { pseudo = Pseudo } }); _ -> mnesia:abort("update_pseudo_user: User inconnu ou pseudo deja à jour") end end ). - - -% Affiche N user trié par leur date de dernière connexion. -% Opt est une liste d'option d'affichage : -% * ekmaster : n'affiche que les admins -print_users(N, Opt) -> - AfficheQueLesEkMaster = lists:any(fun(O) -> O =:= ekmaster end, Opt), - resultat_transaction(mnesia:transaction(fun() -> - C = cursor( - qlc:keysort( - #user.date_derniere_connexion, - if AfficheQueLesEkMaster -> - q([E || E <- mnesia:table(user), E#user.ek_master =:= true]); - true -> - q([E || E <- mnesia:table(user)]) - end, - [{order, descending}] - ), - [{tmpdir, ?KEY_SORT_TEMP_DIR}] - ), - Users = qlc:next_answers(C, N), - lists:foreach( - fun(U) -> - print_user(U) - end, - Users - ), - qlc:delete_cursor(C) - end)). - - -% Affiche tous les users. -print_users(Opt) -> - print_users(all_remaining, Opt). - -% Affiche tous les users. -print_users() -> - print_users(all_remaining, []). - -print_user(User) when is_record(User, user) -> - #user{id = Id, pseudo = Pseudo, login = Login, ek_master = Ek_master, date_derniere_connexion = Date, last_ip = IP} = User, - {{Annee, Mois, Jour}, {Heure, Min, _}} = calendar:now_to_local_time(Date), - io:format( - % id pseudo (login) IP Jour Mois Année Heure Minute - "~4w : ~10.10..s(~10.10..s) ~s ~2w.~2.2.0w.~w - ~2wh~2.2.0w~n", - [ - Id, - if Ek_master -> "*"; true -> "" end ++ Pseudo, - Login, - euphorik_common:serialize_ip(IP), - Jour, Mois, Annee, Heure, Min - ] - ); -% Affichage d'un user en fonction de son login -print_user(Login) when is_list(Login) -> - case user_by_login(Login) of - {ok, User} -> - print_user(User); - _ -> - {erreur, "Login pas trouvé : " ++ Login} - end; -% Affichage d'un user en fonction de son id -print_user(Id) when is_integer(Id) -> - case user_by_id(Id) of - {ok, User} -> - print_user(User); - _ -> - {erreur, "Id pas trouvé : " ++ integer_to_list(Id)} - end. - + % Est-ce qu'un utilisateur existe en fonction de son cookie ? % Renvoie {ok, User} ou erreur @@ -284,25 +209,12 @@ user_by_login(Login) -> end )). - -toggle_ek_master(User_id) -> - resultat_transaction(mnesia:transaction( - fun() -> - Users = e(q([E || E <- mnesia:table(user), E#user.id =:= User_id]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]), - case Users of - [User] -> - mnesia:write(User#user{ek_master = not User#user.ek_master}); - _ -> erreur - end - 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; + {ok, #user{profile = Profile}} -> + Profile#profile.css; _ -> undefined end. @@ -364,7 +276,7 @@ nouveau_message(Mess, Auteur_id, Repond_A_ids) -> _ -> % est-ce que l'auteur existe ? case e(q([E || E <- mnesia:table(user), E#user.id =:= Auteur_id]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]) of - [Auteur] -> + [#user{profile = Profile} = Auteur] -> if length(Repond_a) =/= length(Repond_A_ids) -> {erreur, "Un ou plusieurs messages introuvable"}; true -> @@ -378,7 +290,7 @@ nouveau_message(Mess, Auteur_id, Repond_A_ids) -> % est-ce que l'auteur à trop floodé ? if Auteur#user.indice_flood =/= ?INDICE_SPAM_MAX, Auteur_maj#user.indice_flood =:= ?INDICE_SPAM_MAX, Delta =< ?DUREE_BLOCAGE_SPAM -> mnesia:write(Auteur#user{indice_flood = Auteur_maj#user.indice_flood}), - nouveau_message_sys("''" ++ Auteur#user.pseudo ++ if Auteur#user.login =/= [] -> " (" ++ Auteur#user.login ++ ")"; true -> "" end ++ "'' est bloqué pour " ++ integer_to_list(trunc(?DUREE_BLOCAGE_SPAM / 1000)) ++ " secondes pour cause de flood."); + nouveau_message_sys("''" ++ Profile#profile.pseudo ++ if Auteur#user.login =/= [] -> " (" ++ Auteur#user.login ++ ")"; true -> "" end ++ "'' est bloqué pour " ++ integer_to_list(trunc(?DUREE_BLOCAGE_SPAM / 1000)) ++ " secondes pour cause de flood."); Auteur#user.indice_flood =:= ?INDICE_SPAM_MAX, Delta =< ?DUREE_BLOCAGE_SPAM -> {erreur, "Bloqué pour cause de flood"}; true -> @@ -389,7 +301,7 @@ nouveau_message(Mess, Auteur_id, Repond_A_ids) -> id = Id, auteur_id = Auteur#user.id, date = now(), - pseudo = Auteur#user.pseudo, + pseudo = Profile#profile.pseudo, contenu = Mess, racine_id = if Racine_id =:= undefined -> Id; true -> Racine_id end }), @@ -419,11 +331,11 @@ nouveau_message_sys(Mess) -> % Création d'un message système lié à un troll. nouveau_message_sys(Mess, Troll_id) -> - {ok, Root} = user_by_id(0), + {ok, #user{profile = Profile}} = user_by_id(0), resultat_transaction(mnesia:transaction( fun() -> Id = nouvel_id(minichat), - mnesia:write(#minichat{id=Id, auteur_id=0, date=now(), pseudo=Root#user.pseudo, contenu=Mess, troll_id=Troll_id, racine_id=Id}), + mnesia:write(#minichat{id = Id, auteur_id = 0, date = now(), pseudo = Profile#profile.pseudo, contenu = Mess, troll_id = Troll_id, racine_id = Id}), Id end )). @@ -623,7 +535,7 @@ list_ban() -> { IP#ip_table.ip, delta_date_minute(date_plus_minutes(IP#ip_table.ban, IP#ip_table.ban_duration), Now), - e(q([{U#user.pseudo, U#user.login} || U <- mnesia:table(user), U#user.last_ip =:= IP#ip_table.ip]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]) + e(q([{Profile#profile.pseudo, U#user.login} || #user{profile = Profile} = U <- mnesia:table(user), U#user.last_ip =:= IP#ip_table.ip]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]) } || IP <- mnesia:table(ip_table), if IP#ip_table.ban =:= undefined -> false; true -> date_plus_minutes(IP#ip_table.ban, IP#ip_table.ban_duration) > Now end