moderation.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from django.contrib import messages
  2. from django.contrib.auth import get_user_model
  3. from django.db import transaction
  4. from django.shortcuts import redirect, render
  5. from django.utils.translation import ugettext as _
  6. from misago.acl import add_acl
  7. from misago.core.decorators import require_POST
  8. from misago.core.shortcuts import get_object_or_404, validate_slug
  9. from misago.users.permissions.delete import allow_delete_user
  10. def user_moderation_view(required_permission=None):
  11. def wrap(f):
  12. @transaction.atomic
  13. def decorator(request, *args, **kwargs):
  14. queryset = get_user_model().objects
  15. user_id = kwargs.pop('user_id')
  16. kwargs['user'] = get_object_or_404(queryset, id=user_id)
  17. validate_slug(kwargs['user'], kwargs.pop('user_slug'))
  18. add_acl(request.user, kwargs['user'])
  19. if required_permission:
  20. required_permission(request.user, kwargs['user'])
  21. return f(request, *args, **kwargs)
  22. return decorator
  23. return wrap
  24. @require_POST
  25. @user_moderation_view(allow_delete_user)
  26. def delete(request, user):
  27. user.delete(delete_content=True)
  28. message = _("User %(username)s has been deleted.")
  29. messages.success(request, message % {'username': user.username})
  30. return redirect('misago:index')