From: Greg Burri Date: Sat, 26 Jul 2008 19:59:28 +0000 (+0000) Subject: MOD séparation logique du profile des utilisateurs dans la BD X-Git-Tag: 1.1.0~41 X-Git-Url: https://git.euphorik.ch/?a=commitdiff_plain;h=d1e6f8e7c86f1ee75e854266463541ffedb916c9;p=euphorik.git MOD séparation logique du profile des utilisateurs dans la BD --- diff --git a/doc/protocole3.txt b/doc/protocole3.txt index c8642ab..2eb81a6 100644 --- a/doc/protocole3.txt +++ b/doc/protocole3.txt @@ -58,7 +58,7 @@ c -> s "header" : {action : "register", version : 3}, "login" : "paul", "password" : "IJKJDHHSAD9081238", - "profile_infos" : { .. } // voir + "profile" : { .. } // voir } ou { @@ -78,17 +78,9 @@ s -> c "status" : "auth_registered" | "auth_not_registered", "cookie" : "LKJDLAKSJBFLKASN", "id" : 193, - "nick" : "Paul", "login" : "paul49", - "email" : "paul@pierre.com", - "css" : "css/3/euphorik.css", - "chat_order" : "chrono" | "reverse", - "nick_format" : "nick" | "login" | "nick_login", - "view_times" : true | false, - "view_tooltips" : true | false, - "conversations" : [{"root" : 3, "minimized" : true}, "ek_master" : true | false, - "ostentatious_master" : "invisible" | "light" | "heavy" + "profile" : } @@ -101,7 +93,7 @@ c -> s === Profile === - + { "nick" : "Paul", "email" : "paul@pierre.com", @@ -120,7 +112,7 @@ c -> s "cookie" : "LKJDLAKSJBFLKASN", "login" : "paul49", "password" : "IJKJDHHSAD9081238", - "profile_infos" : + "profile" : } s -> c diff --git a/js/client.js b/js/client.js index 73622a4..9daa0f5 100644 --- a/js/client.js +++ b/js/client.js @@ -189,7 +189,7 @@ euphorik.Client.prototype.getJSONEnregistrement = function(login, password) { mess.password = password; } - mess.profile_infos = this.getJSONProfileInfos(); + mess.profile = this.getJSONProfileInfos(); return mess; }; @@ -208,7 +208,7 @@ euphorik.Client.prototype.getJSONProfile = function() { "cookie" : this.cookie, "login" : this.login, "password" : this.password, - "profile_infos" : this.getJSONProfileInfos() + "profile" : this.getJSONProfileInfos() }; }; @@ -356,20 +356,20 @@ euphorik.Client.prototype.chargerDonnees = function(data) { this.id = data.id; this.login = data.login; - this.pseudo = data.nick; - this.email = data.email; - this.setCss(data.css); - this.chatOrder = data.chat_order; - this.nickFormat = data.nick_format; - this.viewTimes = data.view_times; - this.viewTooltips = data.view_tooltips; - this.ostentatiousMaster = data.ostentatious_master; + this.pseudo = data.profile.nick; + this.email = data.profile.email; + this.setCss(data.profile.css); + this.chatOrder = data.profile.chat_order; + this.nickFormat = data.profile.nick_format; + this.viewTimes = data.profile.view_times; + this.viewTooltips = data.profile.view_tooltips; + this.ostentatiousMaster = data.profile.ostentatious_master; // la page de la conversation principale this.pagePrincipale = 1; // les conversations - this.conversations = data.conversations; + this.conversations = data.profile.conversations; this.conversations.map(function(conv) { return { root : conv.root, page : 1, reduit : conv.minimized }; }); diff --git a/modules/erl/euphorik_bd.erl b/modules/erl/euphorik_bd.erl index f5fa258..904fc0a 100755 --- a/modules/erl/euphorik_bd.erl +++ b/modules/erl/euphorik_bd.erl @@ -25,9 +25,9 @@ -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, @@ -90,11 +90,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 +101,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,8 +169,8 @@ 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 @@ -218,7 +216,7 @@ 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, + #user{id = Id, profile = #profile{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 @@ -301,8 +299,8 @@ toggle_ek_master(User_id) -> % 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 +362,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 +376,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 +387,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 +417,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 +621,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 diff --git a/modules/erl/euphorik_bd_admin.erl b/modules/erl/euphorik_bd_admin.erl index b683cc5..18e6ced 100644 --- a/modules/erl/euphorik_bd_admin.erl +++ b/modules/erl/euphorik_bd_admin.erl @@ -16,20 +16,20 @@ % You should have received a copy of the GNU General Public License % along with Euphorik. If not, see . % -% Module mettant à disposition tout un tas de fonction pour l'administration de la base de données euphorik comme : -% - Création de la BD -% - Mise à jour de la BD -% - Backup et restauration -% - Copie de la BD à partir d'un autre noeud +% Module mettant à disposition tout un tas de fonction pour l'administration de la base de données euphorik comme : +% - Création de la BD +% - Mise à jour de la BD +% - Backup et restauration +% - Copie de la BD à partir d'un autre noeud % % @author G.Burri -module(euphorik_bd_admin). -export([ - version_bd/0, - create/0, - connect/0, - connect/1, + version_bd/0, + create/0, + connect/0, + connect/1, reset/0, update/0, backup/1, @@ -47,82 +47,82 @@ version_bd() -> fun() -> mnesia:read({proprietes, version}) end - )). - - -% Instructions pour créer une nouvelle base : -% $erl -sname yaws -mnesia dir '"/projets/euphorik/BD"' -% voir doc/installation.txt -% >l(euphorik_bd). -% >euphorik_bd:create(). -create() -> - mnesia:stop(), - mnesia:delete_schema([node()]), - mnesia:create_schema([node()]), % nécessaire pour les tables sur disc - mnesia:start(), - create_tables(), - reset(). - -create_tables() -> - mnesia:create_table(counter, [ - {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]}, - {disc_copies, [node()]} - ]), - mnesia:create_table(reponse_minichat, [ - {type, bag}, - {attributes, record_info(fields, reponse_minichat)}, - {index, [cible]}, - {disc_copies, [node()]} - ]), - mnesia:create_table(user, [ - {attributes, record_info(fields, user)}, - {index, [cookie, login]}, - {disc_copies, [node()]} - ]), - mnesia:create_table(ip_table, [ - {attributes, record_info(fields, ip_table)}, - {disc_copies, [node()]} - ]), - mnesia:create_table(troll, [ - {attributes, record_info(fields, troll)}, - {index, [date_post]}, - {disc_copies, [node()]} - ]). - - -% Connexion à la base de données de yaws sur overnux -connect() -> - connect(yaws@flynux). -connect(Node) -> - mnesia:start(), - mnesia:change_config(extra_db_nodes, [Node]). - - -% Efface toutes les données de la base de données. -reset() -> - mnesia:clear_table(counter), - mnesia:clear_table(proprietes), - mnesia:clear_table(user), - mnesia:clear_table(reponse_minichat), - mnesia:clear_table(minichat), - mnesia:clear_table(troll), - mnesia:clear_table(ip_table), - % crée l'utilisateur root - 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). + )). + + +% Instructions pour créer une nouvelle base : +% $erl -sname yaws -mnesia dir '"/projets/euphorik/BD"' +% voir doc/installation.txt +% >l(euphorik_bd). +% >euphorik_bd:create(). +create() -> + mnesia:stop(), + mnesia:delete_schema([node()]), + mnesia:create_schema([node()]), % nécessaire pour les tables sur disc + mnesia:start(), + create_tables(), + reset(). + +create_tables() -> + mnesia:create_table(counter, [ + {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]}, + {disc_copies, [node()]} + ]), + mnesia:create_table(reponse_minichat, [ + {type, bag}, + {attributes, record_info(fields, reponse_minichat)}, + {index, [cible]}, + {disc_copies, [node()]} + ]), + mnesia:create_table(user, [ + {attributes, record_info(fields, user)}, + {index, [cookie, login]}, + {disc_copies, [node()]} + ]), + mnesia:create_table(ip_table, [ + {attributes, record_info(fields, ip_table)}, + {disc_copies, [node()]} + ]), + mnesia:create_table(troll, [ + {attributes, record_info(fields, troll)}, + {index, [date_post]}, + {disc_copies, [node()]} + ]). + + +% Connexion à la base de données de yaws sur overnux +connect() -> + connect(yaws@flynux). +connect(Node) -> + mnesia:start(), + mnesia:change_config(extra_db_nodes, [Node]). + + +% Efface toutes les données de la base de données. +reset() -> + mnesia:clear_table(counter), + mnesia:clear_table(proprietes), + mnesia:clear_table(user), + mnesia:clear_table(reponse_minichat), + mnesia:clear_table(minichat), + mnesia:clear_table(troll), + mnesia:clear_table(ip_table), + % crée l'utilisateur root + mnesia:transaction(fun() -> + mnesia:write(#proprietes{nom = version, valeur = ?VERSION_BD}), + User = #user{id = 0, profile = #profile{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' @@ -162,7 +162,7 @@ patch(1) -> mnesia:transform_table( user, fun({user, Id, Cookie, Pseudo, Login, Password, Email, Date_creation, Date_derniere_connexion, Css, Nick_format, View_times, View_tooltips, Indice_flood, _Page_principale, Conversations, Ek_master, Last_ip}) -> - {user, Id, Cookie, Pseudo, Login, Password, Email, Date_creation, Date_derniere_connexion, patch1_transforme_css(Css), Nick_format, View_times, View_tooltips, light, reverse, Indice_flood, lists:map(fun({R, _}) -> {R, false} end, Conversations), Ek_master, Last_ip} + {user, Id, Cookie, Login, Password, {profile, Pseudo, Email, patch1_transforme_css(Css), Nick_format, View_times, View_tooltips, light, reverse, lists:map(fun({R, _}) -> {R, false} end, Conversations)}, Date_creation, Date_derniere_connexion, Indice_flood, Ek_master, Last_ip} end, record_info(fields, user), user diff --git a/modules/erl/euphorik_protocole.erl b/modules/erl/euphorik_protocole.erl index c3dfbbe..1b0a49b 100755 --- a/modules/erl/euphorik_protocole.erl +++ b/modules/erl/euphorik_protocole.erl @@ -43,14 +43,14 @@ % Une utilisateur s'enregistre avec un tuple {Login, Password}. -register([{login, Login}, {password, Password}, {profile_infos, Profile_infos}], IP) -> +register([{login, Login}, {password, Password}, {profile, Profile_json}], IP) -> Can_register = euphorik_bd:can_register(IP), if Can_register -> case euphorik_bd:user_by_login(Login) of {ok, _} -> erreur("Login déjà existant"); _ -> - User = euphorik_bd:nouveau_user(Login, Password, generer_cookie(), user_from_json(Profile_infos)), + User = euphorik_bd:nouveau_user(Login, Password, generer_cookie(), profile_from_json(Profile_json)), euphorik_bd:update_ip(User#user.id, IP), json_reponse_login_ok(User) end; @@ -58,10 +58,11 @@ register([{login, Login}, {password, Password}, {profile_infos, Profile_infos}], erreur_register_flood() end; % Enregistrement sans {Login, Password} -register([{profile_infos, Profile_infos}], IP) -> +register([{profile, Profile_json}], IP) -> Can_register = euphorik_bd:can_register(IP), if Can_register -> - User = euphorik_bd:nouveau_user("", generer_cookie(), user_from_json(Profile_infos)), + Profile = profile_from_json(Profile_json), + User = euphorik_bd:nouveau_user(generer_cookie(), Profile#profile{pseudo = ""}), euphorik_bd:update_ip(User#user.id, IP), json_reponse_login_ok(User); true -> @@ -115,19 +116,14 @@ profile( {cookie, Cookie}, {login, Login}, {password, Password}, - {profile_infos, Profile_infos} + {profile, Profile_json} ] ) -> - case user_from_json(Profile_infos) of + case profile_from_json(Profile_json) of {erreur, E} -> E; - UserInfos -> - User = UserInfos#user { - cookie = Cookie, - login = Login, - password = Password - }, + Profile -> % TODO : pas très beau, mieux vaut construire un #user - case euphorik_bd:set_profile(User) of + case euphorik_bd:set_profile(Cookie, Login, Password, Profile) of ok -> json_reponse_ok(); login_deja_pris -> @@ -139,7 +135,7 @@ profile( % Construit un #user à partir des données JSON -user_from_json( +profile_from_json( {struct, [ {nick, Pseudo}, @@ -184,7 +180,7 @@ user_from_json( if not Ostentatious_master_valide -> {erreur, Ostentatious_master_str ++ " n'est pas une valeur acceptée pour 'ostentatious_master'"}; true -> - #user{ + #profile{ pseudo = Pseudo, email = Email, css = Css, @@ -254,12 +250,12 @@ wait_event([{page, "admin"}, {last_troll, Last_troll}]) -> {trolls, {array, lists:map( fun(T) -> - {ok, User} = euphorik_bd:user_by_id(T#troll.id_user), + {ok, #user{profile = Profile} = User} = euphorik_bd:user_by_id(T#troll.id_user), {struct, [ {troll_id, T#troll.id}, {content, T#troll.content}, - {author, User#user.pseudo}, + {author, Profile#profile.pseudo}, {author_id, User#user.id} ] } @@ -467,11 +463,11 @@ ban( case euphorik_bd:user_by_id(User_id) of {ok, User1} -> erreur("Il n'est pas possible de s'auto bannir"); - {ok, User2 = #user{ek_master = false}} -> + {ok, #user{ek_master = false, profile = Profile2} = User2} -> euphorik_bd:ban(User2#user.last_ip, Duration), euphorik_bd:nouveau_message_sys(lists:flatten(io_lib:format("''~s~s'' est ~s pour ~s.~s", [ - User2#user.pseudo, + Profile2#profile.pseudo, if User2#user.login =:= [] -> ""; true -> " (" ++ User2#user.login ++ ")" end, if Duration =< 15 -> "kické"; true -> "banni" end, format_minutes(Duration), @@ -498,21 +494,21 @@ slap( ]) -> % controle que l'utilisateur est un admin case euphorik_bd:user_by_cookie(Cookie) of - {ok, User1 = #user{ek_master = true}} -> + {ok, User1 = #user{ek_master = true, profile = Profile1}} -> case euphorik_bd:user_by_id(User_id) of {ok, User1} -> euphorik_bd:nouveau_message_sys(lists:flatten(io_lib:format("~s s'auto slap~s.", [ - User1#user.pseudo, + Profile1#profile.pseudo, if Reason =/= [] -> " - Raison: " ++ Reason; true -> "" end ] ))), json_reponse_ok(); - {ok, User2 = #user{ek_master = false}} -> + {ok, #user{ek_master = false, profile = Profile2}} -> euphorik_bd:nouveau_message_sys(lists:flatten(io_lib:format("~s se fait slaper par ~s.~s", [ - User2#user.pseudo, - User1#user.pseudo, + Profile2#profile.pseudo, + Profile1#profile.pseudo, if Reason =/= [] -> " - Raison: " ++ Reason; true -> "" end ++ "." ] ))), @@ -700,29 +696,33 @@ json_reponse_ok() -> {struct, [{reply, "ok"}]}. -json_reponse_login_ok(User) -> +json_reponse_login_ok(#user{profile = Profile} = User) -> { struct, [ {reply, "login"}, {status, if (User#user.password =/= []) and (User#user.login =/= []) -> "auth_registered"; true -> "auth_not_registered" end}, {cookie, User#user.cookie}, {id, User#user.id}, - {nick, User#user.pseudo}, {login, User#user.login}, - {email, User#user.email}, - {css, User#user.css}, - {chat_order, atom_to_list(User#user.chat_order)}, - {nick_format, atom_to_list(User#user.nick_format)}, - {view_times, User#user.view_times}, - {view_tooltips, User#user.view_tooltips}, - {conversations, {array, lists:map( - fun({Racine, Reduit}) -> - {struct, [{root, Racine}, {minimized, Reduit}]} - end, - User#user.conversations - )}}, {ek_master, User#user.ek_master}, - {ostentatious_master, atom_to_list(User#user.ostentatious_master)} + {profile, {struct, + [ + {nick, Profile#profile.pseudo}, + {email, Profile#profile.email}, + {css, Profile#profile.css}, + {chat_order, atom_to_list(Profile#profile.chat_order)}, + {nick_format, atom_to_list(Profile#profile.nick_format)}, + {view_times, Profile#profile.view_times}, + {view_tooltips, Profile#profile.view_tooltips}, + {conversations, {array, lists:map( + fun({Racine, Reduit}) -> + {struct, [{root, Racine}, {minimized, Reduit}]} + end, + Profile#profile.conversations + )}}, + {ostentatious_master, atom_to_list(Profile#profile.ostentatious_master)} + ] + }} ] }. @@ -734,7 +734,7 @@ json_message(Mess, Repond_a, User) -> Est_proprietaire = User =/= inconnu andalso User#user.id =:= Mess#minichat.auteur_id, A_repondu_a_message = User =/= inconnu andalso euphorik_bd:a_repondu_a_message(User#user.id, Mess#minichat.id), Est_une_reponse_a_user = User =/= inconnu andalso euphorik_bd:est_une_reponse_a_user(User#user.id, Mess#minichat.id), - {ok, User_mess } = euphorik_bd:user_by_id(Mess#minichat.auteur_id), + {ok, #user{profile = Profile_mess} = User_mess } = euphorik_bd:user_by_id(Mess#minichat.auteur_id), {struct, [ {id, Mess#minichat.id}, {user_id, User_mess#user.id}, @@ -756,5 +756,5 @@ json_message(Mess, Repond_a, User) -> Repond_a )}}, {ek_master, User_mess#user.ek_master}, - {ostentatious_master, atom_to_list(User_mess#user.ostentatious_master)} + {ostentatious_master, atom_to_list(Profile_mess#profile.ostentatious_master)} ]}. diff --git a/modules/include/euphorik_bd.hrl b/modules/include/euphorik_bd.hrl index 038dae8..01d6281 100755 --- a/modules/include/euphorik_bd.hrl +++ b/modules/include/euphorik_bd.hrl @@ -20,6 +20,7 @@ % Version de la BD -define(VERSION_BD, 2). +-define(TABLES, [counter, proprietes, minichat, reponse_minichat, user, ip_table, troll]). % Pour générer des id @@ -60,24 +61,29 @@ }). --record(user, + +-record(profile, % attention : pas une table ! { - id, - cookie, % string() - login = [], % string() - password = [], % string() (md5) pseudo = [], % string() email = [], % string() - date_creation, % erlang:now() - date_derniere_connexion, % erlang:now(), est mis à jour lors de n'importe quelle activitée (envoie de message par exemple) css = [], % string() nick_format = nick, %atom(), peut valoir 'nick', 'login' ou 'nick_login' view_times = true, view_tooltips = true, ostentatious_master = light, % peut valoir invisible, light ou heavy. seulement pour ek_master chat_order = reverse, % peut valoir chrono ou reverse + conversations = [] % [{integer(), bool}], la liste des messages correspondant au conversation {racine, reduite?} + }). +-record(user, + { + id, + cookie, % string() + login = [], % string() + password = [], % string() (md5) + profile = #profile{}, + date_creation, % erlang:now() + date_derniere_connexion, % erlang:now(), est mis à jour lors de n'importe quelle activitée (envoie de message par exemple) indice_flood = 0, % integer() est incrémenté lorsque l'utilisateur envoie trop rapidement des messages. - conversations = [], % [{integer(), bool}], la liste des messages correspondant au conversation {racine, reduite?} ek_master = false, last_ip = undefined % integer(), undefined si inconnu }).