Jump to the current tab when using the project quick-jump combo (#2364).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2210 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
6eee9dbf88
commit
2355324d73
|
@ -84,6 +84,11 @@ class ProjectsController < ApplicationController
|
|||
|
||||
# Show @project
|
||||
def show
|
||||
if params[:jump]
|
||||
# try to redirect to the requested menu item
|
||||
redirect_to_project_menu_item(@project, params[:jump]) && return
|
||||
end
|
||||
|
||||
@members_by_role = @project.members.find(:all, :include => [:user, :role], :order => 'position').group_by {|m| m.role}
|
||||
@subprojects = @project.children.find(:all, :conditions => Project.visible_by(User.current))
|
||||
@news = @project.news.find(:all, :limit => 5, :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC")
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
<option selected="selected"><%= l(:label_jump_to_a_project) %></option>
|
||||
<option disabled="disabled">---</option>
|
||||
<% user_projects_by_root.keys.sort.each do |root| %>
|
||||
<%= content_tag('option', h(root.name), :value => url_for(:controller => 'projects', :action => 'show', :id => root)) %>
|
||||
<%= content_tag('option', h(root.name), :value => url_for(:controller => 'projects', :action => 'show', :id => root, :jump => current_menu_item)) %>
|
||||
<% user_projects_by_root[root].sort.each do |project| %>
|
||||
<% next if project == root %>
|
||||
<%= content_tag('option', ('» ' + h(project.name)), :value => url_for(:controller => 'projects', :action => 'show', :id => project)) %>
|
||||
<%= content_tag('option', ('» ' + h(project.name)), :value => url_for(:controller => 'projects', :action => 'show', :id => project, :jump => current_menu_item)) %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</select>
|
||||
|
|
|
@ -52,8 +52,19 @@ module Redmine
|
|||
|
||||
# Returns the menu item name according to the current action
|
||||
def current_menu_item
|
||||
menu_items[controller_name.to_sym][:actions][action_name.to_sym] ||
|
||||
menu_items[controller_name.to_sym][:default]
|
||||
@current_menu_item ||= menu_items[controller_name.to_sym][:actions][action_name.to_sym] ||
|
||||
menu_items[controller_name.to_sym][:default]
|
||||
end
|
||||
|
||||
# Redirects user to the menu item of the given project
|
||||
# Returns false if user is not authorized
|
||||
def redirect_to_project_menu_item(project, name)
|
||||
item = Redmine::MenuManager.items(:project_menu).detect {|i| i.name.to_s == name.to_s}
|
||||
if item && User.current.allowed_to?(item.url, project) && (item.condition.nil? || item.condition.call(project))
|
||||
redirect_to({item.param => project}.merge(item.url))
|
||||
return true
|
||||
end
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -287,6 +287,23 @@ class ProjectsControllerTest < Test::Unit::TestCase
|
|||
assert Project.find(1).active?
|
||||
end
|
||||
|
||||
def test_jump_should_redirect_to_active_tab
|
||||
get :show, :id => 1, :jump => 'issues'
|
||||
assert_redirected_to 'projects/ecookbook/issues'
|
||||
end
|
||||
|
||||
def test_jump_should_not_redirect_to_inactive_tab
|
||||
get :show, :id => 3, :jump => 'documents'
|
||||
assert_response :success
|
||||
assert_template 'show'
|
||||
end
|
||||
|
||||
def test_jump_should_not_redirect_to_unknown_tab
|
||||
get :show, :id => 3, :jump => 'foobar'
|
||||
assert_response :success
|
||||
assert_template 'show'
|
||||
end
|
||||
|
||||
def test_project_menu
|
||||
assert_no_difference 'Redmine::MenuManager.items(:project_menu).size' do
|
||||
Redmine::MenuManager.map :project_menu do |menu|
|
||||
|
|
Loading…
Reference in New Issue