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
class AdminController < ApplicationController
layout 'admin'
+ self.main_menu = false
menu_item :projects, :only => :projects
menu_item :plugins, :only => :plugins
menu_item :info, :only => :info
class AuthSourcesController < ApplicationController
layout 'admin'
+ self.main_menu = false
menu_item :ldap_authentication
before_action :require_admin
class CustomFieldEnumerationsController < ApplicationController
layout 'admin'
+ self.main_menu = false
before_action :require_admin
before_action :find_custom_field
class CustomFieldsController < ApplicationController
layout 'admin'
+ self.main_menu = false
before_action :require_admin
before_action :build_new_custom_field, :only => [:new, :create]
# 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
class EnumerationsController < ApplicationController
layout 'admin'
+ self.main_menu = false
before_action :require_admin, :except => :index
before_action :require_admin_or_api_request, :only => :index
class GroupsController < ApplicationController
layout 'admin'
+ self.main_menu = false
before_action :require_admin
before_action :find_group, :except => [:index, :new, :create]
class IssueStatusesController < ApplicationController
layout 'admin'
+ self.main_menu = false
before_action :require_admin, :except => :index
before_action :require_admin_or_api_request, :only => :index
# 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
class PrincipalMembershipsController < ApplicationController
layout 'admin'
+ self.main_menu = false
before_action :require_admin
before_action :find_principal, :only => [:new, :create]
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]
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]
class SettingsController < ApplicationController
layout 'admin'
+ self.main_menu = false
menu_item :plugins, :only => :plugin
helper :queries
class TrackersController < ApplicationController
layout 'admin'
+ self.main_menu = false
before_action :require_admin, :except => :index
before_action :require_admin_or_api_request, :only => :index
class UsersController < ApplicationController
layout 'admin'
+ self.main_menu = false
before_action :require_admin, :except => :show
before_action :find_user, :only => [:show, :edit, :update, :destroy]
# 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
class WorkflowsController < ApplicationController
layout 'admin'
+ self.main_menu = false
before_action :require_admin
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
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|
module MenuController
def self.included(base)
+ base.class_attribute :main_menu
+ base.main_menu = true
+
base.extend(ClassMethods)
end
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] ||
# 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)
: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
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