- \r
-\r
-% Renvoie tous les trolls\r
-trolls() ->\r
- resultat_transaction(mnesia:transaction(\r
- fun() ->\r
- e(qlc:keysort(#troll.id, q([T || T <- mnesia:table(troll)])), [{tmpdir, ?KEY_SORT_TEMP_DIR}])\r
- end\r
- )).\r
- \r
- \r
-% Renvoie les trolls manquants posté après Last_id.\r
-trolls(Last_id) ->\r
- resultat_transaction(mnesia:transaction(\r
- fun() ->\r
- e(qlc:keysort(#troll.id, q([T || T <- mnesia:table(troll), T#troll.id > Last_id, T#troll.date_post =:= undefined])), [{tmpdir, ?KEY_SORT_TEMP_DIR}])\r
- end\r
- )).\r
- \r
- \r
- % Crée un nouveau troll.\r
- % Renvoie l'id du nouveau troll\r
- % ou max_troll_reached_per_user si le nombre de troll posté par l'utilisateur max a été atteind\r
- % ou max_troll_reached si le nombre de troll posté max a été atteind\r
- % ou user_unknown\r
-put_troll(User_id, Content) ->\r
- resultat_transaction(mnesia:transaction(\r
- fun() ->\r
- % control le nombre de troll déjà posté\r
- Nb_troll_poste_par_user = length(e(q(\r
- [\r
- E#troll.id || E <- mnesia:table(troll),\r
- E#troll.id_user =:= User_id,\r
- E#troll.date_post =:= undefined\r
- ]\r
- ), [{tmpdir, ?KEY_SORT_TEMP_DIR}])),\r
- Nb_troll_poste_total = length(e(q(\r
- [\r
- E#troll.id || E <- mnesia:table(troll),\r
- E#troll.date_post =:= undefined\r
- ]\r
- ), [{tmpdir, ?KEY_SORT_TEMP_DIR}])),\r
- User = user_by_id(User_id),\r
- case User of\r
- {ok, _} ->\r
- if Nb_troll_poste_par_user >= ?NB_MAX_TROLL_WAITING_BY_USER ->\r
- max_troll_reached_per_user;\r
- Nb_troll_poste_total >= ?NB_MAX_TROLL_WAITING ->\r
- max_troll_reached;\r
- true ->\r
- Id = nouvel_id(minichat),\r
- mnesia:write(#troll{id = Id, id_user = User_id, date_create = now(), content = Content}),\r
- Id\r
- end;\r
- _ ->\r
- user_unknown\r
- end\r
- end\r
- )).\r
-\r
-\r
-% renvoie ok | erreur\r
-mod_troll(Troll_id, Content) ->\r
- mnesia:transaction(\r
- fun() ->\r
- case mnesia:wread({troll, Troll_id}) of\r
- [Troll = #troll{date_post = undefined}] ->\r
- mnesia:write(Troll#troll{content = Content});\r
- _ ->\r
- mnesia:abort("mod_troll: Troll inconnu ou déjà posté")\r
- end\r
- end\r
- ).\r
- \r
- \r
-del_troll(Troll_id) ->\r
- mnesia:transaction(\r
- fun() ->\r
- case mnesia:wread({troll, Troll_id}) of\r
- [#troll{date_post = undefined}] ->\r
- mnesia:delete({troll, Troll_id});\r
- _ ->\r
- mnesia:abort("mod_troll: Troll inconnu ou déjà posté")\r
- end\r
- end\r
- ).\r
- \r
- \r
-troll_by_id(Troll_id) ->\r
- resultat_transaction(mnesia:transaction(\r
- fun() ->\r
- case e(q([T || T <- mnesia:table(troll), T#troll.id =:= Troll_id]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]) of\r
- [T] -> {ok, T};\r
- _ ->\r
- erreur\r
- end\r
- end\r
- )).\r
- \r
-\r
-% Renvoie le troll actuel qui se trouve sur la page principale.\r
-% Renvois aucun si pas de troll courant.\r
-current_troll() ->\r
- resultat_transaction(mnesia:transaction(\r
- fun() ->\r
- C = cursor(qlc:keysort(#troll.date_post, q([T || T <- mnesia:table(troll), T#troll.date_post =/= undefined]), [{order, descending}]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]),\r
- R = case qlc:next_answers(C, 1) of\r
- [T] -> T;\r
- _ -> aucun\r
- end,\r
- qlc:delete_cursor(C),\r
- R\r
- end\r
- )).\r
-\r