##// END OF EJS Templates
"me" value is now available in queries for "assigned to" and "author" filters....
Jean-Philippe Lang -
r517:df0a49ff1447
parent child
Show More
@@ -37,6 +37,7 class FeedsController < ApplicationController
37 def issues
37 def issues
38 if @project && params[:query_id]
38 if @project && params[:query_id]
39 query = Query.find(params[:query_id])
39 query = Query.find(params[:query_id])
40 query.executed_by = @user
40 # ignore query if it's not valid
41 # ignore query if it's not valid
41 query = nil unless query.valid?
42 query = nil unless query.valid?
42 # override with query conditions
43 # override with query conditions
@@ -56,6 +57,7 class FeedsController < ApplicationController
56 def history
57 def history
57 if @project && params[:query_id]
58 if @project && params[:query_id]
58 query = Query.find(params[:query_id])
59 query = Query.find(params[:query_id])
60 query.executed_by = @user
59 # ignore query if it's not valid
61 # ignore query if it's not valid
60 query = nil unless query.valid?
62 query = nil unless query.valid?
61 # override with query conditions
63 # override with query conditions
@@ -647,11 +647,12 private
647 def retrieve_query
647 def retrieve_query
648 if params[:query_id]
648 if params[:query_id]
649 @query = @project.queries.find(params[:query_id])
649 @query = @project.queries.find(params[:query_id])
650 @query.executed_by = logged_in_user
650 session[:query] = @query
651 session[:query] = @query
651 else
652 else
652 if params[:set_filter] or !session[:query] or session[:query].project_id != @project.id
653 if params[:set_filter] or !session[:query] or session[:query].project_id != @project.id
653 # Give it a name, required to be valid
654 # Give it a name, required to be valid
654 @query = Query.new(:name => "_")
655 @query = Query.new(:name => "_", :executed_by => logged_in_user)
655 @query.project = @project
656 @query.project = @project
656 if params[:fields] and params[:fields].is_a? Array
657 if params[:fields] and params[:fields].is_a? Array
657 params[:fields].each do |field|
658 params[:fields].each do |field|
@@ -42,6 +42,7 class QueriesController < ApplicationController
42 private
42 private
43 def find_query
43 def find_query
44 @query = Query.find(params[:id])
44 @query = Query.find(params[:id])
45 @query.executed_by = logged_in_user
45 @project = @query.project
46 @project = @query.project
46 # check if user is allowed to manage queries (same permission as add_query)
47 # check if user is allowed to manage queries (same permission as add_query)
47 authorize('projects', 'add_query')
48 authorize('projects', 'add_query')
@@ -21,6 +21,7 class Query < ActiveRecord::Base
21 serialize :filters
21 serialize :filters
22
22
23 attr_protected :project, :user
23 attr_protected :project, :user
24 attr_accessor :executed_by
24
25
25 validates_presence_of :name, :on => :save
26 validates_presence_of :name, :on => :save
26
27
@@ -59,6 +60,11 class Query < ActiveRecord::Base
59 self.is_public = true
60 self.is_public = true
60 end
61 end
61
62
63 def executed_by=(user)
64 @executed_by = user
65 set_language_if_valid(user.language) if user
66 end
67
62 def validate
68 def validate
63 filters.each_key do |field|
69 filters.each_key do |field|
64 errors.add label_for(field), :activerecord_error_blank unless
70 errors.add label_for(field), :activerecord_error_blank unless
@@ -81,8 +87,12 class Query < ActiveRecord::Base
81 "due_date" => { :type => :date, :order => 12 } }
87 "due_date" => { :type => :date, :order => 12 } }
82 unless project.nil?
88 unless project.nil?
83 # project specific filters
89 # project specific filters
84 @available_filters["assigned_to_id"] = { :type => :list_optional, :order => 4, :values => @project.users.collect{|s| [s.name, s.id.to_s] } }
90 user_values = []
85 @available_filters["author_id"] = { :type => :list, :order => 5, :values => @project.users.collect{|s| [s.name, s.id.to_s] } }
91 user_values << ["<< #{l(:label_me)} >>", "me"] if executed_by
92 user_values += @project.users.collect{|s| [s.name, s.id.to_s] }
93
94 @available_filters["assigned_to_id"] = { :type => :list_optional, :order => 4, :values => user_values }
95 @available_filters["author_id"] = { :type => :list, :order => 5, :values => user_values }
86 @available_filters["category_id"] = { :type => :list_optional, :order => 6, :values => @project.issue_categories.collect{|s| [s.name, s.id.to_s] } }
96 @available_filters["category_id"] = { :type => :list_optional, :order => 6, :values => @project.issue_categories.collect{|s| [s.name, s.id.to_s] } }
87 @available_filters["fixed_version_id"] = { :type => :list_optional, :order => 7, :values => @project.versions.collect{|s| [s.name, s.id.to_s] } }
97 @available_filters["fixed_version_id"] = { :type => :list_optional, :order => 7, :values => @project.versions.collect{|s| [s.name, s.id.to_s] } }
88 unless @project.children.empty?
98 unless @project.children.empty?
@@ -162,7 +172,7 class Query < ActiveRecord::Base
162 end
172 end
163 filters.each_key do |field|
173 filters.each_key do |field|
164 next if field == "subproject_id"
174 next if field == "subproject_id"
165 v = values_for field
175 v = values_for(field).clone
166 next unless v and !v.empty?
176 next unless v and !v.empty?
167
177
168 sql = sql + " AND " unless sql.empty?
178 sql = sql + " AND " unless sql.empty?
@@ -179,6 +189,11 class Query < ActiveRecord::Base
179 db_field = field
189 db_field = field
180 end
190 end
181
191
192 # "me" value subsitution
193 if %w(assigned_to_id author_id).include?(field)
194 v.push(executed_by ? executed_by.id.to_s : "0") if v.delete("me")
195 end
196
182 case operator_for field
197 case operator_for field
183 when "="
198 when "="
184 sql = sql + "#{db_table}.#{db_field} IN (" + v.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + ")"
199 sql = sql + "#{db_table}.#{db_field} IN (" + v.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + ")"
@@ -384,6 +384,7 label_start_to_end: start to end
384 label_stay_logged_in: Stay logged in
384 label_stay_logged_in: Stay logged in
385 label_disabled: disabled
385 label_disabled: disabled
386 label_show_completed_versions: Show completed versions
386 label_show_completed_versions: Show completed versions
387 label_me: me
387
388
388 button_login: Вход
389 button_login: Вход
389 button_submit: Изпращане
390 button_submit: Изпращане
@@ -384,6 +384,7 label_start_to_end: start to end
384 label_stay_logged_in: Stay logged in
384 label_stay_logged_in: Stay logged in
385 label_disabled: disabled
385 label_disabled: disabled
386 label_show_completed_versions: Show completed versions
386 label_show_completed_versions: Show completed versions
387 label_me: me
387
388
388 button_login: Einloggen
389 button_login: Einloggen
389 button_submit: OK
390 button_submit: OK
@@ -384,6 +384,7 label_start_to_end: start to end
384 label_stay_logged_in: Stay logged in
384 label_stay_logged_in: Stay logged in
385 label_disabled: disabled
385 label_disabled: disabled
386 label_show_completed_versions: Show completed versions
386 label_show_completed_versions: Show completed versions
387 label_me: me
387
388
388 button_login: Login
389 button_login: Login
389 button_submit: Submit
390 button_submit: Submit
@@ -384,6 +384,7 label_start_to_end: start to end
384 label_stay_logged_in: Stay logged in
384 label_stay_logged_in: Stay logged in
385 label_disabled: disabled
385 label_disabled: disabled
386 label_show_completed_versions: Show completed versions
386 label_show_completed_versions: Show completed versions
387 label_me: me
387
388
388 button_login: Conexión
389 button_login: Conexión
389 button_submit: Someter
390 button_submit: Someter
@@ -384,6 +384,7 label_start_to_end: début à fin
384 label_stay_logged_in: Rester connecté
384 label_stay_logged_in: Rester connecté
385 label_disabled: désactivé
385 label_disabled: désactivé
386 label_show_completed_versions: Voire les versions passées
386 label_show_completed_versions: Voire les versions passées
387 label_me: moi
387
388
388 button_login: Connexion
389 button_login: Connexion
389 button_submit: Soumettre
390 button_submit: Soumettre
@@ -384,6 +384,7 label_start_to_end: start to end
384 label_stay_logged_in: Stay logged in
384 label_stay_logged_in: Stay logged in
385 label_disabled: disabled
385 label_disabled: disabled
386 label_show_completed_versions: Show completed versions
386 label_show_completed_versions: Show completed versions
387 label_me: me
387
388
388 button_login: Login
389 button_login: Login
389 button_submit: Invia
390 button_submit: Invia
@@ -385,6 +385,7 label_start_to_end: start to end
385 label_stay_logged_in: Stay logged in
385 label_stay_logged_in: Stay logged in
386 label_disabled: disabled
386 label_disabled: disabled
387 label_show_completed_versions: Show completed versions
387 label_show_completed_versions: Show completed versions
388 label_me: me
388
389
389 button_login: ログイン
390 button_login: ログイン
390 button_submit: 変更
391 button_submit: 変更
@@ -384,6 +384,7 label_start_to_end: start to end
384 label_stay_logged_in: Stay logged in
384 label_stay_logged_in: Stay logged in
385 label_disabled: disabled
385 label_disabled: disabled
386 label_show_completed_versions: Show completed versions
386 label_show_completed_versions: Show completed versions
387 label_me: me
387
388
388 button_login: Login
389 button_login: Login
389 button_submit: Enviar
390 button_submit: Enviar
@@ -384,6 +384,7 label_start_to_end: inícia ao fim
384 label_stay_logged_in: Rester connecté
384 label_stay_logged_in: Rester connecté
385 label_disabled: désactivé
385 label_disabled: désactivé
386 label_show_completed_versions: Voire les versions passées
386 label_show_completed_versions: Voire les versions passées
387 label_me: me
387
388
388 button_login: Login
389 button_login: Login
389 button_submit: Enviar
390 button_submit: Enviar
@@ -387,6 +387,7 label_start_to_end: start to end
387 label_stay_logged_in: Stay logged in
387 label_stay_logged_in: Stay logged in
388 label_disabled: disabled
388 label_disabled: disabled
389 label_show_completed_versions: Show completed versions
389 label_show_completed_versions: Show completed versions
390 label_me: me
390
391
391 button_login: 登录
392 button_login: 登录
392 button_submit: 提交
393 button_submit: 提交
General Comments 0
You need to be logged in to leave comments. Login now