views.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. from django.contrib import messages
  2. from django.shortcuts import redirect
  3. from django.utils.translation import ugettext_lazy as _
  4. from misago.admin.views import generic
  5. from misago.acl.forms import RoleForm, get_permissions_forms
  6. from misago.acl.models import Role
  7. class RoleAdmin(generic.AdminBaseMixin):
  8. root_link = 'misago:admin:permissions:users:index'
  9. Model = Role
  10. templates_dir = 'misago/admin/roles'
  11. message_404 = _("Requested role does not exist.")
  12. class RolesList(RoleAdmin, generic.ListView):
  13. ordering = (('name', None),)
  14. class RoleFormMixin(object):
  15. def real_dispatch(self, request, target):
  16. role_permissions = target.permissions
  17. form = RoleForm(instance=target)
  18. perms_forms = get_permissions_forms(target)
  19. if request.method == 'POST':
  20. perms_forms = get_permissions_forms(target, request.POST)
  21. valid_forms = 0
  22. for permissions_form in perms_forms:
  23. if permissions_form.is_valid():
  24. valid_forms += 1
  25. form = RoleForm(request.POST, instance=target)
  26. if form.is_valid() and len(perms_forms) == valid_forms:
  27. new_permissions = {}
  28. for permissions_form in perms_forms:
  29. cleaned_data = permissions_form.cleaned_data
  30. new_permissions[permissions_form.prefix] = cleaned_data
  31. form.instance.permissions = new_permissions
  32. form.instance.save()
  33. messages.success(request, self.message_submit % target.name)
  34. if 'stay' in request.POST:
  35. return redirect(request.path)
  36. else:
  37. return redirect(self.root_link)
  38. return self.render(
  39. request,
  40. {
  41. 'form': form,
  42. 'target': target,
  43. 'perms_forms': perms_forms,
  44. })
  45. class NewRole(RoleFormMixin, RoleAdmin, generic.ModelFormView):
  46. message_submit = _('New role "%s" has been saved.')
  47. class EditRole(RoleFormMixin, RoleAdmin, generic.ModelFormView):
  48. message_submit = _('Role "%s" has been changed.')
  49. class DeleteRole(RoleAdmin, generic.ButtonView):
  50. def check_permissions(self, request, target):
  51. if target.special_role:
  52. message = _('Role "%s" is special role and can\'t be deleted.')
  53. return message % target.name
  54. def button_action(self, request, target):
  55. target.delete()
  56. message = _('Role "%s" has been deleted.') % unicode(target.name)
  57. messages.success(request, message)