From 284808d259b3ba8ba1e6c106d949fffeb110a5a7 Mon Sep 17 00:00:00 2001 From: Seb Bacon Date: Wed, 24 Aug 2011 11:50:10 +0100 Subject: First stab at filtering on the "View requests" page --- app/controllers/application_controller.rb | 55 +++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) (limited to 'app/controllers/application_controller.rb') diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 0df3e22da..e16f9f5bb 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -349,6 +349,61 @@ class ApplicationController < ActionController::Base session[:last_body_id] = public_body.id end + def alter_query_from_params(query) + # various forms are used to customise queries and hide + # xapian's complexity. This parses the form fields and turns + # them into a xapian query string + query = "" if query.nil? + sortby = "newest" + if params[:request_variety] && !(query =~ /variety:/) + sortby = "described" + varieties = [] + if params[:request_variety].include? "sent" + varieties << ['variety:sent', 'variety:followup_sent'] + end + if params[:request_variety].include? "response" + varieties << ['variety:response'] + end + if params[:request_variety].include? "comment" + varieties << ['variety:comment'] + end + query += " (#{varieties.join(' OR ')})" + end + case params[:request_status] + when "recent", "all" + if !(query =~ /variety:/) + query += " (variety:sent)" + end + when "successful" + query += ' (latest_status:successful OR latest_status:partially_successful)' + sortby = "described" + when "unsuccessful" + query += ' (latest_status:rejected OR latest_status:not_held)' + sortby = "described" + when "awaiting" + if query.empty? + query += 'variety:sent ' + end + query += ' NOT (latest_status:successful OR latest_status:partially_successful OR latest_status:rejected OR latest_status:not_held OR latest_status:gone_postal)' + sortby = "described" + when "internal_review" + query += ' (latest_status:internal_review)' + sortby = "described" + end + + if !params[:request_date_after].nil? && params[:request_date_before].nil? + params[:request_date_before] = Date.now.strftime("%d/%m/%Y") + query += " #{params[:request_date_after]}..#{params[:request_date_before]}" + elsif params[:request_date_after].nil? && !params[:request_date_before].nil? + params[:request_date_after] = "01/01/2008" + end + if params[:request_date_after] + query = "#{params[:request_date_after]}..#{params[:request_date_before]} " + query + end + return query, sortby + + end + # URL generating functions are needed by all controllers (for redirects), # views (for links) and mailers (for use in emails), so include them into # all of all. -- cgit v1.2.3 From 45fc8c3e18dc5e43e98fc1fae5b519f1440086ea Mon Sep 17 00:00:00 2001 From: Seb Bacon Date: Wed, 24 Aug 2011 16:48:55 +0100 Subject: more work in progress on search forms --- app/controllers/application_controller.rb | 72 +++++++++++++++++++++---------- 1 file changed, 49 insertions(+), 23 deletions(-) (limited to 'app/controllers/application_controller.rb') diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index e16f9f5bb..31a6ef3db 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -349,10 +349,18 @@ class ApplicationController < ActionController::Base session[:last_body_id] = public_body.id end - def alter_query_from_params(query) + def param_exists(item) + return params[item] && !params[item].empty? + end + + def alter_query_from_params # various forms are used to customise queries and hide # xapian's complexity. This parses the form fields and turns # them into a xapian query string + if params[:latest_status].nil? + params[:latest_status] = params[:view] || "all" + end + query = params[:query] query = "" if query.nil? sortby = "newest" if params[:request_variety] && !(query =~ /variety:/) @@ -369,35 +377,53 @@ class ApplicationController < ActionController::Base end query += " (#{varieties.join(' OR ')})" end - case params[:request_status] - when "recent", "all" - if !(query =~ /variety:/) - query += " (variety:sent)" + if params[:latest_status] && !(query =~ /latest_status:/) + statuses = [] + if params[:latest_status].class == String + params[:latest_status] = [params[:latest_status]] end - when "successful" - query += ' (latest_status:successful OR latest_status:partially_successful)' - sortby = "described" - when "unsuccessful" - query += ' (latest_status:rejected OR latest_status:not_held)' - sortby = "described" - when "awaiting" - if query.empty? - query += 'variety:sent ' + if params[:latest_status].include?("recent") || params[:latest_status].include?("all") + if !(query =~ /variety:/) + query += " (variety:sent)" + end end - query += ' NOT (latest_status:successful OR latest_status:partially_successful OR latest_status:rejected OR latest_status:not_held OR latest_status:gone_postal)' - sortby = "described" - when "internal_review" - query += ' (latest_status:internal_review)' - sortby = "described" - end + if params[:latest_status].include? "successful" + statuses << ['latest_status:successful', 'latest_status:partially_successful'] + sortby = "described" + end + if params[:latest_status].include? "unsuccessful" + statuses << ['latest_status:rejected', 'latest_status:not_held'] + sortby = "described" + end + if params[:latest_status].include? "awaiting" + statuses << ['latest_status:waiting_response', 'latest_status:waiting_clarification', 'waiting_classification:true'] + sortby = "described" + end + if params[:latest_status].include? "internal_review" + statuses << ['status:internal_review'] + sortby = "described" + end + if params[:latest_status].include? "other" + statuses << ['latest_status:gone_postal', 'latest_status:error_message', 'latest_status:requires_admin', 'latest_status:user_withdrawn'] + sortby = "described" + end + if params[:latest_status].include? "gone_postal" + statuses << ['latest_status:gone_postal'] + sortby = "described" + end + query += " (#{statuses.join(' OR ')})" - if !params[:request_date_after].nil? && params[:request_date_before].nil? + end + if query.empty? + query = "variety:sent" + end + if param_exists(:request_date_after) && !param_exists(:request_date_before) params[:request_date_before] = Date.now.strftime("%d/%m/%Y") query += " #{params[:request_date_after]}..#{params[:request_date_before]}" - elsif params[:request_date_after].nil? && !params[:request_date_before].nil? + elsif !param_exists(:request_date_after) && param_exists(:request_date_before) params[:request_date_after] = "01/01/2008" end - if params[:request_date_after] + if param_exists(:request_date_after) query = "#{params[:request_date_after]}..#{params[:request_date_before]} " + query end return query, sortby -- cgit v1.2.3 From 5f0c0d59ded4301efa085c4103b84a42a9fa61f6 Mon Sep 17 00:00:00 2001 From: Seb Bacon Date: Fri, 26 Aug 2011 09:48:01 +0100 Subject: Further work in progress on better search functionality --- app/controllers/application_controller.rb | 81 +++++++++++++++++++------------ 1 file changed, 49 insertions(+), 32 deletions(-) (limited to 'app/controllers/application_controller.rb') diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 31a6ef3db..caf613f8d 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -351,22 +351,15 @@ class ApplicationController < ActionController::Base def param_exists(item) return params[item] && !params[item].empty? - end - - def alter_query_from_params - # various forms are used to customise queries and hide - # xapian's complexity. This parses the form fields and turns - # them into a xapian query string - if params[:latest_status].nil? - params[:latest_status] = params[:view] || "all" - end - query = params[:query] - query = "" if query.nil? + end + + def get_request_variety_from_params + query = "" sortby = "newest" - if params[:request_variety] && !(query =~ /variety:/) - sortby = "described" - varieties = [] + varieties = [] + if params[:request_variety] && !(query =~ /variety:/) if params[:request_variety].include? "sent" + varieties -= ['variety:sent', 'variety:followup_sent', 'variety:response', 'variety:comment'] varieties << ['variety:sent', 'variety:followup_sent'] end if params[:request_variety].include? "response" @@ -375,48 +368,50 @@ class ApplicationController < ActionController::Base if params[:request_variety].include? "comment" varieties << ['variety:comment'] end - query += " (#{varieties.join(' OR ')})" end - if params[:latest_status] && !(query =~ /latest_status:/) + if !varieties.empty? + query = " (#{varieties.join(' OR ')})" + end + return query + end + + def get_status_from_params + query = "" + if params[:latest_status] statuses = [] if params[:latest_status].class == String params[:latest_status] = [params[:latest_status]] end if params[:latest_status].include?("recent") || params[:latest_status].include?("all") - if !(query =~ /variety:/) - query += " (variety:sent)" - end + query += " (variety:sent)" end if params[:latest_status].include? "successful" statuses << ['latest_status:successful', 'latest_status:partially_successful'] - sortby = "described" end if params[:latest_status].include? "unsuccessful" statuses << ['latest_status:rejected', 'latest_status:not_held'] - sortby = "described" end if params[:latest_status].include? "awaiting" statuses << ['latest_status:waiting_response', 'latest_status:waiting_clarification', 'waiting_classification:true'] - sortby = "described" end if params[:latest_status].include? "internal_review" statuses << ['status:internal_review'] - sortby = "described" end if params[:latest_status].include? "other" statuses << ['latest_status:gone_postal', 'latest_status:error_message', 'latest_status:requires_admin', 'latest_status:user_withdrawn'] - sortby = "described" end if params[:latest_status].include? "gone_postal" statuses << ['latest_status:gone_postal'] - sortby = "described" end - query += " (#{statuses.join(' OR ')})" - - end - if query.empty? - query = "variety:sent" + if !statuses.empty? + query = " (#{statuses.join(' OR ')})" + end end + return query + end + + def get_date_range_from_params + query = "" if param_exists(:request_date_after) && !param_exists(:request_date_before) params[:request_date_before] = Date.now.strftime("%d/%m/%Y") query += " #{params[:request_date_after]}..#{params[:request_date_before]}" @@ -424,10 +419,32 @@ class ApplicationController < ActionController::Base params[:request_date_after] = "01/01/2008" end if param_exists(:request_date_after) - query = "#{params[:request_date_after]}..#{params[:request_date_before]} " + query + query = " #{params[:request_date_after]}..#{params[:request_date_before]}" end - return query, sortby + return query + end + def get_tags_from_params + query = "" + tags = [] + if param_exists(:tags) + params[:tags].split().each do |tag| + tags << "tag:#{tag}" + end + end + if !tags.empty? + query = " (#{tags.join(' OR ')})" + end + return query + end + + def make_query_from_params + query = params[:query] || "" if query.nil? + query += get_date_range_from_params + query += get_request_variety_from_params + query += get_status_from_params + query += get_tags_from_params + return query end # URL generating functions are needed by all controllers (for redirects), -- cgit v1.2.3 From 33bd0e919528e1d7eda4be4200db91b042984c97 Mon Sep 17 00:00:00 2001 From: Seb Bacon Date: Fri, 26 Aug 2011 13:54:05 +0100 Subject: Fixes to get tests to pass following addition of new search / filter functionality --- app/controllers/application_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/controllers/application_controller.rb') diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index caf613f8d..cb7f3b23d 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -383,7 +383,7 @@ class ApplicationController < ActionController::Base params[:latest_status] = [params[:latest_status]] end if params[:latest_status].include?("recent") || params[:latest_status].include?("all") - query += " (variety:sent)" + query += " variety:sent" end if params[:latest_status].include? "successful" statuses << ['latest_status:successful', 'latest_status:partially_successful'] -- cgit v1.2.3 From b41edc7ae069e6071f7ff7223c1e60cca5e75e8c Mon Sep 17 00:00:00 2001 From: Seb Bacon Date: Mon, 29 Aug 2011 13:13:59 +0100 Subject: Add tests & fixes for new search/filtering functionality --- app/controllers/application_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app/controllers/application_controller.rb') diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index cb7f3b23d..cb64cb922 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -413,10 +413,10 @@ class ApplicationController < ActionController::Base def get_date_range_from_params query = "" if param_exists(:request_date_after) && !param_exists(:request_date_before) - params[:request_date_before] = Date.now.strftime("%d/%m/%Y") + params[:request_date_before] = Time.now.strftime("%d/%m/%Y") query += " #{params[:request_date_after]}..#{params[:request_date_before]}" elsif !param_exists(:request_date_after) && param_exists(:request_date_before) - params[:request_date_after] = "01/01/2008" + params[:request_date_after] = "01/01/2001" end if param_exists(:request_date_after) query = " #{params[:request_date_after]}..#{params[:request_date_before]}" -- cgit v1.2.3