views.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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 MenuItem
  5. from ..cache import clear_menus_cache
  6. from .forms import MenuItemForm
  7. from .ordering import get_next_free_order
  8. class MenuItemAdmin(generic.AdminBaseMixin):
  9. root_link = "misago:admin:settings:menu-items:index"
  10. model = MenuItem
  11. form_class = MenuItemForm
  12. templates_dir = "misago/admin/menuitems"
  13. message_404 = _("Requested menu item 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 % {"item": target})
  18. class MenuItemsList(MenuItemAdmin, generic.ListView):
  19. ordering = (("order", None),)
  20. mass_actions = [
  21. {
  22. "action": "delete",
  23. "name": _("Delete items"),
  24. "confirmation": _("Are you sure you want to delete those menu items?"),
  25. }
  26. ]
  27. def action_delete(self, request, items):
  28. items.delete()
  29. clear_menus_cache()
  30. messages.success(request, _("Selected menu items have been deleted."))
  31. class NewMenuItem(MenuItemAdmin, generic.ModelFormView):
  32. message_submit = _("New menu item %(item)s has been saved.")
  33. def handle_form(self, form, request, target):
  34. super().handle_form(form, request, target)
  35. form.instance.order = get_next_free_order()
  36. form.instance.save()
  37. clear_menus_cache()
  38. class EditMenuItem(MenuItemAdmin, generic.ModelFormView):
  39. message_submit = _("Menu item %(item)s has been edited.")
  40. def handle_form(self, form, request, target):
  41. super().handle_form(form, request, target)
  42. form.instance.save()
  43. clear_menus_cache()
  44. class DeleteMenuItem(MenuItemAdmin, generic.ButtonView):
  45. def button_action(self, request, target):
  46. target.delete()
  47. clear_menus_cache()
  48. message = _("Menu item %(item)s has been deleted.")
  49. messages.success(request, message % {"item": target})
  50. class MoveDownMenuItem(MenuItemAdmin, generic.ButtonView):
  51. def button_action(self, request, target):
  52. try:
  53. other_target = MenuItem.objects.filter(order__gt=target.order)
  54. other_target = other_target.earliest("order")
  55. except MenuItem.DoesNotExist:
  56. other_target = None
  57. if other_target:
  58. other_target.order, target.order = target.order, other_target.order
  59. other_target.save(update_fields=["order"])
  60. target.save(update_fields=["order"])
  61. clear_menus_cache()
  62. message = _("Menu item %(item)s has been moved after %(other)s.")
  63. targets_names = {"item": target, "other": other_target}
  64. messages.success(request, message % targets_names)
  65. class MoveUpMenuItem(MenuItemAdmin, generic.ButtonView):
  66. def button_action(self, request, target):
  67. try:
  68. other_target = MenuItem.objects.filter(order__lt=target.order)
  69. other_target = other_target.latest("order")
  70. except MenuItem.DoesNotExist:
  71. other_target = None
  72. if other_target:
  73. other_target.order, target.order = target.order, other_target.order
  74. other_target.save(update_fields=["order"])
  75. target.save(update_fields=["order"])
  76. clear_menus_cache()
  77. message = _("Menu item %(item)s has been moved before %(other)s.")
  78. targets_names = {"item": target, "other": other_target}
  79. messages.success(request, message % targets_names)