ADD avancement sur la page admin : listage des ips bannis (presque fini)
[euphorik.git] / js / pageAdmin.js
index 4c34f58..9091d6d 100644 (file)
@@ -7,16 +7,24 @@ function PageAdmin(client, formateur, util)
    this.client = client
    this.formateur = formateur
    this.util = util
+   
+   this.timeoutIDmajIPs = null
 }
 
 PageAdmin.prototype.contenu = function()
 {
    return '<h1>Trolls</h1>\
+   <p>Un troll est un sujet à débat, en général une question.</p>\
    <p>Chaque semaine un troll est choisit au hasard parmis les trolls proposés et devient le troll de la semaine.</p>\
-   <form id="nouveauTroll"><p>\
-      <input class="troll" name="troll" type="text" size="80" maxlength="500" value=""></input>\
-      <button class="return" value="return">poster</button>\
-   </p></form><div id="trolls"></div>'
+   <form action="" id="nouveauTroll">\
+      <p>\
+         <input class="troll" name="troll" type="text" maxlength="500" value=""></input>\
+         <button class="return" value="return">poster</button>\
+      </p>\
+   </form>\
+   <div id="trolls"></div>\
+   <h1>IPs bannies</h1>\
+   <div id="ips"></div>'
 }
 
 PageAdmin.prototype.charger = function()
@@ -28,6 +36,10 @@ PageAdmin.prototype.charger = function()
    this.trolls = new Trolls(this.client, this.util, this.formateur)
    this.trolls.rafraichirTrolls()
    
+   this.majIPs()
+   
+   $("#page form#nouveauTroll  input.troll").focus()
+   
    $("#page form#nouveauTroll button.return").click(
       function()
       {
@@ -86,8 +98,142 @@ PageAdmin.prototype.posterTroll = function()
    )
 }
 
