X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=modules%2Ferl%2Feuphorik_bd_admin.erl;h=c37061833996a3a38c8065ebd118970e4586b52e;hp=076a5708fff3194c1e59df1c63c8aede15744e90;hb=85dc0facbc2b2de826978fac3768db7949a6b92f;hpb=455f79e2ab07847ea6697e51245288832ae9fede diff --git a/modules/erl/euphorik_bd_admin.erl b/modules/erl/euphorik_bd_admin.erl index 076a570..c370618 100644 --- a/modules/erl/euphorik_bd_admin.erl +++ b/modules/erl/euphorik_bd_admin.erl @@ -217,7 +217,26 @@ update(Version) -> % crée un backup avant l'application du patch % dans BD/backups nommé "backup" où et le numéro de la version. % 1 -> 2 -patch(1) -> +patch(1) -> + % Prend un chemin vers la feuille de style de type "css/1/euphorik.css" + % et renvoie "styles/1/euphorik.css" + Transforme_css = fun("css" ++ Reste) -> + "styles" ++ Reste; + (F) -> F + end, + Traiter_message = fun(M, Racine) -> + 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 + % met à jour la racine de chaque message qui répond à M + lists:foreach( + fun(M3) -> + mnesia:write(M2#minichat{racine_id = Racine}), + F(F, M3) + end, + euphorik_bd:enfants(M#minichat.id) + ) + end, + F(F, M, Racine) + end, % Prend un chemin vers la feuille de style de type "css/1/euphorik.css" % et renvoie "styles/1/euphorik.css" Transforme_css = fun("css" ++ Reste) -> @@ -269,13 +288,7 @@ patch(1) -> {atomic, _} -> ok end; % 2 -> 3 -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"), +patch(2) -> mnesia:transform_table( troll, fun({troll, Id_troll, Id_user, Date_create, Date_post, Content}) -> @@ -292,11 +305,26 @@ patch(2) -> mnesia:transform_table( minichat, fun({minichat, Id, Auteur_id, Date, Pseudo, Contenu, _Troll_id, Racine_id}) -> - {minichat, Id, Auteur_id, Date, Pseudo, Contenu, Racine_id} + {minichat, Id, Auteur_id, Date, Pseudo, Contenu, Racine_id, normal} end, record_info(fields, minichat) - ), - creer_indexes(). % uniquement pour l'indice sur id_minichat de la table troll + ), + 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), + 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.