]> source.dussan.org Git - redmine.git/commitdiff
Adds named scopes for projects index.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 4 Dec 2011 22:31:02 +0000 (22:31 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 4 Dec 2011 22:31:02 +0000 (22:31 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@8082 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/admin_controller.rb
app/helpers/admin_helper.rb
app/models/project.rb
test/functional/admin_controller_test.rb

index 128459e43fe39ea685233f40e99abc4eecce5d3a..d32bdef91f32cae7630409b2c1bd59f63c96b86a 100644 (file)
@@ -26,14 +26,12 @@ class AdminController < ApplicationController
   end
        
   def projects
-    @status = params[:status] ? params[:status].to_i : 1
-    c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status])
-    unless params[:name].blank?
-      name = "%#{params[:name].strip.downcase}%"
-      c << ["LOWER(identifier) LIKE ? OR LOWER(name) LIKE ?", name, name]
-    end
-    @projects = Project.find :all, :order => 'lft',
-                                   :conditions => c.conditions
+    @status = params[:status] || 1
+
+    scope = Project.status(@status)
+    scope = scope.like(params[:name]) if params[:name].present?
+
+    @projects = scope.all(:order => 'lft')
 
     render :action => "projects", :layout => false if request.xhr?
   end
index b78de27dc52dd80d39fc6c5f5ab3152259a0d86c..c7358f67af5b4a583067ba0d960670d98bea1297 100644 (file)
@@ -18,6 +18,6 @@
 module AdminHelper
   def project_status_options_for_select(selected)
     options_for_select([[l(:label_all), ''],
-                        [l(:status_active), 1]], selected)
+                        [l(:status_active), '1']], selected.to_s)
   end
 end
index e636c33debc0d95c5768f6a43db616a7eb633936..831bdf07f9966c0be6956148f1116678f4e20087 100644 (file)
@@ -83,8 +83,17 @@ class Project < ActiveRecord::Base
 
   named_scope :has_module, lambda { |mod| { :conditions => ["#{Project.table_name}.id IN (SELECT em.project_id FROM #{EnabledModule.table_name} em WHERE em.name=?)", mod.to_s] } }
   named_scope :active, { :conditions => "#{Project.table_name}.status = #{STATUS_ACTIVE}"}
+  named_scope :status, lambda {|arg| arg.blank? ? {} : {:conditions => {:status => arg.to_i}} }
   named_scope :all_public, { :conditions => { :is_public => true } }
   named_scope :visible, lambda {|*args| {:conditions => Project.visible_condition(args.shift || User.current, *args) }}
+  named_scope :like, lambda {|arg|
+    if arg.blank?
+      {}
+    else
+      pattern = "%#{arg.to_s.strip.downcase}%"
+      {:conditions => ["LOWER(identifier) LIKE :p OR LOWER(name) LIKE :p", {:p => pattern}]}
+    end
+  }
 
   def initialize(attributes = nil)
     super
index 01a4877989c977fa8e7c9fc618370dfb343e5d09..774c5a12fabdd6803f7394944d8de1d2f4ad7d74 100644 (file)
@@ -54,6 +54,15 @@ class AdminControllerTest < ActionController::TestCase
     assert_nil assigns(:projects).detect {|u| !u.active?}
   end
 
+  def test_projects_with_status_filter
+    get :projects, :status => 1
+    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