ADD FIX#50 : numérotation des erreurs et préparation à leur traduction (coté serveur
[euphorik.git] / modules / erl / euphorik_protocole.erl
index 1b0a49b..82a4fce 100755 (executable)
@@ -25,7 +25,6 @@
 -export([\r
    register/2,\r
    login/2,\r
-   logout/1,\r
    profile/1,\r
    wait_event/1,\r
    put_message/1,\r
@@ -48,7 +47,7 @@ register([{login, Login}, {password, Password}, {profile, Profile_json}], IP) ->
    if Can_register ->\r
          case euphorik_bd:user_by_login(Login) of\r
             {ok, _} ->\r
-               erreur("Login déjà existant");\r
+               erreur(10);\r
             _ ->\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
@@ -70,7 +69,7 @@ register([{profile, Profile_json}], IP) ->
    end.\r
    \r
 erreur_register_flood() ->\r
-   erreur("Trop de register (flood)").\r
+   erreur(20).\r
    \r
 \r
 % Un utilisateur se logge (avec un couple {login, mot de passe})\r
@@ -80,7 +79,7 @@ login([{login, Login}, {password, Password}], IP) ->
          loginUser(User, IP);\r
       _ -> \r
          timer:sleep(?TEMPS_ATTENTE_ERREUR_LOGIN),\r
-         erreur("Couple login/pass introuvable")\r
+         erreur(30)\r
    end;\r
 % Un utilisateur se logge (avec un cookie)\r
 login([{cookie, Cookie}], IP) ->\r
@@ -89,9 +88,11 @@ login([{cookie, Cookie}], IP) ->
          loginUser(User, IP);\r
       _ ->\r
          timer:sleep(?TEMPS_ATTENTE_ERREUR_LOGIN),\r
-         erreur("Authentification impossible par cookie")\r
+         erreur(40)\r
    end.\r
    \r
+   \r
+% L'utilisateur donné se logge avec l'ip donnée.\r
 loginUser(User, IP) ->\r
    euphorik_bd:update_ip(User#user.id, IP),\r
    euphorik_bd:update_date_derniere_connexion(User#user.id),\r
@@ -105,11 +106,6 @@ generer_cookie() ->
    erlang:integer_to_list(random:uniform(math:pow(10, 32)), 36).\r
 \r
 \r
-% Un utilisateur se délogge.\r
-logout(_) ->\r
-   do_nothing.\r
-\r
-\r
 % Modification du profile.\r
 profile(\r
    [\r
@@ -122,14 +118,13 @@ profile(
    case profile_from_json(Profile_json) of\r
       {erreur, E} -> E;\r
       Profile ->\r
-         %  TODO : pas très beau, mieux vaut construire un #user\r
          case euphorik_bd:set_profile(Cookie, Login, Password, Profile) of\r
             ok ->\r
                json_reponse_ok();\r
             login_deja_pris ->\r
-               erreur("Login déjà pris");\r
+               erreur(10);\r
             _ ->\r
-               erreur("Impossible de mettre à jour le profile")\r
+               erreur(50)\r
          end\r
    end.\r
 \r
@@ -196,7 +191,7 @@ profile_from_json(
    end.\r
 \r
 \r
-% Renvoie les messages appropriés.\r
+% Attend un événement pour la page "Chat"\r
 % last_message id et cookie sont facultatifs\r
 wait_event([{page, "chat"} | Data]) ->\r
    % traitement des inputs\r
@@ -227,6 +222,7 @@ wait_event([{page, "chat"} | Data]) ->
          mnesia:unsubscribe({table, troll, detailed}),\r
          R\r
    end;\r
+% Attend un événement pour la page "Admin"\r
 wait_event([{page, "admin"}, {last_troll, Last_troll}]) ->\r
    case wait_event_page_admin(Last_troll) of\r
       banned_ips_refresh ->\r
@@ -273,12 +269,13 @@ wait_event([{page, "admin"}, {last_troll, Last_troll}]) ->
             ]\r
          };                  \r
       _ ->\r
-         erreur("timeout")\r
+         erreur(60)\r
    end;\r
 wait_event(_) ->\r
-   erreur("Page inconnue").\r
+   erreur(70).\r
 \r
 \r
+% Attend un événement pour la page "Chat" et renvoie soit un troll soit les messages manquants au client.\r
 wait_event_page_chat(User, Racines_conversations, Message_count, Last_message_id, Main_page, Troll_id) ->\r
    % est-ce que le troll est à jour ?\r
    case euphorik_bd:current_troll() of\r
@@ -429,23 +426,23 @@ put_message(
       {ok, User} ->\r
          case euphorik_bd:est_banni(User#user.id) of\r
             {true, Temps_restant} ->\r
-               erreur("Vous êtes banni pour encore " ++ format_minutes(Temps_restant));\r
+               erreur(80, format_minutes(Temps_restant));\r
             _ ->\r
                Strip_content = string:strip(Content),\r
                if Strip_content =:= [] ->\r
-                     erreur("Message vide");\r
+                     erreur(90);\r
                   true ->\r
                      % attention : non-atomique (update_pseudo+nouveau_message)\r
                      euphorik_bd:update_pseudo_user(User#user.id, Nick),\r
                      case euphorik_bd:nouveau_message(Strip_content, User#user.id, Answer_to) of\r
-                        {erreur, R} -> erreur("Impossible d'ajouter un nouveau message. Raison : " ++ R);\r
+                        {erreur, R} -> erreur(100, R);\r
                         _ ->\r
                            json_reponse_ok()\r
                      end\r
                end\r
          end;\r
    _ ->\r
-      erreur("Utilisateur inconnu")\r
+      erreur(110)\r
    end.\r
 \r
 \r
@@ -462,7 +459,7 @@ ban(
          {ok, User1 = #user{ek_master = true}} ->\r
             case euphorik_bd:user_by_id(User_id) of\r
                {ok, User1} ->\r
-                  erreur("Il n'est pas possible de s'auto bannir");\r
+                  erreur(120);\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
@@ -476,12 +473,12 @@ ban(
                   ))),\r
                   json_reponse_ok();\r
                {ok, _} ->\r
-                  erreur("L'utilisateur est lui même un ekMaster");\r
+                  erreur(130);\r
                _ ->\r
-                  erreur("Utilisateur à bannir inconnu")\r
+                  erreur(140)\r
             end;\r
          _ ->\r
-            erreur("Utilisateur inconnu ou non ek master")\r
+            erreur(150)\r
       end.\r
       \r
 \r
@@ -514,12 +511,12 @@ slap(
                   ))),\r
                   json_reponse_ok();\r
                {ok, _} ->\r
-                  erreur("L'utilisateur est lui même un ekMaster");\r
+                  erreur(130);\r
                _ ->\r
-                  erreur("Utilisateur à slaper inconnu")\r
+                  erreur(160)\r
             end;\r
          _ ->\r
-            erreur("Utilisateur inconnu ou non ek master")\r
+            erreur(170)\r
       end.\r
       \r
  \r
@@ -534,14 +531,14 @@ put_troll(
       {ok, User = #user{ek_master = true}} ->\r
          case euphorik_bd:put_troll(User#user.id, Content) of\r
             max_troll_reached_per_user ->\r
-               erreur(lists:flatten(io_lib:format("Le nombre de troll maximum par utilisateur est atteint : ~w ", [?NB_MAX_TROLL_WAITING_BY_USER])));\r
+               erreur(180, ?NB_MAX_TROLL_WAITING_BY_USER);\r
             max_troll_reached ->\r
-               erreur(lists:flatten(io_lib:format("Le nombre de troll maximum en attente est atteint : ~w ", [?NB_MAX_TROLL_WAITING])));\r
+               erreur(190, ?NB_MAX_TROLL_WAITING);\r
             _Id ->\r
                json_reponse_ok()\r
          end;\r
       _ ->\r
-         erreur("Seul les ekMaster peuvent proposer des trolls")\r
+         erreur(200)\r
    end.\r
    \r
    \r
@@ -561,10 +558,10 @@ mod_troll(
                euphorik_bd:mod_troll(Troll_id, Content),\r
                json_reponse_ok();\r
             _ ->\r
-               erreur("Vous ne posséder pas ce troll")\r
+               erreur(210)\r
          end;\r
       _ ->\r
-         erreur("Seul les ekMaster peuvent proposer des trolls")\r
+         erreur(220)\r
       end.\r
 \r
    \r
@@ -583,10 +580,10 @@ del_troll(
                euphorik_bd:del_troll(Troll_id),\r
                json_reponse_ok();\r
             _ ->\r
-               erreur("Vous ne posséder pas ce troll")\r
+               erreur(210)\r
          end;\r
       _ ->\r
-         erreur("Seul les ekMaster peuvent proposer des trolls")\r
+         erreur(220)\r
    end.\r
    \r
    \r
@@ -601,7 +598,7 @@ unban_ip(
          euphorik_bd:deban(euphorik_common:unserialize_ip(IP)),\r
          json_reponse_ok();\r
       _ ->\r
-         erreur("Seul les ekMaster peuvent connaitre la liste des ips bannies")\r
+         erreur(230)\r
    end.\r
    \r
    \r
@@ -641,16 +638,25 @@ list_banned_ips(
             ]\r
          };\r
       _ ->\r
-         erreur("Seul les ekMaster peuvent connaitre la liste des ips bannies")\r
+         erreur(230)\r
    end.\r
 \r
 \r
 % Construit une erreur\r
-erreur(Message) ->\r
+erreur(Num, Args) ->\r
+   erreur_json(Num, lists:flatten(io_lib:format(euphorik_bd:get_texte(Num), Args))).\r
+   \r
+   \r
+erreur(Num) ->\r
+   erreur_json(Num, euphorik_bd:get_texte(Num)).\r
+   \r
+   \r
+erreur_json(Num, Mess) ->\r
    {\r
       struct, [\r
          {reply, "error"},\r
-         {error_message, Message}\r
+         {no, Num},\r
+         {error_message, Mess}\r
       ]\r
    }.\r
    \r