1 | NO CONTENT: new file 100644, binary diff hidden |
|
NO CONTENT: new file 100644, binary diff hidden |
@@ -208,10 +208,15 class ProjectsController < ApplicationController | |||||
208 | sort_init 'issues.id', 'desc' |
|
208 | sort_init 'issues.id', 'desc' | |
209 | sort_update |
|
209 | sort_update | |
210 |
|
210 | |||
211 | @query = Query.new |
|
211 | session[:query] = nil if params[:set_filter] | |
212 | params[:fields].each do |field| |
|
212 | @query = session[:query] || Query.new | |
213 | @query.add_filter(field, params[:operators][field], params[:values][field]) |
|
213 | if params[:fields] and params[:fields].is_a? Array | |
214 | end if params[:fields] |
|
214 | @query.filters = {} | |
|
215 | params[:fields].each do |field| | |||
|
216 | @query.add_filter(field, params[:operators][field], params[:values][field]) | |||
|
217 | end | |||
|
218 | end | |||
|
219 | session[:query] = @query | |||
215 |
|
220 | |||
216 | @results_per_page_options = [ 15, 25, 50, 100 ] |
|
221 | @results_per_page_options = [ 15, 25, 50, 100 ] | |
217 | if params[:per_page] and @results_per_page_options.include? params[:per_page].to_i |
|
222 | if params[:per_page] and @results_per_page_options.include? params[:per_page].to_i | |
@@ -237,11 +242,11 class ProjectsController < ApplicationController | |||||
237 | sort_init 'issues.id', 'desc' |
|
242 | sort_init 'issues.id', 'desc' | |
238 | sort_update |
|
243 | sort_update | |
239 |
|
244 | |||
240 | search_filter_init_list_issues |
|
245 | @query = session[:query] || Query.new | |
241 |
|
246 | |||
242 | @issues = Issue.find :all, :order => sort_clause, |
|
247 | @issues = Issue.find :all, :order => sort_clause, | |
243 | :include => [ :author, :status, :tracker, :project, :custom_values ], |
|
248 | :include => [ :author, :status, :tracker, :project, :custom_values ], | |
244 |
:conditions => |
|
249 | :conditions => @query.statement | |
245 |
|
250 | |||
246 | ic = Iconv.new('ISO-8859-1', 'UTF-8') |
|
251 | ic = Iconv.new('ISO-8859-1', 'UTF-8') | |
247 | export = StringIO.new |
|
252 | export = StringIO.new | |
@@ -270,11 +275,11 class ProjectsController < ApplicationController | |||||
270 | sort_init 'issues.id', 'desc' |
|
275 | sort_init 'issues.id', 'desc' | |
271 | sort_update |
|
276 | sort_update | |
272 |
|
277 | |||
273 | search_filter_init_list_issues |
|
278 | @query = session[:query] || Query.new | |
274 |
|
279 | |||
275 | @issues = Issue.find :all, :order => sort_clause, |
|
280 | @issues = Issue.find :all, :order => sort_clause, | |
276 | :include => [ :author, :status, :tracker, :project, :custom_values ], |
|
281 | :include => [ :author, :status, :tracker, :project, :custom_values ], | |
277 |
:conditions => |
|
282 | :conditions => @query.statement | |
278 |
|
283 | |||
279 | @options_for_rfpdf ||= {} |
|
284 | @options_for_rfpdf ||= {} | |
280 | @options_for_rfpdf[:file_name] = "export.pdf" |
|
285 | @options_for_rfpdf[:file_name] = "export.pdf" |
@@ -1,7 +1,7 | |||||
1 | class Query < ActiveRecord::Base |
|
1 | class Query < ActiveRecord::Base | |
2 | serialize :filters |
|
2 | serialize :filters | |
3 |
|
3 | |||
4 | validates_presence_of :name |
|
4 | validates_presence_of :name, :on => :save | |
5 |
|
5 | |||
6 | @@operators = { "=" => "Egal", |
|
6 | @@operators = { "=" => "Egal", | |
7 | "!" => "Different", |
|
7 | "!" => "Different", | |
@@ -56,7 +56,7 class Query < ActiveRecord::Base | |||||
56 |
|
56 | |||
57 | def add_filter(field, operator, values) |
|
57 | def add_filter(field, operator, values) | |
58 | # values must be an array |
|
58 | # values must be an array | |
59 | return unless values and values.is_a? Array |
|
59 | return unless values and values.is_a? Array # and !values.first.empty? | |
60 | # check if field is defined as an available filter |
|
60 | # check if field is defined as an available filter | |
61 | if @@available_filters.has_key? field |
|
61 | if @@available_filters.has_key? field | |
62 | filter_options = @@available_filters[field] |
|
62 | filter_options = @@available_filters[field] |
@@ -7,12 +7,20 | |||||
7 | </small> |
|
7 | </small> | |
8 | </div> |
|
8 | </div> | |
9 |
|
9 | |||
10 | <div> |
|
|||
11 | <%= start_form_tag :action => 'list_issues' %> |
|
10 | <%= start_form_tag :action => 'list_issues' %> | |
12 | <%= render :partial => 'queries/filters', :locals => {:query => @query} %> |
|
11 | <%= render :partial => 'queries/filters', :locals => {:query => @query} %> | |
|
12 | <table width="100%"> | |||
|
13 | <tr> | |||
|
14 | <td align="right"> | |||
13 | <%= submit_tag l(:button_apply), :class => "button-small" %> |
|
15 | <%= submit_tag l(:button_apply), :class => "button-small" %> | |
14 | <%= end_form_tag %> |
|
16 | <%= end_form_tag %> | |
15 | </div> |
|
17 | <%= start_form_tag :action => 'list_issues', :set_filter => 1 %> | |
|
18 | <%= submit_tag l(:button_clear), :class => "button-small" %> | |||
|
19 | <%= end_form_tag %> | |||
|
20 | </td> | |||
|
21 | </tr> | |||
|
22 | </table> | |||
|
23 | ||||
16 | |
|
24 | | |
17 | <table class="listTableContent"> |
|
25 | <table class="listTableContent"> | |
18 | <tr> |
|
26 | <tr> |
@@ -1,5 +1,21 | |||||
1 | <script> |
|
1 | <script> | |
2 |
|
2 | |||
|
3 | function add_filter() { | |||
|
4 | select = $('add_filter_select'); | |||
|
5 | field = select.value | |||
|
6 | Element.show('tr_' + field); | |||
|
7 | check_box = $('cb_' + field); | |||
|
8 | check_box.checked = true; | |||
|
9 | toggle_filter(field); | |||
|
10 | select.selectedIndex = 0; | |||
|
11 | ||||
|
12 | for (i=0; i<select.options.length; i++) { | |||
|
13 | if (select.options[i].value == field) { | |||
|
14 | select.options[i].disabled = true; | |||
|
15 | } | |||
|
16 | } | |||
|
17 | } | |||
|
18 | ||||
3 | function toggle_filter(field) { |
|
19 | function toggle_filter(field) { | |
4 | check_box = $('cb_' + field); |
|
20 | check_box = $('cb_' + field); | |
5 |
|
21 | |||
@@ -39,12 +55,15 function toggle_multi_select(field) { | |||||
39 |
|
55 | |||
40 | </script> |
|
56 | </script> | |
41 |
|
57 | |||
42 | <fieldset><legend>Filtres</legend> |
|
58 | <fieldset style="margin:0;"><legend>Filtres</legend> | |
|
59 | <table width="100%" cellpadding=0 cellspacing=0> | |||
|
60 | <tr> | |||
|
61 | <td> | |||
43 | <table> |
|
62 | <table> | |
44 | <% Query.available_filters.sort{|a,b| a[1][:order]<=>b[1][:order]}.each do |filter| %> |
|
63 | <% Query.available_filters.sort{|a,b| a[1][:order]<=>b[1][:order]}.each do |filter| %> | |
45 | <% field = filter[0] |
|
64 | <% field = filter[0] | |
46 | options = filter[1] %> |
|
65 | options = filter[1] %> | |
47 | <tr> |
|
66 | <tr <%= 'style="display:none;"' unless query.has_filter?(field) %> id="tr_<%= field %>"> | |
48 | <td valign="top" width="200"> |
|
67 | <td valign="top" width="200"> | |
49 | <%= check_box_tag 'fields[]', field, query.has_filter?(field), :onclick => "toggle_filter('#{field}');", :id => "cb_#{field}" %> |
|
68 | <%= check_box_tag 'fields[]', field, query.has_filter?(field), :onclick => "toggle_filter('#{field}');", :id => "cb_#{field}" %> | |
50 | <label for="cb_<%= field %>"><%= l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) %></label> |
|
69 | <label for="cb_<%= field %>"><%= l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) %></label> | |
@@ -59,7 +78,7 function toggle_multi_select(field) { | |||||
59 | <select <%= "multiple=true" if query.values_for(field) and query.values_for(field).length > 1 %>" name="values[<%= field %>][]" id="values[<%= field %>][]" class="select-small" style="vertical-align: top;"> |
|
78 | <select <%= "multiple=true" if query.values_for(field) and query.values_for(field).length > 1 %>" name="values[<%= field %>][]" id="values[<%= field %>][]" class="select-small" style="vertical-align: top;"> | |
60 | <%= options_for_select options[:values], query.values_for(field) %> |
|
79 | <%= options_for_select options[:values], query.values_for(field) %> | |
61 | </select> |
|
80 | </select> | |
62 |
<%= link_to_function |
|
81 | <%= link_to_function image_tag('expand'), "toggle_multi_select('#{field}');" %> | |
63 | <% when :date, :date_past %> |
|
82 | <% when :date, :date_past %> | |
64 | <%= text_field_tag "values[#{field}][]", query.values_for(field), :size => 3, :class => "select-small" %> jours |
|
83 | <%= text_field_tag "values[#{field}][]", query.values_for(field), :size => 3, :class => "select-small" %> jours | |
65 | <% end %> |
|
84 | <% end %> | |
@@ -69,4 +88,11 function toggle_multi_select(field) { | |||||
69 | <script>toggle_filter('<%= field %>');</script> |
|
88 | <script>toggle_filter('<%= field %>');</script> | |
70 | <% end %> |
|
89 | <% end %> | |
71 | </table> |
|
90 | </table> | |
|
91 | </td> | |||
|
92 | <td align="right" valign="top"> | |||
|
93 | Add filter: | |||
|
94 | <%= select_tag 'add_filter_select', options_for_select([["",""]] + Query.available_filters.sort{|a,b| a[1][:order]<=>b[1][:order]}.collect{|field| [l(("field_"+field[0].to_s.gsub(/\_id$/, "")).to_sym), field[0]] unless query.has_filter?(field[0])}.compact), :onchange => "add_filter();", :class => "select-small" %> | |||
|
95 | </td> | |||
|
96 | </tr> | |||
|
97 | </table> | |||
72 | </fieldset> No newline at end of file |
|
98 | </fieldset> |
General Comments 0
You need to be logged in to leave comments.
Login now