Mercurial > hg > soundsoftware-site
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) + ')' |