{disc_copies, [node()]}
]),
mnesia:create_table(minichat, [
+ {type, ordered_set},
{attributes, record_info(fields, minichat)},
{disc_copies, [node()]}
]),
% mis à part car lors de la reprise de données avec load_textfile les indexes ne sont pas recréés
creer_indexes() ->
mnesia:add_table_index(minichat, auteur_id),
- mnesia:add_table_index(minichat, troll_id),
mnesia:add_table_index(reponse_minichat, cible),
mnesia:add_table_index(user, cookie),
mnesia:add_table_index(user, login),
- mnesia:add_table_index(troll, date_post).
+ mnesia:add_table_index(troll, date_post),\r
+ mnesia:add_table_index(troll, id_minichat).
% Connexion à la base de données de yaws sur overnux
User = #user{id = 0, profile = #profile{pseudo = "Sys"}, login = "Sys", date_creation = now(), date_derniere_connexion = now(), ek_master = true},
mnesia:write(User),
User
- end).
+ end),
+ peupler_texte().
peupler_texte() ->
mnesia:write(#texte{ id = 50, fr = "Impossible de mettre à jour le profile"}),
mnesia:write(#texte{ id = 60, fr = "timeout"}),
mnesia:write(#texte{ id = 70, fr = "Page inconnue"}),
- mnesia:write(#texte{ id = 80, fr = "Vous êtes banni pour encore ~w"}),
+ mnesia:write(#texte{ id = 80, fr = "Vous êtes banni pour encore ~s"}),
mnesia:write(#texte{ id = 90, fr = "Message vide"}),
- mnesia:write(#texte{ id = 100, fr = "Impossible d'ajouter un nouveau message. Raison : ~w"}),
+ mnesia:write(#texte{ id = 100, fr = "Impossible d'ajouter un nouveau message. Raison : ~s"}),
mnesia:write(#texte{ id = 110, fr = "Utilisateur inconnu"}),
mnesia:write(#texte{ id = 120, fr = "Il n'est pas possible de s'auto bannir"}),
mnesia:write(#texte{ id = 130, fr = "L'utilisateur est lui même un ekMaster"}),
% 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
+ 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
+ mnesia:del_table_index(minichat, troll_id),\r
+ 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
+ end,\r
+ record_info(fields, troll),\r
+ user\r
+ ), \r
+ creer_indexes(). % uniquement pour l'indice sur id_minichat de la table troll\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) ->