@@ -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 |
|
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