MOD séparation logique du profile des utilisateurs dans la BD
[euphorik.git] / modules / erl / euphorik_protocole.erl
index c3dfbbe..1b0a49b 100755 (executable)
 \r
 \r
 % Une utilisateur s'enregistre avec un tuple {Login, Password}.\r
-register([{login, Login}, {password, Password}, {profile_infos, Profile_infos}], IP) ->\r
+register([{login, Login}, {password, Password}, {profile, Profile_json}], IP) ->\r
    Can_register = euphorik_bd:can_register(IP),\r
    if Can_register ->\r
          case euphorik_bd:user_by_login(Login) of\r
             {ok, _} ->\r
                erreur("Login déjà existant");\r
             _ ->\r
-               User = euphorik_bd:nouveau_user(Login, Password, generer_cookie(), user_from_json(Profile_infos)),\r
+               User = euphorik_bd:nouveau_user(Login, Password, generer_cookie(), profile_from_json(Profile_json)),\r
                euphorik_bd:update_ip(User#user.id, IP),\r
                json_reponse_login_ok(User)\r
          end;\r
@@ -58,10 +58,11 @@ register([{login, Login}, {password, Password}, {profile_infos, Profile_infos}],
          erreur_register_flood()\r
    end;\r
 % Enregistrement sans {Login, Password}\r
-register([{profile_infos, Profile_infos}], IP) ->   \r
+register([{profile, Profile_json}], IP) ->   \r
    Can_register = euphorik_bd:can_register(IP),\r
    if Can_register ->\r
-         User = euphorik_bd:nouveau_user("<nick>", generer_cookie(), user_from_json(Profile_infos)),\r
+         Profile = profile_from_json(Profile_json),\r
+         User = euphorik_bd:nouveau_user(generer_cookie(), Profile#profile{pseudo = "<nick>"}),\r
          euphorik_bd:update_ip(User#user.id, IP),\r
          json_reponse_login_ok(User);\r
       true ->\r
@@ -115,19 +116,14 @@ profile(
       {cookie, Cookie},\r
       {login, Login},\r
       {password, Password},\r
-      {profile_infos, Profile_infos}\r
+      {profile, Profile_json}\r
    ]\r
 ) ->\r
-   case user_from_json(Profile_infos) of\r
+   case profile_from_json(Profile_json) of\r
       {erreur, E} -> E;\r
-      UserInfos ->\r
-         User = UserInfos#user {\r
-            cookie = Cookie,\r
-            login = Login,\r
-            password = Password\r
-         },   \r
+      Profile ->\r
          %  TODO : pas très beau, mieux vaut construire un #user\r
-         case euphorik_bd:set_profile(User) of\r
+         case euphorik_bd:set_profile(Cookie, Login, Password, Profile) of\r
             ok ->\r
                json_reponse_ok();\r
             login_deja_pris ->\r
@@ -139,7 +135,7 @@ profile(
 \r
 \r
 % Construit un #user à partir des données JSON\r
-user_from_json(\r
+profile_from_json(\r
    {struct,\r
       [\r
          {nick, Pseudo},\r
@@ -184,7 +180,7 @@ user_from_json(
                if not Ostentatious_master_valide ->\r
                      {erreur, Ostentatious_master_str ++ " n'est pas une valeur acceptée pour 'ostentatious_master'"};\r
                   true ->\r
-                     #user{\r
+                     #profile{\r
                         pseudo = Pseudo,\r
                         email = Email,\r
                         css = Css,\r
@@ -254,12 +250,12 @@ wait_event([{page, "admin"}, {last_troll, Last_troll}]) ->
                {trolls, {array, \r
                   lists:map(\r
                      fun(T) ->                        \r
-                        {ok, User} = euphorik_bd:user_by_id(T#troll.id_user),\r
+                        {ok, #user{profile = Profile} = User} = euphorik_bd:user_by_id(T#troll.id_user),\r
                         {struct,\r
                            [\r
                               {troll_id, T#troll.id},\r
                               {content, T#troll.content},\r
-                              {author, User#user.pseudo},\r
+                              {author, Profile#profile.pseudo},\r
                               {author_id, User#user.id}\r
                            ]\r
                         }\r
@@ -467,11 +463,11 @@ ban(
             case euphorik_bd:user_by_id(User_id) of\r
                {ok, User1} ->\r
                   erreur("Il n'est pas possible de s'auto bannir");\r
-               {ok, User2 = #user{ek_master = false}} ->\r
+               {ok, #user{ek_master = false, profile = Profile2} = User2} ->\r
                   euphorik_bd:ban(User2#user.last_ip, Duration),\r
                   euphorik_bd:nouveau_message_sys(lists:flatten(io_lib:format("''~s~s'' est ~s pour ~s.~s",\r
                      [\r
-                        User2#user.pseudo,\r
+                        Profile2#profile.pseudo,\r
                         if User2#user.login =:= [] -> ""; true -> " (" ++ User2#user.login ++ ")" end,\r
                         if Duration =< 15 -> "kické"; true -> "banni" end,\r
                         format_minutes(Duration),\r
@@ -498,21 +494,21 @@ slap(
    ]) ->\r
       % controle que l'utilisateur est un admin\r
       case euphorik_bd:user_by_cookie(Cookie) of\r
-         {ok, User1 = #user{ek_master = true}} ->\r
+         {ok, User1 = #user{ek_master = true, profile = Profile1}} ->\r
             case euphorik_bd:user_by_id(User_id) of\r
                {ok, User1} ->\r
                   euphorik_bd:nouveau_message_sys(lists:flatten(io_lib:format("~s s'auto slap~s.", \r
                      [\r
-                        User1#user.pseudo,\r
+                        Profile1#profile.pseudo,\r
                         if Reason =/= [] -> " - Raison: " ++ Reason; true -> "" end\r
                      ]\r
                   ))),\r
                   json_reponse_ok();\r
-               {ok, User2 = #user{ek_master = false}} ->\r
+               {ok, #user{ek_master = false, profile = Profile2}} ->\r
                   euphorik_bd:nouveau_message_sys(lists:flatten(io_lib:format("~s se fait slaper par ~s.~s",\r
                      [\r
-                        User2#user.pseudo,\r
-                        User1#user.pseudo,\r
+                        Profile2#profile.pseudo,\r
+                        Profile1#profile.pseudo,\r
                         if Reason =/= [] -> " - Raison: " ++ Reason; true -> "" end ++ "."\r
                      ]\r
                   ))),\r
@@ -700,29 +696,33 @@ json_reponse_ok() ->
    {struct, [{reply, "ok"}]}.\r
    \r
    \r
-json_reponse_login_ok(User) ->\r
+json_reponse_login_ok(#user{profile = Profile} = User) ->\r
    {\r
       struct, [\r
          {reply, "login"},\r
          {status, if (User#user.password =/= []) and (User#user.login =/= []) -> "auth_registered"; true -> "auth_not_registered" end},\r
          {cookie, User#user.cookie},\r
          {id, User#user.id},\r
-         {nick, User#user.pseudo},\r
          {login, User#user.login},\r
-         {email, User#user.email},\r
-         {css, User#user.css},\r
-         {chat_order, atom_to_list(User#user.chat_order)},\r
-         {nick_format, atom_to_list(User#user.nick_format)},\r
-         {view_times, User#user.view_times},\r
-         {view_tooltips, User#user.view_tooltips},\r
-         {conversations, {array, lists:map(\r
-            fun({Racine, Reduit}) ->\r
-               {struct, [{root, Racine}, {minimized, Reduit}]}\r
-            end,\r
-            User#user.conversations\r
-         )}},\r
          {ek_master, User#user.ek_master},\r
-         {ostentatious_master, atom_to_list(User#user.ostentatious_master)}\r
+         {profile, {struct,\r
+            [\r
+               {nick, Profile#profile.pseudo},\r
+               {email, Profile#profile.email},\r
+               {css, Profile#profile.css},\r
+               {chat_order, atom_to_list(Profile#profile.chat_order)},\r
+               {nick_format, atom_to_list(Profile#profile.nick_format)},\r
+               {view_times, Profile#profile.view_times},\r
+               {view_tooltips, Profile#profile.view_tooltips},\r
+               {conversations, {array, lists:map(\r
+                  fun({Racine, Reduit}) ->\r
+                     {struct, [{root, Racine}, {minimized, Reduit}]}\r
+                  end,\r
+                  Profile#profile.conversations\r
+               )}},\r
+               {ostentatious_master, atom_to_list(Profile#profile.ostentatious_master)}\r
+            ]\r
+         }}\r
       ]\r
    }.\r
    \r
@@ -734,7 +734,7 @@ json_message(Mess, Repond_a, User) ->
    Est_proprietaire = User =/= inconnu andalso User#user.id =:= Mess#minichat.auteur_id,\r
    A_repondu_a_message = User =/= inconnu andalso euphorik_bd:a_repondu_a_message(User#user.id, Mess#minichat.id),\r
    Est_une_reponse_a_user = User =/= inconnu andalso euphorik_bd:est_une_reponse_a_user(User#user.id, Mess#minichat.id),\r
-   {ok, User_mess } = euphorik_bd:user_by_id(Mess#minichat.auteur_id),\r
+   {ok,  #user{profile = Profile_mess} = User_mess } = euphorik_bd:user_by_id(Mess#minichat.auteur_id),\r
    {struct, [\r
       {id, Mess#minichat.id},\r
       {user_id, User_mess#user.id},\r
@@ -756,5 +756,5 @@ json_message(Mess, Repond_a, User) ->
          Repond_a\r
       )}},\r
       {ek_master, User_mess#user.ek_master},\r
-      {ostentatious_master, atom_to_list(User_mess#user.ostentatious_master)}\r
+      {ostentatious_master, atom_to_list(Profile_mess#profile.ostentatious_master)}\r
    ]}.\r