+
+troll_by_id(Troll_id) ->
+ resultat_transaction(mnesia:transaction(
+ fun() ->
+ case e(q([T || T <- mnesia:table(troll), T#troll.id =:= Troll_id])) of
+ [T] -> {ok, T};
+ _ ->
+ erreur
+ end
+ end
+ )).
+
+
+% Renvoie le troll actuel qui se trouve sur la page principale.
+% Renvois aucun si pas de troll courant.
+current_troll() ->
+ resultat_transaction(mnesia:transaction(
+ fun() ->
+ % TODO : ya pas moyen de désigner le champs plutot qu'avec un nombre pour le tri ?
+ C = cursor(q([T || T <- qlc:keysort(5, mnesia:table(troll), [{order, descending}]), T#troll.date_post =/= undefined])),
+ R = case qlc:next_answers(C, 1) of
+ [T] -> T;
+ _ -> aucun
+ end,
+ qlc:delete_cursor(C),
+ R
+ end
+ )).
+
+
+% 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() ->
+ {A1,A2,A3} = now(),
+ random:seed(A1, A2, A3),
+ mnesia:transaction(
+ fun() ->
+ case e(q([T || T <- mnesia:table(troll), T#troll.date_post =:= undefined])) of
+ [] ->
+ plus_de_trolls;
+ Trolls ->
+ Troll = lists:nth(random:uniform(length(Trolls)), Trolls),
+ Troll2 = Troll#troll{date_post = now()},
+ 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
+ )).
+