Adds named scopes for users index.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@8081 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
b9900661f4
commit
f52410be19
|
@ -38,23 +38,17 @@ class UsersController < ApplicationController
|
||||||
@limit = per_page_option
|
@limit = per_page_option
|
||||||
end
|
end
|
||||||
|
|
||||||
scope = User
|
@status = params[:status] || 1
|
||||||
scope = scope.in_group(params[:group_id].to_i) if params[:group_id].present?
|
|
||||||
|
|
||||||
@status = params[:status] ? params[:status].to_i : 1
|
scope = User.logged.status(@status)
|
||||||
c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status])
|
scope = scope.like(params[:name]) if params[:name].present?
|
||||||
|
scope = scope.in_group(params[:group_id]) if params[:group_id].present?
|
||||||
|
|
||||||
unless params[:name].blank?
|
@user_count = scope.count
|
||||||
name = "%#{params[:name].strip.downcase}%"
|
|
||||||
c << ["LOWER(login) LIKE ? OR LOWER(firstname) LIKE ? OR LOWER(lastname) LIKE ? OR LOWER(mail) LIKE ?", name, name, name, name]
|
|
||||||
end
|
|
||||||
|
|
||||||
@user_count = scope.count(:conditions => c.conditions)
|
|
||||||
@user_pages = Paginator.new self, @user_count, @limit, params['page']
|
@user_pages = Paginator.new self, @user_count, @limit, params['page']
|
||||||
@offset ||= @user_pages.current.offset
|
@offset ||= @user_pages.current.offset
|
||||||
@users = scope.find :all,
|
@users = scope.find :all,
|
||||||
:order => sort_clause,
|
:order => sort_clause,
|
||||||
:conditions => c.conditions,
|
|
||||||
:limit => @limit,
|
:limit => @limit,
|
||||||
:offset => @offset
|
:offset => @offset
|
||||||
|
|
||||||
|
|
|
@ -19,9 +19,9 @@ module UsersHelper
|
||||||
def users_status_options_for_select(selected)
|
def users_status_options_for_select(selected)
|
||||||
user_count_by_status = User.count(:group => 'status').to_hash
|
user_count_by_status = User.count(:group => 'status').to_hash
|
||||||
options_for_select([[l(:label_all), ''],
|
options_for_select([[l(:label_all), ''],
|
||||||
["#{l(:status_active)} (#{user_count_by_status[1].to_i})", 1],
|
["#{l(:status_active)} (#{user_count_by_status[1].to_i})", '1'],
|
||||||
["#{l(:status_registered)} (#{user_count_by_status[2].to_i})", 2],
|
["#{l(:status_registered)} (#{user_count_by_status[2].to_i})", '2'],
|
||||||
["#{l(:status_locked)} (#{user_count_by_status[3].to_i})", 3]], selected)
|
["#{l(:status_locked)} (#{user_count_by_status[3].to_i})", '3']], selected.to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Options for the new membership projects combo-box
|
# Options for the new membership projects combo-box
|
||||||
|
|
|
@ -54,6 +54,16 @@ class User < Principal
|
||||||
|
|
||||||
# Active non-anonymous users scope
|
# Active non-anonymous users scope
|
||||||
named_scope :active, :conditions => "#{User.table_name}.status = #{STATUS_ACTIVE}"
|
named_scope :active, :conditions => "#{User.table_name}.status = #{STATUS_ACTIVE}"
|
||||||
|
named_scope :logged, :conditions => "#{User.table_name}.status <> #{STATUS_ANONYMOUS}"
|
||||||
|
named_scope :status, lambda {|arg| arg.blank? ? {} : {:conditions => {:status => arg.to_i}} }
|
||||||
|
named_scope :like, lambda {|arg|
|
||||||
|
if arg.blank?
|
||||||
|
{}
|
||||||
|
else
|
||||||
|
pattern = "%#{arg.to_s.strip.downcase}%"
|
||||||
|
{:conditions => ["LOWER(login) LIKE :p OR LOWER(firstname) LIKE :p OR LOWER(lastname) LIKE :p OR LOWER(mail) LIKE :p", {:p => pattern}]}
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
acts_as_customizable
|
acts_as_customizable
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,14 @@ class UsersControllerTest < ActionController::TestCase
|
||||||
assert_nil assigns(:users).detect {|u| !u.active?}
|
assert_nil assigns(:users).detect {|u| !u.active?}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_index_with_status_filter
|
||||||
|
get :index, :status => 3
|
||||||
|
assert_response :success
|
||||||
|
assert_template 'index'
|
||||||
|
assert_not_nil assigns(:users)
|
||||||
|
assert_equal [3], assigns(:users).map(&:status).uniq
|
||||||
|
end
|
||||||
|
|
||||||
def test_index_with_name_filter
|
def test_index_with_name_filter
|
||||||
get :index, :name => 'john'
|
get :index, :name => 'john'
|
||||||
assert_response :success
|
assert_response :success
|
||||||
|
|
Loading…
Reference in New Issue