X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=modules%2Ferl%2Feuphorik_protocole.erl;h=dc29bf5d2f8f3e53af8aae28050738c1c7df9021;hb=01922222ac686c2507052c0cc1d755495145d154;hp=194961ed631acc0da5ed3c7436ae92e4e1c81a4c;hpb=13bf850da2316cde3ad2ff8d5c26fb32928bf7b4;p=euphorik.git diff --git a/modules/erl/euphorik_protocole.erl b/modules/erl/euphorik_protocole.erl index 194961e..dc29bf5 100755 --- a/modules/erl/euphorik_protocole.erl +++ b/modules/erl/euphorik_protocole.erl @@ -150,22 +150,17 @@ wait_event(Data) -> Est_proprietaire = User =/= inconnu andalso User#user.id =:= Mess#minichat.auteur_id, A_repondu_a_message = User =/= inconnu andalso euphorik_bd:a_repondu_a_message(User#user.id, Mess#minichat.id), Est_une_reponse_a_user = User =/= inconnu andalso euphorik_bd:est_une_reponse_a_user(User#user.id, Mess#minichat.id), - User_mess = - if Mess#minichat.auteur_id =:= 0 -> - inconnu; - true -> - {ok, U2} = euphorik_bd:user_by_id(Mess#minichat.auteur_id), - U2 - end, + {ok, User_mess } = euphorik_bd:user_by_id(Mess#minichat.auteur_id), {struct, [ {id, Mess#minichat.id}, + {user_id, User_mess#user.id}, {date, format_date(Mess#minichat.date)}, {system, Mess#minichat.auteur_id =:= 0}, {owner, Est_proprietaire}, {answered, A_repondu_a_message}, {is_a_reply, Est_une_reponse_a_user}, {nick, Mess#minichat.pseudo}, - {login, if User_mess =:= inconnu -> Mess#minichat.pseudo; true -> User_mess#user.login end}, + {login, User_mess#user.login}, {content, Mess#minichat.contenu}, {answer_to, {array, lists:map( fun(Id_mess) -> @@ -205,21 +200,37 @@ put_message( ) -> case euphorik_bd:user_by_cookie(Cookie) of {ok, User} -> - Strip_content = string:strip(Content), - if (Strip_content =:= []) -> - erreur("Message vide"); - true -> - % TODO : non-atomique (update_pseudo+nouveau_message) - euphorik_bd:update_pseudo_user(User#user.id, Nick), - case euphorik_bd:nouveau_message(Strip_content, User#user.id, Answer_to) of - erreur -> erreur("Impossible d'ajouter un nouveau message"); - _ -> - json_reponse_ok() + case euphorik_bd:est_banni(User#user.id) of + {true, Temps_restant} -> + erreur("Vous êtes banni pour encore " ++ format_minutes(Temps_restant)); + _ -> + Strip_content = string:strip(Content), + if Strip_content =:= [] -> + erreur("Message vide"); + true -> + % TODO : non-atomique (update_pseudo+nouveau_message) + euphorik_bd:update_pseudo_user(User#user.id, Nick), + case euphorik_bd:nouveau_message(Strip_content, User#user.id, Answer_to) of + erreur -> erreur("Impossible d'ajouter un nouveau message"); + _ -> + json_reponse_ok() + end end end; - _ -> - erreur("Utilisateur inconnu") - end. + _ -> + erreur("Utilisateur inconnu") + end. + + +% Formatage de minutes. +% par exemple : "1min", "45min", "1h23min", "1jour 2h34min" +format_minutes(Min) -> + Jours = Min div (60 * 24), + Heures = Min rem (60 * 24) div 60, + Minutes = Min rem (60), + if Jours =/= 0 -> integer_to_list(Jours) ++ "Jour" ++ if Jours > 1 -> "s"; true -> "" end ++ " "; true -> "" end ++ + if Heures =/= 0 -> integer_to_list(Heures) ++ "h"; true -> "" end ++ + lists:flatten(io_lib:format(if Jours =:= 0, Heures =:= 0 -> "~w"; true -> "~2.2.0w" end, [Minutes])) ++ "min". % bannissement d'un utilisateur (son ip est bannie) @@ -229,18 +240,31 @@ ban( {duration, Duration}, {user_id, User_id} ]) -> - % controle que l'utilisateur est un admin - case euphorik_bd:user_by_cookie(Cookie) of - {ok, User = #user{ek_master = true}} -> - case euphorik_bd:user_by_id(User_id) of - {ok, User} -> - euphorik_bd:ban(User#user.last_ip, Duration); - _ -> - erreur("Utilisateur à bannir inconnu") - end; - _ -> - erreur("Utilisateur inconnu ou non ek master") - end. + % 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} -> + 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", + [ + User2#user.pseudo, + if User2#user.login =:= [] -> ""; true -> "(" ++ User2#user.login ++ ")" end, + if Duration =< 15 -> "kické"; true -> "banni" end, + format_minutes(Duration) + ] + ))), + json_reponse_ok(); + {ok, _} -> + erreur("L'utilisateur est lui même un ekMaster"); + _ -> + erreur("Utilisateur à bannir inconnu") + end; + _ -> + erreur("Utilisateur inconnu ou non ek master") + end. % Construit une erreur @@ -273,7 +297,7 @@ format_date(Date) -> end ++ io_lib:format("~2.10.0B:~2.10.0B:~2.10.0B", [Heure, Minute, Seconde]) ). - + json_reponse_ok() -> {struct, [{reply, "ok"}]}.