REPORT de la branche 1.0
[euphorik.git] / modules / erl / euphorik_bd.erl
index 89c9836..93cb835 100755 (executable)
@@ -90,7 +90,7 @@
    % utiles :
    resultat_transaction/1\r
 ]).
--import(qlc, [e/1, e/2, q/1, cursor/1]).\r
+-import(qlc, [e/2, q/1, cursor/2]).\r
 -include("../include/euphorik_bd.hrl").
 -include("../include/euphorik_defines.hrl").\r
 -include_lib("stdlib/include/qlc.hrl").\r
@@ -304,7 +304,6 @@ update_pseudo_user(UserId, Pseudo) ->
    
    
 % Affiche N user trié par leur date de dernière connexion.
-% Attention : pas d'index sur ce champs (la date)   
 print_users(N) ->
    resultat_transaction(mnesia:transaction(fun() ->
       C = cursor(
@@ -312,7 +311,8 @@ print_users(N) ->
             9, 
             q([E || E <- mnesia:table(user)]),
             [{order, descending}]
-         )
+         ),
+         [{tmpdir, ?KEY_SORT_TEMP_DIR}]
       ),
       Users = qlc:next_answers(C, N),
       lists:foreach(
@@ -365,7 +365,7 @@ print_user(Id) when is_integer(Id) ->
 user_by_cookie(Cookie) ->
    resultat_transaction(mnesia:transaction(
       fun() ->
-         case e(q([E || E <- mnesia:table(user), E#user.cookie =:= Cookie])) of
+         case e(q([E || E <- mnesia:table(user), E#user.cookie =:= Cookie]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]) of
             [User] -> {ok, User};
             _ -> erreur
          end
@@ -376,7 +376,7 @@ user_by_cookie(Cookie) ->
 user_by_id(ID) ->
    resultat_transaction(mnesia:transaction(
       fun() ->
-         case e(q([E || E <- mnesia:table(user), E#user.id =:= ID])) of
+         case e(q([E || E <- mnesia:table(user), E#user.id =:= ID]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]) of
             [User] -> {ok, User};
             _ -> erreur
          end
@@ -387,7 +387,7 @@ user_by_id(ID) ->
 user_by_login(Login) ->\r
    resultat_transaction(mnesia:transaction(\r
       fun() ->\r
-         Users = e(q([E || E <- mnesia:table(user), E#user.login =:= Login])),\r
+         Users = e(q([E || E <- mnesia:table(user), E#user.login =:= Login]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]),\r
          case Users of\r
             [User] -> {ok, User};\r
             _ -> erreur\r
@@ -399,7 +399,7 @@ user_by_login(Login) ->
 toggle_ek_master(User_id) ->
    resultat_transaction(mnesia:transaction(
       fun() ->
-         Users = e(q([E || E <- mnesia:table(user), E#user.id =:= User_id])),
+         Users = e(q([E || E <- mnesia:table(user), E#user.id =:= User_id]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]),
          case Users of
             [User] ->
                mnesia:write(User#user{ek_master = not User#user.ek_master});
@@ -419,12 +419,10 @@ css_from_user_cookie(Cookie) ->
    end.
    
 
-
-
 user_by_login_password(Login, Password) ->
    resultat_transaction(mnesia:transaction(
       fun() ->
-         case e(q([E || E <- mnesia:table(user), E#user.login =:= Login, E#user.password =:= Password])) of
+         case e(q([E || E <- mnesia:table(user), E#user.login =:= Login, E#user.password =:= Password]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]) of
             [User | _] -> {ok, User};
             _ -> erreur
          end
@@ -436,7 +434,7 @@ user_by_login_password(Login, Password) ->
 user_by_mess(Id) ->
    resultat_transaction(mnesia:transaction(
       fun() ->
-         case e(q([U || U <- mnesia:table(user), M <- mnesia:table(minichat), M#minichat.id =:= Id, M#minichat.auteur_id =:= U#user.id])) of
+         case e(q([U || U <- mnesia:table(user), M <- mnesia:table(minichat), M#minichat.id =:= Id, M#minichat.auteur_id =:= U#user.id]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]) of
             [User | _] -> {ok, User};
             _ -> erreur
          end
@@ -449,9 +447,9 @@ user_by_mess(Id) ->
 nouveau_message(Mess, Auteur_id, Repond_A) ->
    % regarde si les id 'Repond_A' existent
    F = fun() ->   
-      Nb_id_trouve = length(e(q([E#minichat.id || E <- mnesia:table(minichat), lists:member(E#minichat.id, Repond_A)]))),
+      Nb_id_trouve = length(e(q([E#minichat.id || E <- mnesia:table(minichat), lists:member(E#minichat.id, Repond_A)]), [{tmpdir, ?KEY_SORT_TEMP_DIR}])),
       % est-ce que l'auteur existe ?
-      Auteur = case e(q([E || E <- mnesia:table(user), E#user.id =:= Auteur_id])) of
+      Auteur = case e(q([E || E <- mnesia:table(user), E#user.id =:= Auteur_id]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]) of
          [A] -> A;
          _ -> {erreur, "L'auteur du message est introuvable"}
       end,
@@ -521,7 +519,8 @@ messages(N, P) ->
             2, 
             q([E#minichat{contenu = contenu_message(E)} || E <- mnesia:table(minichat)]),
             [{order, descending}]
-         )
+         ),
+         [{tmpdir, ?KEY_SORT_TEMP_DIR}]
       ),
       if P > 1 -> qlc:next_answers(C, N * (P - 1));
          true -> ok
@@ -530,7 +529,7 @@ messages(N, P) ->
       qlc:delete_cursor(C),
       lists:reverse(R)
    end,
-   resultat_transaction(mnesia:transaction(F)).   
+   resultat_transaction(mnesia:transaction(F)).
 
 
 % Renvoie les messages manquants pour la page P en sachant qu'il y a N message
@@ -572,7 +571,7 @@ messages_by_ids(Ids) ->
             2,
             q([E || E <- mnesia:table(minichat), lists:any(fun(Id) -> Id =:= E#minichat.id end, Ids)]),
             [{order, ascending}]
-         ))
+         ),[{tmpdir, ?KEY_SORT_TEMP_DIR}])
       end
    )).
    
@@ -581,14 +580,14 @@ messages_by_ids(Ids) ->
 % TODO : ya pas plus simple ?
 message_existe(Id) ->
    resultat_transaction(mnesia:transaction(fun() ->
-      length(e(q([E#minichat.id || E <- mnesia:table(minichat), E#minichat.id =:= Id]))) =:= 1
+      length(e(q([E#minichat.id || E <- mnesia:table(minichat), E#minichat.id =:= Id]), [{tmpdir, ?KEY_SORT_TEMP_DIR}])) =:= 1
    end)).
    
    
 % Renvoie les reponses (utilisé normalement uniquement pendant le debug).
 reponses() ->
    F = fun() ->
-      e(q([E || E <- mnesia:table(reponse_minichat)]))
+      e(q([E || E <- mnesia:table(reponse_minichat)]), [{tmpdir, ?KEY_SORT_TEMP_DIR}])
    end,
    resultat_transaction(mnesia:transaction(F)).
    
@@ -601,7 +600,7 @@ repond_a(M_id) ->
             [M || E <- mnesia:table(reponse_minichat),
             M <- mnesia:table(minichat),
             E#reponse_minichat.repondant =:= M_id,
-            M#minichat.id =:= E#reponse_minichat.cible]))
+            M#minichat.id =:= E#reponse_minichat.cible]), [{tmpdir, ?KEY_SORT_TEMP_DIR}])
       end
    )).
    
@@ -613,7 +612,7 @@ est_une_reponse_a_user(Id_user, Id_mess) ->
                e(q([
                   M#minichat.auteur_id || M <- mnesia:table(minichat), R <- mnesia:table(reponse_minichat),
                   M#minichat.auteur_id =:= Id_user, M#minichat.id =:= R#reponse_minichat.cible, R#reponse_minichat.repondant =:= Id_mess
-               ]), [{unique_all, true}])
+               ]), [{unique_all, true}, {tmpdir, ?KEY_SORT_TEMP_DIR}])
             end
          ) of
       {atomic, [_]} -> true;
@@ -628,7 +627,7 @@ a_repondu_a_message(Id_user, Id_mess) ->
                e(q([
                   M#minichat.auteur_id || M <- mnesia:table(minichat), R <- mnesia:table(reponse_minichat),
                   R#reponse_minichat.cible =:= Id_mess, R#reponse_minichat.repondant =:= M#minichat.id, M#minichat.auteur_id =:= Id_user
-               ]), [{unique_all, true}])
+               ]), [{unique_all, true}, {tmpdir, ?KEY_SORT_TEMP_DIR}])
             end
          ) of
       {atomic, [_]} -> true;
@@ -640,7 +639,7 @@ a_repondu_a_message(Id_user, Id_mess) ->
 possede_message(Id_user, Id_mess) ->
    case mnesia:transaction(
             fun() ->
-               e(q([E#minichat.auteur_id || E <- mnesia:table(minichat), E#minichat.id =:= Id_mess]))
+               e(q([E#minichat.auteur_id || E <- mnesia:table(minichat), E#minichat.id =:= Id_mess]), [{tmpdir, ?KEY_SORT_TEMP_DIR}])
             end
          ) of
       {atomic, [Id_user | []]} -> true;
@@ -659,11 +658,11 @@ list_ban() ->
             {
                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]))
+               e(q([{U#user.pseudo, U#user.login} || U <- mnesia:table(user), U#user.last_ip =:= IP#ip_table.ip]), [{tmpdir, ?KEY_SORT_TEMP_DIR}])
             } ||
             IP <- mnesia:table(ip_table),
             if IP#ip_table.ban =:= undefined -> false; true -> date_plus_minutes(IP#ip_table.ban, IP#ip_table.ban_duration) > Now end
-         ])))
+         ])), [{tmpdir, ?KEY_SORT_TEMP_DIR}])
       end
    )).
 
@@ -698,7 +697,7 @@ est_banni(User_id) ->
             U#user.id =:= User_id,
             IP <- mnesia:table(ip_table),
             IP#ip_table.ip =:= U#user.last_ip
-         ])) of
+         ]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]) of
             [{Ban, Ban_duration}] ->
                Echeance = date_plus_minutes(Ban, Ban_duration),
                Now = now(),
@@ -729,7 +728,7 @@ date_plus_minutes(Ban, Ban_duration) ->
 can_register(IP) ->
    resultat_transaction(mnesia:transaction(
       fun() ->
-         case e(q([I || I <- mnesia:table(ip_table), I#ip_table.ip =:= IP])) of
+         case e(q([I || I <- mnesia:table(ip_table), I#ip_table.ip =:= IP]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]) of
             [] -> 
                mnesia:write(#ip_table{ip = IP, date_last_try_register = now()}),
                true;
@@ -754,7 +753,7 @@ can_register(IP) ->
 trolls() ->
    resultat_transaction(mnesia:transaction(
       fun() ->
-         e(qlc:keysort(2, q([T || T <- mnesia:table(troll)])))
+         e(qlc:keysort(2, q([T || T <- mnesia:table(troll)])), [{tmpdir, ?KEY_SORT_TEMP_DIR}])
       end
    )).
    
@@ -763,7 +762,7 @@ trolls() ->
 trolls(Last_id) ->
    resultat_transaction(mnesia:transaction(
       fun() ->
-         e(qlc:keysort(2, q([T || T <- mnesia:table(troll), T#troll.id > Last_id, T#troll.date_post =:= undefined])))
+         e(qlc:keysort(2, q([T || T <- mnesia:table(troll), T#troll.id > Last_id, T#troll.date_post =:= undefined])), [{tmpdir, ?KEY_SORT_TEMP_DIR}])
       end
    )).
    
@@ -783,13 +782,13 @@ put_troll(User_id, Content) ->
                E#troll.id_user =:= User_id,
                E#troll.date_post =:= undefined
             ]
-         ))),
+         ), [{tmpdir, ?KEY_SORT_TEMP_DIR}])),
          Nb_troll_poste_total = length(e(q(
             [
                E#troll.id || E <- mnesia:table(troll),
                E#troll.date_post =:= undefined
             ]
-         ))),
+         ), [{tmpdir, ?KEY_SORT_TEMP_DIR}])),
          User = user_by_id(User_id),
          case User of
             {ok, _} ->
@@ -839,7 +838,7 @@ del_troll(Troll_id) ->
 troll_by_id(Troll_id) ->
    resultat_transaction(mnesia:transaction(
       fun() ->
-         case e(q([T || T <- mnesia:table(troll), T#troll.id =:= Troll_id])) of
+         case e(q([T || T <- mnesia:table(troll), T#troll.id =:= Troll_id]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]) of
             [T] -> {ok, T};
             _ ->
                erreur
@@ -854,7 +853,7 @@ current_troll() ->
    resultat_transaction(mnesia:transaction(
       fun() ->
          % TODO : ya pas moyen de désigner le champs plutot qu'avec un nombre pour le tri ?
-         C = cursor(qlc:keysort(5, q([T || T <- mnesia:table(troll), T#troll.date_post =/= undefined]), [{order, descending}])),
+         C = cursor(qlc:keysort(5, q([T || T <- mnesia:table(troll), T#troll.date_post =/= undefined]), [{order, descending}]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]),
          R = case qlc:next_answers(C, 1) of
             [T] -> T;
             _ -> aucun
@@ -874,7 +873,7 @@ elire_troll() ->
    random:seed(A1, A2, A3),
    mnesia:transaction(
       fun() ->
-         case e(q([T || T <- mnesia:table(troll), T#troll.date_post =:= undefined])) of
+         case e(q([T || T <- mnesia:table(troll), T#troll.date_post =:= undefined]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]) of
             [] ->
                plus_de_trolls;
             Trolls ->
@@ -892,7 +891,7 @@ elire_troll() ->
 message_id_associe(Troll_id) ->
    resultat_transaction(mnesia:transaction(
       fun() ->
-         case e(q([M#minichat.id || M <- mnesia:table(minichat), M#minichat.troll_id =:= Troll_id])) of
+         case e(q([M#minichat.id || M <- mnesia:table(minichat), M#minichat.troll_id =:= Troll_id]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]) of
             [Id] -> Id;
             _ -> undefined
          end