destroyuser.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from django.shortcuts import redirect
  2. from django.utils.translation import ugettext as _
  3. from misago import messages
  4. from misago.acl.exceptions import ACLError403
  5. from misago.apps.errors import error403, error404
  6. from misago.decorators import block_guest, check_csrf
  7. from misago.models import Forum, User
  8. @block_guest
  9. @check_csrf
  10. def destroy_user(request, user, username):
  11. try:
  12. user = User.objects.get(pk=user)
  13. except User.DoesNotExist:
  14. return error404(request)
  15. if user.pk == request.user.pk:
  16. return error403(request, _("You can't destroy your own account."))
  17. try:
  18. request.acl.destroyusers.allow_destroy_user(user)
  19. except ACLError403 as e:
  20. return error403(request, unicode(e))
  21. forums_to_sync = []
  22. for thread in user.thread_set.iterator():
  23. if not thread.forum_id in forums_to_sync:
  24. forums_to_sync.append(thread.forum_id)
  25. thread.delete()
  26. if forums_to_sync:
  27. for forum in Forum.objects.filter(id__in=forums_to_sync).iterator():
  28. forum.sync()
  29. forum.save()
  30. user.post_set.update(deleted=True)
  31. user.delete()
  32. messages.success(request, _('User Account "%(username)s" has been destroyed.') % {'username': user.username})
  33. return redirect('users')