// 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")
{
{
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
% messages :
nouveau_message/3,
nouveau_message_sys/1,
+ nouveau_message_sys/2,
messages/1,
messages/2,\r
messages/3,
troll_by_id/1,
current_troll/0,
elire_troll/0,
+ message_id_associe/1,
% versions :
update_version/1,
]),
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, [
% 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
% 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,
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).
)).
+ % 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
% 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() ->
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(