diff options
23 files changed, 66 insertions, 14 deletions
diff --git a/app/controllers/account_controller.rb b/app/controllers/account_controller.rb index 0dc1e9811..ece857a22 100644 --- a/app/controllers/account_controller.rb +++ b/app/controllers/account_controller.rb @@ -19,6 +19,8 @@ class AccountController < ApplicationController helper :custom_fields include CustomFieldsHelper + self.main_menu = false + # prevents login action to be filtered by check_if_login_required application scope filter skip_before_action :check_if_login_required, :check_password_change diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index 9842ec0e1..6a3a09bf1 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -17,6 +17,7 @@ class AdminController < ApplicationController layout 'admin' + self.main_menu = false menu_item :projects, :only => :projects menu_item :plugins, :only => :plugins menu_item :info, :only => :info diff --git a/app/controllers/auth_sources_controller.rb b/app/controllers/auth_sources_controller.rb index d6dd58896..a6d9158c6 100644 --- a/app/controllers/auth_sources_controller.rb +++ b/app/controllers/auth_sources_controller.rb @@ -17,6 +17,7 @@ class AuthSourcesController < ApplicationController layout 'admin' + self.main_menu = false menu_item :ldap_authentication before_action :require_admin diff --git a/app/controllers/custom_field_enumerations_controller.rb b/app/controllers/custom_field_enumerations_controller.rb index f141d0d8a..f20269b31 100644 --- a/app/controllers/custom_field_enumerations_controller.rb +++ b/app/controllers/custom_field_enumerations_controller.rb @@ -17,6 +17,7 @@ class CustomFieldEnumerationsController < ApplicationController layout 'admin' + self.main_menu = false before_action :require_admin before_action :find_custom_field diff --git a/app/controllers/custom_fields_controller.rb b/app/controllers/custom_fields_controller.rb index 57cb73142..26e9b044d 100644 --- a/app/controllers/custom_fields_controller.rb +++ b/app/controllers/custom_fields_controller.rb @@ -17,6 +17,7 @@ class CustomFieldsController < ApplicationController layout 'admin' + self.main_menu = false before_action :require_admin before_action :build_new_custom_field, :only => [:new, :create] diff --git a/app/controllers/email_addresses_controller.rb b/app/controllers/email_addresses_controller.rb index 2fb6b2978..cbb301955 100644 --- a/app/controllers/email_addresses_controller.rb +++ b/app/controllers/email_addresses_controller.rb @@ -16,6 +16,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class EmailAddressesController < ApplicationController + self.main_menu = false before_action :find_user, :require_admin_or_current_user before_action :find_email_address, :only => [:update, :destroy] require_sudo_mode :create, :update, :destroy diff --git a/app/controllers/enumerations_controller.rb b/app/controllers/enumerations_controller.rb index e3ae66986..f89662082 100644 --- a/app/controllers/enumerations_controller.rb +++ b/app/controllers/enumerations_controller.rb @@ -17,6 +17,7 @@ class EnumerationsController < ApplicationController layout 'admin' + self.main_menu = false before_action :require_admin, :except => :index before_action :require_admin_or_api_request, :only => :index diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb index 52a1242b8..68ecbaa55 100644 --- a/app/controllers/groups_controller.rb +++ b/app/controllers/groups_controller.rb @@ -17,6 +17,7 @@ class GroupsController < ApplicationController layout 'admin' + self.main_menu = false before_action :require_admin before_action :find_group, :except => [:index, :new, :create] diff --git a/app/controllers/issue_statuses_controller.rb b/app/controllers/issue_statuses_controller.rb index efd2d1c44..54248d819 100644 --- a/app/controllers/issue_statuses_controller.rb +++ b/app/controllers/issue_statuses_controller.rb @@ -17,6 +17,7 @@ class IssueStatusesController < ApplicationController layout 'admin' + self.main_menu = false before_action :require_admin, :except => :index before_action :require_admin_or_api_request, :only => :index diff --git a/app/controllers/my_controller.rb b/app/controllers/my_controller.rb index 5cf677a2d..be1c3c36d 100644 --- a/app/controllers/my_controller.rb +++ b/app/controllers/my_controller.rb @@ -16,6 +16,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class MyController < ApplicationController + self.main_menu = false before_action :require_login # let user change user's password when user has to skip_before_action :check_password_change, :only => :password diff --git a/app/controllers/principal_memberships_controller.rb b/app/controllers/principal_memberships_controller.rb index 0ac150d71..b03460b54 100644 --- a/app/controllers/principal_memberships_controller.rb +++ b/app/controllers/principal_memberships_controller.rb @@ -17,6 +17,7 @@ class PrincipalMembershipsController < ApplicationController layout 'admin' + self.main_menu = false before_action :require_admin before_action :find_principal, :only => [:new, :create] diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index ba7483c38..98fc23f5f 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -18,6 +18,7 @@ class ProjectsController < ApplicationController menu_item :overview menu_item :settings, :only => :settings + menu_item :projects, :only => [:index, :new, :create] before_action :find_project, :except => [ :index, :list, :new, :create, :copy ] before_action :authorize, :except => [ :index, :list, :new, :create, :copy, :archive, :unarchive, :destroy] diff --git a/app/controllers/roles_controller.rb b/app/controllers/roles_controller.rb index c33eff578..a09455949 100644 --- a/app/controllers/roles_controller.rb +++ b/app/controllers/roles_controller.rb @@ -17,6 +17,7 @@ class RolesController < ApplicationController layout 'admin' + self.main_menu = false before_action :require_admin, :except => [:index, :show] before_action :require_admin_or_api_request, :only => [:index, :show] diff --git a/app/controllers/settings_controller.rb b/app/controllers/settings_controller.rb index fd9cd04c8..6b7e51874 100644 --- a/app/controllers/settings_controller.rb +++ b/app/controllers/settings_controller.rb @@ -17,6 +17,7 @@ class SettingsController < ApplicationController layout 'admin' + self.main_menu = false menu_item :plugins, :only => :plugin helper :queries diff --git a/app/controllers/trackers_controller.rb b/app/controllers/trackers_controller.rb index 363bd40d8..5bae880d1 100644 --- a/app/controllers/trackers_controller.rb +++ b/app/controllers/trackers_controller.rb @@ -17,6 +17,7 @@ class TrackersController < ApplicationController layout 'admin' + self.main_menu = false before_action :require_admin, :except => :index before_action :require_admin_or_api_request, :only => :index diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 51f6af6bb..ca1e5e49a 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -17,6 +17,7 @@ class UsersController < ApplicationController layout 'admin' + self.main_menu = false before_action :require_admin, :except => :show before_action :find_user, :only => [:show, :edit, :update, :destroy] diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index fe06d873f..783045eec 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -16,6 +16,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class WelcomeController < ApplicationController + self.main_menu = false def index @news = News.latest User.current diff --git a/app/controllers/workflows_controller.rb b/app/controllers/workflows_controller.rb index 9fc376725..e825171bf 100644 --- a/app/controllers/workflows_controller.rb +++ b/app/controllers/workflows_controller.rb @@ -17,6 +17,7 @@ class WorkflowsController < ApplicationController layout 'admin' + self.main_menu = false before_action :require_admin diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 63218e1d3..e8115205b 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -48,18 +48,11 @@ module ProjectsHelper end def render_project_action_links - links = [] + links = "".html_safe if User.current.allowed_to?(:add_project, nil, :global => true) links << link_to(l(:label_project_new), new_project_path, :class => 'icon icon-add') end - if User.current.allowed_to?(:view_issues, nil, :global => true) - links << link_to(l(:label_issue_view_all), issues_path) - end - if User.current.allowed_to?(:view_time_entries, nil, :global => true) - links << link_to(l(:label_overall_spent_time), time_entries_path) - end - links << link_to(l(:label_overall_activity), activity_path) - links.join(" | ").html_safe + links end # Renders the projects index diff --git a/lib/redmine.rb b/lib/redmine.rb index 193d5d1a3..4ad182046 100644 --- a/lib/redmine.rb +++ b/lib/redmine.rb @@ -203,7 +203,21 @@ Redmine::MenuManager.map :account_menu do |menu| end Redmine::MenuManager.map :application_menu do |menu| - # Empty + menu.push :projects, {:controller => 'projects', :action => 'index'}, + :permission => nil, + :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)}, + :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)}, + :caption => :label_spent_time + menu.push :gantt, { :controller => 'gantts', :action => 'show' }, :caption => :label_gantt + menu.push :calendar, { :controller => 'calendars', :action => 'show' }, :caption => :label_calendar + + menu.push :news, {:controller => 'news', :action => 'index'}, + :caption => :label_news_plural end Redmine::MenuManager.map :admin_menu do |menu| diff --git a/lib/redmine/menu_manager.rb b/lib/redmine/menu_manager.rb index 3d19edce7..9f90f681a 100644 --- a/lib/redmine/menu_manager.rb +++ b/lib/redmine/menu_manager.rb @@ -22,6 +22,9 @@ module Redmine module MenuController def self.included(base) + base.class_attribute :main_menu + base.main_menu = true + base.extend(ClassMethods) end @@ -51,6 +54,14 @@ module Redmine self.class.menu_items end + def current_menu(project) + if project && !project.new_record? + :project_menu + elsif self.class.main_menu + :application_menu + end + end + # Returns the menu item name according to the current action def current_menu_item @current_menu_item ||= menu_items[controller_name.to_sym][:actions][action_name.to_sym] || @@ -77,12 +88,14 @@ module Redmine # Renders the application main menu def render_main_menu(project) - render_menu((project && !project.new_record?) ? :project_menu : :application_menu, project) + if menu_name = controller.current_menu(project) + render_menu(menu_name, project) + end end def display_main_menu?(project) - menu_name = project && !project.new_record? ? :project_menu : :application_menu - Redmine::MenuManager.items(menu_name).children.present? + menu_name = controller.current_menu(project) + menu_name.present? && Redmine::MenuManager.items(menu_name).children.present? end def render_menu(menu, project=nil) diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index 3e6113f38..5426679c1 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -2594,7 +2594,7 @@ class IssuesControllerTest < Redmine::ControllerTest :subject => ''} assert_response :success # no project menu - assert_select '#main-menu', 0 + assert_select '#main-menu a.overview', 0 end def test_post_create_should_send_a_notification diff --git a/test/integration/lib/redmine/menu_manager_test.rb b/test/integration/lib/redmine/menu_manager_test.rb index 516872c4c..26d8680e8 100644 --- a/test/integration/lib/redmine/menu_manager_test.rb +++ b/test/integration/lib/redmine/menu_manager_test.rb @@ -63,4 +63,17 @@ class MenuManagerTest < Redmine::IntegrationTest end end end + + def test_main_menu_should_select_projects_tab_on_project_list + get '/projects' + assert_select '#main-menu' do + assert_select 'a.projects' + assert_select 'a.projects.selected' + end + end + + def test_main_menu_should_not_show_up_on_account + get '/login' + assert_select '#main-menu', 0 + end end |