From 5960f55c9ce05570089921da8422c7aa7dbaf289 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Gaya?= <sebastien.gaya@gmail.com>
Date: Thu, 30 Dec 2021 10:44:07 +0100
Subject: [PATCH] menu items reorder

---
 .../admin/communication/website/menu/items_controller.rb | 8 +++++---
 app/models/communication/website/menu/item.rb            | 9 ++++++++-
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/app/controllers/admin/communication/website/menu/items_controller.rb b/app/controllers/admin/communication/website/menu/items_controller.rb
index b996c1f3b..35e393a59 100644
--- a/app/controllers/admin/communication/website/menu/items_controller.rb
+++ b/app/controllers/admin/communication/website/menu/items_controller.rb
@@ -6,12 +6,14 @@ class Admin::Communication::Website::Menu::ItemsController < Admin::Communicatio
     parent_id = params[:parentId].blank? ? nil : params[:parentId]
     ids = params[:ids] || []
     ids.each.with_index do |id, index|
-      category = @menu.items.find(id)
-      category.update(
+      item = @menu.items.find(id)
+      item.update(
         parent_id: parent_id,
-        position: index + 1
+        position: index + 1,
+        skip_publication_callback: true
       )
     end
+    @menu.force_publish!
   end
 
   def show
diff --git a/app/models/communication/website/menu/item.rb b/app/models/communication/website/menu/item.rb
index 347d3fcfc..39f079a91 100644
--- a/app/models/communication/website/menu/item.rb
+++ b/app/models/communication/website/menu/item.rb
@@ -34,9 +34,11 @@
 class Communication::Website::Menu::Item < ApplicationRecord
   include WithTree
 
+  attr_accessor :skip_publication_callback
+
   belongs_to :university
   belongs_to :website, class_name: 'Communication::Website'
-  belongs_to :menu, class_name: 'Communication::Website::Menu', touch: true
+  belongs_to :menu, class_name: 'Communication::Website::Menu'
   belongs_to :parent, class_name: 'Communication::Website::Menu::Item', optional: true
   belongs_to :about, polymorphic: true, optional: true
   has_many :children,
@@ -60,6 +62,7 @@ class Communication::Website::Menu::Item < ApplicationRecord
   validates :about, presence: true, if: :has_about?
 
   before_create :set_position
+  after_commit :force_publish_menu, unless: :skip_publication_callback
 
   scope :ordered, -> { order(position: :asc) }
 
@@ -112,6 +115,10 @@ class Communication::Website::Menu::Item < ApplicationRecord
     kind_page? || kind_program? || kind_news_category? || kind_news_article?
   end
 
+  def force_publish_menu
+    menu.force_publish!
+  end
+
   protected
 
   def set_position
-- 
GitLab