|
a/Allura/allura/controllers/discuss.py |
|
b/Allura/allura/controllers/discuss.py |
|
|
1 |
import logging
|
1 |
from urllib import unquote
|
2 |
from urllib import unquote
|
2 |
from datetime import datetime
|
3 |
from datetime import datetime
|
3 |
|
4 |
|
4 |
from tg import expose, redirect, validate, request, response, flash
|
5 |
from tg import expose, redirect, validate, request, response, flash
|
5 |
from tg.decorators import before_validate, with_trailing_slash, without_trailing_slash
|
6 |
from tg.decorators import before_validate, with_trailing_slash, without_trailing_slash
|
|
... |
|
... |
18 |
from allura.lib.security import require, has_access, require_access
|
19 |
from allura.lib.security import require, has_access, require_access
|
19 |
from allura.lib.helpers import DateTimeConverter
|
20 |
from allura.lib.helpers import DateTimeConverter
|
20 |
|
21 |
|
21 |
from allura.lib.widgets import discuss as DW
|
22 |
from allura.lib.widgets import discuss as DW
|
22 |
from .attachments import AttachmentsController, AttachmentController
|
23 |
from .attachments import AttachmentsController, AttachmentController
|
|
|
24 |
|
|
|
25 |
log = logging.getLogger(__name__)
|
23 |
|
26 |
|
24 |
class pass_validator(object):
|
27 |
class pass_validator(object):
|
25 |
def validate(self, v, s):
|
28 |
def validate(self, v, s):
|
26 |
return v
|
29 |
return v
|
27 |
pass_validator=pass_validator()
|
30 |
pass_validator=pass_validator()
|
|
... |
|
... |
326 |
@h.vardec
|
329 |
@h.vardec
|
327 |
@expose()
|
330 |
@expose()
|
328 |
@require_post()
|
331 |
@require_post()
|
329 |
@validate(pass_validator, error_handler=index)
|
332 |
@validate(pass_validator, error_handler=index)
|
330 |
def moderate(self, **kw):
|
333 |
def moderate(self, **kw):
|
|
|
334 |
log.debug('Moderating post on project "%s"', c.project.shortname)
|
|
|
335 |
log.debug('... requiring access on %r', self.post.thread)
|
331 |
require_access(self.post.thread, 'moderate')
|
336 |
require_access(self.post.thread, 'moderate')
|
332 |
if kw.pop('delete', None):
|
337 |
if kw.pop('delete', None):
|
|
|
338 |
log.debug('... deleting post')
|
333 |
self.post.delete()
|
339 |
self.post.delete()
|
|
|
340 |
log.debug('... updating thread stats')
|
334 |
self.thread.update_stats()
|
341 |
self.thread.update_stats()
|
335 |
elif kw.pop('spam', None):
|
342 |
elif kw.pop('spam', None):
|
|
|
343 |
log.debug('... marking post as spam')
|
336 |
self.post.status = 'spam'
|
344 |
self.post.status = 'spam'
|
|
|
345 |
log.debug('... updating thread stats')
|
337 |
self.thread.update_stats()
|
346 |
self.thread.update_stats()
|
|
|
347 |
log.debug('... redirecting to referrer: %s', request.referer)
|
338 |
redirect(request.referer)
|
348 |
redirect(request.referer)
|
339 |
|
349 |
|
340 |
@h.vardec
|
350 |
@h.vardec
|
341 |
@expose()
|
351 |
@expose()
|
342 |
@require_post()
|
352 |
@require_post()
|