MOD modification de la BD en vue de la version 1.1 (attention, tout est cassé, rien...
authorGreg Burri <greg.burri@gmail.com>
Thu, 12 Jun 2008 20:45:20 +0000 (20:45 +0000)
committerGreg Burri <greg.burri@gmail.com>
Thu, 12 Jun 2008 20:45:20 +0000 (20:45 +0000)
doc/protocole3.txt
js/euphorik.js
modules/erl/euphorik_bd.erl
modules/erl/euphorik_protocole.erl
modules/include/euphorik_bd.hrl

index 66f688d..2979cdf 100644 (file)
@@ -85,13 +85,8 @@ ou
       "nick_format" : "nick" | "login" | "nick_login",
       "view_times" : true | false,
       "view_tooltips" : true | false,\r
-      "main_page" : 1,
-      "conversations" : [
-         {
-            "racine" : 123,
-            "page" : 1
-         }
-      ],
+      // "main_page" : 1,
+      "conversations" : [3, 8],
       "ek_master" : true | false\r
    }
  \r
@@ -118,12 +113,7 @@ c -> s
       "view_times" : true | false,
       "view_tooltips" : true | false,\r
       "main_page" : 1,
-      "conversations" : [
-         {
-            "root" : 123,
-            "page" : 1
-         }
-      ]\r
+      "conversations" : [3, 8]\r
    }\r
       
 s -> c
index 547176f..64c9379 100755 (executable)
@@ -682,7 +682,7 @@ Client.prototype.getJSONConversations = function()
 {
    var conversations = new Array()
    for (var i = 0; i < this.conversations.length; i++)
-      conversations.push({ "root" : this.conversations[i].root, "page" : this.conversations[i].page})
+      conversations.push(this.conversations[i].root)
    return conversations
 }
 
@@ -850,6 +850,8 @@ Client.prototype.chargerDonnees = function(data)
       
       // les conversations
       this.conversations = data["conversations"]
+      for (var i = 0; i < this.conversations.length; i++)
+         this.conversations[i] = {root : this.conversations[i], page : 1}
       
       this.majBulle()
       this.majCssSelectionee()
index 634d5ff..4e47099 100755 (executable)
    connect/1,
    reset/0,
    update/0,
+   restore/1,
    
    % users :
    nouveau_user/2,
    nouveau_user/3,
-   set_profile/11,
+   set_profile/10,
    update_date_derniere_connexion/1,
    update_ip/2,
    update_pseudo_user/2,
@@ -191,8 +192,13 @@ update(?VERSION_BD) -> fini;
 update(Version) ->
    case mnesia:backup(mnesia:system_info(directory) ++ "/backup" ++ integer_to_list(Version)) of
       ok ->
