X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=modules%2Ferl%2Feuphorik_protocole.erl;h=5c8d6d80bac435754a4d55468e42d08c603f6592;hp=c2342ca3c773824f78af9daec7f16262d05cf952;hb=81b3e94e62dd60087d71efc42004f8222d9e1e7a;hpb=7a5497fe66ee5318962dd5dde9f274bedb376e5d diff --git a/modules/erl/euphorik_protocole.erl b/modules/erl/euphorik_protocole.erl index c2342ca..5c8d6d8 100755 --- a/modules/erl/euphorik_protocole.erl +++ b/modules/erl/euphorik_protocole.erl @@ -13,6 +13,9 @@ put_message/1, ban/1, slap/1, + put_troll/1, + mod_troll/1, + del_troll/1, erreur/1 ]). @@ -120,7 +123,7 @@ profile( % Renvoie les messages appropriés. % last_message id et cookie sont facultatifs -wait_event(Data) -> +wait_event([{page, "chat"} | Data]) -> Cookie = case lists:keysearch(cookie, 1, Data) of {value, {_, C}} -> C; _ -> inconnu end, Last_message_id = case lists:keysearch(last_message_id, 1, Data) of {value, {_, Id}} -> Id; _ -> 0 end, {value, {_, Message_count}} = lists:keysearch(message_count, 1, Data), @@ -187,7 +190,48 @@ wait_event(Data) -> ) ) }} - ]}. + ]}; +wait_event([{page, "admin"}, {last_troll, Last_troll}]) -> + case euphorik_bd:trolls(Last_troll) of + {mod, Troll} -> + {struct, + [ + {reply, "troll_modified"}, + {troll_id, Troll#troll.id}, + {content, Troll#troll.content} + ] + }; + {add, Trolls} -> + {struct, + [ + {reply, "troll_added"}, + {trolls, {array, + lists:map( + fun(T) -> + {struct, + [ + {troll_id, T#troll.id}, + {content, T#troll.content} + ] + } + end, + Trolls + ) + }} + ] + }; + {del, Troll_id} -> + {struct, + [ + {reply, "troll_deleted"}, + {troll_id, Troll_id} + ] + }; + _ -> + erreur("timeout") + end; +wait_event(_) -> + erreur("Page inconnue"). % Un utilisateur envoie un message @@ -243,7 +287,8 @@ ban( [ {cookie, Cookie}, {duration, Duration}, - {user_id, User_id} + {user_id, User_id}, + {reason, Reason} ]) -> % controle que l'utilisateur est un admin case euphorik_bd:user_by_cookie(Cookie) of @@ -253,12 +298,13 @@ ban( erreur("Il n'est pas possible de s'auto bannir"); {ok, User2 = #user{ek_master = false}} -> euphorik_bd:ban(User2#user.last_ip, Duration), - euphorik_bd:nouveau_message_sys(lists:flatten(io_lib:format("~s ~s est ~s pour ~s", + euphorik_bd:nouveau_message_sys(lists:flatten(io_lib:format("~s ~s est ~s pour ~s.~s", [ User2#user.pseudo, if User2#user.login =:= [] -> ""; true -> "(" ++ User2#user.login ++ ")" end, if Duration =< 15 -> "kické"; true -> "banni" end, - format_minutes(Duration) + format_minutes(Duration), + if Reason =/= [] -> " Raison: " ++ Reason; true -> "" end ++ "." ] ))), json_reponse_ok(); @@ -276,19 +322,26 @@ ban( slap( [ {cookie, Cookie}, - {user_id, User_id} + {user_id, User_id}, + {reason, Reason} ]) -> % controle que l'utilisateur est un admin case euphorik_bd:user_by_cookie(Cookie) of {ok, User1 = #user{ek_master = true}} -> 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 (et il aime ça)", [User1#user.pseudo]))); + euphorik_bd:nouveau_message_sys(lists:flatten(io_lib:format("~s s'auto slap~s.", + [ + User1#user.pseudo, + if Reason =/= [] -> " Raison: " ++ Reason; true -> "" end + ] + ))); {ok, User2 = #user{ek_master = false}} -> - euphorik_bd:nouveau_message_sys(lists:flatten(io_lib:format("~s se fait slaper par ~s", + euphorik_bd:nouveau_message_sys(lists:flatten(io_lib:format("~s se fait slaper par ~s.~s", [ User2#user.pseudo, - User1#user.pseudo + User1#user.pseudo, + if Reason =/= [] -> " Raison: " ++ Reason; true -> "" end ++ "." ] ))), json_reponse_ok(); @@ -301,6 +354,73 @@ slap( erreur("Utilisateur inconnu ou non ek master") end. + +put_troll( + [ + {cookie, Cookie}, + {content, Content} + ] +) -> + % controle que l'utilisateur est un admin + case euphorik_bd:user_by_cookie(Cookie) of + {ok, User = #user{ek_master = true}} -> + case euphorik_bd:put_troll(User#user.id, Content) of + max_troll_reached_per_user -> + erreur(lists:flatten(io_lib:format("Le nombre de troll maximum par utilisateur est atteint : ~w ", [?NB_MAX_TROLL_WAITING_BY_USER]))); + max_troll_reached -> + erreur(lists:flatten(io_lib:format("Le nombre de troll maximum en attente est atteint : ~w ", [?NB_MAX_TROLL_WAITING]))); + _Id -> + json_reponse_ok() + end; + _ -> + erreur("Seul les ekMaster peuvent proposer des trolls") + end. + + +mod_troll( + [ + {cookie, Cookie}, + {troll_id, Troll_id}, + {content, Content} + ] +) -> + % controle que l'utilisateur est un admin + case euphorik_bd:user_by_cookie(Cookie) of + {ok, User = #user{ek_master = true}} -> + User_id = User#user.id, + case euphorik_bd:troll_by_id(Troll_id) of + {ok, #troll{id_user = User_id}} -> + euphorik_bd:mod_troll(User#user.id, Content), + json_reponse_ok(); + _ -> + erreur("Vous ne posséder pas ce troll") + end; + _ -> + erreur("Seul les ekMaster peuvent proposer des trolls") + end. + + +del_troll( + [ + {cookie, Cookie}, + {troll_id, Troll_id} + ] +) -> + % controle que l'utilisateur est un admin + case euphorik_bd:user_by_cookie(Cookie) of + {ok, User = #user{ek_master = true}} -> + User_id = User#user.id, + case euphorik_bd:troll_by_id(Troll_id) of + {ok, #troll{id_user = User_id}} -> + euphorik_bd:del_troll(User#user.id), + json_reponse_ok(); + _ -> + erreur("Vous ne posséder pas ce troll") + end; + _ -> + erreur("Seul les ekMaster peuvent proposer des trolls") + end. + % Construit une erreur erreur(Message) ->