From 8bede29111bde3481ed8b3d6637c241c8d241544 Mon Sep 17 00:00:00 2001 From: Greg Burri Date: Thu, 12 Jun 2008 20:45:20 +0000 Subject: [PATCH] =?utf8?q?MOD=20modification=20de=20la=20BD=20en=20vue=20d?= =?utf8?q?e=20la=20version=201.1=20(attention,=20tout=20est=20cass=C3=A9,?= =?utf8?q?=20rien=20ne=20marche,=20pas=20fini)?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- doc/protocole3.txt | 16 ++-------- js/euphorik.js | 4 ++- modules/erl/euphorik_bd.erl | 47 ++++++++++++++++++++++++++---- modules/erl/euphorik_protocole.erl | 33 ++++----------------- modules/include/euphorik_bd.hrl | 1 + 5 files changed, 55 insertions(+), 46 deletions(-) diff --git a/doc/protocole3.txt b/doc/protocole3.txt index 66f688d..2979cdf 100644 --- a/doc/protocole3.txt +++ b/doc/protocole3.txt @@ -85,13 +85,8 @@ ou "nick_format" : "nick" | "login" | "nick_login", "view_times" : true | false, "view_tooltips" : true | false, - "main_page" : 1, - "conversations" : [ - { - "racine" : 123, - "page" : 1 - } - ], + // "main_page" : 1, + "conversations" : [3, 8], "ek_master" : true | false } @@ -118,12 +113,7 @@ c -> s "view_times" : true | false, "view_tooltips" : true | false, "main_page" : 1, - "conversations" : [ - { - "root" : 123, - "page" : 1 - } - ] + "conversations" : [3, 8] } s -> c diff --git a/js/euphorik.js b/js/euphorik.js index 547176f..64c9379 100755 --- a/js/euphorik.js +++ b/js/euphorik.js @@ -682,7 +682,7 @@ Client.prototype.getJSONConversations = function() { var conversations = new Array() for (var i = 0; i < this.conversations.length; i++) - conversations.push({ "root" : this.conversations[i].root, "page" : this.conversations[i].page}) + conversations.push(this.conversations[i].root) return conversations } @@ -850,6 +850,8 @@ Client.prototype.chargerDonnees = function(data) // les conversations this.conversations = data["conversations"] + for (var i = 0; i < this.conversations.length; i++) + this.conversations[i] = {root : this.conversations[i], page : 1} this.majBulle() this.majCssSelectionee() diff --git a/modules/erl/euphorik_bd.erl b/modules/erl/euphorik_bd.erl index 634d5ff..4e47099 100755 --- a/modules/erl/euphorik_bd.erl +++ b/modules/erl/euphorik_bd.erl @@ -30,11 +30,12 @@ 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" où 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) -> diff --git a/modules/erl/euphorik_protocole.erl b/modules/erl/euphorik_protocole.erl index 35742c9..3305c37 100755 --- a/modules/erl/euphorik_protocole.erl +++ b/modules/erl/euphorik_protocole.erl @@ -117,17 +117,11 @@ profile( {conversations, {array, Conversations_json}} ] ) -> - % est-ce que les messages auquel on répond existent ? - Conversations = lists:foldr( - fun({struct, [{root, Root}, {page, Page}]}, Acc) -> - Message_existe = euphorik_bd:message_existe(Root), - if Message_existe -> - [{Root, Page} | Acc]; - true -> - Acc - end + % virage des messages qui n'existent pas + Conversations = lists:dropwhile( + fun(Message_id) -> + not euphorik_bd:message_existe(Message_id) end, - [], Conversations_json ), % TODO : pas très beau, mieux vaut construire un #user @@ -666,22 +660,7 @@ json_reponse_login_ok(User) -> {nick_format, atom_to_list(User#user.nick_format)}, {view_times, User#user.view_times}, {view_tooltips, User#user.view_tooltips}, - {main_page, User#user.page_principale}, - {conversations, - {array, - lists:map( - fun(C) -> - {struct, - [ - {root, element(1, C)}, - {page, element(2, C)} - ] - } - end, - User#user.conversations - ) - } - }, - {ek_master, User#user.ek_master} + {conversations, {array, User#user.conversations } }, + {ek_master, User#user.ek_master} ] }. diff --git a/modules/include/euphorik_bd.hrl b/modules/include/euphorik_bd.hrl index 5bf3915..0d263c9 100755 --- a/modules/include/euphorik_bd.hrl +++ b/modules/include/euphorik_bd.hrl @@ -74,6 +74,7 @@ nick_format = nick, %atom(), peut valoir 'nick', 'login' ou 'nick_login' view_times = true, view_tooltips = true, + message_order = reverse, % can be normal or reverse indice_flood = 0, % integer() est incrémenté lorsque l'utilisateur envoie trop rapidement des messages. conversations = [], % [integer()], la liste des messages correspondant au conversation ek_master = false, -- 2.43.0