git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@8081 e93f8b46-1217-0410-a6f0-8f06a7374b81tags/1.4.0
@@ -38,23 +38,17 @@ class UsersController < ApplicationController | |||
@limit = per_page_option | |||
end | |||
scope = User | |||
scope = scope.in_group(params[:group_id].to_i) if params[:group_id].present? | |||
@status = params[:status] || 1 | |||
@status = params[:status] ? params[:status].to_i : 1 | |||
c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status]) | |||
scope = User.logged.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? | |||
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_count = scope.count | |||
@user_pages = Paginator.new self, @user_count, @limit, params['page'] | |||
@offset ||= @user_pages.current.offset | |||
@users = scope.find :all, | |||
:order => sort_clause, | |||
:conditions => c.conditions, | |||
:limit => @limit, | |||
:offset => @offset | |||
@@ -19,9 +19,9 @@ module UsersHelper | |||
def users_status_options_for_select(selected) | |||
user_count_by_status = User.count(:group => 'status').to_hash | |||
options_for_select([[l(:label_all), ''], | |||
["#{l(:status_active)} (#{user_count_by_status[1].to_i})", 1], | |||
["#{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_active)} (#{user_count_by_status[1].to_i})", '1'], | |||
["#{l(:status_registered)} (#{user_count_by_status[2].to_i})", '2'], | |||
["#{l(:status_locked)} (#{user_count_by_status[3].to_i})", '3']], selected.to_s) | |||
end | |||
# Options for the new membership projects combo-box |
@@ -54,6 +54,16 @@ class User < Principal | |||
# Active non-anonymous users scope | |||
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 | |||
@@ -49,6 +49,14 @@ class UsersControllerTest < ActionController::TestCase | |||
assert_nil assigns(:users).detect {|u| !u.active?} | |||
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 | |||
get :index, :name => 'john' | |||
assert_response :success |