comparison app/models/.svn/text-base/query.rb.svn-base @ 23:ca82a3468d27 cannam

* Merge SVN update from default
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Fri, 24 Sep 2010 14:17:42 +0100
parents 40f7cfd4df19
children 94944d00e43c
comparison
equal deleted inserted replaced
21:d0cd1f6335a5 23:ca82a3468d27
193 user_values += User.active.find(:all, :conditions => ["#{User.table_name}.id IN (SELECT DISTINCT user_id FROM members WHERE project_id IN (?))", project_ids]).sort.collect{|s| [s.name, s.id.to_s] } 193 user_values += User.active.find(:all, :conditions => ["#{User.table_name}.id IN (SELECT DISTINCT user_id FROM members WHERE project_id IN (?))", project_ids]).sort.collect{|s| [s.name, s.id.to_s] }
194 end 194 end
195 end 195 end
196 @available_filters["assigned_to_id"] = { :type => :list_optional, :order => 4, :values => user_values } unless user_values.empty? 196 @available_filters["assigned_to_id"] = { :type => :list_optional, :order => 4, :values => user_values } unless user_values.empty?
197 @available_filters["author_id"] = { :type => :list, :order => 5, :values => user_values } unless user_values.empty? 197 @available_filters["author_id"] = { :type => :list, :order => 5, :values => user_values } unless user_values.empty?
198
199 group_values = Group.all.collect {|g| [g.name, g.id] }
200 @available_filters["member_of_group"] = { :type => :list_optional, :order => 6, :values => group_values } unless group_values.empty?
201
202 role_values = Role.givable.collect {|r| [r.name, r.id] }
203 @available_filters["assigned_to_role"] = { :type => :list_optional, :order => 7, :values => role_values } unless role_values.empty?
198 204
199 if User.current.logged? 205 if User.current.logged?
200 @available_filters["watcher_id"] = { :type => :list, :order => 15, :values => [["<< #{l(:label_me)} >>", "me"]] } 206 @available_filters["watcher_id"] = { :type => :list, :order => 15, :values => [["<< #{l(:label_me)} >>", "me"]] }
201 end 207 end
202 208
430 elsif field == 'watcher_id' 436 elsif field == 'watcher_id'
431 db_table = Watcher.table_name 437 db_table = Watcher.table_name
432 db_field = 'user_id' 438 db_field = 'user_id'
433 sql << "#{Issue.table_name}.id #{ operator == '=' ? 'IN' : 'NOT IN' } (SELECT #{db_table}.watchable_id FROM #{db_table} WHERE #{db_table}.watchable_type='Issue' AND " 439 sql << "#{Issue.table_name}.id #{ operator == '=' ? 'IN' : 'NOT IN' } (SELECT #{db_table}.watchable_id FROM #{db_table} WHERE #{db_table}.watchable_type='Issue' AND "
434 sql << sql_for_field(field, '=', v, db_table, db_field) + ')' 440 sql << sql_for_field(field, '=', v, db_table, db_field) + ')'
441 elsif field == "member_of_group" # named field
442 if operator == '*' # Any group
443 groups = Group.all
444 operator = '=' # Override the operator since we want to find by assigned_to
445 elsif operator == "!*"
446 groups = Group.all
447 operator = '!' # Override the operator since we want to find by assigned_to
448 else
449 groups = Group.find_all_by_id(v)
450 end
451 groups ||= []
452
453 members_of_groups = groups.inject([]) {|user_ids, group|
454 if group && group.user_ids.present?
455 user_ids << group.user_ids
456 end
457 user_ids.flatten.uniq.compact
458 }.sort.collect(&:to_s)
459
460 sql << '(' + sql_for_field("assigned_to_id", operator, members_of_groups, Issue.table_name, "assigned_to_id", false) + ')'
461
462 elsif field == "assigned_to_role" # named field
463 if operator == "*" # Any Role
464 roles = Role.givable
465 operator = '=' # Override the operator since we want to find by assigned_to
466 elsif operator == "!*" # No role
467 roles = Role.givable
468 operator = '!' # Override the operator since we want to find by assigned_to
469 else
470 roles = Role.givable.find_all_by_id(v)
471 end
472 roles ||= []
473
474 members_of_roles = roles.inject([]) {|user_ids, role|
475 if role && role.members
476 user_ids << role.members.collect(&:user_id)
477 end
478 user_ids.flatten.uniq.compact
479 }.sort.collect(&:to_s)
480
481 sql << '(' + sql_for_field("assigned_to_id", operator, members_of_roles, Issue.table_name, "assigned_to_id", false) + ')'
435 else 482 else
436 # regular field 483 # regular field
437 db_table = Issue.table_name 484 db_table = Issue.table_name
438 db_field = field 485 db_field = field
439 sql << '(' + sql_for_field(field, operator, v, db_table, db_field) + ')' 486 sql << '(' + sql_for_field(field, operator, v, db_table, db_field) + ')'