REPORT de la branche 1.1 : 477->494
[euphorik.git] / modules / erl / euphorik_bd_admin.erl
index 076a570..c370618 100644 (file)
@@ -217,7 +217,26 @@ update(Version) ->
 % crée un backup avant l'application du patch
 % dans BD/backups nommé "backup<num>" où <num> et le numéro de la version.
 % 1 -> 2
-patch(1) ->
+patch(1) ->\r
+   % Prend un chemin vers la feuille de style de type "css/1/euphorik.css"\r
+   % et renvoie "styles/1/euphorik.css"\r
+   Transforme_css = fun("css" ++ Reste) ->
+         "styles" ++ Reste;\r
+         (F) -> F\r
+   end,\r
+   Traiter_message = fun(M, Racine) ->\r
+      F = fun(F, M2) -> % seul moyen à ma connaissance pour faire de la récursion dans une lambda fonction, voir : http://www.nabble.com/Auto-generated-functions-td15279499.html\r
+         % met à jour la racine de chaque message qui répond à M\r
+         lists:foreach(\r
+            fun(M3) ->\r
+               mnesia:write(M2#minichat{racine_id = Racine}),\r
+               F(F, M3)\r
+            end,\r
+            euphorik_bd:enfants(M#minichat.id)\r
+         )\r
+      end,\r
+      F(F, M, Racine)\r
+   end,
    % Prend un chemin vers la feuille de style de type "css/1/euphorik.css"\r
    % et renvoie "styles/1/euphorik.css"\r
    Transforme_css = fun("css" ++ Reste) ->
@@ -269,13 +288,7 @@ patch(1) ->
       {atomic, _} -> ok
    end;\r
 % 2 -> 3\r
-patch(2) ->
-   % première étape : changer le type de la table minichat de set à ordered_set
-   % TODO : trouver un meilleur moyen que de passer par un backup
-   backup("tmp"),
-   create(),
-   restore("tmp"),
-   file:delete(dossier_backups() ++ "tmp"),\r
+patch(2) ->\r
    mnesia:transform_table(\r
       troll,\r
       fun({troll, Id_troll, Id_user, Date_create, Date_post, Content}) ->\r
@@ -292,11 +305,26 @@ patch(2) ->
    mnesia:transform_table(\r
       minichat,\r
       fun({minichat, Id, Auteur_id, Date, Pseudo, Contenu, _Troll_id, Racine_id}) ->\r
-         {minichat, Id, Auteur_id, Date, Pseudo, Contenu, Racine_id}\r
+         {minichat, Id, Auteur_id, Date, Pseudo, Contenu, Racine_id, normal}\r
       end,\r
       record_info(fields, minichat)\r
-   ),\r
-   creer_indexes(). % uniquement pour l'indice sur id_minichat de la table troll\r
+   ),
+   mnesia:transaction(fun() ->
+      % comble les trous entre les id non-contigues
+      lists:foreach(fun(Id) ->
+            case mnesia:read({minichat, Id}) of
+               [] -> 
+                  {ok, #user{profile = Profile}} = euphorik_bd:user_by_id(0),
+                  mnesia:write(#minichat{id = Id, auteur_id = 0, date = undefined, pseudo = Profile#profile.pseudo, contenu = "Comblement...", racine_id = Id, status = deleted});
+               _ -> rien
+            end
+         end,
+         lists:seq(1, mnesia:table_info(minichat, size))
+      ),
+      % la table troll utilise maintenant son index et pas celui de la table minichat (correction d'un vieux bug)
+      mnesia:write(#counter{key = troll, value = mnesia:table_info(minichat, size)})
+   end),\r
+   creer_indexes(). % uniquement pour l'indice sur id_minichat de la table troll
 
 
 % Renvoie le dossier dans lequel les backups sont effectué, ce dossier doit être en écriture.