]> source.dussan.org Git - redmine.git/commitdiff
Makes QueriesController able to handle other Query subclasses.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 11 Jul 2016 17:41:46 +0000 (17:41 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 11 Jul 2016 17:41:46 +0000 (17:41 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@15635 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/queries_controller.rb
app/models/query.rb

index 9b14d44eb5ea5462549f9890b4a08565944749bc..961b75dccae3bdc4d14d06293855b00f825e9b26 100644 (file)
@@ -31,9 +31,10 @@ class QueriesController < ApplicationController
     else
       @limit = per_page_option
     end
-    @query_count = IssueQuery.visible.count
+    scope = query_class.visible
+    @query_count = scope.count
     @query_pages = Paginator.new @query_count, @limit, params['page']
-    @queries = IssueQuery.visible.
+    @queries = scope.
                     order("#{Query.table_name}.name").
                     limit(@limit).
                     offset(@offset).
@@ -45,14 +46,14 @@ class QueriesController < ApplicationController
   end
 
   def new
-    @query = IssueQuery.new
+    @query = query_class.new
     @query.user = User.current
     @query.project = @project
     @query.build_from_params(params)
   end
 
   def create
-    @query = IssueQuery.new
+    @query = query_class.new
     @query.user = User.current
     @query.project = @project
     update_query_from_params
@@ -84,9 +85,10 @@ class QueriesController < ApplicationController
     redirect_to_issues(:set_filter => 1)
   end
 
-private
+  private
+
   def find_query
-    @query = IssueQuery.find(params[:id])
+    @query = Query.find(params[:id])
     @project = @query.project
     render_403 unless @query.editable_by?(User.current)
   rescue ActiveRecord::RecordNotFound
@@ -107,10 +109,10 @@ private
     @query.sort_criteria = params[:query] && params[:query][:sort_criteria]
     @query.name = params[:query] && params[:query][:name]
     if User.current.allowed_to?(:manage_public_queries, @query.project) || User.current.admin?
-      @query.visibility = (params[:query] && params[:query][:visibility]) || IssueQuery::VISIBILITY_PRIVATE
+      @query.visibility = (params[:query] && params[:query][:visibility]) || Query::VISIBILITY_PRIVATE
       @query.role_ids = params[:query] && params[:query][:role_ids]
     else
-      @query.visibility = IssueQuery::VISIBILITY_PRIVATE
+      @query.visibility = Query::VISIBILITY_PRIVATE
     end
     @query
   end
@@ -126,4 +128,10 @@ private
       redirect_to _project_issues_path(@project, options)
     end
   end
+
+  # Returns the Query subclass, IssueQuery by default
+  # for compatibility with previous behaviour
+  def query_class
+    Query.get_subclass(params[:type] || 'IssueQuery')
+  end
 end
index 8fab46669c2373b1c80989c17f486a1f8cb9e674..33962e31981a8deb69765a3f9ba4ec2ac74e17b8 100644 (file)
@@ -144,6 +144,8 @@ class Query < ActiveRecord::Base
   class StatementInvalid < ::ActiveRecord::StatementInvalid
   end
 
+  include Redmine::SubclassFactory
+
   VISIBILITY_PRIVATE = 0
   VISIBILITY_ROLES   = 1
   VISIBILITY_PUBLIC  = 2