ADD FIX#50 : numérotation des erreurs et préparation à leur traduction (coté serveur
authorGreg Burri <greg.burri@gmail.com>
Sat, 2 Aug 2008 00:40:09 +0000 (00:40 +0000)
committerGreg Burri <greg.burri@gmail.com>
Sat, 2 Aug 2008 00:40:09 +0000 (00:40 +0000)
js/pageRegister.js
modules/erl/euphorik_bd.erl
modules/erl/euphorik_bd_admin.erl
modules/erl/euphorik_protocole.erl
modules/include/euphorik_bd.hrl

index f1abd70..37f7705 100755 (executable)
@@ -42,7 +42,7 @@ euphorik.PageRegister.prototype.contenu = function() {
       '  </tr>' +\r
       '  <tr>' +\r
       '  <td></td>' +\r
-      '  <td><button>valider</button>' +\r
+      '  <td><button>valider</button></td>' +\r
       '  </tr>' +\r
       ' </table>' +\r
       '</form>';\r
index 921bac5..d583ecb 100755 (executable)
 \r
 -module(euphorik_bd).\r
 -export([   \r
+   % texte :\r
+   get_texte/1,\r
+   get_texte/2,\r
+   \r
    % users :\r
    nouveau_user/2,\r
    nouveau_user/4,\r
 -include_lib("stdlib/include/qlc.hrl").\r
 \r
 \r
+get_texte(Id) ->\r
+   get_texte(Id, fr).\r
+\r
+\r
+% TODO : généraliser la langue\r
+get_texte(Id, _Lang = fr) ->\r
+   resultat_transaction(mnesia:transaction(fun() ->\r
+      case mnesia:read({texte, Id}) of\r
+         [#texte{fr = Texte}] -> Texte;\r
+         _ -> "Message " ++ integer_to_list(Id) ++ " unknown"\r
+      end\r
+   end)).\r
+\r
+\r
 % Ajoute un nouveau user et le renvoie\r
 nouveau_user(Cookie, Profile) ->\r
    F = fun() ->\r
index 7412337..20da1fa 100644 (file)
@@ -23,7 +23,7 @@
 %  - Copie de la BD à partir d'un autre noeud
 %
 % @author G.Burri
-\r
+
 
 -module(euphorik_bd_admin).
 -export([
@@ -79,6 +79,10 @@ create_tables() ->
       {attributes, record_info(fields, proprietes)},
       {disc_copies, [node()]}
    ]),
+   mnesia:create_table(texte, [
+      {attributes, record_info(fields, texte)},
+      {disc_copies, [node()]}
+   ]),
    mnesia:create_table(minichat, [
       {attributes, record_info(fields, minichat)},
       {disc_copies, [node()]}
@@ -125,6 +129,7 @@ connect(Node) ->
 reset() ->
    mnesia:clear_table(counter),
    mnesia:clear_table(proprietes),
+   mnesia:clear_table(texte),
    mnesia:clear_table(user),
    mnesia:clear_table(reponse_minichat),
    mnesia:clear_table(minichat),
@@ -138,6 +143,34 @@ reset() ->
       User
    end).
    
+   
+peupler_texte() ->
+   mnesia:transaction(fun() ->
+      mnesia:write(#texte{ id = 10, fr = "Login déjà existant"}),
+      mnesia:write(#texte{ id = 20, fr = "Trop de register (flood)"}),
+      mnesia:write(#texte{ id = 30, fr = "Couple login/pass introuvable"}),
+      mnesia:write(#texte{ id = 40, fr = "Authentification impossible par cookie"}),
+      mnesia:write(#texte{ id = 50, fr = "Impossible de mettre à jour le profile"}),
+      mnesia:write(#texte{ id = 60, fr = "timeout"}),
+      mnesia:write(#texte{ id = 70, fr = "Page inconnue"}),
+      mnesia:write(#texte{ id = 80, fr = "Vous êtes banni pour encore ~w"}),
+      mnesia:write(#texte{ id = 90, fr = "Message vide"}),
+      mnesia:write(#texte{ id = 100, fr = "Impossible d'ajouter un nouveau message. Raison : ~w"}),
+      mnesia:write(#texte{ id = 110, fr = "Utilisateur inconnu"}),
+      mnesia:write(#texte{ id = 120, fr = "Il n'est pas possible de s'auto bannir"}),
+      mnesia:write(#texte{ id = 130, fr = "L'utilisateur est lui même un ekMaster"}),
+      mnesia:write(#texte{ id = 140, fr = "Utilisateur à bannir inconnu"}),
+      mnesia:write(#texte{ id = 150, fr = "Utilisateur inconnu ou non ek master"}),
+      mnesia:write(#texte{ id = 160, fr = "Utilisateur à slaper inconnu"}),
+      mnesia:write(#texte{ id = 170, fr = "Utilisateur inconnu ou non ek master"}),
+      mnesia:write(#texte{ id = 180, fr = "Le nombre de troll maximum par utilisateur est atteint : ~w "}),
+      mnesia:write(#texte{ id = 190, fr = "Le nombre de troll maximum en attente est atteint : ~w "}),
+      mnesia:write(#texte{ id = 200, fr = "Seul les ekMaster peuvent proposer des trolls"}),
+      mnesia:write(#texte{ id = 210, fr = "Vous ne posséder pas ce troll"}),
+      mnesia:write(#texte{ id = 220, fr = "Seul les ekMaster peuvent proposer des trolls"}),
+      mnesia:write(#texte{ id = 230, fr = "Seul les ekMaster peuvent connaitre la liste des ips bannies"})
+   end).
+
 
 % Met à jour la bd, compare ?VERSION_BD avec la version dans la table 'proprietes'
 % et exécute les patchs nécessaires.
@@ -172,6 +205,11 @@ update(Version) ->
 % dans BD/backups nommé "backup<num>" où <num> et le numéro de la version.
 % 1 -> 2
 patch(1) ->
+   mnesia:create_table(texte, [
+      {attributes, record_info(fields, texte)},
+      {disc_copies, [node()]}
+   ]),
+   peupler_texte(),
    % traitement des users   
    mnesia:transform_table(
       user,
index a321287..82a4fce 100755 (executable)
@@ -47,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
@@ -69,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
@@ -79,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
@@ -88,7 +88,7 @@ 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
@@ -122,9 +122,9 @@ profile(
             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
@@ -269,10 +269,10 @@ 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
@@ -426,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
@@ -459,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
@@ -473,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
@@ -511,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
@@ -531,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
@@ -558,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
@@ -580,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
@@ -598,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
@@ -638,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
index 01d6281..6713830 100755 (executable)
    }).
 
 
+% Contient tous les textes que peut envoyer le serveur vers client.
+-record(texte,
+   {
+      id,
+      fr
+   }).
+
+
 % décrit un enregistrement d'un message
 -record(minichat,
    {