From 638ce18d4a0a1ad1190318432b73c0b30a3f6e8d Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 10 Dec 2006 16:14:02 +0000 Subject: [PATCH] filters replaced on issues list git-svn-id: http://redmine.rubyforge.org/svn/branches/work@80 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- .../app/controllers/projects_controller.rb | 21 +++++++----- queries/trunk/app/models/query.rb | 4 +-- .../app/views/projects/list_issues.rhtml | 12 +++++-- .../trunk/app/views/queries/_filters.rhtml | 32 ++++++++++++++++-- queries/trunk/public/images/expand.png | Bin 0 -> 266 bytes .../trunk/public/stylesheets/application.css | 2 +- 6 files changed, 55 insertions(+), 16 deletions(-) create mode 100644 queries/trunk/public/images/expand.png diff --git a/queries/trunk/app/controllers/projects_controller.rb b/queries/trunk/app/controllers/projects_controller.rb index d912f35aa..92025921d 100644 --- a/queries/trunk/app/controllers/projects_controller.rb +++ b/queries/trunk/app/controllers/projects_controller.rb @@ -208,10 +208,15 @@ class ProjectsController < ApplicationController sort_init 'issues.id', 'desc' sort_update - @query = Query.new - params[:fields].each do |field| - @query.add_filter(field, params[:operators][field], params[:values][field]) - end if params[:fields] + session[:query] = nil if params[:set_filter] + @query = session[:query] || Query.new + if params[:fields] and params[:fields].is_a? Array + @query.filters = {} + params[:fields].each do |field| + @query.add_filter(field, params[:operators][field], params[:values][field]) + end + end + session[:query] = @query @results_per_page_options = [ 15, 25, 50, 100 ] if params[:per_page] and @results_per_page_options.include? params[:per_page].to_i @@ -237,11 +242,11 @@ class ProjectsController < ApplicationController sort_init 'issues.id', 'desc' sort_update - search_filter_init_list_issues + @query = session[:query] || Query.new @issues = Issue.find :all, :order => sort_clause, :include => [ :author, :status, :tracker, :project, :custom_values ], - :conditions => search_filter_clause + :conditions => @query.statement ic = Iconv.new('ISO-8859-1', 'UTF-8') export = StringIO.new @@ -270,11 +275,11 @@ class ProjectsController < ApplicationController sort_init 'issues.id', 'desc' sort_update - search_filter_init_list_issues + @query = session[:query] || Query.new @issues = Issue.find :all, :order => sort_clause, :include => [ :author, :status, :tracker, :project, :custom_values ], - :conditions => search_filter_clause + :conditions => @query.statement @options_for_rfpdf ||= {} @options_for_rfpdf[:file_name] = "export.pdf" diff --git a/queries/trunk/app/models/query.rb b/queries/trunk/app/models/query.rb index 8201d08bd..8e826da53 100644 --- a/queries/trunk/app/models/query.rb +++ b/queries/trunk/app/models/query.rb @@ -1,7 +1,7 @@ class Query < ActiveRecord::Base serialize :filters - validates_presence_of :name + validates_presence_of :name, :on => :save @@operators = { "=" => "Egal", "!" => "Different", @@ -56,7 +56,7 @@ class Query < ActiveRecord::Base def add_filter(field, operator, values) # values must be an array - return unless values and values.is_a? Array + return unless values and values.is_a? Array # and !values.first.empty? # check if field is defined as an available filter if @@available_filters.has_key? field filter_options = @@available_filters[field] diff --git a/queries/trunk/app/views/projects/list_issues.rhtml b/queries/trunk/app/views/projects/list_issues.rhtml index 92f726532..b4dff2c9c 100644 --- a/queries/trunk/app/views/projects/list_issues.rhtml +++ b/queries/trunk/app/views/projects/list_issues.rhtml @@ -7,12 +7,20 @@ -
<%= start_form_tag :action => 'list_issues' %> <%= render :partial => 'queries/filters', :locals => {:query => @query} %> + + + + +
<%= submit_tag l(:button_apply), :class => "button-small" %> <%= end_form_tag %> - +<%= start_form_tag :action => 'list_issues', :set_filter => 1 %> +<%= submit_tag l(:button_clear), :class => "button-small" %> +<%= end_form_tag %> +
+   diff --git a/queries/trunk/app/views/queries/_filters.rhtml b/queries/trunk/app/views/queries/_filters.rhtml index 8d84b5617..f98f53de1 100644 --- a/queries/trunk/app/views/queries/_filters.rhtml +++ b/queries/trunk/app/views/queries/_filters.rhtml @@ -1,5 +1,21 @@ -
Filtres +
Filtres +
+ + + + +
<% Query.available_filters.sort{|a,b| a[1][:order]<=>b[1][:order]}.each do |filter| %> <% field = filter[0] options = filter[1] %> - + id="tr_<%= field %>">
<%= check_box_tag 'fields[]', field, query.has_filter?(field), :onclick => "toggle_filter('#{field}');", :id => "cb_#{field}" %> @@ -59,7 +78,7 @@ function toggle_multi_select(field) { - <%= link_to_function '+', "toggle_multi_select('#{field}');" %> + <%= link_to_function image_tag('expand'), "toggle_multi_select('#{field}');" %> <% when :date, :date_past %> <%= text_field_tag "values[#{field}][]", query.values_for(field), :size => 3, :class => "select-small" %> jours <% end %> @@ -69,4 +88,11 @@ function toggle_multi_select(field) { <% end %>
+
+Add filter: +<%= 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" %> +
\ No newline at end of file diff --git a/queries/trunk/public/images/expand.png b/queries/trunk/public/images/expand.png new file mode 100644 index 0000000000000000000000000000000000000000..3e3aaa441ffe1779acb1434f30f6d3560bd485d4 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1SIo6Pjm-T>?NMQuI$%%ICU%k`|lb-N-@9}(-9=Yl1*8@9T&e%k(&3<@N>4d`(m4dx@7xJ@T5H#NO zXRnQ>E7R0%mG5LP@D(}D^=e(%EA`^ah6Bf^#mHG5EfSc~?-rF<_+Mr6PMfGwO_pOF z4}aVZ)v`UhLEn$5_2t~$W3A1TzpveDD#~>2n~h*scl}q^d#8N9$UEmZ0UgQU>FVdQ I&MBb@0GV%N-v9sr literal 0 HcmV?d00001 diff --git a/queries/trunk/public/stylesheets/application.css b/queries/trunk/public/stylesheets/application.css index 9c05dfe4b..cac98919c 100644 --- a/queries/trunk/public/stylesheets/application.css +++ b/queries/trunk/public/stylesheets/application.css @@ -247,7 +247,7 @@ legend { table.listTableContent { border:1px solid #578bb8; - width:99%; + width:100%; border-collapse: collapse; }