diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/feeds_controller.rb | 2 | ||||
-rw-r--r-- | app/controllers/projects_controller.rb | 3 | ||||
-rw-r--r-- | app/controllers/queries_controller.rb | 1 | ||||
-rw-r--r-- | app/models/query.rb | 21 |
4 files changed, 23 insertions, 4 deletions
diff --git a/app/controllers/feeds_controller.rb b/app/controllers/feeds_controller.rb index 9314db5e3..214f80c95 100644 --- a/app/controllers/feeds_controller.rb +++ b/app/controllers/feeds_controller.rb @@ -37,6 +37,7 @@ class FeedsController < ApplicationController def issues if @project && params[:query_id] query = Query.find(params[:query_id]) + query.executed_by = @user # ignore query if it's not valid query = nil unless query.valid? # override with query conditions @@ -56,6 +57,7 @@ class FeedsController < ApplicationController def history if @project && params[:query_id] query = Query.find(params[:query_id]) + query.executed_by = @user # ignore query if it's not valid query = nil unless query.valid? # override with query conditions diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 82468c21a..e90196495 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -647,11 +647,12 @@ private def retrieve_query if params[:query_id] @query = @project.queries.find(params[:query_id]) + @query.executed_by = logged_in_user session[:query] = @query else if params[:set_filter] or !session[:query] or session[:query].project_id != @project.id # Give it a name, required to be valid - @query = Query.new(:name => "_") + @query = Query.new(:name => "_", :executed_by => logged_in_user) @query.project = @project if params[:fields] and params[:fields].is_a? Array params[:fields].each do |field| diff --git a/app/controllers/queries_controller.rb b/app/controllers/queries_controller.rb index 7f7f01fd3..abafd19d4 100644 --- a/app/controllers/queries_controller.rb +++ b/app/controllers/queries_controller.rb @@ -42,6 +42,7 @@ class QueriesController < ApplicationController private def find_query @query = Query.find(params[:id]) + @query.executed_by = logged_in_user @project = @query.project # check if user is allowed to manage queries (same permission as add_query) authorize('projects', 'add_query') diff --git a/app/models/query.rb b/app/models/query.rb index e26e6a68e..026e79ea9 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -21,6 +21,7 @@ class Query < ActiveRecord::Base serialize :filters attr_protected :project, :user + attr_accessor :executed_by validates_presence_of :name, :on => :save @@ -59,6 +60,11 @@ class Query < ActiveRecord::Base self.is_public = true end + def executed_by=(user) + @executed_by = user + set_language_if_valid(user.language) if user + end + def validate filters.each_key do |field| errors.add label_for(field), :activerecord_error_blank unless @@ -81,8 +87,12 @@ class Query < ActiveRecord::Base "due_date" => { :type => :date, :order => 12 } } unless project.nil? # project specific filters - @available_filters["assigned_to_id"] = { :type => :list_optional, :order => 4, :values => @project.users.collect{|s| [s.name, s.id.to_s] } } - @available_filters["author_id"] = { :type => :list, :order => 5, :values => @project.users.collect{|s| [s.name, s.id.to_s] } } + user_values = [] + user_values << ["<< #{l(:label_me)} >>", "me"] if executed_by + user_values += @project.users.collect{|s| [s.name, s.id.to_s] } + + @available_filters["assigned_to_id"] = { :type => :list_optional, :order => 4, :values => user_values } + @available_filters["author_id"] = { :type => :list, :order => 5, :values => user_values } @available_filters["category_id"] = { :type => :list_optional, :order => 6, :values => @project.issue_categories.collect{|s| [s.name, s.id.to_s] } } @available_filters["fixed_version_id"] = { :type => :list_optional, :order => 7, :values => @project.versions.collect{|s| [s.name, s.id.to_s] } } unless @project.children.empty? @@ -162,7 +172,7 @@ class Query < ActiveRecord::Base end filters.each_key do |field| next if field == "subproject_id" - v = values_for field + v = values_for(field).clone next unless v and !v.empty? sql = sql + " AND " unless sql.empty? @@ -179,6 +189,11 @@ class Query < ActiveRecord::Base db_field = field end + # "me" value subsitution + if %w(assigned_to_id author_id).include?(field) + v.push(executed_by ? executed_by.id.to_s : "0") if v.delete("me") + end + case operator_for field when "=" sql = sql + "#{db_table}.#{db_field} IN (" + v.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + ")" |