From 2734eaffd823986c0da99ee4162000054571f422 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Tue, 10 Jan 2017 18:33:36 +0000 Subject: [PATCH] Adds a link to all projects in the jump drop down (#23310). git-svn-id: http://svn.redmine.org/redmine/trunk@16172 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/projects_controller.rb | 5 +++++ app/helpers/application_helper.rb | 4 +++- app/views/projects/index.js.erb | 2 +- lib/redmine/menu_manager.rb | 13 +++++++++++-- public/stylesheets/application.css | 2 +- test/functional/projects_controller_test.rb | 10 ++++++++++ 6 files changed, 31 insertions(+), 5 deletions(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 9284b8d09..99a39af3b 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -36,6 +36,11 @@ class ProjectsController < ApplicationController # Lists visible projects def index + # try to redirect to the requested menu item + if params[:jump] && redirect_to_menu_item(params[:jump]) + return + end + scope = Project.visible.sorted respond_to do |format| diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 13075126d..b319537ee 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -362,9 +362,11 @@ module ApplicationHelper text = @project.try(:name) || l(:label_jump_to_a_project) trigger = content_tag('span', text, :class => 'drdn-trigger') q = text_field_tag('q', '', :id => 'projects-quick-search', :class => 'autocomplete', :data => {:automcomplete_url => projects_path(:format => 'js')}) + all = link_to(l(:label_project_all), projects_path(:jump => current_menu_item), :class => (@project.nil? && controller.class.main_menu ? 'selected' : nil)) content = content_tag('div', content_tag('div', q, :class => 'quick-search') + - content_tag('div', render_projects_for_jump_box(projects, @project), :class => 'drdn-items selection'), + content_tag('div', render_projects_for_jump_box(projects, @project), :class => 'drdn-items projects selection') + + content_tag('div', all, :class => 'drdn-items all-projects selection'), :class => 'drdn-content' ) diff --git a/app/views/projects/index.js.erb b/app/views/projects/index.js.erb index b4731fb09..de6c3f579 100644 --- a/app/views/projects/index.js.erb +++ b/app/views/projects/index.js.erb @@ -1,2 +1,2 @@ <% s = @projects.any? ? render_projects_for_jump_box(@projects) : content_tag('span', l(:label_no_data)) %> -$('#project-jump .drdn-items').html('<%= escape_javascript s %>'); +$('#project-jump .drdn-items.projects').html('<%= escape_javascript s %>'); diff --git a/lib/redmine/menu_manager.rb b/lib/redmine/menu_manager.rb index 9f90f681a..f1a9b1b35 100644 --- a/lib/redmine/menu_manager.rb +++ b/lib/redmine/menu_manager.rb @@ -68,12 +68,21 @@ module Redmine menu_items[controller_name.to_sym][:default] end + # Redirects user to the menu item + # Returns false if user is not authorized + def redirect_to_menu_item(name) + redirect_to_project_menu_item(nil, name) + 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} + menu = project.nil? ? :application_menu : :project_menu + item = Redmine::MenuManager.items(menu).detect {|i| i.name.to_s == name.to_s} if item && item.allowed?(User.current, project) - redirect_to({item.param => project}.merge(item.url)) + url = item.url + url = {item.param => project}.merge(url) if project + redirect_to url return true end false diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index 701be5541..b95aef3be 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -177,7 +177,7 @@ a.toggle-checkboxes { margin-left: 5px; padding-left: 12px; background: url(../i .drdn-content .autocomplete {box-sizing: border-box; width:100% !important; height:28px;} .drdn-content .autocomplete:focus {border-color:#5ad;} .drdn-items {max-height:400px; overflow:auto;} -.quick-search + .drdn-items {border-top:1px solid #ccc;} +div + .drdn-items {border-top:1px solid #ccc;} .drdn-items>* { display:block; border:1px solid #fff; diff --git a/test/functional/projects_controller_test.rb b/test/functional/projects_controller_test.rb index da2818174..db81206fb 100644 --- a/test/functional/projects_controller_test.rb +++ b/test/functional/projects_controller_test.rb @@ -745,6 +745,16 @@ class ProjectsControllerTest < Redmine::ControllerTest assert_select_error /Identifier cannot be blank/ end + def test_jump_without_project_id_should_redirect_to_active_tab + get :index, :jump => 'issues' + assert_redirected_to '/issues' + end + + def test_jump_should_not_redirect_to_unknown_tab + get :index, :jump => 'foobar' + assert_response :success + end + def test_jump_should_redirect_to_active_tab get :show, :id => 1, :jump => 'issues' assert_redirected_to '/projects/ecookbook/issues' -- 2.39.5