X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=modules%2Ferl%2Feuphorik_protocole.erl;h=fcce9c345131bf55e8f342e80ed5c3ffd20bb802;hb=3ea00589df90388456e8587b1bebdeab0f7e99fa;hp=c1bc3768dc95b00b3a2a9a55c4bb37c576d7f0dd;hpb=dd72797c35b6bde903c87b329bdb145f6863dc4a;p=euphorik.git diff --git a/modules/erl/euphorik_protocole.erl b/modules/erl/euphorik_protocole.erl index c1bc376..fcce9c3 100755 --- a/modules/erl/euphorik_protocole.erl +++ b/modules/erl/euphorik_protocole.erl @@ -12,6 +12,10 @@ wait_event/1, put_message/1, ban/1, + slap/1, + put_troll/1, + mod_troll/1, + del_troll/1, erreur/1 ]). @@ -119,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), @@ -186,7 +190,51 @@ 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) -> + {ok, User} = euphorik_bd:user_by_id(T#troll.id_user), + {struct, + [ + {troll_id, T#troll.id}, + {content, T#troll.content}, + {author, User#user.pseudo}, + {author_id, User#user.id} + ] + } + 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 @@ -242,7 +290,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 @@ -252,12 +301,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(); @@ -271,6 +321,110 @@ ban( end. +% slapage d'un user (avertissement) +slap( + [ + {cookie, Cookie}, + {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~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.~s", + [ + User2#user.pseudo, + User1#user.pseudo, + if Reason =/= [] -> " - Raison: " ++ Reason; true -> "" end ++ "." + ] + ))), + json_reponse_ok(); + {ok, _} -> + erreur("L'utilisateur est lui même un ekMaster"); + _ -> + erreur("Utilisateur à slaper inconnu") + end; + _ -> + 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(Troll_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(Troll_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) -> {