X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=modules%2Ferl%2Feuphorik_bd.erl;h=81a36a0d9ceb60e7de4c132b247d807e9d861f72;hp=d583ecb53e1590c0ba395f7649e1105abfcff394;hb=6e96af2afdc875932c19685110c97ea7837944c6;hpb=c219198926b679ef5bc28182b3d05e8c1f447886 diff --git a/modules/erl/euphorik_bd.erl b/modules/erl/euphorik_bd.erl index d583ecb..81a36a0 100755 --- a/modules/erl/euphorik_bd.erl +++ b/modules/erl/euphorik_bd.erl @@ -276,11 +276,14 @@ user_by_mess(Id) -> % retourne soit l'id du message soit {erreur, }. nouveau_message(Mess, Auteur_id, Repond_A_ids) -> % regarde si les id 'Repond_A' existent - F = fun() -> - Repond_a = e( - q([M || M <- mnesia:table(minichat), lists:member(M#minichat.id, Repond_A_ids)]), - [{tmpdir, ?KEY_SORT_TEMP_DIR}] - ), + F = fun() -> + Repond_a = lists:map( + fun(Repond_a_id) -> + [M] = mnesia:wread({minichat, Repond_a_id}), + M + end, + Repond_A_ids + ), Racine_id = case Repond_a of [] -> undefined; [M | _] -> @@ -297,37 +300,38 @@ nouveau_message(Mess, Auteur_id, Repond_A_ids) -> {erreur, E} -> {erreur, E}; _ -> % est-ce que l'auteur existe ? - case e(q([E || E <- mnesia:table(user), E#user.id =:= Auteur_id]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]) of + case mnesia:wread({user, Auteur_id}) of [#user{profile = Profile} = Auteur] -> if length(Repond_a) =/= length(Repond_A_ids) -> {erreur, "Un ou plusieurs messages introuvable"}; true -> % comparaison entre la date du dernier poste et maintenant (gestion du flood) - Delta = euphorik_common:delta_date_ms(Auteur#user.date_derniere_connexion, now()), + Now = now(), + Delta = euphorik_common:delta_date_ms(Auteur#user.date_derniere_connexion, Now), Nouvel_indice_flood = Auteur#user.indice_flood + if Delta =< ?DUREE_SPAM -> 2; true -> -1 end, Auteur_maj = Auteur#user{ indice_flood = if Nouvel_indice_flood > ?INDICE_SPAM_MAX -> ?INDICE_SPAM_MAX; Nouvel_indice_flood < 0 -> 0; true -> Nouvel_indice_flood end, - date_derniere_connexion = now() + date_derniere_connexion = Now }, % est-ce que l'auteur à trop floodé ? if Auteur#user.indice_flood =/= ?INDICE_SPAM_MAX, Auteur_maj#user.indice_flood =:= ?INDICE_SPAM_MAX, Delta =< ?DUREE_BLOCAGE_SPAM -> - mnesia:write(Auteur#user{indice_flood = Auteur_maj#user.indice_flood}), - nouveau_message_sys("''" ++ Profile#profile.pseudo ++ if Auteur#user.login =/= [] -> " (" ++ Auteur#user.login ++ ")"; true -> "" end ++ "'' est bloqué pour " ++ integer_to_list(trunc(?DUREE_BLOCAGE_SPAM / 1000)) ++ " secondes pour cause de flood."); - Auteur#user.indice_flood =:= ?INDICE_SPAM_MAX, Delta =< ?DUREE_BLOCAGE_SPAM -> - {erreur, "Bloqué pour cause de flood"}; - true -> - mnesia:write(Auteur_maj), - Id = nouvel_id(minichat), - inserer_reponses(Id, Repond_A_ids), - mnesia:write(#minichat{ - id = Id, - auteur_id = Auteur#user.id, - date = now(), - pseudo = Profile#profile.pseudo, - contenu = Mess, - racine_id = if Racine_id =:= undefined -> Id; true -> Racine_id end - }), - Id + mnesia:write(Auteur#user{indice_flood = Auteur_maj#user.indice_flood}), + nouveau_message_sys("\"" ++ Profile#profile.pseudo ++ if Auteur#user.login =/= [] -> " (" ++ Auteur#user.login ++ ")"; true -> "" end ++ "\" est bloqué pour " ++ integer_to_list(trunc(?DUREE_BLOCAGE_SPAM / 1000)) ++ " secondes pour cause de flood."); + Auteur#user.indice_flood =:= ?INDICE_SPAM_MAX, Delta =< ?DUREE_BLOCAGE_SPAM -> + {erreur, "Bloqué pour cause de flood"}; + true -> + mnesia:write(Auteur_maj), + Id = nouvel_id(minichat), + inserer_reponses(Id, Repond_A_ids), + mnesia:write(#minichat{ + id = Id, + auteur_id = Auteur#user.id, + date = Now, + pseudo = Profile#profile.pseudo, + contenu = Mess, + racine_id = if Racine_id =:= undefined -> Id; true -> Racine_id end + }), + Id end end; _ -> @@ -652,7 +656,7 @@ can_register(IP) -> if T#ip_table.nb_try_register =:= ?NB_MAX_FLOOD_REGISTER, Delta < ?TEMPS_BAN_FLOOD_REGISTER -> false; true -> - mnesia:write(#ip_table{ + mnesia:write(T#ip_table{ ip = IP, date_last_try_register = now(), nb_try_register = T#ip_table.nb_try_register + if Delta < ?TEMPS_FLOOD_REGISTER -> 1; T#ip_table.nb_try_register > 0 -> -1; true -> 0 end