' </tr>' +\r
' <tr>' +\r
' <td></td>' +\r
- ' <td><button>valider</button>' +\r
+ ' <td><button>valider</button></td>' +\r
' </tr>' +\r
' </table>' +\r
'</form>';\r
\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
% - Copie de la BD à partir d'un autre noeud
%
% @author G.Burri
-\r
+
-module(euphorik_bd_admin).
-export([
{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()]}
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),
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.
% 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,
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
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
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
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
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
]\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
{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
{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
))),\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
))),\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
{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
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
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
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
]\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
}).
+% Contient tous les textes que peut envoyer le serveur vers client.
+-record(texte,
+ {
+ id,
+ fr
+ }).
+
+
% décrit un enregistrement d'un message
-record(minichat,
{