ADD ajout du bannissement (pas fini)
[euphorik.git] / modules / erl / euphorik_bd.erl
index e114b52..678505b 100755 (executable)
@@ -17,6 +17,7 @@
    nouveau_user/3,
    set_profile/9,
    update_date_derniere_connexion/1,
+   update_ip/2,
    update_pseudo_user/2,
    users/0,
    user_by_cookie/1,   
@@ -24,6 +25,7 @@
    user_by_login/1,
    user_by_login_password/2,
    user_by_mess/1,
+   toggle_ek_master/1,
    
    % messages :
    nouveau_message/3,
    a_repondu_a_message/2,
    possede_message/2,
    
+   % ip :
+   ip_table/0,
+   ban/2,
+   
+   % versions :
+   update_version/1,
+   
    % utiles :
    can_register/1,
    resultat_transaction/1\r
@@ -172,10 +181,10 @@ set_profile(Cookie, Login, Password, Pseudo, Email, Css, Nick_format, Page_princ
 
 
 % Met à jour la date de la dernière connexion d'un utilisateur à maintenant
-update_date_derniere_connexion(UserId) ->
+update_date_derniere_connexion(User_id) ->
    mnesia:transaction(
       fun() ->
-         case mnesia:wread({user, UserId}) of
+         case mnesia:wread({user, User_id}) of
             [User] ->
                mnesia:write(User#user{date_derniere_connexion = now()});
             _ ->
@@ -183,7 +192,21 @@ update_date_derniere_connexion(UserId) ->
           end
       end
    ).   
-  
+
+
+% Met à jour l'ip d'un user
+update_ip(User_id, IP) ->
+   mnesia:transaction(
+      fun() ->
+         case mnesia:wread({user, User_id}) of
+            [User] ->
+               mnesia:write(User#user{last_ip = IP});
+            _ ->
+               mnesia:abort("update_ip: User inconnu")
+          end
+      end
+   ).   
+   
   
 % Met à jour le pseudo du user
 update_pseudo_user(UserId, Pseudo) ->
@@ -244,6 +267,19 @@ user_by_login(Login) ->
    )).\r
    
    
+toggle_ek_master(User_id) ->
+   resultat_transaction(mnesia:transaction(
+      fun() ->
+         Users = qlc:e(qlc:q([E || E <- mnesia:table(user), E#user.id =:= User_id])),
+         case Users of
+            [User] ->
+               mnesia:write(User#user{ek_master = not User#user.ek_master});
+            _ -> erreur
+         end
+      end
+   )).
+   
+   
 user_by_login_password(Login, Password) ->
    resultat_transaction(mnesia:transaction(
       fun() ->
@@ -439,6 +475,37 @@ possede_message(Id_user, Id_mess) ->
       _ -> false
    end.
    
+
+ip_table() ->
+   resultat_transaction(mnesia:transaction(
+      fun() ->
+         qlc:e(qlc:q([IP || IP <- mnesia:table(ip_table)]))
+      end
+   )).
+
+
+% Bannie une ip pour un certain temps (en minute).
+ban(IP, Duration) ->
+   mnesia:transaction(
+      fun() ->
+         case mnesia:wread({ip_table, IP}) of
+            [IP_tuple] ->
+               mnesia:write(IP_tuple#ip_table{ban = now(), ban_duration = Duration});
+            _ ->
+               mnesia:write(#ip_table{ip = IP, ban = now(), ban_duration = Duration})
+          end
+      end
+   ).
+   
+   
+update_version(1) ->
+   mnesia:transform_table(
+      ip_table,
+      fun() -> null end,
+      record_info(fields, ip_table),
+      ip_table
+   ).
+   
    
 % Si deux enregistrements consequtifs de la même IP sont fait en moins d'une seconde alors 
 % ip_table.nb_try_register est incrémenté de 1 sinon il est décrémenté de 1 (jusqu'a 0).