9091d6dc238090f8513e55637c15c01de1f3208b
3 function PageAdmin(client
, formateur
, util
)
8 this.formateur
= formateur
11 this.timeoutIDmajIPs
= null
14 PageAdmin
.prototype.contenu = function()
16 return '<h1>Trolls</h1>\
17 <p>Un troll est un sujet à débat, en général une question.</p>\
18 <p>Chaque semaine un troll est choisit au hasard parmis les trolls proposés et devient le troll de la semaine.</p>\
19 <form action="" id="nouveauTroll">\
21 <input class="troll" name="troll" type="text" maxlength="500" value=""></input>\
22 <button class="return" value="return">poster</button>\
25 <div id="trolls"></div>\
30 PageAdmin
.prototype.charger = function()
32 $("#page form#nouveauTroll").submit(function(){return false})
36 this.trolls
= new Trolls(this.client
, this.util
, this.formateur
)
37 this.trolls
.rafraichirTrolls()
41 $("#page form#nouveauTroll input.troll").focus()
43 $("#page form#nouveauTroll button.return").click(
46 thisPage
.posterTroll()
51 PageAdmin
.prototype.decharger = function()
53 this.trolls
.pageEvent
.stopAttenteCourante()
56 PageAdmin
.prototype.posterTroll = function()
58 var thisPageAdmin
= this
60 var content
= $("#page form#nouveauTroll input.troll").val()
62 content
= content
.trim()
65 this.util
.messageDialogue("Le troll est vide")
71 "action" : "put_troll",
72 "cookie" : this.client
.cookie
,
76 ;;; dumpObj(dataToSend
)
82 data: this.util
.jsonVersAction(dataToSend
),
88 if (data
["reply"] == "ok")
90 $("#page form#nouveauTroll input.troll").val("")
92 else if (data
["reply"] == "error")
94 thisPageAdmin
.util
.messageDialogue(data
["error_message"])
103 * Met à jour la liste des IP bannies.
105 PageAdmin
.prototype.majIPs = function()
107 if (this.timeoutIDmajIPs
)
108 clearTimeout(this.timeoutIDmajIPs
)
110 var thisPageAdmin
= this
114 "action" : "list_banned_ips",
115 "cookie" : this.client
.cookie
118 ;;; dumpObj(dataToSend
)
124 data: this.util
.jsonVersAction(dataToSend
),
130 if (data
["reply"] == "list_banned_ips")
133 for(var i
= 0; i
< data
["list"].length
; i
++)
135 var ip
= data
["list"][i
]
136 XHTML
+= '<div class="ban"><span class="ip">' + ip
["ip"] + '</span>|' +
137 '<span class="temps">' +
138 ip
["remaining_time"] +
140 for(var j
= 0; j
< ip
["users"].length
; j
++)
142 var user
= ip
["users"][j
]
143 XHTML
+= (j
> 0 ? ", " : "") +
144 '<span class="pseudo">' + thisPageAdmin
.formateur
.traitementComplet(user
["nick"]) + '</span>' +
145 (user
["login"] == "" ? "" : '<span class="login">(' + thisPageAdmin
.formateur
.traitementComplet(user
["login"]) + ')</span>')
147 XHTML
+= '<span class="deban">débannir</span></div>'
150 if (data
["list"].length
== 0)
151 XHTML
+= '<p>Aucune IP bannie</p>'
153 $("#ips").html(XHTML
)
158 var ip
= $(".ip").html()
159 $(".deban", this).click(
162 thisPageAdmin
.util
.messageDialogue("Êtes-vous sur de vouloir débannir l'IP " + ip
+ " ?", messageType
.question
,
165 thisPageAdmin
.deban(ip
)
175 else if (data
["reply"] == "error")
177 thisPageAdmin
.util
.messageDialogue(data
["error_message"])
180 // rafraichissement toutes les minutes (je sais c'est mal)
181 // le problème est le rafraichissement des temps restant de bannissement qui doit êtrew fait du coté client
182 thisPageAdmin
.timeoutIDmajIPs
= setTimeout(function(){ thisPageAdmin
.majIPs() }, 60 * 1000)
188 PageAdmin
.prototype.deban = function(ip
)
190 var thisPageAdmin
= this
195 "cookie" : this.client
.cookie
,
199 ;;; dumpObj(dataToSend
)
205 data: this.util
.jsonVersAction(dataToSend
),
210 switch(data
["reply"])
213 thisPageAdmin
.util
.messageDialogue(data
["error_message"])
216 thisPageAdmin
.majIPs()
224 ///////////////////////////////////////////////////////////////////////////////////////////////////
227 function Troll(content
, author
)
229 this.content
= content
234 ///////////////////////////////////////////////////////////////////////////////////////////////////
237 function Trolls(client
, util
, formateur
)
241 this.formateur
= formateur
242 this.dernierTroll
= 0
243 this.pageEvent
= new PageEvent("admin", this.util
)
249 Trolls
.prototype.modifier = function(id
, content
)
251 var thisTrolls
= this
255 "action" : "mod_troll",
256 "cookie" : this.client
.cookie
,
261 ;;; dumpObj(dataToSend
)
267 data: this.util
.jsonVersAction(dataToSend
),
272 if (data
["reply"] == "error")
274 thisTrolls
.util
.messageDialogue(data
["error_message"])
282 * Supprime un troll en fonction de son id.
284 Trolls
.prototype.supprimer = function(id
)
286 var thisTrolls
= this
290 "action" : "del_troll",
291 "cookie" : this.client
.cookie
,
295 ;;; dumpObj(dataToSend
)
301 data: this.util
.jsonVersAction(dataToSend
),
306 if (data
["reply"] == "error")
308 thisTrolls
.util
.messageDialogue(data
["error_message"])
315 Trolls
.prototype.rafraichirTrolls = function()
317 var thisTrolls
= this
319 this.pageEvent
.waitEvent(
320 function() { return { "last_troll" : thisTrolls
.dernierTroll
}},
323 switch (data
["reply"])
327 for (var i
= 0; i
< data
["trolls"].length
; i
++)
329 var troll
= new Troll(data
["trolls"][i
]["content"], data
["trolls"][i
]["author"])
330 var trollId
= data
["trolls"][i
]["troll_id"]
331 thisTrolls
.trolls
[trollId
] = troll
334 '<div id="troll' + trollId
+ '" class="troll">' +
335 '<span class="content">' + thisTrolls
.formateur
.traitementComplet(troll
.content
, troll
.author
) + '</span>' +
336 '<span class="author"> - ' + thisTrolls
.formateur
.traitementComplet(troll
.author
) + '</span>' +
337 (data
["trolls"][i
]["author_id"] == thisTrolls
.client
.id
? '<span class="editTroll">éditer</span><span class="delTroll">Supprimer</span>' : '') +
340 $("#trolls").append(XHTML
)
341 $("#trolls .troll").filter(function(){return parseInt($(this).attr("id").substr(5)) > thisTrolls
.dernierTroll
}).each(
345 var id
= parseInt($(this).attr("id").substr(5))
347 $("a[@rel*=lightbox]", this).lightBox()
352 if (e
.which
== 13) // return
353 $(".modifier", this).click()
356 $(".delTroll", this).click(
359 thisTrolls
.util
.messageDialogue(
360 "Êtes-vous sur de vouloir supprimer le troll \"" + $("#trolls .troll .content").html() + "\" ?",
361 messageType
.question
,
365 thisTrolls
.supprimer(id
)
372 $(".editTroll", this).click(
375 $("span", troll
).css("display", "none")
377 '<form><p><input class="content" type="text" size="50" maxlength="500" value="' +
378 thisTrolls
.trolls
[id
].content
+
379 '"></input><span class="modifier">modifier</span><span class="annuler">annuler</span></p></form>'
381 $("form input.content").focus()
383 var virerLeFormulaire = function()
385 $("form", troll
).remove()
386 $('span', troll
).css("display", "inline")
388 $("span.modifier", troll
).click(
391 var content
= $("form input.content", troll
).val()
393 thisTrolls
.modifier(id
, content
)
396 $("span.annuler", troll
).click( virerLeFormulaire
)
397 $("form", troll
).submit(function(){ return false})
403 if (data
["trolls"].length
> 0)
404 thisTrolls
.dernierTroll
= data
["trolls"][data
["trolls"].length
- 1]["troll_id"]
406 case "troll_modified" :
407 $("#trolls #troll" + data
["troll_id"] + " .content").html(thisTrolls
.formateur
.traitementComplet(data
["content"], thisTrolls
.trolls
[data
["troll_id"]].author
))
408 $("#trolls #troll" + data
["troll_id"] + " a[@rel*=lightbox]").lightBox()
409 thisTrolls
.trolls
[data
["troll_id"]].content
= data
["content"]
411 case "troll_deleted" :
412 $("#trolls #troll"+data
["troll_id"]).remove()
415 // TODO : mettre l'attente au niveau de la page et pas au niveau des trolls
416 // thisPageAdmin.majIPs()
419 thisTrolls
.util
.messageDialogue(data
["error_message"])