ADD trois mode d'affichage pour les pseudos
[euphorik.git] / modules / erl / euphorik_minichat.erl
index a507027..519870c 100755 (executable)
@@ -2,8 +2,7 @@
 % Ce module permet de gérer les données persistantes lié au minichat d'euphorik.ch
 % Il permet d'ajouter des message, de demande les messages sur une page donnée, etc..
 % Ce module utilise la base mnesia créée par le module euphorik_bd.
-% Auteur : G.Burri
-% Date : 22.10.2007
+% @author G.Burri
 
 -module(euphorik_minichat).\r
 -export([
@@ -14,6 +13,7 @@
    messages/3,
    message_by_id/1,
    messages_by_ids/1,
+   message_existe/1,
    reponses/0,
    repond_a/1,
    nb_page/1,
    est_une_reponse_a_user/2,
    % set :\r
    update_pseudo_user/2,
-   set_profile/6,
+   set_profile/9,
    update_date_derniere_connexion/1,
    nouveau_user/2,
    nouveau_user/3,
    nouveau_message/3,
    reset/0,
    % reservé :
-   resultat_transaction/1]).\r
+   resultat_transaction/1\r
+]).\r
 \r
 -include("../include/euphorik_bd.hrl").\r
 -include_lib("stdlib/include/qlc.hrl").\r
@@ -53,7 +54,7 @@
 % Connexion à la base de données de yaws sur overnux
 connect() ->
    mnesia:start(),
-   mnesia:change_config(extra_db_nodes, [yaws@Plop]).
+   mnesia:change_config(extra_db_nodes, [yaws@flynux]).
 
 
 % Efface tous les users, minichat_reponse et minichat.\r
@@ -195,30 +196,39 @@ update_pseudo_user(UserId, Pseudo) ->
    
    
 % Mise à par Cookie les autres peuvent être undefined ce qui veut dire qu'ils ne seront pas modifié.\r
-set_profile(Cookie, Login, Password, Pseudo, Email, Css) ->
-   resultat_transaction(mnesia:transaction(
-      fun() ->
-         case user_by_cookie(Cookie) of
-            {ok, User} ->               \r
-               case user_by_login(Login) of\r
-                  {ok, U} when U#user.id =/= User#user.id ->\r
-                     login_deja_pris;\r
-                  _ ->               \r
-                     User_modifie = User#user{\r
-                        login = if is_list(Login) -> Login; true -> User#user.login end,\r
-                        password = if is_list(Password) -> Password; true -> User#user.password end,\r
-                        pseudo = if is_list(Pseudo) -> Pseudo; true -> User#user.pseudo end,\r
-                        email = if is_list(Email) -> Email; true -> User#user.email end,\r
-                        css = if is_list(Css) -> Css; true -> User#user.css end\r
-                     },\r
-                     mnesia:write(User_modifie),\r
-                     ok\r
-               end;
-            _ -> erreur
-         end
-      end
-   )).
-   
+set_profile(Cookie, Login, Password, Pseudo, Email, Css, Page_principale, Nick_format, Conversations) ->
+   if Nick_format =:= nick; Nick_format =:= login; Nick_format =:= nick_login ->
+         resultat_transaction(mnesia:transaction(
+            fun() ->
+               case user_by_cookie(Cookie) of
+                  {ok, User} ->               \r
+                     case user_by_login(Login) of\r
+                        {ok, U} when U#user.id =/= User#user.id ->\r
+                           login_deja_pris;\r
+                        _ ->               \r
+                           User_modifie = User#user{
+                              % TODO : pourquoi ne pas tester avec la valeur "undefined" plutôt qu'avec "is_list" ?
+                              % TODO : validation plus strict des données (pas de page négative dans les conv par exemple)\r
+                              login = if is_list(Login) -> Login; true -> User#user.login end,\r
+                              password = if is_list(Password) -> Password; true -> User#user.password end,\r
+                              pseudo = if is_list(Pseudo) -> Pseudo; true -> User#user.pseudo end,\r
+                              email = if is_list(Email) -> Email; true -> User#user.email end,\r
+                              css = if is_list(Css) -> Css; true -> User#user.css end,
+                              nick_format = Nick_format,
+                              page_principale = if is_integer(Page_principale), Page_principale > 0 -> Page_principale; true -> User#user.page_principale end,
+                              conversations = if is_list(Conversations) -> Conversations; true -> User#user.conversations end\r
+                           },\r
+                           mnesia:write(User_modifie),\r
+                           ok\r
+                     end;
+                  _ -> erreur
+               end
+            end
+         ));
+      true ->
+         erreur
+   end.
+
 
 % Met à jour la date de la dernière connexion d'un utilisateur à maintenant
 update_date_derniere_connexion(UserId) ->\r
@@ -360,7 +370,15 @@ messages_by_ids(Ids) ->
          %io:format("~s~n", [qlc:info(Query)]),
          qlc:e(Query)
       end
-   )).\r
+   )).
+   
+
+% Est-ce qu'un message existe ? Renvoie un boolean.
+% TODO : ya pas plus simple ?
+message_existe(Id) ->
+   resultat_transaction(mnesia:transaction(fun() ->
+      length(qlc:e(qlc:q([E#minichat.id || E <- mnesia:table(minichat), E#minichat.id =:= Id]))) =:= 1
+   end)).\r
   
    
 % Renvoie le nombre de page total en fonction du nombre de message par page N 
@@ -369,14 +387,7 @@ 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
-   
+     
    
 % Bizarre, cette fonction n'existe pas dans la stdlib.
 ceiling(X) ->