|
@@ -0,0 +1,106 @@
|
|
|
+from django.contrib import messages
|
|
|
+from django.utils.translation import gettext_lazy as _
|
|
|
+
|
|
|
+from ...admin.views import generic
|
|
|
+from ..models import MenuLink
|
|
|
+from ..cache import clear_menus_cache
|
|
|
+
|
|
|
+from .forms import MenuLinkForm
|
|
|
+from .ordering import get_next_free_order
|
|
|
+
|
|
|
+
|
|
|
+class MenuLinkAdmin(generic.AdminBaseMixin):
|
|
|
+ root_link = "misago:admin:settings:links:index"
|
|
|
+ model = MenuLink
|
|
|
+ form_class = MenuLinkForm
|
|
|
+ templates_dir = "misago/admin/menulinks"
|
|
|
+ message_404 = _("Requested MenuLink does not exist.")
|
|
|
+
|
|
|
+ def handle_form(self, form, request, target):
|
|
|
+ form.save()
|
|
|
+
|
|
|
+ if self.message_submit:
|
|
|
+ messages.success(request, self.message_submit % {"title": target.title})
|
|
|
+
|
|
|
+
|
|
|
+class MenuLinksList(MenuLinkAdmin, generic.ListView):
|
|
|
+ ordering = (("order", None),)
|
|
|
+ selection_label = _("With MenuLinks: 0")
|
|
|
+ empty_selection_label = _("Select MenuLinks")
|
|
|
+ mass_actions = [
|
|
|
+ {
|
|
|
+ "action": "delete",
|
|
|
+ "name": _("Delete MenuLinks"),
|
|
|
+ "confirmation": _("Are you sure you want to delete those MenuLinks?"),
|
|
|
+ }
|
|
|
+ ]
|
|
|
+
|
|
|
+ def action_delete(self, request, items):
|
|
|
+ items.delete()
|
|
|
+ clear_menus_cache()
|
|
|
+ messages.success(request, _("Selected MenuLinks have been deleted."))
|
|
|
+
|
|
|
+
|
|
|
+class NewMenuLink(MenuLinkAdmin, generic.ModelFormView):
|
|
|
+ message_submit = _('New MenuLink "%(title)s" has been saved.')
|
|
|
+
|
|
|
+ def handle_form(self, form, request, target):
|
|
|
+ super().handle_form(form, request, target)
|
|
|
+ form.instance.order = get_next_free_order()
|
|
|
+ form.instance.save()
|
|
|
+ clear_menus_cache()
|
|
|
+
|
|
|
+
|
|
|
+class EditMenuLink(MenuLinkAdmin, generic.ModelFormView):
|
|
|
+ message_submit = _('MenuLink "%(title)s" has been edited.')
|
|
|
+
|
|
|
+ def handle_form(self, form, request, target):
|
|
|
+ super().handle_form(form, request, target)
|
|
|
+ form.instance.save()
|
|
|
+ clear_menus_cache()
|
|
|
+
|
|
|
+
|
|
|
+class DeleteMenuLink(MenuLinkAdmin, generic.ButtonView):
|
|
|
+ def button_action(self, request, target):
|
|
|
+ target.delete()
|
|
|
+ clear_menus_cache()
|
|
|
+ message = _('MenuLink "%(title)s" has been deleted.')
|
|
|
+ messages.success(request, message % {"title": target.title})
|
|
|
+
|
|
|
+
|
|
|
+class MoveDownMenuLink(MenuLinkAdmin, generic.ButtonView):
|
|
|
+ def button_action(self, request, target):
|
|
|
+ try:
|
|
|
+ other_target = MenuLink.objects.filter(order__gt=target.order)
|
|
|
+ other_target = other_target.earliest("order")
|
|
|
+ except MenuLink.DoesNotExist:
|
|
|
+ other_target = None
|
|
|
+
|
|
|
+ if other_target:
|
|
|
+ other_target.order, target.order = target.order, other_target.order
|
|
|
+ other_target.save(update_fields=["order"])
|
|
|
+ target.save(update_fields=["order"])
|
|
|
+ clear_menus_cache()
|
|
|
+
|
|
|
+ message = _("Menu link to %(link)s has been moved after %(other)s.")
|
|
|
+ targets_names = {"link": target, "other": other_target}
|
|
|
+ messages.success(request, message % targets_names)
|
|
|
+
|
|
|
+
|
|
|
+class MoveUpMenuLink(MenuLinkAdmin, generic.ButtonView):
|
|
|
+ def button_action(self, request, target):
|
|
|
+ try:
|
|
|
+ other_target = MenuLink.objects.filter(order__lt=target.order)
|
|
|
+ other_target = other_target.latest("order")
|
|
|
+ except MenuLink.DoesNotExist:
|
|
|
+ other_target = None
|
|
|
+
|
|
|
+ if other_target:
|
|
|
+ other_target.order, target.order = target.order, other_target.order
|
|
|
+ other_target.save(update_fields=["order"])
|
|
|
+ target.save(update_fields=["order"])
|
|
|
+ clear_menus_cache()
|
|
|
+
|
|
|
+ message = _("Menu link to %(link)s has been moved before %(other)s.")
|
|
|
+ targets_names = {"link": target, "other": other_target}
|
|
|
+ messages.success(request, message % targets_names)
|