ADD trolls, fin coté serveur et début coté client
[euphorik.git] / modules / erl / euphorik_protocole.erl
index c2342ca..5c8d6d8 100755 (executable)
@@ -13,6 +13,9 @@
    put_message/1,
    ban/1,
    slap/1,
+   put_troll/1,
+   mod_troll/1,
+   del_troll/1,
    erreur/1
 ]).\r
 
@@ -120,7 +123,7 @@ profile(
 
 % Renvoie les messages appropriés.
 % last_message id et cookie sont facultatifs
-wait_event(Data) ->
+wait_event([{page, "chat"} | Data]) ->
    Cookie = case lists:keysearch(cookie, 1, Data) of {value, {_, C}} -> C; _ -> inconnu end,
    Last_message_id = case lists:keysearch(last_message_id, 1, Data) of {value, {_, Id}} -> Id; _ -> 0 end,
    {value, {_, Message_count}} = lists:keysearch(message_count, 1, Data),
@@ -187,7 +190,48 @@ wait_event(Data) ->
             )
          )\r
       }}\r
-   ]}.
+   ]};
+wait_event([{page, "admin"}, {last_troll, Last_troll}]) ->
+   case euphorik_bd:trolls(Last_troll) of
+      {mod, Troll} ->
+         {struct,
+            [
+               {reply, "troll_modified"},
+               {troll_id, Troll#troll.id},
+               {content, Troll#troll.content}
+            ]
+         };
+      {add, Trolls} ->
+         {struct,
+            [
+               {reply, "troll_added"},
+               {trolls, {array, 
+                  lists:map(
+                     fun(T) ->                        
+                        {struct,
+                           [
+                              {troll_id, T#troll.id},
+                              {content, T#troll.content}
+                           ]
+                        }
+                     end,
+                     Trolls
+                  )
+               }}
+            ]
+         };         
+      {del, Troll_id} ->
+         {struct,
+            [
+               {reply, "troll_deleted"},
+               {troll_id, Troll_id}
+            ]
+         };                  
+      _ ->
+         erreur("timeout")
+   end;
+wait_event(_) ->
+   erreur("Page inconnue").
             
          
 % Un utilisateur envoie un message
@@ -243,7 +287,8 @@ ban(
    [
       {cookie, Cookie},
       {duration, Duration},
-      {user_id, User_id}
+      {user_id, User_id},
+      {reason, Reason}
    ]) ->
       % controle que l'utilisateur est un admin
       case euphorik_bd:user_by_cookie(Cookie) of
@@ -253,12 +298,13 @@ ban(
                   erreur("Il n'est pas possible de s'auto bannir");
                {ok, User2 = #user{ek_master = false}} ->
                   euphorik_bd:ban(User2#user.last_ip, Duration),
-                  euphorik_bd:nouveau_message_sys(lists:flatten(io_lib:format("~s ~s est ~s pour ~s",
+                  euphorik_bd:nouveau_message_sys(lists:flatten(io_lib:format("~s ~s est ~s pour ~s.~s",
                      [
                         User2#user.pseudo,
                         if User2#user.login =:= [] -> ""; true -> "(" ++ User2#user.login ++ ")" end,
                         if Duration =< 15 -> "kické"; true -> "banni" end,
-                        format_minutes(Duration)
+                        format_minutes(Duration),
+                        if Reason =/= [] -> " Raison: " ++ Reason; true -> "" end ++ "."
                      ]
                   ))),
                   json_reponse_ok();
@@ -276,19 +322,26 @@ ban(
 slap(
    [
       {cookie, Cookie},
-      {user_id, User_id}
+      {user_id, User_id},
+      {reason, Reason}
    ]) ->
       % controle que l'utilisateur est un admin
       case euphorik_bd:user_by_cookie(Cookie) of
          {ok, User1 = #user{ek_master = true}} ->
             case euphorik_bd:user_by_id(User_id) of
                {ok, User1} ->
-                  euphorik_bd:nouveau_message_sys(lists:flatten(io_lib:format("~s s'auto slap (et il aime ça)", [User1#user.pseudo])));
+                  euphorik_bd:nouveau_message_sys(lists:flatten(io_lib:format("~s s'auto slap~s.", 
+                     [
+                        User1#user.pseudo,
+                        if Reason =/= [] -> " Raison: " ++ Reason; true -> "" end
+                     ]
+                  )));
                {ok, User2 = #user{ek_master = false}} ->
-                  euphorik_bd:nouveau_message_sys(lists:flatten(io_lib:format("~s se fait slaper par ~s",
+                  euphorik_bd:nouveau_message_sys(lists:flatten(io_lib:format("~s se fait slaper par ~s.~s",
                      [
                         User2#user.pseudo,
-                        User1#user.pseudo
+                        User1#user.pseudo,
+                        if Reason =/= [] -> " Raison: " ++ Reason; true -> "" end ++ "."
                      ]
                   ))),
                   json_reponse_ok();
@@ -301,6 +354,73 @@ slap(
             erreur("Utilisateur inconnu ou non ek master")
       end.
       
+put_troll(
+   [
+      {cookie, Cookie},
+      {content, Content}
+   ]
+) ->
+   % controle que l'utilisateur est un admin
+   case euphorik_bd:user_by_cookie(Cookie) of
+      {ok, User = #user{ek_master = true}} ->
+         case euphorik_bd:put_troll(User#user.id, Content) of
+            max_troll_reached_per_user ->
+               erreur(lists:flatten(io_lib:format("Le nombre de troll maximum par utilisateur est atteint : ~w ", [?NB_MAX_TROLL_WAITING_BY_USER])));
+            max_troll_reached ->
+               erreur(lists:flatten(io_lib:format("Le nombre de troll maximum en attente est atteint : ~w ", [?NB_MAX_TROLL_WAITING])));
+            _Id ->
+               json_reponse_ok()
+         end;
+      _ ->
+         erreur("Seul les ekMaster peuvent proposer des trolls")
+   end.
+   
+   
+mod_troll(
+   [
+      {cookie, Cookie},
+      {troll_id, Troll_id},
+      {content, Content}
+   ]
+) ->
+   % controle que l'utilisateur est un admin
+   case euphorik_bd:user_by_cookie(Cookie) of
+      {ok, User = #user{ek_master = true}} ->
+         User_id = User#user.id,
+         case euphorik_bd:troll_by_id(Troll_id) of
+            {ok, #troll{id_user = User_id}} ->
+               euphorik_bd:mod_troll(User#user.id, Content),
+               json_reponse_ok();
+            _ ->
+               erreur("Vous ne posséder pas ce troll")
+         end;
+      _ ->
+         erreur("Seul les ekMaster peuvent proposer des trolls")
+      end.
+
+   
+del_troll(
+   [
+      {cookie, Cookie},
+      {troll_id, Troll_id}
+   ]
+) -> 
+   % controle que l'utilisateur est un admin
+   case euphorik_bd:user_by_cookie(Cookie) of
+      {ok, User = #user{ek_master = true}} ->
+         User_id = User#user.id,
+         case euphorik_bd:troll_by_id(Troll_id) of
+            {ok, #troll{id_user = User_id}} ->
+               euphorik_bd:del_troll(User#user.id),
+               json_reponse_ok();
+            _ ->
+               erreur("Vous ne posséder pas ce troll")
+         end;
+      _ ->
+         erreur("Seul les ekMaster peuvent proposer des trolls")
+   end.
+   
 
 % Construit une erreur
 erreur(Message) ->