+% Efface tous les users, minichat_reponse et minichat.\r
+reset() ->\r
+ mnesia:clear_table(counter),\r
+ mnesia:clear_table(user),\r
+ mnesia:clear_table(reponse_minichat),\r
+ mnesia:clear_table(minichat),\r
+ % crée l'utilisateur root\r
+ mnesia:transaction(fun() ->\r
+ User = #user{id = 0, pseudo = "Sys", login = "Sys", date_creation = now(), date_derniere_connexion = now()},\r
+ mnesia:write(User),\r
+ User\r
+ end).
+
+
+% Ajoute un nouveau user et le renvoie
+nouveau_user(Pseudo, Cookie) ->
+ F = fun() ->
+ Id = nouvel_id(user),
+ User = #user{id = Id, cookie = Cookie, pseudo = Pseudo, date_creation = now(), date_derniere_connexion = now()},
+ mnesia:write(User),
+ User
+ end,
+ resultat_transaction(mnesia:transaction(F)).
+
+
+% Ajoute un nouveau user et le renvoie
+nouveau_user(Login, Password, Cookie) ->
+ F = fun() ->
+ Id = nouvel_id(user),
+ User = #user{id = Id, cookie = Cookie, pseudo = Login, login = Login, password = Password, date_creation = now(), date_derniere_connexion = now()},
+ mnesia:write(User),
+ User
+ end,
+ resultat_transaction(mnesia:transaction(F)).
+
+
+% 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) ->
+ if Nick_format =:= nick; Nick_format =:= login; Nick_format =:= nick_login ->
+ resultat_transaction(mnesia:transaction(
+ fun() ->
+ case user_by_cookie(Cookie) of
+ {ok, User} ->
+ case user_by_login(Login) of
+ {ok, U} when User#user.login =/= [], U#user.id =/= User#user.id ->
+ login_deja_pris;
+ _ ->
+ User_modifie = User#user{
+ % TODO : pourquoi ne pas tester avec la valeur "undefined" plutôt qu'avec "is_list" ?
+ % TODO : validation plus strict des données (pas de page négative dans les conv par exemple)
+ login = if is_list(Login) -> Login; true -> User#user.login end,
+ password = if is_list(Password) -> Password; true -> User#user.password end,
+ pseudo = if is_list(Pseudo) -> Pseudo; true -> User#user.pseudo end,
+ 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,
+ 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
+ },
+ mnesia:write(User_modifie),
+ ok
+ end;
+ _ -> erreur
+ end
+ end
+ ));
+ true ->
+ erreur
+ end.
+
+
+% Met à jour la date de la dernière connexion d'un utilisateur à maintenant
+update_date_derniere_connexion(User_id) ->
+ mnesia:transaction(
+ fun() ->
+ case mnesia:wread({user, User_id}) of
+ [User] ->
+ mnesia:write(User#user{date_derniere_connexion = now()});
+ _ ->
+ mnesia:abort("update_date_derniere_connexion: User inconnu")
+ end
+ end
+ ).
+
+
+% Met à jour l'ip d'un user
+update_ip(User_id, IP) ->
+ mnesia:transaction(
+ fun() ->
+ case mnesia:wread({user, User_id}) of
+ [User] ->
+ mnesia:write(User#user{last_ip = IP});
+ _ ->
+ mnesia:abort("update_ip: User inconnu")
+ end
+ end
+ ).
+
+
+% Met à jour le pseudo du user
+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});
+ _ ->
+ mnesia:abort("update_pseudo_user: User inconnu ou pseudo deja à jour")
+ end
+ end