% Ajoute un message. Repond_A est une liste d'id auquel le message répond
% retourne soit l'id du message soit {erreur, <raison>}.
-nouveau_message(Mess, Auteur_id, Repond_A) ->
+nouveau_message(Mess, Auteur_id, Repond_A_ids) ->
% regarde si les id 'Repond_A' existent
F = fun() ->
- Nb_id_trouve = length(e(q([E#minichat.id || E <- mnesia:table(minichat), lists:member(E#minichat.id, Repond_A)]), [{tmpdir, ?KEY_SORT_TEMP_DIR}])),
+ Repond_A = e(
+ q([M || M <- mnesia:table(minichat), lists:member(M#minichat.id, Repond_A_ids)]),
+ [{tmpdir, ?KEY_SORT_TEMP_DIR}]
+ ),
+ Racine_id = case Repond_A of
+ [] -> undefined;
+ [M | _ ] -> M#minichat.racine_id
+ end,
% est-ce que l'auteur existe ?
case e(q([E || E <- mnesia:table(user), E#user.id =:= Auteur_id]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]) of
[Auteur] ->
- if Nb_id_trouve =/= length(Repond_A) ->
+ if length(Repond_A) =/= length(Repond_A_ids) ->
{erreur, "Un ou plusieurs messages introuvable"};
true ->
% comparaison entre la date du dernier poste et maintenant (gestion du flood)
true ->
mnesia:write(Auteur_maj),
Id = nouvel_id(minichat),
- inserer_reponses(Id, Repond_A),
- mnesia:write(#minichat{id=Id, auteur_id=Auteur#user.id, date=now(), pseudo=Auteur#user.pseudo, contenu=Mess}),
+ inserer_reponses(Id, Repond_A_ids),
+ mnesia:write(#minichat{
+ id = Id,
+ auteur_id = Auteur#user.id,
+ date = now(),
+ pseudo = Auteur#user.pseudo,
+ contenu = Mess,
+ racine_id = if Racine_id =:= undefined -> Id; true -> Racine_id end
+ }),
Id
end
end;
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, troll_id=Troll_id}),
+ mnesia:write(#minichat{id=Id, auteur_id=0, date=now(), pseudo=Root#user.pseudo, contenu=Mess, troll_id=Troll_id, racine_id=Id}),
Id
end
)).