From 5f6ea43b8825c6df005e0130f9e4fa54b1931831 Mon Sep 17 00:00:00 2001 From: Greg Burri Date: Sat, 24 May 2008 07:50:38 +0000 Subject: [PATCH] =?utf8?q?ADD=20cr=C3=A9ation=20d'un=20message=20associ?= =?utf8?q?=C3=A9=20au=20troll=20de=20la=20semaine=20lors=20de=20l'=C3=A9le?= =?utf8?q?ction=20de=20celui=20ci.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- css/1/pageMinichat.css | 3 +- doc/protocole3.txt | 1 + js/pageMinichat.js | 15 +++++----- modules/erl/euphorik_bd.erl | 48 +++++++++++++++++++++++++----- modules/erl/euphorik_protocole.erl | 2 +- modules/include/euphorik_bd.hrl | 3 +- 6 files changed, 53 insertions(+), 19 deletions(-) diff --git a/css/1/pageMinichat.css b/css/1/pageMinichat.css index bd2a920..da92691 100755 --- a/css/1/pageMinichat.css +++ b/css/1/pageMinichat.css @@ -60,7 +60,8 @@ #page.minichat #trollCourant .troll { font-style: italic; - color: #FFFF88 + color: #FFFF88; + cursor: pointer; } #page.minichat .titreSmiles:hover { diff --git a/doc/protocole3.txt b/doc/protocole3.txt index 8489e58..4b18f9e 100644 --- a/doc/protocole3.txt +++ b/doc/protocole3.txt @@ -192,6 +192,7 @@ ou { "reply" : "new_troll", "troll_id" : 123, + "message_id" : 12, "content" : "Linux sera desktop ready en 2008 ?" } ou diff --git a/js/pageMinichat.js b/js/pageMinichat.js index 5ce2793..0ba6dc6 100755 --- a/js/pageMinichat.js +++ b/js/pageMinichat.js @@ -242,14 +242,7 @@ PageMinichat.prototype.envoyerMessage = function(pseudo, message) // met à jour la classe des messages auquel repond celui ci (c'est un peu de la triche) for (var i = 0; i < repondA.length; i++) - { $("#conversations div#" + repondA[i]).addClass("repondu") - /* Ca sert à rien, TODO : tester/virer - for (var c = 0; c < thisPageMinichat.messages.conversations.length; c++) - for (var m = 0; m < thisPageMinichat.messages.conversations[c].messages.length; m++) - thisPageMinichat.messages.conversations[c].messages[m].clientARepondu = true - */ - } } else if (data["reply"] == "error") { @@ -930,7 +923,13 @@ Messages.prototype.rafraichirMessages = function(vider) { case "new_troll" : thisMessages.trollIdCourant = data["troll_id"] - $("#trollCourant .troll").html(thisMessages.formateur.traitementComplet(data["content"])) + $("#trollCourant .troll").html(thisMessages.formateur.traitementComplet(data["content"])).unbind().click( + function() + { + thisMessages.ouvrirConversation(data["message_id"]) + } + ) + $("#trollCourant .troll a[@rel*=lightbox]").lightBox() break diff --git a/modules/erl/euphorik_bd.erl b/modules/erl/euphorik_bd.erl index b938f75..91d6f67 100755 --- a/modules/erl/euphorik_bd.erl +++ b/modules/erl/euphorik_bd.erl @@ -50,6 +50,7 @@ % messages : nouveau_message/3, nouveau_message_sys/1, + nouveau_message_sys/2, messages/1, messages/2, messages/3, @@ -78,6 +79,7 @@ troll_by_id/1, current_troll/0, elire_troll/0, + message_id_associe/1, % versions : update_version/1, @@ -110,7 +112,7 @@ create_tables() -> ]), mnesia:create_table(minichat, [ {attributes, record_info(fields, minichat)}, - {index, [auteur_id]}, + {index, [auteur_id, troll_id]}, {disc_copies, [node()]} ]), mnesia:create_table(reponse_minichat, [ @@ -430,13 +432,19 @@ inserer_reponses(_, []) -> % Permet de créer un message système. % Renvoie l'id du message système nouveau_message_sys(Mess) -> + nouveau_message_sys(Mess, undefined). + + +% Création d'un message système lié à un troll. +nouveau_message_sys(Mess, Troll_id) -> {ok, Root} = user_by_id(0), - mnesia:transaction( + resultat_transaction(mnesia:transaction( fun() -> Id = nouvel_id(minichat), - mnesia:write(#minichat{id=Id, auteur_id=0, date=now(), pseudo=Root#user.pseudo, contenu=Mess}) + mnesia:write(#minichat{id=Id, auteur_id=0, date=now(), pseudo=Root#user.pseudo, contenu=Mess, troll_id=Troll_id}), + Id end - ). + )). % Renvoie N messages se trouvant sur la première page @@ -447,7 +455,10 @@ messages(N) -> % Renvoie N messages se trouvant sur la page P messages(N, P) -> F = fun() -> - C = cursor(q([E || E <- qlc:keysort(2, mnesia:table(minichat), [{order, descending}])])), + C = cursor(q([ + E#minichat{contenu = contenu_message(E)} || + E <- qlc:keysort(2, mnesia:table(minichat), [{order, descending}]) + ])), if P > 1 -> qlc:next_answers(C, N * (P - 1)); true -> ok end, @@ -468,12 +479,18 @@ messages(Id, N, P) -> message_by_id(Id) -> case resultat_transaction(mnesia:transaction( fun() -> - e(q([E || E <- qlc:keysort(2, mnesia:table(minichat), [{order, ascending}]), Id =:= E#minichat.id])) + e(q([E#minichat{contenu = contenu_message(E)} || E <- qlc:keysort(2, mnesia:table(minichat), [{order, ascending}]), Id =:= E#minichat.id])) end )) of [M] -> {ok, M}; _ -> erreur end. + + +% Renvoie le contenu d'un message donnée, à utiliser à l'intérieur d'une transaction. +% TODO : Cette fonction pourrait être remplacé par un "outer-join", est-ce possible avec qlc ? +contenu_message(E) -> + lists:flatten(E#minichat.contenu ++ e(q([T#troll.content || T <- mnesia:table(troll), T#troll.id =:= E#minichat.troll_id]))). % Renvoie une liste de message (voir #minichat de euphorik_bd.hrl) à partir d'une liste d'id (Ids). @@ -678,6 +695,7 @@ trolls(Last_id) -> )). + % Crée un nouveau troll. % Renvoie l'id du nouveau troll % ou max_troll_reached_per_user si le nombre de troll posté par l'utilisateur max a été atteind % ou max_troll_reached si le nombre de troll posté max a été atteind @@ -775,6 +793,7 @@ current_troll() -> % Elit un troll au hasard parmis les trolls en attente (leur date_post =:= undefined) +% Un message est posté par 'Sys' et le troll elu est lié à ce message % met à jour sa date de post. % renvoie plus_de_trolls si il n'y a aucun troll en attente. elire_troll() -> @@ -788,12 +807,25 @@ elire_troll() -> Trolls -> Troll = lists:nth(random:uniform(length(Trolls)), Trolls), Troll2 = Troll#troll{date_post = now()}, - mnesia:write(Troll2) + mnesia:write(Troll2), + nouveau_message_sys("Troll de la semaine : ", Troll2#troll.id) end end ). - + +% Renvoie l'id du message associé au troll dont l'id est donnée. +% Renvoie undefined si il n'y en a pas. +message_id_associe(Troll_id) -> + resultat_transaction(mnesia:transaction( + fun() -> + case e(q([M#minichat.id || M <- mnesia:table(minichat), M#minichat.troll_id =:= Troll_id])) of + [Id] -> Id; + _ -> undefined + end + end + )). + update_version(1) -> mnesia:transform_table( diff --git a/modules/erl/euphorik_protocole.erl b/modules/erl/euphorik_protocole.erl index f1f0acd..e3e2cdf 100755 --- a/modules/erl/euphorik_protocole.erl +++ b/modules/erl/euphorik_protocole.erl @@ -38,7 +38,6 @@ list_banned_ips/1, erreur/1 ]). --include_lib("xmerl/include/xmerl.hrl"). -include("../include/euphorik_bd.hrl"). -include("../include/euphorik_defines.hrl"). @@ -229,6 +228,7 @@ wait_event_page_chat(User, Racines_conversations, Message_count, Last_message_id {struct, [ {reply, "new_troll"}, {troll_id, Current#troll.id}, + {message_id, euphorik_bd:message_id_associe(Current#troll.id)}, {content, Current#troll.content} ]}; _ -> diff --git a/modules/include/euphorik_bd.hrl b/modules/include/euphorik_bd.hrl index 8c16c70..ff1ca40 100755 --- a/modules/include/euphorik_bd.hrl +++ b/modules/include/euphorik_bd.hrl @@ -33,7 +33,8 @@ auteur_id, % -> #user.id date, % erlang:now() pseudo, % chaine de caractère - contenu % chaine de caractère + contenu, % chaine de caractère + troll_id = undefined % l'id du troll associé correspondant }). -- 2.43.0