views.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. from django.contrib import messages
  2. from django.utils.translation import gettext_lazy as _
  3. from ...admin.views import generic
  4. from ..models import MenuLink
  5. from ..cache import clear_menus_cache
  6. from .forms import MenuLinkForm
  7. from .ordering import get_next_free_order
  8. class MenuLinkAdmin(generic.AdminBaseMixin):
  9. root_link = "misago:admin:settings:links:index"
  10. model = MenuLink
  11. form_class = MenuLinkForm
  12. templates_dir = "misago/admin/menulinks"
  13. message_404 = _("Requested MenuLink does not exist.")
  14. def handle_form(self, form, request, target):
  15. form.save()
  16. if self.message_submit:
  17. messages.success(request, self.message_submit % {"title": target.title})
  18. class MenuLinksList(MenuLinkAdmin, generic.ListView):
  19. ordering = (("order", None),)
  20. selection_label = _("With MenuLinks: 0")
  21. empty_selection_label = _("Select MenuLinks")
  22. mass_actions = [
  23. {
  24. "action": "delete",
  25. "name": _("Delete MenuLinks"),
  26. "confirmation": _("Are you sure you want to delete those MenuLinks?"),
  27. }
  28. ]
  29. def action_delete(self, request, items):
  30. items.delete()
  31. clear_menus_cache()
  32. messages.success(request, _("Selected MenuLinks have been deleted."))
  33. class NewMenuLink(MenuLinkAdmin, generic.ModelFormView):
  34. message_submit = _('New MenuLink "%(title)s" has been saved.')
  35. def handle_form(self, form, request, target):
  36. super().handle_form(form, request, target)
  37. form.instance.order = get_next_free_order()
  38. form.instance.save()
  39. clear_menus_cache()
  40. class EditMenuLink(MenuLinkAdmin, generic.ModelFormView):
  41. message_submit = _('MenuLink "%(title)s" has been edited.')
  42. def handle_form(self, form, request, target):
  43. super().handle_form(form, request, target)
  44. form.instance.save()
  45. clear_menus_cache()
  46. class DeleteMenuLink(MenuLinkAdmin, generic.ButtonView):
  47. def button_action(self, request, target):
  48. target.delete()
  49. clear_menus_cache()
  50. message = _('MenuLink "%(title)s" has been deleted.')
  51. messages.success(request, message % {"title": target.title})
  52. class MoveDownMenuLink(MenuLinkAdmin, generic.ButtonView):
  53. def button_action(self, request, target):
  54. try:
  55. other_target = MenuLink.objects.filter(order__gt=target.order)
  56. other_target = other_target.earliest("order")
  57. except MenuLink.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. clear_menus_cache()
  64. message = _("Menu link to %(link)s has been moved after %(other)s.")
  65. targets_names = {"link": target, "other": other_target}
  66. messages.success(request, message % targets_names)
  67. class MoveUpMenuLink(MenuLinkAdmin, generic.ButtonView):
  68. def button_action(self, request, target):
  69. try:
  70. other_target = MenuLink.objects.filter(order__lt=target.order)
  71. other_target = other_target.latest("order")
  72. except MenuLink.DoesNotExist:
  73. other_target = None
  74. if other_target:
  75. other_target.order, target.order = target.order, other_target.order
  76. other_target.save(update_fields=["order"])
  77. target.save(update_fields=["order"])
  78. clear_menus_cache()
  79. message = _("Menu link to %(link)s has been moved before %(other)s.")
  80. targets_names = {"link": target, "other": other_target}
  81. messages.success(request, message % targets_names)