summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2015-10-21 17:00:14 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2015-10-21 17:00:14 +0000
commit8160f2addb05c662c5a9f20d7dfdf66e0e41534b (patch)
treed4a97ba823cdea4c9d479bcd5097e6ca0ffe20bd
parentd6c6c7ac62bf3cf0003cc950880de5597611eb1d (diff)
downloadredmine-8160f2addb05c662c5a9f20d7dfdf66e0e41534b.tar.gz
redmine-8160f2addb05c662c5a9f20d7dfdf66e0e41534b.zip
Adds a scope to get issues assigned to a user.
git-svn-id: http://svn.redmine.org/redmine/trunk@14720 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/helpers/my_helper.rb2
-rw-r--r--app/models/issue.rb7
-rw-r--r--app/views/users/show.html.erb2
-rw-r--r--test/unit/issue_test.rb16
4 files changed, 25 insertions, 2 deletions
diff --git a/app/helpers/my_helper.rb b/app/helpers/my_helper.rb
index acb9d836e..a559b9893 100644
--- a/app/helpers/my_helper.rb
+++ b/app/helpers/my_helper.rb
@@ -33,7 +33,7 @@ module MyHelper
def issuesassignedtome_items
Issue.visible.open.
- where(:assigned_to_id => ([User.current.id] + User.current.group_ids)).
+ assigned_to(User.current).
limit(10).
includes(:status, :project, :tracker, :priority).
references(:status, :project, :tracker, :priority).
diff --git a/app/models/issue.rb b/app/models/issue.rb
index 3d57c722c..d07041ff1 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -95,6 +95,13 @@ class Issue < ActiveRecord::Base
ids = [versions].flatten.compact.map {|v| v.is_a?(Version) ? v.id : v}
ids.any? ? where(:fixed_version_id => ids) : where('1=0')
}
+ scope :assigned_to, lambda {|arg|
+ arg = Array(arg).uniq
+ ids = arg.map {|p| p.is_a?(Principal) ? p.id : p}
+ ids += arg.select {|p| p.is_a?(User)}.map(&:group_ids).flatten.uniq
+ ids.compact!
+ ids.any? ? where(:assigned_to_id => ids) : none
+ }
before_validation :clear_disabled_fields
before_create :default_assign
diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb
index c5180885f..a4d0c4b5b 100644
--- a/app/views/users/show.html.erb
+++ b/app/views/users/show.html.erb
@@ -27,7 +27,7 @@
<ul>
<li><%= link_to l(:label_assigned_issues),
issues_path(:set_filter => 1, :assigned_to_id => 'me', :sort => 'priority:desc,updated_on:desc') %>:
- <%= Issue.visible.open.where(:assigned_to_id => ([@user.id] + @user.group_ids)).count %>
+ <%= Issue.visible.open.assigned_to(@user).count %>
<li><%= link_to l(:label_reported_issues),
issues_path(:set_filter => 1, :status_id => '*', :author_id => @user.id) %>:
<%= Issue.visible.where(:author_id => @user.id).count %>
diff --git a/test/unit/issue_test.rb b/test/unit/issue_test.rb
index bed63b767..4b9fbda0b 100644
--- a/test/unit/issue_test.rb
+++ b/test/unit/issue_test.rb
@@ -418,6 +418,22 @@ class IssueTest < ActiveSupport::TestCase
assert_equal 0, Issue.fixed_version([]).count
end
+ def test_assigned_to_scope_should_return_issues_assigned_to_the_user
+ user = User.generate!
+ issue = Issue.generate!
+ Issue.where(:id => issue.id).update_all :assigned_to_id => user.id
+ assert_equal [issue], Issue.assigned_to(user).to_a
+ end
+
+ def test_assigned_to_scope_should_return_issues_assigned_to_the_user_groups
+ group = Group.generate!
+ user = User.generate!
+ group.users << user
+ issue = Issue.generate!
+ Issue.where(:id => issue.id).update_all :assigned_to_id => group.id
+ assert_equal [issue], Issue.assigned_to(user).to_a
+ end
+
def test_errors_full_messages_should_include_custom_fields_errors
field = IssueCustomField.find_by_name('Database')