]> source.dussan.org Git - redmine.git/commitdiff
Hide menu item in the cross-project menu if the module is not enabled in any project...
authorGo MAEDA <maeda@farend.jp>
Sun, 13 Jan 2019 03:23:18 +0000 (03:23 +0000)
committerGo MAEDA <maeda@farend.jp>
Sun, 13 Jan 2019 03:23:18 +0000 (03:23 +0000)
Patch by Yuichi HARADA.

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

lib/redmine.rb
test/integration/lib/redmine/menu_manager_test.rb

index 1116534997420059ce104ae38c25c97cb4f1fe47..9bf00f366d624be33f711e29e839983ec3e7455f 100644 (file)
@@ -207,17 +207,17 @@ Redmine::MenuManager.map :application_menu do |menu|
     :caption => :label_project_plural
   menu.push :activity, {:controller => 'activities', :action => 'index'}
   menu.push :issues,   {:controller => 'issues', :action => 'index'},
-    :if => Proc.new {User.current.allowed_to?(:view_issues, nil, :global => true)},
+    :if => Proc.new {User.current.allowed_to?(:view_issues, nil, :global => true) && EnabledModule.exists?(:project => Project.visible, :name => :issue_tracking)},
     :caption => :label_issue_plural
   menu.push :time_entries, {:controller => 'timelog', :action => 'index'},
-    :if => Proc.new {User.current.allowed_to?(:view_time_entries, nil, :global => true)},
+    :if => Proc.new {User.current.allowed_to?(:view_time_entries, nil, :global => true) && EnabledModule.exists?(:project => Project.visible, :name => :time_tracking)},
     :caption => :label_spent_time
   menu.push :gantt, { :controller => 'gantts', :action => 'show' }, :caption => :label_gantt,
-    :if => Proc.new {User.current.allowed_to?(:view_gantt, nil, :global => true)}
+    :if => Proc.new {User.current.allowed_to?(:view_gantt, nil, :global => true) && EnabledModule.exists?(:project => Project.visible, :name => :gantt)}
   menu.push :calendar, { :controller => 'calendars', :action => 'show' }, :caption => :label_calendar,
-    :if => Proc.new {User.current.allowed_to?(:view_calendar, nil, :global => true)}
+    :if => Proc.new {User.current.allowed_to?(:view_calendar, nil, :global => true) && EnabledModule.exists?(:project => Project.visible, :name => :calendar)}
   menu.push :news, {:controller => 'news', :action => 'index'},
-    :if => Proc.new {User.current.allowed_to?(:view_news, nil, :global => true)},
+    :if => Proc.new {User.current.allowed_to?(:view_news, nil, :global => true) && EnabledModule.exists?(:project => Project.visible, :name => :news)},
     :caption => :label_news_plural
 end
 
index 0b01f5d7f432e577c9beb11a161c9f4027176563..eb81d9cf4c846fa86521a51c4949a8d87fd2c5fd 100644 (file)
@@ -84,4 +84,30 @@ class MenuManagerTest < Redmine::IntegrationTest
     get '/'
     assert_select 'body.has-main-menu', 0
   end
+
+  def test_cross_project_menu_should_hide_item_if_module_is_not_enabled_for_any_project
+    user = User.find_by_login('dlopper')
+    assert_equal [1, 3, 4, 6], Project.visible(user).ids
+
+    # gantt and news are not enabled for any visible project
+    Project.find(1).enabled_module_names = %w(issue_tracking calendar)
+    Project.find(3).enabled_module_names = %w(time_tracking)
+    EnabledModule.where(:project_id => [4, 6]).delete_all
+
+    log_user('dlopper', 'foo')
+    get '/projects'
+    assert_select '#main-menu' do
+      assert_select 'a.projects',     :count => 1
+      assert_select 'a.activity',     :count => 1
+
+      assert_select 'a.issues',       :count => 1 # issue_tracking
+      assert_select 'a.time-entries', :count => 1 # time_tracking
+      assert_select 'a.gantt',        :count => 0 # gantt
+      assert_select 'a.calendar',     :count => 1 # calendar
+      assert_select 'a.news',         :count => 0 # news
+    end
+    assert_select '#projects-index' do
+      assert_select 'a.project',      :count => 4
+    end
+  end
 end