views.py 2.7 KB

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