% 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(F) ->\r
+ case F of\r
+ "css" ++ Reste -> "styles" ++ Reste;\r
+ _ -> F\r
+ end\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,
mnesia:create_table(texte, [
{attributes, record_info(fields, texte)},
{disc_copies, [node()]}
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, Login, Password, {profile, Pseudo, Email, patch1_transforme_css(Css), Nick_format, View_times, View_tooltips, light, reverse, lists:map(fun({R, _}) -> {R, false} end, Conversations)}, Date_creation, Date_derniere_connexion, Indice_flood, Ek_master, Last_ip}
+ {user, Id, Cookie, Login, Password, {profile, Pseudo, Email, Transforme_css(Css), Nick_format, View_times, View_tooltips, light, reverse, lists:map(fun({R, _}) -> {R, false} end, Conversations)}, Date_creation, Date_derniere_connexion, Indice_flood, Ek_master, Last_ip}
end,
record_info(fields, user),
user
% met à jour les enfants des racines
% idéalement : utiliser un cursor mais je crois qu'il n'est pas possible de faire des modifs en itérant en même temps avec un cursor, a voir..
Messages = e(q([M || M <- mnesia:table(minichat), euphorik_bd:parents(M#minichat.id) =:= []]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]),
- lists:foreach(fun(M) -> patch_1_traiter_message(M, M#minichat.id) end, Messages)
+ lists:foreach(fun(M) -> Traiter_message(M, M#minichat.id) end, Messages)
end
) of
{aborted, Raison} -> {erreur, Raison};
{atomic, _} -> ok
- end.
-
-
-% Prend un chemin vers la feuille de style de type "css/1/euphorik.css"
-% et renvoie "styles/1/euphorik.css"
-patch1_transforme_css("css" ++ Reste) ->
- "styles" ++ Reste;
-patch1_transforme_css(F) ->
- F.
-
-
-patch_1_traiter_message(M, Racine) ->
- % met à jour la racine de chaque message qui répond à M
- lists:foreach(
- fun(M2) ->
- mnesia:write(M2#minichat{racine_id = Racine}),
- patch_1_traiter_message(M2, Racine)
- end,
- euphorik_bd:enfants(M#minichat.id)
- ).
+ end;\r
+% 2 -> 3\r
+patch(2) ->\r
+ % traitement de la table troll\r
+ mnesia:transform_table(\r
+ troll,\r
+ fun({troll, Id_troll, Id_user, Date_create, Date_post, Content}) ->\r
+ % recherche le message associé s'il existe\r
+ Id_minichat = case mnesia:index_read(minichat, Id_troll, 7) of\r
+ [#minichat{id = Id}] -> Id;\r
+ _ -> undefined\r
+ end,\r
+ {troll, Id_troll, Id_user, Id_minichat, Date_create, Date_post, Content}\r
+ end,\r
+ record_info(fields, troll),\r
+ user\r
+ )\r
+ TODO...\r
+ \r
% crée un backup dont le nom est fournit dans le repertoire backups qui se trouve dans le repertoire de la BD.
%backup(Nom) ->
% Version de la BD
--define(VERSION_BD, 2).
+-define(VERSION_BD, 3).
-define(TABLES, [counter, proprietes, minichat, reponse_minichat, user, ip_table, troll]).
date, % erlang:now()
pseudo, % chaine de caractère
contenu, % chaine de caractère
- troll_id = undefined, % l'id du troll associé correspondant
racine_id = undefined % la racine, par défaut correspond à l'id du message
}).
}).
-
-record(profile, % attention : pas une table !
{
pseudo = [], % string()
ostentatious_master = light, % peut valoir invisible, light ou heavy. seulement pour ek_master
chat_order = reverse, % peut valoir chrono ou reverse
conversations = [] % [{integer(), bool}], la liste des messages correspondant au conversation {racine, reduite?}
- }).
+ }).\r
+ \r
+
-record(user,
{
id,
-record(troll,
{
id,
- id_user,
+ id_user,\r
+ id_minichat = undefined, % l'id du message associé
date_create, % erlang:now()
date_post = undefined, % date à laquelle le troll est affiché sur la page principale. undefined initialement puis erlang:now() quand affiché
content % chaine de caractère