From 16eda4c5c91c55a09eec7a1d04b9db98aeb4ece5 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Fri, 24 Oct 2008 17:12:39 +0000 Subject: [PATCH] Adds the ability to search for a project name or identifier on the administration projects list. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@1947 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/admin_controller.rb | 14 +++++++++----- app/helpers/admin_helper.rb | 2 +- app/views/admin/projects.rhtml | 6 ++++-- test/functional/admin_controller_test.rb | 19 +++++++++++++++++++ 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index a6df49dcd..777c31d70 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -29,16 +29,20 @@ class AdminController < ApplicationController sort_init 'name', 'asc' sort_update - @status = params[:status] ? params[:status].to_i : 0 - conditions = nil - conditions = ["status=?", @status] unless @status == 0 + @status = params[:status] ? params[:status].to_i : 1 + c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status]) - @project_count = Project.count(:conditions => conditions) + unless params[:name].blank? + name = "%#{params[:name].strip.downcase}%" + c << ["LOWER(identifier) LIKE ? OR LOWER(name) LIKE ?", name, name] + end + + @project_count = Project.count(:conditions => c.conditions) @project_pages = Paginator.new self, @project_count, per_page_option, params['page'] @projects = Project.find :all, :order => sort_clause, - :conditions => conditions, + :conditions => c.conditions, :limit => @project_pages.items_per_page, :offset => @project_pages.current.offset diff --git a/app/helpers/admin_helper.rb b/app/helpers/admin_helper.rb index 1b41d8374..8f81f66ba 100644 --- a/app/helpers/admin_helper.rb +++ b/app/helpers/admin_helper.rb @@ -17,7 +17,7 @@ module AdminHelper def project_status_options_for_select(selected) - options_for_select([[l(:label_all), "*"], + options_for_select([[l(:label_all), ''], [l(:status_active), 1]], selected) end end diff --git a/app/views/admin/projects.rhtml b/app/views/admin/projects.rhtml index c42845622..6c7a21fb5 100644 --- a/app/views/admin/projects.rhtml +++ b/app/views/admin/projects.rhtml @@ -4,11 +4,13 @@

<%=l(:label_project_plural)%>

-<% form_tag() do %> +<% form_tag({}, :method => :get) do %>
<%= l(:label_filter_plural) %> <%= select_tag 'status', project_status_options_for_select(@status), :class => "small", :onchange => "this.form.submit(); return false;" %> -<%= submit_tag l(:button_apply), :class => "small" %> + +<%= text_field_tag 'name', params[:name], :size => 30 %> +<%= submit_tag l(:button_apply), :class => "small", :name => nil %>
<% end %>   diff --git a/test/functional/admin_controller_test.rb b/test/functional/admin_controller_test.rb index 05205b399..7c2626082 100644 --- a/test/functional/admin_controller_test.rb +++ b/test/functional/admin_controller_test.rb @@ -45,6 +45,25 @@ class AdminControllerTest < Test::Unit::TestCase :attributes => { :class => /nodata/ } end + def test_projects + get :projects + assert_response :success + assert_template 'projects' + assert_not_nil assigns(:projects) + # active projects only + assert_nil assigns(:projects).detect {|u| !u.active?} + end + + def test_projects_with_name_filter + get :projects, :name => 'store', :status => '' + assert_response :success + assert_template 'projects' + projects = assigns(:projects) + assert_not_nil projects + assert_equal 1, projects.size + assert_equal 'OnlineStore', projects.first.name + end + def test_load_default_configuration_data delete_configuration_data post :default_configuration, :lang => 'fr' -- 2.39.5