From e0ee6a17fc87355d6d7b4b9771ca9687b519a979 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sat, 16 Dec 2006 12:31:19 +0000 Subject: [PATCH] * project filter added on query * query validity check on issues list export git-svn-id: http://redmine.rubyforge.org/svn/branches/work@94 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- .../app/controllers/projects_controller.rb | 56 +++++++++++-------- queries/trunk/app/models/query.rb | 1 + 2 files changed, 33 insertions(+), 24 deletions(-) diff --git a/queries/trunk/app/controllers/projects_controller.rb b/queries/trunk/app/controllers/projects_controller.rb index 07f04530d..570ecdb81 100644 --- a/queries/trunk/app/controllers/projects_controller.rb +++ b/queries/trunk/app/controllers/projects_controller.rb @@ -16,7 +16,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class ProjectsController < ApplicationController - layout 'base', :except => :export_issues_pdf + layout 'base' before_filter :find_project, :authorize, :except => [ :index, :list, :add ] before_filter :require_admin, :only => [ :add, :destroy ] @@ -208,27 +208,7 @@ class ProjectsController < ApplicationController sort_init 'issues.id', 'desc' sort_update - if params[:query_id] - @query = @project.queries.find(params[:query_id]) - else - if params[:set_filter] or !session[:query] or session[:query].project_id != @project.id - # Give it a name, required to be valid - @query = Query.new(:name => "_") - @query.project = @project - if params[:fields] and params[:fields].is_a? Array - params[:fields].each do |field| - @query.add_filter(field, params[:operators][field], params[:values][field]) - end - else - @query.available_filters.keys.each do |field| - @query.add_short_filter(field, params[field]) if params[field] - end - end - session[:query] = @query - else - @query = session[:query] - end - end + retrieve_query @results_per_page_options = [ 15, 25, 50, 100 ] if params[:per_page] and @results_per_page_options.include? params[:per_page].to_i @@ -255,7 +235,8 @@ class ProjectsController < ApplicationController sort_init 'issues.id', 'desc' sort_update - @query = session[:query] || Query.new + retrieve_query + render :action => 'list_issues' and return unless @query.valid? @issues = Issue.find :all, :order => sort_clause, :include => [ :author, :status, :tracker, :project, :custom_values ], @@ -288,7 +269,8 @@ class ProjectsController < ApplicationController sort_init 'issues.id', 'desc' sort_update - @query = session[:query] || Query.new + retrieve_query + render :action => 'list_issues' and return unless @query.valid? @issues = Issue.find :all, :order => sort_clause, :include => [ :author, :status, :tracker, :project, :custom_values ], @@ -296,6 +278,7 @@ class ProjectsController < ApplicationController @options_for_rfpdf ||= {} @options_for_rfpdf[:file_name] = "export.pdf" + render :layout => false end def move_issues @@ -503,4 +486,29 @@ private rescue redirect_to :action => 'list' end + + # Retrieve query from session or build a new query + def retrieve_query + if params[:query_id] + @query = @project.queries.find(params[:query_id]) + else + if params[:set_filter] or !session[:query] or session[:query].project_id != @project.id + # Give it a name, required to be valid + @query = Query.new(:name => "_") + @query.project = @project + if params[:fields] and params[:fields].is_a? Array + params[:fields].each do |field| + @query.add_filter(field, params[:operators][field], params[:values][field]) + end + else + @query.available_filters.keys.each do |field| + @query.add_short_filter(field, params[field]) if params[field] + end + end + session[:query] = @query + else + @query = session[:query] + end + end + end end diff --git a/queries/trunk/app/models/query.rb b/queries/trunk/app/models/query.rb index 9871c3005..4ac34bd6d 100644 --- a/queries/trunk/app/models/query.rb +++ b/queries/trunk/app/models/query.rb @@ -123,6 +123,7 @@ class Query < ActiveRecord::Base def statement sql = "1=1" + sql << " AND issues.project_id=%d" % project.id if project filters.each_key do |field| v = values_for field next unless v and !v.empty?