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(",") + ")" diff --git a/lang/bg.yml b/lang/bg.yml index e63672cdb..fb8e4b8dc 100644 --- a/lang/bg.yml +++ b/lang/bg.yml @@ -384,6 +384,7 @@ label_start_to_end: start to end label_stay_logged_in: Stay logged in label_disabled: disabled label_show_completed_versions: Show completed versions +label_me: me button_login: Вход button_submit: Изпращане diff --git a/lang/de.yml b/lang/de.yml index 3b3ef2af2..fa4125391 100644 --- a/lang/de.yml +++ b/lang/de.yml @@ -384,6 +384,7 @@ label_start_to_end: start to end label_stay_logged_in: Stay logged in label_disabled: disabled label_show_completed_versions: Show completed versions +label_me: me button_login: Einloggen button_submit: OK diff --git a/lang/en.yml b/lang/en.yml index 887ce6992..2e1ff6e1b 100644 --- a/lang/en.yml +++ b/lang/en.yml @@ -384,6 +384,7 @@ label_start_to_end: start to end label_stay_logged_in: Stay logged in label_disabled: disabled label_show_completed_versions: Show completed versions +label_me: me button_login: Login button_submit: Submit diff --git a/lang/es.yml b/lang/es.yml index 78ade511d..56d251426 100644 --- a/lang/es.yml +++ b/lang/es.yml @@ -384,6 +384,7 @@ label_start_to_end: start to end label_stay_logged_in: Stay logged in label_disabled: disabled label_show_completed_versions: Show completed versions +label_me: me button_login: Conexión button_submit: Someter diff --git a/lang/fr.yml b/lang/fr.yml index f843a64ad..3da0c1cef 100644 --- a/lang/fr.yml +++ b/lang/fr.yml @@ -384,6 +384,7 @@ label_start_to_end: début à fin label_stay_logged_in: Rester connecté label_disabled: désactivé label_show_completed_versions: Voire les versions passées +label_me: moi button_login: Connexion button_submit: Soumettre diff --git a/lang/it.yml b/lang/it.yml index ce70d9b23..1f61077c9 100644 --- a/lang/it.yml +++ b/lang/it.yml @@ -384,6 +384,7 @@ label_start_to_end: start to end label_stay_logged_in: Stay logged in label_disabled: disabled label_show_completed_versions: Show completed versions +label_me: me button_login: Login button_submit: Invia diff --git a/lang/ja.yml b/lang/ja.yml index 4066e869b..45acde369 100644 --- a/lang/ja.yml +++ b/lang/ja.yml @@ -385,6 +385,7 @@ label_start_to_end: start to end label_stay_logged_in: Stay logged in label_disabled: disabled label_show_completed_versions: Show completed versions +label_me: me button_login: ログイン button_submit: 変更 diff --git a/lang/pt-br.yml b/lang/pt-br.yml index 5a2e9f5cd..6f127a4ca 100644 --- a/lang/pt-br.yml +++ b/lang/pt-br.yml @@ -384,6 +384,7 @@ label_start_to_end: start to end label_stay_logged_in: Stay logged in label_disabled: disabled label_show_completed_versions: Show completed versions +label_me: me button_login: Login button_submit: Enviar diff --git a/lang/pt.yml b/lang/pt.yml index 25fc40a3b..0809b3588 100644 --- a/lang/pt.yml +++ b/lang/pt.yml @@ -384,6 +384,7 @@ label_start_to_end: inícia ao fim label_stay_logged_in: Rester connecté label_disabled: désactivé label_show_completed_versions: Voire les versions passées +label_me: me button_login: Login button_submit: Enviar diff --git a/lang/zh.yml b/lang/zh.yml index bf3469679..4e8e3f38b 100644 --- a/lang/zh.yml +++ b/lang/zh.yml @@ -387,6 +387,7 @@ label_start_to_end: start to end label_stay_logged_in: Stay logged in label_disabled: disabled label_show_completed_versions: Show completed versions +label_me: me button_login: 登录 button_submit: 提交