MOD avancement dans les conversations (il reste la partie JS)
[euphorik.git] / modules / erl / euphorik_minichat.erl
index a7d267c..a507027 100755 (executable)
    messages/1,
    messages/2,\r
    messages/3,
-   get_messages_depuis_ids/1,
+   message_by_id/1,
+   messages_by_ids/1,
    reponses/0,
    repond_a/1,
-   get_nb_page/1,
+   nb_page/1,
    users/0,
-   get_user_by_cookie/1,   
-   get_user_by_id/1,   \r
-   get_user_by_login/1,
-   get_user_by_login_password/2,
+   user_by_cookie/1,   
+   user_by_id/1,   \r
+   user_by_login/1,
+   user_by_login_password/2,
+   user_by_mess/1,
    possede_message/2,
    a_repondu_a_message/2,
    est_une_reponse_a_user/2,
@@ -70,7 +72,7 @@ reset() ->
 
 % Est-ce qu'un utilisateur existe en fonction de son cookie ?
 % Renvoie {ok, User} ou erreur
-get_user_by_cookie(Cookie) ->
+user_by_cookie(Cookie) ->
    resultat_transaction(mnesia:transaction(
       fun() ->
          Users = qlc:e(qlc:q([E || E <- mnesia:table(user), E#user.cookie =:= Cookie])),
@@ -82,7 +84,7 @@ get_user_by_cookie(Cookie) ->
    )).
    
    
-get_user_by_id(ID) ->
+user_by_id(ID) ->
    resultat_transaction(mnesia:transaction(
       fun() ->
          Users = qlc:e(qlc:q([E || E <- mnesia:table(user), E#user.id =:= ID])),
@@ -94,7 +96,7 @@ get_user_by_id(ID) ->
    )).
    \r
    \r
-get_user_by_login(Login) ->\r
+user_by_login(Login) ->\r
    resultat_transaction(mnesia:transaction(\r
       fun() ->\r
          Users = qlc:e(qlc:q([E || E <- mnesia:table(user), E#user.login =:= Login])),\r
@@ -106,7 +108,7 @@ get_user_by_login(Login) ->
    )).\r
    
    
-get_user_by_login_password(Login, Password) ->
+user_by_login_password(Login, Password) ->
    resultat_transaction(mnesia:transaction(
       fun() ->
          Users = qlc:e(qlc:q([E || E <- mnesia:table(user), E#user.login =:= Login, E#user.password =:= Password])),
@@ -115,12 +117,24 @@ get_user_by_login_password(Login, Password) ->
             _ -> erreur
          end
       end
+   )).
+   
+   
+% Renvoie {ok, User} où User est un #user possédant le message donné.
+user_by_mess(Id) ->
+   resultat_transaction(mnesia:transaction(
+      fun() ->
+         case qlc:e(qlc:q([U || U <- mnesia:table(user), M <- mnesia:table(minichat), M#minichat.id =:= Id, M#minichat.auteur_id =:= U#user.id])) of
+            [User] -> {ok, User};
+            _ -> erreur
+         end
+      end
    )).\r
    \r
    \r
 % Renvoie l'utilisateur root\r
-get_root() ->\r
-   {ok, User} = get_user_by_id(0),\r
+root() ->\r
+   {ok, User} = user_by_id(0),\r
    User.
    
    \r
@@ -184,9 +198,9 @@ update_pseudo_user(UserId, Pseudo) ->
 set_profile(Cookie, Login, Password, Pseudo, Email, Css) ->
    resultat_transaction(mnesia:transaction(
       fun() ->
-         case get_user_by_cookie(Cookie) of
+         case user_by_cookie(Cookie) of
             {ok, User} ->               \r
-               case get_user_by_login(Login) of\r
+               case user_by_login(Login) of\r
                   {ok, U} when U#user.id =/= User#user.id ->\r
                      login_deja_pris;\r
                   _ ->               \r
@@ -223,7 +237,7 @@ update_date_derniere_connexion(UserId) ->
 % Ajoute un nouveau user et le renvoie\r
 nouveau_user(Pseudo, Cookie) ->\r
    F = fun() ->\r
-      Id = get_nouvel_id(user),
+      Id = nouvel_id(user),
       User = #user{id = Id, cookie = Cookie, pseudo = Pseudo, date_creation = now(), date_derniere_connexion = now()},\r
       mnesia:write(User),\r
       User\r
@@ -234,7 +248,7 @@ nouveau_user(Pseudo, Cookie) ->
 % Ajoute un nouveau user et le renvoie
 nouveau_user(Login, Password, Cookie) ->
    F = fun() ->
-      Id = get_nouvel_id(user),
+      Id = nouvel_id(user),
       User = #user{id = Id, cookie = Cookie, pseudo = Login, login = Login, password = Password, date_creation = now(), date_derniere_connexion = now()},
       mnesia:write(User),
       User
@@ -256,7 +270,7 @@ nouveau_message(Mess, Auteur_id, Repond_A) ->
       if Nb_id_trouve =/= length(Repond_A) -> throw("Un ou plusieurs messages introuvable");
          true -> ok
       end,\r
-      Id = get_nouvel_id(minichat),
+      Id = nouvel_id(minichat),
       % compare les dernière
       Delta = delta_date_ms(Auteur#user.date_derniere_connexion, now()),
       Nouvel_indice_flood = Auteur#user.indice_flood + if Delta =< ?DUREE_SPAM -> 2; true -> -1 end,
@@ -266,7 +280,7 @@ nouveau_message(Mess, Auteur_id, Repond_A) ->
       },
       % 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 ->\r
-         Root = get_root(),
+         Root = root(),
          mnesia:write(Auteur#user{indice_flood = Auteur_maj#user.indice_flood}),
          mnesia:write(#minichat{id=Id, auteur_id=Root#user.id, date=now(), pseudo=Root#user.pseudo, contenu=Auteur#user.pseudo ++ "(" ++ Auteur#user.login ++ ") est bloqué pour " ++ integer_to_list(trunc(?DUREE_BLOCAGE_SPAM / 1000)) ++ " secondes pour cause de flood.."}),
          Id;
@@ -296,7 +310,7 @@ inserer_reponses(_, []) ->
    \r
 
 % Renvoie un nouvel id pour une table donnée\r
-get_nouvel_id(Table) ->\r
+nouvel_id(Table) ->\r
    mnesia:dirty_update_counter(counter, Table, 1).
    
    \r
@@ -325,13 +339,25 @@ messages(N) ->
    messages(N, 1).
 
 
+% Renvoie {ok, #minichat} (voir #minichat de euphorik_bd.hrl) à partir de son id.
+message_by_id(Id) ->
+   case resultat_transaction(mnesia:transaction(
+      fun() ->
+         qlc:e(qlc:q([E || E <- qlc:keysort(2, mnesia:table(minichat), [{order, ascending}]), Id =:= E#minichat.id]))
+      end
+   )) of
+      [M] -> {ok, M};
+      _ -> erreur
+   end.
+  
+
 % Renvoie une liste de message (voir #minichat de euphorik_bd.hrl) à partir d'une liste d'id (Ids).
-get_messages_depuis_ids(Ids) ->
+messages_by_ids(Ids) ->
    resultat_transaction(mnesia:transaction(
       fun() ->
          % TODO : optimisations ? serait-ce du O(n) ?
          Query = qlc:q([E || E <- qlc:keysort(2, mnesia:table(minichat), [{order, ascending}]), lists:any(fun(Id) -> Id =:= E#minichat.id end, Ids)]),
-         io:format("~s~n", [qlc:info(Query)]),
+         %io:format("~s~n", [qlc:info(Query)]),
          qlc:e(Query)
       end
    )).\r
@@ -339,17 +365,17 @@ get_messages_depuis_ids(Ids) ->
    
 % Renvoie le nombre de page total en fonction du nombre de message par page N 
 % TODO : ya pas un moyen moins pourri pour avoir le nombre de record d'une table ?
-get_nb_page(N) ->
+nb_page(N) ->
    resultat_transaction(mnesia:transaction(fun() ->
       ceiling(length(qlc:e(qlc:q([E#minichat.id || E <- mnesia:table(minichat)]))) / N)
    end)).
    
    
 % Renvoie le numéro de la page sur lequel se trouve le message M en sachant qu'il y a N messages par page.
-page(M, N) ->
-   resultat_transaction(mnesia:transaction(fun() ->
-      ceiling((length(qlc:e(qlc:q([E || E <- mnesia:table(minichat), E#minichat.id >= M])))) / N)
-   end)).\r
+%~ page(M, N) ->
+   %~ resultat_transaction(mnesia:transaction(fun() ->
+      %~ ceiling((length(qlc:e(qlc:q([E || E <- mnesia:table(minichat), E#minichat.id >= M])))) / N)
+   %~ end)).\r
    
    
 % Bizarre, cette fonction n'existe pas dans la stdlib.