MOD modification de la BD en vue de la version 1.1 (attention, tout est cassé, rien...
[euphorik.git] / modules / erl / euphorik_bd.erl
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) ->