From 919d0a68c39b14ac8970ad889e6dc9345fade7f0 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Fri, 13 Jan 2012 18:16:15 +0000 Subject: [PATCH] Adds "my projects" filter on the cross-project issue list. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@8637 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/query.rb | 9 +++++++++ test/unit/query_test.rb | 13 +++++++++++++ 2 files changed, 22 insertions(+) diff --git a/app/models/query.rb b/app/models/query.rb index 96885ed63..1286fe86b 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -240,6 +240,9 @@ class Query < ActiveRecord::Base # project filter project_values = [] + if User.current.logged? && User.current.memberships.any? + project_values << ["<< #{l(:label_my_projects).downcase} >>", "mine"] + end Project.project_tree(all_projects) do |p, level| prefix = (level > 0 ? ('--' * level + ' ') : '') project_values << ["#{prefix}#{p.name}", p.id.to_s] @@ -522,6 +525,12 @@ class Query < ActiveRecord::Base end end + if field == 'project_id' + if v.delete('mine') + v += User.current.memberships.map(&:project_id).map(&:to_s) + end + end + if field =~ /^cf_(\d+)$/ # custom field filters_clauses << sql_for_custom_field(field, operator, v, $1) diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb index 78499bfd0..d958fd131 100644 --- a/test/unit/query_test.rb +++ b/test/unit/query_test.rb @@ -413,6 +413,19 @@ class QueryTest < ActiveSupport::TestCase assert !result.include?(i3) end + def test_filter_my_projects + User.current = User.find(2) + query = Query.new(:name => '_') + filter = query.available_filters['project_id'] + assert_not_nil filter + assert_include 'mine', filter[:values].map{|v| v[1]} + + query.filters = { 'project_id' => {:operator => '=', :values => ['mine']}} + result = query.issues + assert_include "issues.project_id IN ('1','2','5')", query.statement + assert_nil result.detect {|issue| !User.current.member_of?(issue.project)} + end + def test_filter_watched_issues User.current = User.find(1) query = Query.new(:name => '_', :filters => { 'watcher_id' => {:operator => '=', :values => ['me']}}) -- 2.39.5