+
+/**
+  * Met à jour la liste des IP bannies.
+  */
+PageAdmin.prototype.majIPs = function()
+{
+   if (this.timeoutIDmajIPs)
+      clearTimeout(this.timeoutIDmajIPs)
+
+   var thisPageAdmin = this
+
+   var dataToSend = 
+      {
+         "action" : "list_banned_ips", 
+         "cookie" : this.client.cookie
+      }
+
+   ;;; dumpObj(dataToSend)
+   jQuery.ajax(
+      {
+         type: "POST",
+         url: "request",
+         dataType: "json",
+         data: this.util.jsonVersAction(dataToSend),
+         success:
+            function(data)
+            {
+               ;;; dumpObj(data)
+               
+               if (data["reply"] == "list_banned_ips")
+               {
+                  var XHTML = ""
+                  for(var i = 0; i < data["list"].length; i++)
+                  {
+                     var ip = data["list"][i]
+                     XHTML += '<div class="ban"><span class="ip">' + ip["ip"] + '</span>|' +
+                        '<span class="temps">' +
+                        ip["remaining_time"] +
+                        '</span>|'
+                     for(var j = 0; j < ip["users"].length; j++)
+                     {
+                        var user = ip["users"][j]
+                        XHTML += (j > 0 ? ", " : "") +
+                           '<span class="pseudo">' + thisPageAdmin.formateur.traitementComplet(user["nick"]) + '</span>' +
+                           (user["login"] == "" ? "" : '<span class="login">(' + thisPageAdmin.formateur.traitementComplet(user["login"]) + ')</span>')
+                     }
+                     XHTML += '<span class="deban">débannir</span></div>'
+                  }
+                  
+                  if (data["list"].length == 0)
+                     XHTML += '<p>Aucune IP bannie</p>'
+                     
+                  $("#ips").html(XHTML)
+                  
+                  $(".ban").each(
+                     function()
+                     {
+                        var ip = $(".ip").html()
+                        $(".deban", this).click(
+                           function()
+                           {
+                              thisPageAdmin.util.messageDialogue("Êtes-vous sur de vouloir débannir l'IP " + ip + " ?", messageType.question,
+                                 {"Oui" : function()
+                                    {
+                                       thisPageAdmin.deban(ip)
+                                    },
+                                  "Non" : function(){}
+                                 }
+                              )
+                           }
+                        )
+                     }
+                  )
+               }
+               else if (data["reply"] == "error")
+               {
+                  thisPageAdmin.util.messageDialogue(data["error_message"])
+               }
+               
+               // rafraichissement toutes les minutes (je sais c'est mal)
+               // le problème est le rafraichissement des temps restant de bannissement qui doit êtrew fait du coté client
+               thisPageAdmin.timeoutIDmajIPs = setTimeout(function(){ thisPageAdmin.majIPs() }, 60 * 1000)
+            }
+      }
+   )
+}
+
+PageAdmin.prototype.deban = function(ip)
+{
+   var thisPageAdmin = this
+
+   var dataToSend = 
+      {
+         "action" : "unban", 
+         "cookie" : this.client.cookie,
+         "ip" : ip
+      }
+
+   ;;; dumpObj(dataToSend)
+   jQuery.ajax(
+      {
+         type: "POST",
+         url: "request",
+         dataType: "json",
+         data: this.util.jsonVersAction(dataToSend),
+         success:
+            function(data)
+            {
+               ;;; dumpObj(data)
+               switch(data["reply"])
+               {
+                  case "error" :
+                     thisPageAdmin.util.messageDialogue(data["error_message"])
+                     break
+                  case "ok" :
+                     thisPageAdmin.majIPs()
+                     break 
+               }
+            }
+      }
+   )
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+function Troll(content, author)
+{
+   this.content = content
+   this.author = author
+}
+
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
+
 function Trolls(client, util, formateur)
 {
    this.client = client
@@ -95,11 +241,15 @@ function Trolls(client, util, formateur)
    this.formateur = formateur
    this.dernierTroll = 0
    this.pageEvent = new PageEvent("admin", this.util)
+   
+   this.trolls = {}
 }
 
 
 Trolls.prototype.modifier = function(id, content)
 {
+   var thisTrolls = this
+   
    var dataToSend =
       {
          "action" : "mod_troll",
@@ -121,7 +271,7 @@ Trolls.prototype.modifier = function(id, content)
                ;;; dumpObj(data)
                if (data["reply"] == "error")
                {
-                  thisPageAdmin.util.messageDialogue(data["error_message"])
+                  thisTrolls.util.messageDialogue(data["error_message"])
                }
             }
       }
@@ -133,6 +283,8 @@ Trolls.prototype.modifier = function(id, content)
   */
 Trolls.prototype.supprimer = function(id) 
 {
+   var thisTrolls = this
+
    var dataToSend =
       {
          "action" : "del_troll",
@@ -153,7 +305,7 @@ Trolls.prototype.supprimer = function(id)
                ;;; dumpObj(data)
                if (data["reply"] == "error")
                {
-                  thisPageAdmin.util.messageDialogue(data["error_message"])
+                  thisTrolls.util.messageDialogue(data["error_message"])
                }
             }
       }
@@ -174,10 +326,14 @@ Trolls.prototype.rafraichirTrolls = function()
                var XHTML = ""
                for (var i = 0; i < data["trolls"].length; i++)
                {
+                  var troll = new Troll(data["trolls"][i]["content"], data["trolls"][i]["author"])
+                  var trollId = data["trolls"][i]["troll_id"]
+                  thisTrolls.trolls[trollId] = troll
+               
                   XHTML +=
-                     '<div id="troll' + data["trolls"][i]["troll_id"] + '" class="troll">' +
-                     '<span class="content">' + thisTrolls.formateur.traitementComplet(data["trolls"][i]["content"], data["trolls"][i]["author"]) + '</span>' +
-                     '<span class="author">' + thisTrolls.formateur.traitementComplet(data["trolls"][i]["author"]) + '</span>' +
+                     '<div id="troll' + trollId + '" class="troll">' +
+                     '<span class="content">' + thisTrolls.formateur.traitementComplet(troll.content, troll.author) + '</span>' +
+                     '<span class="author"> - ' + thisTrolls.formateur.traitementComplet(troll.author) + '</span>' +
                      (data["trolls"][i]["author_id"] == thisTrolls.client.id ? '<span class="editTroll">éditer</span><span class="delTroll">Supprimer</span>' : '') +
                      '</div>'
                }
@@ -187,6 +343,16 @@ Trolls.prototype.rafraichirTrolls = function()
                   {
                      var troll = this
                      var id = parseInt($(this).attr("id").substr(5))
+                     
+                     $("a[@rel*=lightbox]", this).lightBox()
+                     
+                     $(this).keypress(
+                        function(e)
+                        {
+                           if (e.which == 13) // return
+                              $(".modifier", this).click()
+                        }
+                     )
                      $(".delTroll", this).click(
                         function()
                         {
@@ -208,12 +374,16 @@ Trolls.prototype.rafraichirTrolls = function()
                         {
                            $("span", troll).css("display", "none")
                            $(troll).append(
-                              '<form><p><input class="content" type="text" size="50" maxlength="500" value="' + $(".content", troll).html() + '"></input><span class="modifier">modifier</span><span class="annuler">annuler</span></p></form>'
+                              '<form><p><input class="content" type="text" size="50" maxlength="500" value="' +
+                              thisTrolls.trolls[id].content +
+                              '"></input><span class="modifier">modifier</span><span class="annuler">annuler</span></p></form>'
                            )
+                           $("form input.content").focus()
+         
                            var virerLeFormulaire = function()
                            {
                               $("form", troll).remove()
-                              $("span", troll).css("display", "inline")
+                              $('span', troll).css("display", "inline")
                            }
                            $("span.modifier", troll).click(
                               function()
@@ -234,11 +404,20 @@ Trolls.prototype.rafraichirTrolls = function()
                   thisTrolls.dernierTroll = data["trolls"][data["trolls"].length - 1]["troll_id"]
                break
             case "troll_modified" :
-               $("#trolls #troll" + data["troll_id"] + " .content").html(data["content"])
+               $("#trolls #troll" + data["troll_id"] + " .content").html(thisTrolls.formateur.traitementComplet(data["content"], thisTrolls.trolls[data["troll_id"]].author))
+               $("#trolls #troll" + data["troll_id"] + " a[@rel*=lightbox]").lightBox()
+               thisTrolls.trolls[data["troll_id"]].content = data["content"]
                break
             case "troll_deleted" :
                $("#trolls #troll"+data["troll_id"]).remove()
                break
+            case "majIPs" :
+               // TODO : mettre l'attente au niveau de la page et pas au niveau des trolls
+               // thisPageAdmin.majIPs()
+               break
+            case "error" :
+               thisTrolls.util.messageDialogue(data["error_message"])
+               break
          }
       }
    )