]> source.dussan.org Git - redmine.git/commitdiff
Prevent hash type URLs from being namespaced in MenuManager (#35076).
authorGo MAEDA <maeda@farend.jp>
Thu, 15 Apr 2021 01:03:18 +0000 (01:03 +0000)
committerGo MAEDA <maeda@farend.jp>
Thu, 15 Apr 2021 01:03:18 +0000 (01:03 +0000)
Patch by Jan Schulz-Hofen.

git-svn-id: http://svn.redmine.org/redmine/trunk@20945 e93f8b46-1217-0410-a6f0-8f06a7374b81

lib/redmine/menu_manager.rb

index 16315a725851c75acbbc5f798cac53555a751831..6378b19ba9fc27846c05bb6500784cb3ebd9b314 100644 (file)
@@ -180,14 +180,14 @@ module Redmine
           url = '#'
           options.reverse_merge!(:onclick => 'return false;')
         end
-        link_to(h(caption), url, options)
+        link_to(h(caption), use_absolute_controller(url), options)
       end
 
       def render_unattached_menu_item(menu_item, project)
         raise MenuError, ":child_menus must be an array of MenuItems" unless menu_item.is_a? MenuItem
 
         if menu_item.allowed?(User.current, project)
-          link_to(menu_item.caption, menu_item.url, menu_item.html_options)
+          link_to(menu_item.caption, use_absolute_controller(menu_item.url), menu_item.html_options)
         end
       end
 
@@ -232,6 +232,15 @@ module Redmine
 
         node.allowed?(user, project)
       end
+
+      # Prevent hash type URLs (e.g. {controller: 'foo', action: 'bar}) from being namespaced
+      # when menus are rendered from views in namespaced controllers in plugins or engines
+      def use_absolute_controller(url)
+        if url.is_a?(Hash) && url[:controller].present? && !url[:controller].start_with?('/')
+          url[:controller] = "/#{url[:controller]}"
+        end
+        url
+      end
     end
 
     class << self