-         patch(Version),
-         update(Version + 1);
+         case patch(Version) of
+            ok ->
+               mnesia:write(#proprietes{nom = version, valeur = Version + 1}),
+               update(Version + 1);
+            _ ->
+               erreur
+         end;
       {error, Raison} -> {error, lists:flatten(io_lib:format("Erreur de création du backup de la version ~w : ~w", [Version, Raison]))}
    end.
    
@@ -202,6 +208,25 @@ update(Version) ->
 % dans BD/backups nommé "backup<num>" où <num> et le numéro de la version.
 % 1 -> 2
 patch(1) ->
+   % traitement des users   
+   mnesia:transform_table(
+      user,
+      fun({user, Id, Cookie, Pseudo, Login, Password, Email, Date_creation, Date_derniere_connexion, Css, Nick_format, View_times, View_tooltips, Indice_flood, _Page_principale, Conversations, Ek_master, Last_ip}) ->
+            {user, Id, Cookie, Pseudo, Login, Password, Email, Date_creation, Date_derniere_connexion, Css, Nick_format, View_times, View_tooltips, reverse, Indice_flood, lists:map(fun({C, _}) -> C end, Conversations), Ek_master, Last_ip}
+      end,
+      record_info(fields, user),
+      user
+   ),
+   mnesia:transform_table(
+      minichat,
+      fun({minichat, Id, Auteur_id, Date, Pseudo, Contenu, Troll_id}) ->
+            {minichat, Id, Auteur_id, Date, Pseudo, Contenu, Troll_id, Id}
+      end,
+      record_info(fields, minichat),
+      minichat
+   ),
+   % met à jour les racines des messages
+   TODO ! -> mnesia:foldl(...)
    ok.
 % 2 -> 3
 %patch(2) ->
@@ -236,7 +261,7 @@ nouveau_user(Login, Password, Cookie) ->
 
 
 % Mise à par Cookie les autres peuvent être undefined ce qui veut dire qu'ils ne seront pas modifié.
-set_profile(Cookie, Login, Password, Pseudo, Email, Css, Nick_format, View_times, View_tooltips, Page_principale, Conversations) ->
+set_profile(Cookie, Login, Password, Pseudo, Email, Css, Nick_format, View_times, View_tooltips, Conversations) ->
    if Nick_format =:= nick; Nick_format =:= login; Nick_format =:= nick_login ->
          resultat_transaction(mnesia:transaction(
             fun() ->
@@ -257,7 +282,6 @@ set_profile(Cookie, Login, Password, Pseudo, Email, Css, Nick_format, View_times
                               nick_format = Nick_format,
                               view_times = View_times,
                               view_tooltips = View_tooltips,
-                              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
                            },
                            mnesia:write(User_modifie),
@@ -627,6 +651,19 @@ repond_a(M_id) ->
       end
    )).
    
+   
+% Renvoie les message qui repondent à M_id
+reponses(M_id) ->
+   resultat_transaction(mnesia:transaction(
+      fun() ->
+         e(q(
+            [M || E <- mnesia:table(reponse_minichat),
+            M <- mnesia:table(minichat),
+            E#reponse_minichat.cible =:= M_id,
+            M#minichat.id =:= E#reponse_minichat.repondant]), [{tmpdir, ?KEY_SORT_TEMP_DIR}])
+      end
+   )).
+   
 
 % Est-ce que le message Id_mess est une réponse d'une message de Id_user ?
 est_une_reponse_a_user(Id_user, Id_mess) ->
index 35742c9..3305c37 100755 (executable)
@@ -117,17 +117,11 @@ profile(
       {conversations, {array, Conversations_json}}
    ]
 ) ->
-   % est-ce que les messages auquel on répond existent ?
-   Conversations = lists:foldr(
-      fun({struct, [{root, Root}, {page, Page}]}, Acc) ->
-         Message_existe = euphorik_bd:message_existe(Root),
-         if  Message_existe ->
-            [{Root, Page} | Acc];
-            true ->
-               Acc
-         end
+   % virage des messages qui n'existent pas
+   Conversations = lists:dropwhile(
+      fun(Message_id) ->
+         not euphorik_bd:message_existe(Message_id)
       end,
-      [],
       Conversations_json
    ),
    %  TODO : pas très beau, mieux vaut construire un #user
@@ -666,22 +660,7 @@ json_reponse_login_ok(User) ->
          {nick_format, atom_to_list(User#user.nick_format)},
          {view_times, User#user.view_times},
          {view_tooltips, User#user.view_tooltips},
-         {main_page, User#user.page_principale},
-         {conversations, 
-            {array,
-               lists:map(
-                  fun(C) ->
-                     {struct,
-                        [
-                           {root, element(1, C)},
-                           {page, element(2, C)}
-                        ]
-                     }
-                  end,
-                  User#user.conversations
-               )
-            }
-         },
-      {ek_master, User#user.ek_master}
+         {conversations, {array, User#user.conversations } },
+         {ek_master, User#user.ek_master}
       ]
    }.
index 5bf3915..0d263c9 100755 (executable)
@@ -74,6 +74,7 @@
       nick_format = nick, %atom(), peut valoir 'nick', 'login' ou 'nick_login'
       view_times = true,
       view_tooltips = true,
+      message_order = reverse, % can be normal or reverse
       indice_flood = 0, % integer() est incrémenté lorsque l'utilisateur envoie trop rapidement des messages.
       conversations = [], % [integer()], la liste des messages correspondant au conversation
       ek_master = false,