X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=modules%2Ferl%2Feuphorik_bd.erl;h=6fc651d8aa34a39aeb3a0b4cc7e5bfe9b06b6e08;hp=6efd76b750cf4d6947c297d8b78009f758a6ae1b;hb=28cbabecbfc2e05861779a19e5a75bddbc0ad416;hpb=934ab32cd6fac44f6b3ebedef69ce1ccd0b8701b diff --git a/modules/erl/euphorik_bd.erl b/modules/erl/euphorik_bd.erl index 6efd76b..6fc651d 100755 --- a/modules/erl/euphorik_bd.erl +++ b/modules/erl/euphorik_bd.erl @@ -45,7 +45,7 @@ possede_message/2, % ip : - ip_table/0, + list_ban/0, ban/2, deban/1, est_banni/1, @@ -540,11 +540,23 @@ possede_message(Id_user, Id_mess) -> _ -> false end. - -ip_table() -> + +% renvoie la liste des ip bannies +% liste de {ip, temps_restant(en minutes), Users} ou Users est une liste de {pseudo, login} +% TODO : déterminer la complexité de cette fonction. (Il n'y a pas d'index sur #user.last_ip) +list_ban() -> resultat_transaction(mnesia:transaction( fun() -> - e(q([IP || IP <- mnesia:table(ip_table)])) + Now = now(), + e(q([ + { + IP#ip_table.ip, + delta_date_minute(date_plus_minutes(IP#ip_table.ban, IP#ip_table.ban_duration), Now), + e(q([{U#user.pseudo, U#user.login} || U <- mnesia:table(user), U#user.last_ip =:= IP#ip_table.ip])) + } || + IP <- qlc:keysort(2, mnesia:table(ip_table)), + date_plus_minutes(IP#ip_table.ban, IP#ip_table.ban_duration) > Now + ])) end )). @@ -586,7 +598,7 @@ est_banni(User_id) -> if Echeance < Now -> % l'échéance est passée false; true -> - {true, trunc(delta_date_ms(Echeance, Now) / 1000 / 60)} + {true, delta_date_minute(Echeance, Now)} end; _ -> false @@ -831,6 +843,10 @@ resultat_transaction({_, T}) -> delta_date_ms(D1, D2) -> 1000000000 * abs(element(1, D1) - element(1, D2)) + 1000 * abs(element(2, D1) - element(2, D2)) + trunc(abs(element(3, D1) - element(3, D2)) / 1000). +% Retourne la différence entre deux timestamp (erlang:now) en minutes +delta_date_minute(D1, D2) -> + trunc(delta_date_ms(D1, D2) / 1000 / 60). + % Bizarre, cette fonction n'existe pas dans la stdlib. % Pas utilisé mais bon ca me fait de la peine de l'enlever.