rankadmin.py 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. from django.contrib import messages
  2. from django.utils.translation import ugettext_lazy as _
  3. from misago.admin.views import generic
  4. from misago.users.models import Rank
  5. from misago.users.forms.admin import RankForm
  6. class RankAdmin(generic.AdminBaseMixin):
  7. root_link = 'misago:admin:users:ranks:index'
  8. Model = Rank
  9. Form = RankForm
  10. templates_dir = 'misago/admin/ranks'
  11. message_404 = _("Requested rank does not exist.")
  12. def update_roles(self, target, roles):
  13. target.roles.clear()
  14. if roles:
  15. target.roles.add(*roles)
  16. def handle_form(self, form, request, target):
  17. super(RankAdmin, self).handle_form(form, request, target)
  18. self.update_roles(target, form.cleaned_data['roles'])
  19. class RanksList(RankAdmin, generic.ListView):
  20. ordering = (('order', None),)
  21. class NewRank(RankAdmin, generic.ModelFormView):
  22. message_submit = _('New rank "%s" has been saved.')
  23. class EditRank(RankAdmin, generic.ModelFormView):
  24. message_submit = _('Rank "%s" has been edited.')
  25. class DeleteRank(RankAdmin, generic.ButtonView):
  26. def check_permissions(self, request, target):
  27. if target.is_default:
  28. message = _('Rank "%s" is default rank and '
  29. 'can\'t be deleted.')
  30. return message % unicode(target.name)
  31. if target.user_set.exists():
  32. message = _('Rank "%s" is assigned to users and '
  33. 'can\'t be deleted.')
  34. return message % unicode(target.name)
  35. def button_action(self, request, target):
  36. target.delete()
  37. message = _('Rank "%s" has been deleted.') % unicode(target.name)
  38. messages.success(request, message)
  39. class MoveUpRank(RankAdmin, generic.ButtonView):
  40. def button_action(self, request, target):
  41. try:
  42. other_target = Rank.objects.filter(order__lt=self.order)
  43. other_target = other_target.latest('order')
  44. except Rank.DoesNotExist:
  45. other_target = None
  46. if other_target:
  47. other_target.order, target.order = target.order, other_target.order
  48. other_target.save(update_fields=['order'])
  49. target.save(update_fields=['order'])
  50. message = _('Rank "%s" has been moved up.') % unicode(target.name)
  51. messages.success(request, message)
  52. class MoveDownRank(RankAdmin, generic.ButtonView):
  53. def button_action(self, request, target):
  54. try:
  55. other_target = Rank.objects.filter(order__gt=self.order)
  56. other_target = other_target.earliest('order')
  57. except Rank.DoesNotExist:
  58. other_target = None
  59. if other_target:
  60. other_target.order, target.order = target.order, other_target.order
  61. other_target.save(update_fields=['order'])
  62. target.save(update_fields=['order'])
  63. message = _('Rank "%s" has been moved down.') % unicode(target.name)
  64. messages.success(request, message)
  65. class DefaultRank(RankAdmin, generic.ButtonView):
  66. def check_permissions(self, request, target):
  67. if target.is_default:
  68. return _('Rank "%s" is already default.') % unicode(target.name)
  69. def button_action(self, request, target):
  70. Rank.objects.make_rank_default(target)
  71. message = _('Rank "%s" has been made default.')
  72. messages.success(request, message % unicode(target.name))