changeset 767:dd33798e514d feature_14

Reverts changes made to Redmine Core's Projects Controller in commit:b2a9e64b8283. Pagination now being done for both normal and filtered projects index.
author luisf <luis.figueira@eecs.qmul.ac.uk>
date Tue, 15 Nov 2011 15:03:17 +0000
parents 332e4287f4d3
children 0829e808ec49
files app/controllers/projects_controller.rb vendor/plugins/redmine_tags/lib/redmine_tags/patches/projects_controller_patch.rb
diffstat 2 files changed, 45 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/app/controllers/projects_controller.rb	Mon Nov 14 12:36:55 2011 +0000
+++ b/app/controllers/projects_controller.rb	Tue Nov 15 15:03:17 2011 +0000
@@ -55,7 +55,7 @@
         @project_count = Project.visible_roots.count
         @project_pages = Paginator.new self, @project_count, @limit, params['page']
         @offset ||= @project_pages.current.offset
-        @projects = Project.visible_roots.find(@filtered_projects, :offset => @offset, :limit => @limit, :order => sort_clause) 
+        @projects = Project.visible_roots.all(:offset => @offset, :limit => @limit, :order => sort_clause) 
         if User.current.logged?
           # seems sort_by gives us case-sensitive ordering, which we don't want
 #          @user_projects = User.current.projects.sort_by(&:name)
--- a/vendor/plugins/redmine_tags/lib/redmine_tags/patches/projects_controller_patch.rb	Mon Nov 14 12:36:55 2011 +0000
+++ b/vendor/plugins/redmine_tags/lib/redmine_tags/patches/projects_controller_patch.rb	Tue Nov 15 15:03:17 2011 +0000
@@ -2,17 +2,22 @@
 
 module RedmineTags
   module Patches
-    module ProjectsControllerPatch
+    module ProjectsControllerPatch      
       def self.included(base)
         base.send(:include, InstanceMethods)
         base.class_eval do          
           unloadable 
           before_filter :add_tags_to_project, :only => [:save, :update]
-          before_filter :filter_projects, :only => :index                
+#          before_filter :filter_projects, :only => :index
+
+          alias :index filtered_index
         end
       end
 
       module InstanceMethods
+        
+        
+        
         def add_tags_to_project
 
           if params && params[:project] && !params[:project][:tag_list].nil?
@@ -25,35 +30,58 @@
           end
         end
 
-        # # luisf - TO BE REMOVED?
-        # def calculate_project_filtering_settings
-        #   @project_filtering_settings = Setting[:plugin_redmine_project_filtering]
-        # end
 
-        def filter_projects
+        def paginate_projects
+          sort_init 'name'
+          sort_update %w(name lft created_on updated_on)
+          @limit = per_page_option
+          @project_count = Project.visible_roots.count
+          @project_pages = ActionController::Pagination::Paginator.new self, @project_count, @limit, params['page']
+          @offset ||= @project_pages.current.offset          
+        end
+
+
+        # Lists visible projects. Paginator is for top-level projects only
+        # (subprojects belong to them)
+        def filtered_index
           @project = Project.new
+          filter_projects
 
           respond_to do |format|
-            format.any(:html, :xml) {
-              calculate_filtered_projects
+            format.html { 
+              paginate_projects
+              @projects = Project.visible_roots.find(@filtered_projects, :offset => @offset, :limit => @limit, :order => sort_clause) 
+
+              if User.current.logged?
+                # seems sort_by gives us case-sensitive ordering, which we don't want
+                #          @user_projects = User.current.projects.sort_by(&:name)
+                @user_projects = User.current.projects.all(:order => :name)
+              end
+              
+              render :template => 'projects/index.rhtml', :layout => !request.xhr?
+            }
+            format.api  {
+              @offset, @limit = api_offset_and_limit
+              @project_count = Project.visible.count
+              @projects = Project.visible.find(@filtered_projects, :offset => @offset, :limit => @limit, :order => 'lft')
+            }
+            format.atom {
+              projects = Project.visible.find(:all, :order => 'created_on DESC', :limit => Setting.feeds_limit.to_i)
+              render_feed(projects, :title => "#{Setting.app_title}: #{l(:label_project_latest)}")
             }
             format.js {
-              calculate_filtered_projects
               render :update do |page|
+                paginate_projects
+                @projects = Project.visible_roots.find(@filtered_projects, :offset => @offset, :limit => @limit, :order => sort_clause)
                 page.replace_html 'projects', :partial => 'filtered_projects'
               end
             }
-            format.atom {
-              projects = Project.visible.find(:all, :order => 'created_on DESC',
-              :limit => Setting.feeds_limit.to_i)
-              render_feed(projects, :title => "#{Setting.app_title}: #{l(:label_project_latest)}")
-            }
           end
         end
 
         private
 
-        def calculate_filtered_projects                  
+        def filter_projects                  
           @question = (params[:q] || "").strip     
 
           if params.has_key?(:project)