|
@@ -5,11 +5,12 @@ from django.http import Http404
|
|
from django.shortcuts import redirect
|
|
from django.shortcuts import redirect
|
|
from django.utils import timezone
|
|
from django.utils import timezone
|
|
from django.utils.translation import ugettext as _
|
|
from django.utils.translation import ugettext as _
|
|
|
|
+from misago import messages
|
|
from misago.apps.errors import error404
|
|
from misago.apps.errors import error404
|
|
from misago.apps.profiles.decorators import profile_view
|
|
from misago.apps.profiles.decorators import profile_view
|
|
from misago.apps.profiles.template import RequestContext
|
|
from misago.apps.profiles.template import RequestContext
|
|
from misago.apps.profiles.warnings.warningstracker import WarningsTracker
|
|
from misago.apps.profiles.warnings.warningstracker import WarningsTracker
|
|
-from misago.decorators import check_csrf
|
|
|
|
|
|
+from misago.decorators import block_guest, check_csrf
|
|
from misago.models import Warn
|
|
from misago.models import Warn
|
|
from misago.shortcuts import render_to_response
|
|
from misago.shortcuts import render_to_response
|
|
from misago.utils.pagination import make_pagination
|
|
from misago.utils.pagination import make_pagination
|
|
@@ -43,32 +44,43 @@ def warning_decorator(f):
|
|
warning_pk = kwargs['warning']
|
|
warning_pk = kwargs['warning']
|
|
try:
|
|
try:
|
|
warning = user.warning_set.get(pk=warning_pk)
|
|
warning = user.warning_set.get(pk=warning_pk)
|
|
- return f(request, user, warning)
|
|
|
|
|
|
+ f(request, user, warning)
|
|
|
|
+ return redirect('user_warnings', username=user.username_slug, user=user.pk)
|
|
except Warn.DoesNotExist:
|
|
except Warn.DoesNotExist:
|
|
return error404(request, _("Requested warning could not be found."))
|
|
return error404(request, _("Requested warning could not be found."))
|
|
return decorator
|
|
return decorator
|
|
|
|
|
|
|
|
|
|
-def todo_decorator(f):
|
|
|
|
- def decorator(*args, **kwargs):
|
|
|
|
- raise NotImplementedError("TODO: add decrease_warning_level function to user model, then do magic for cancel/delete warning")
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+@block_guest
|
|
@check_csrf
|
|
@check_csrf
|
|
@profile_view('user_warnings_cancel')
|
|
@profile_view('user_warnings_cancel')
|
|
@warning_decorator
|
|
@warning_decorator
|
|
-@todo_decorator
|
|
|
|
def cancel_warning(request, user, warning):
|
|
def cancel_warning(request, user, warning):
|
|
request.acl.warnings.allow_cancel_warning(
|
|
request.acl.warnings.allow_cancel_warning(
|
|
request.user, user, warning)
|
|
request.user, user, warning)
|
|
|
|
|
|
|
|
+ user.decrease_warning_level()
|
|
|
|
+ warning.canceled = True
|
|
|
|
+ warning.canceled_on = timezone.now()
|
|
|
|
+ warning.canceler = request.user
|
|
|
|
+ warning.canceler_username = request.user.username
|
|
|
|
+ warning.canceler_slug = request.user.username_slug
|
|
|
|
+ warning.canceler_ip = request.session.get_ip(request)
|
|
|
|
+ warning.canceler_agent = request.META.get('HTTP_USER_AGENT')
|
|
|
|
+ warning.save(force_update=True)
|
|
|
|
|
|
|
|
+ messages.success(request, _("Selected warning has been canceled."))
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+@block_guest
|
|
@check_csrf
|
|
@check_csrf
|
|
@profile_view('user_warnings_delete')
|
|
@profile_view('user_warnings_delete')
|
|
@warning_decorator
|
|
@warning_decorator
|
|
-@todo_decorator
|
|
|
|
def delete_warning(request, user, warning):
|
|
def delete_warning(request, user, warning):
|
|
request.acl.warnings.allow_delete_warning()
|
|
request.acl.warnings.allow_delete_warning()
|
|
|
|
|
|
if user.is_warning_active(warning):
|
|
if user.is_warning_active(warning):
|
|
- pass
|
|
|
|
|
|
+ user.decrease_warning_level()
|
|
|
|
+ warning.delete()
|
|
|
|
+
|
|
|
|
+ messages.success(request, _("Selected warning has been deleted."))
|