warnings.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. from django.contrib import messages
  2. from django.utils.translation import ugettext_lazy as _
  3. from misago.admin.views import generic
  4. from ...forms.admin import WarningLevelForm
  5. from ...models import WarningLevel
  6. class WarningsAdmin(generic.AdminBaseMixin):
  7. root_link = 'misago:admin:users:warnings:index'
  8. Model = WarningLevel
  9. Form = WarningLevelForm
  10. templates_dir = 'misago/admin/warnings'
  11. message_404 = _("Requested warning level does not exist.")
  12. class WarningsList(WarningsAdmin, generic.ListView):
  13. ordering = (('level', None),)
  14. class NewWarning(WarningsAdmin, generic.ModelFormView):
  15. message_submit = _('New warning level "%(name)s" has been saved.')
  16. class EditWarning(WarningsAdmin, generic.ModelFormView):
  17. message_submit = _('Warning level "%(name)s" has been edited.')
  18. class DeleteWarning(WarningsAdmin, generic.ButtonView):
  19. def button_action(self, request, target):
  20. target.delete()
  21. message = _('Warning level "%(name)s" has been deleted.')
  22. messages.success(request, message % {'name': target.name})
  23. class MoveDownWarning(WarningsAdmin, generic.ButtonView):
  24. def button_action(self, request, target):
  25. try:
  26. other_target = WarningLevel.objects.filter(level__gt=target.level)
  27. other_target = other_target.earliest('level')
  28. except WarningLevel.DoesNotExist:
  29. other_target = None
  30. if other_target:
  31. other_target.level, target.level = target.level, other_target.level
  32. other_target.save(update_fields=['level'])
  33. target.save(update_fields=['level'])
  34. message = _('Warning level "%(name)s" has '
  35. 'been moved below "%(other)s".')
  36. targets_names = {'name': target.name, 'other': other_target.name}
  37. messages.success(request, message % targets_names)
  38. class MoveUpWarning(WarningsAdmin, generic.ButtonView):
  39. def button_action(self, request, target):
  40. try:
  41. other_target = WarningLevel.objects.filter(level__lt=target.level)
  42. other_target = other_target.latest('level')
  43. except WarningLevel.DoesNotExist:
  44. other_target = None
  45. if other_target:
  46. other_target.level, target.level = target.level, other_target.level
  47. other_target.save(update_fields=['level'])
  48. target.save(update_fields=['level'])
  49. message = _('Warning level "%(name)s" has '
  50. 'been moved above "%(other)s".')
  51. targets_names = {'name': target.name, 'other': other_target.name}
  52. messages.success(request, message % targets_names)