summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGo MAEDA <maeda@farend.jp>2018-07-09 06:07:26 +0000
committerGo MAEDA <maeda@farend.jp>2018-07-09 06:07:26 +0000
commit5a2f924b767585f4392da68f80d85a386c4ee6c1 (patch)
tree416eff5fc617b5138b41dbd7d23325b97e6dfd79
parent5484198d98b91f287139a91cd2a858d5d75fc45a (diff)
downloadredmine-5a2f924b767585f4392da68f80d85a386c4ee6c1.tar.gz
redmine-5a2f924b767585f4392da68f80d85a386c4ee6c1.zip
Extend watched_by_me-issue filter to include all project-members instead of only <<me>>-substitution (#8160).
Patch by Mizuki ISHIKAWA. git-svn-id: http://svn.redmine.org/redmine/trunk@17439 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/models/issue_query.rb2
-rw-r--r--app/models/query.rb6
-rw-r--r--test/functional/queries_controller_test.rb37
3 files changed, 44 insertions, 1 deletions
diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb
index c042a2ac9..ad5e511af 100644
--- a/app/models/issue_query.rb
+++ b/app/models/issue_query.rb
@@ -148,7 +148,7 @@ class IssueQuery < Query
if User.current.logged?
add_available_filter "watcher_id",
- :type => :list, :values => [["<< #{l(:label_me)} >>", "me"]]
+ :type => :list, :values => lambda { watcher_values }
end
add_available_filter("updated_by",
diff --git a/app/models/query.rb b/app/models/query.rb
index 9343e1456..f85fd0f65 100644
--- a/app/models/query.rb
+++ b/app/models/query.rb
@@ -564,6 +564,12 @@ class Query < ActiveRecord::Base
statuses.collect{|s| [s.name, s.id.to_s]}
end
+ def watcher_values
+ watcher_values = [["<< #{l(:label_me)} >>", "me"]]
+ watcher_values += users.sort_by(&:status).collect{|s| [s.name, s.id.to_s, l("status_#{User::LABEL_BY_STATUS[s.status]}")] } if User.current.allowed_to?(:view_issue_watchers, self.project)
+ watcher_values
+ end
+
# Returns a scope of issue custom fields that are available as columns or filters
def issue_custom_fields
if project
diff --git a/test/functional/queries_controller_test.rb b/test/functional/queries_controller_test.rb
index 580fa0d7a..713368265 100644
--- a/test/functional/queries_controller_test.rb
+++ b/test/functional/queries_controller_test.rb
@@ -695,4 +695,41 @@ class QueriesControllerTest < Redmine::ControllerTest
assert_include ["Dave Lopper", "3", "active"], json
assert_include ["Dave2 Lopper2", "5", "locked"], json
end
+
+ def test_watcher_filter_without_permission_should_show_only_me
+ # This user does not have view_issue_watchers permission
+ @request.session[:user_id] = 7
+
+ get :filter, :params => {
+ :project_id => 1,
+ :type => 'IssueQuery',
+ :name => 'watcher_id'
+ }
+ assert_response :success
+ assert_equal 'application/json', response.content_type
+ json = ActiveSupport::JSON.decode(response.body)
+
+ assert_equal 1, json.count
+ assert_equal [["<< me >>", "me"]], json
+ end
+
+ def test_watcher_filter_with_permission_should_show_members
+ # This user has view_issue_watchers permission
+ @request.session[:user_id] = 1
+
+ get :filter, :params => {
+ :project_id => 1,
+ :type => 'IssueQuery',
+ :name => 'watcher_id'
+ }
+ assert_response :success
+ assert_equal 'application/json', response.content_type
+ json = ActiveSupport::JSON.decode(response.body)
+
+ assert_equal 6, json.count
+ # "me" value should not be grouped
+ assert_include ["<< me >>", "me"], json
+ assert_include ["Dave Lopper", "3", "active"], json
+ assert_include ["Dave2 Lopper2", "5", "locked"], json
+ end
end