roles.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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.views import RoleAdmin, RolesList
  7. from misago.forums.forms import ForumRoleForm
  8. from misago.forums.models import ForumRole
  9. class ForumRoleAdmin(generic.AdminBaseMixin):
  10. root_link = 'misago:admin:permissions:forums:index'
  11. Model = ForumRole
  12. templates_dir = 'misago/admin/forumroles'
  13. message_404 = _("Requested role does not exist.")
  14. class ForumRolesList(ForumRoleAdmin, generic.ListView):
  15. ordering = (('name', None),)
  16. class RoleFormMixin(object):
  17. def real_dispatch(self, request, target):
  18. role_permissions = target.permissions
  19. form = ForumRoleForm(instance=target)
  20. perms_forms = get_change_permissions_forms(target)
  21. if request.method == 'POST':
  22. perms_forms = get_change_permissions_forms(target, request.POST)
  23. valid_forms = 0
  24. for permissions_form in perms_forms:
  25. if permissions_form.is_valid():
  26. valid_forms += 1
  27. form = ForumRoleForm(request.POST, instance=target)
  28. if form.is_valid() and len(perms_forms) == valid_forms:
  29. new_permissions = {}
  30. for permissions_form in perms_forms:
  31. cleaned_data = permissions_form.cleaned_data
  32. new_permissions[permissions_form.prefix] = cleaned_data
  33. form.instance.permissions = new_permissions
  34. form.instance.save()
  35. messages.success(request, self.message_submit % target.name)
  36. if 'stay' in request.POST:
  37. return redirect(request.path)
  38. else:
  39. return redirect(self.root_link)
  40. else:
  41. perms_forms = get_change_permissions_forms(target)
  42. return self.render(
  43. request,
  44. {
  45. 'form': form,
  46. 'target': target,
  47. 'perms_forms': perms_forms,
  48. })
  49. class NewForumRole(RoleFormMixin, ForumRoleAdmin, generic.ModelFormView):
  50. message_submit = _('New role "%s" has been saved.')
  51. class EditForumRole(RoleFormMixin, ForumRoleAdmin, generic.ModelFormView):
  52. message_submit = _('Role "%s" has been changed.')
  53. class DeleteForumRole(ForumRoleAdmin, generic.ButtonView):
  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)
  58. """
  59. Create forums perms view for perms role and register it in other admin
  60. """
  61. class RoleForumsACL(RoleAdmin, generic.ModelFormView):
  62. templates_dir = 'misago/admin/forumroles'
  63. template = 'forumsroles.html'
  64. RolesList.add_item_action(
  65. name=_("Forums permissions"),
  66. icon='fa fa-comments-o',
  67. link='misago:admin:permissions:users:forums')