changeset 780:31b3aa308568 cannam

Merge from branch "feature_14"
author Chris Cannam
date Fri, 18 Nov 2011 11:09:18 +0000
parents 7fd52a786954 (current diff) 06a9d1cf5e15 (diff)
children 4b46e861a43a
files
diffstat 13 files changed, 148 insertions(+), 39 deletions(-) [+]
line wrap: on
line diff
--- a/app/controllers/projects_controller.rb	Tue Nov 15 10:36:40 2011 +0000
+++ b/app/controllers/projects_controller.rb	Fri Nov 18 11:09:18 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)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/redmine_tags/app/views/auto_completes/_search_tag_list.html.erb	Fri Nov 18 11:09:18 2011 +0000
@@ -0,0 +1,5 @@
+<ul>
+	<% @tags.each do |tag| -%>
+  		<%= content_tag 'li', h('%s (%d)' % [tag.name, tag.count]), :name => tag.name %>
+	<% end -%>
+</ul>
--- a/vendor/plugins/redmine_tags/app/views/auto_completes/_tag_list.html.erb	Tue Nov 15 10:36:40 2011 +0000
+++ b/vendor/plugins/redmine_tags/app/views/auto_completes/_tag_list.html.erb	Fri Nov 18 11:09:18 2011 +0000
@@ -2,5 +2,5 @@
 <% @tags.each do |tag| -%>
   <%= content_tag 'li', h('%s (%d)' % [tag.name, tag.count]), :name => tag.name %>
 <% end -%>
-<%= content_tag 'li', l(:auto_complete_new_tag) % @name, :name => @name %>
+  <%= content_tag 'li', l(:auto_complete_new_tag) % @name, :name => @name %>
 </ul>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/redmine_tags/app/views/projects/_filter_search_tags.html.erb	Fri Nov 18 11:09:18 2011 +0000
@@ -0,0 +1,13 @@
+<p class='tag'>
+  <% fields_for @project, :builder => TabularFormBuilder do |f| -%>
+    <div>
+      <p id="project_tags">
+        <%= f.text_field :tag_list, :label => :tags, :size => 60, :class => 'hol' %>
+      </p>
+      <div id="project_tag_candidates" class="autocomplete"></div>
+      <%= javascript_include_tag 'tags_input', :plugin => 'redmine_tags' %>
+
+      <%= javascript_tag "observeProjectTagsField('#{url_for(:controller => 'auto_completes', :action => 'project_search_tags', :project_id => Project.first.id)}')" %>
+    </div>
+  <% end -%>
+</p>
--- a/vendor/plugins/redmine_tags/app/views/projects/_my_projects.rhtml	Tue Nov 15 10:36:40 2011 +0000
+++ b/vendor/plugins/redmine_tags/app/views/projects/_my_projects.rhtml	Fri Nov 18 11:09:18 2011 +0000
@@ -1,5 +1,11 @@
-<fieldset id="filters" class="collapsible">
-    <legend onclick="toggleFieldset(this);"><%= l(:label_my_projects) %></legend>
+<% if @myproj_status=="true" %>
+<fieldset id="my_projects_fieldset" class="collapsible">
+    <legend onclick="toggleFieldsetWithState(this);"><%= l(:label_my_projects) %></legend>
+<% else %>
+<fieldset id="my_projects_fieldset" class="collapsible collapsed">
+    <legend onclick="toggleFieldsetWithState(this);"><%= l(:label_my_projects) %></legend>
+    <div style="display: none;">    
+<%  end%>
     <% if @user_projects %>  
     <div>
       <%= render_my_project_hierarchy(@user_projects)%>
--- a/vendor/plugins/redmine_tags/app/views/projects/_tags_form.html.erb	Tue Nov 15 10:36:40 2011 +0000
+++ b/vendor/plugins/redmine_tags/app/views/projects/_tags_form.html.erb	Fri Nov 18 11:09:18 2011 +0000
@@ -3,6 +3,6 @@
   <p id="project_tags"><%= f.text_field :tag_list, :label => :tags, :size => 60, :class => 'hol' %></p>
   <div id="project_tag_candidates" class="autocomplete"></div>
   <%= javascript_include_tag 'tags_input', :plugin => 'redmine_tags' %>
-  <%= javascript_tag "observeProjectTagsField('#{url_for(:controller => 'auto_completes', :action => 'project_tags', :project_id => project)}')" %>
+  <%= javascript_tag "observeProjectTagsField('#{url_for(:controller => 'auto_completes', :action => 'project_tags', :project_id => project)}', false)" %>
 </div>
 <% end -%>
\ No newline at end of file
--- a/vendor/plugins/redmine_tags/app/views/projects/index.rhtml	Tue Nov 15 10:36:40 2011 +0000
+++ b/vendor/plugins/redmine_tags/app/views/projects/index.rhtml	Fri Nov 18 11:09:18 2011 +0000
@@ -1,6 +1,8 @@
 <% content_for :header_tags do %>
     <%= auto_discovery_link_tag(:atom, {:action => 'index', :format => 'atom', :key => User.current.rss_key}) %>
 <% end %>
+<%= javascript_include_tag 'projects_index', :plugin => 'redmine_tags' %>
+
 
 <div class="contextual">
     <%= link_to l(:label_overall_activity), { :controller => 'activities', :action => 'index' }%>
@@ -14,11 +16,17 @@
   <%= render :partial => 'my_projects' %>
 <% end %>
 
+<div style="clear:both;"></div>
+<% form_remote_tag(:controller => :projects, :action => :index, :method => :get, :id => :project_filtering) do %>
 
-<div style="clear:both;"></div>
-<% form_tag(:controller => :projects, :action => :index, :method => :get, :id => :project_filtering) do %>
-  <fieldset id="filters" class="collapsible">
-    <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
+<% if @filter_status=="true" %>
+<fieldset id="filters_fieldset" class="collapsible">
+  <legend onclick="toggleFieldsetWithState(this);"><%= l(:label_filter_plural) %></legend>
+<% else %>
+  <fieldset id="filters_fieldset" class="collapsible collapsed">
+    <legend onclick="toggleFieldsetWithState(this);"><%= l(:label_filter_plural) %></legend>
+      <div style="display: none;">
+<% end %>
     <div>
       <p class='q'>
         <%= label_tag 'q', l('project_filtering_q_label') %>
@@ -26,7 +34,7 @@
       </p>
 
       <div id='filter_tags'>
-        <%= render :partial => 'filter_tags' %>
+        <%= render :partial => 'filter_search_tags' %>
       </div>
 
       <p class='buttons'><%= submit_tag( l('button_filter'), :id => 'filter_button') -%></p>                  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/redmine_tags/assets/javascripts/projects_index.js	Fri Nov 18 11:09:18 2011 +0000
@@ -0,0 +1,22 @@
+Event.observe(window, 'load', function() {
+
+});
+
+
+function toggleFieldsetWithState(this_field){
+	id = Element.up(this_field, 'fieldset').id;	
+	// is the fieldset collapsed?
+	status = $(id).hasClassName("collapsed");
+	change_session(id, status);
+	
+	toggleFieldset(this_field);
+};
+
+function change_session(id, nstatus) {
+	var url = "projects/set_fieldset_status";
+ 	var request = new Ajax.Request(url, {
+		method: 'post',
+	 	parameters: {field_id: id, status: nstatus},
+    	asynchronous: true
+  	});
+}
\ No newline at end of file
--- a/vendor/plugins/redmine_tags/assets/javascripts/tags_input.js	Tue Nov 15 10:36:40 2011 +0000
+++ b/vendor/plugins/redmine_tags/assets/javascripts/tags_input.js	Fri Nov 18 11:09:18 2011 +0000
@@ -93,7 +93,6 @@
   new Redmine.TagsInput('issue_tag_list').autocomplete('issue_tag_candidates', url);
 }
 
-
 function observeProjectTagsField(url) {
-  new Redmine.TagsInput('project_tag_list').autocomplete('project_tag_candidates', url);
+	new Redmine.TagsInput('project_tag_list').autocomplete('project_tag_candidates', url);
 }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/redmine_tags/config/routes.rb	Fri Nov 18 11:09:18 2011 +0000
@@ -0,0 +1,3 @@
+ActionController::Routing::Routes.draw do |map|
+  map.connect 'projects/set_fieldset_status', :controller => 'projects', :action => 'set_fieldset_status', :conditions => {:method => :post}
+end
\ No newline at end of file
--- a/vendor/plugins/redmine_tags/lib/redmine_tags/patches/auto_completes_controller_patch.rb	Tue Nov 15 10:36:40 2011 +0000
+++ b/vendor/plugins/redmine_tags/lib/redmine_tags/patches/auto_completes_controller_patch.rb	Fri Nov 18 11:09:18 2011 +0000
@@ -38,6 +38,12 @@
           @tags = Project.available_tags :name_like => @name
           render :layout => false, :partial => 'tag_list'
         end
+        
+        def project_search_tags
+          @name = params[:q].to_s
+          @tags = Project.available_tags :name_like => @name
+          render :layout => false, :partial => 'search_tag_list'
+        end
       end
     end
   end
--- a/vendor/plugins/redmine_tags/lib/redmine_tags/patches/projects_controller_patch.rb	Tue Nov 15 10:36:40 2011 +0000
+++ b/vendor/plugins/redmine_tags/lib/redmine_tags/patches/projects_controller_patch.rb	Fri Nov 18 11:09:18 2011 +0000
@@ -2,17 +2,24 @@
 
 module RedmineTags
   module Patches
-    module ProjectsControllerPatch
+    module ProjectsControllerPatch      
       def self.included(base)
         base.send(:include, InstanceMethods)
         base.class_eval do          
           unloadable 
+          skip_before_filter :authorize, :only => [:set_fieldset_status]
+          skip_before_filter :find_project, :only => [:set_fieldset_status]
           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 +32,84 @@
           end
         end
 
-        # # luisf - TO BE REMOVED?
-        # def calculate_project_filtering_settings
-        #   @project_filtering_settings = Setting[:plugin_redmine_project_filtering]
-        # end
+        def paginate_projects
+          sort_init 'name'
+          sort_update %w(name lft created_on updated_on)
+          @limit = per_page_option
+          @project_count = Project.visible_roots.find(@projects).count
+          @project_pages = ActionController::Pagination::Paginator.new self, @project_count, @limit, params['page']
+          @offset ||= @project_pages.current.offset
+        end
 
-        def filter_projects
+        def set_fieldset_status
+
+          # luisf. test for missing parameters………
+          field = params[:field_id]
+          status = params[:status]
+
+          session[(field + "_status").to_sym] = status
+          logger.error { "SET - DEBUG-ME #{session.inspect}" }
+
+          render :nothing => true
+        end
+
+        # gets the status of the collabsible fieldsets
+        def get_fieldset_statuses
+          if session[:my_projects_fieldset_status].nil?
+            @myproj_status = true
+          else
+            @myproj_status = session[:my_projects_fieldset_status]
+          end
+                    
+          if session[:filters_fieldset_status].nil?
+            @filter_status = false
+          else
+            @filter_status = session[:filters_fieldset_status]
+          end                            
+        end
+
+        # Lists visible projects. Paginator is for top-level projects only
+        # (subprojects belong to them)
+        def filtered_index
           @project = Project.new
+          filter_projects
+          get_fieldset_statuses
 
           respond_to do |format|
-            format.any(:html, :xml) {
-              calculate_filtered_projects
+            format.html { 
+              paginate_projects
+              @projects = Project.visible_roots.find(@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(@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
+              paginate_projects
+              @projects = Project.visible_roots.find(@projects, :offset => @offset, :limit => @limit, :order => sort_clause)
               render :update do |page|
                 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)
@@ -64,19 +120,12 @@
 
           @projects = Project.visible
 
-          @featured_projects = @projects.featured if Project.respond_to? :featured
-
           # luisf 
           @projects = @projects.search_by_question(@question) unless @question == ""
           @tagged_projects_ids = Project.tagged_with(@tag_list).collect{ |project| Project.find(project.id) } unless @tag_list.empty?
 
-          debugger
-
           # intersection of both prject groups            
-          @projects = @projects && @tagged_projects_ids unless @tag_list.empty?
-          
-          debugger          
-          @filtered_projects = @projects
+          @projects = @projects & @tagged_projects_ids unless @tag_list.empty?
         end
       end
     end
--- a/vendor/plugins/redmine_tags/lib/redmine_tags/patches/projects_helper_patch.rb	Tue Nov 15 10:36:40 2011 +0000
+++ b/vendor/plugins/redmine_tags/lib/redmine_tags/patches/projects_helper_patch.rb	Fri Nov 18 11:09:18 2011 +0000
@@ -18,9 +18,7 @@
         # description, manager(s), creation date, last activity date,
         # general activity level, whether there is anything actually hosted
         # here for the project, etc.
-        def render_project_table_with_filtering(projects, question)
-          debugger
-          
+        def render_project_table_with_filtering(projects, question)          
           custom_fields = ""
           s = ""
           if projects.any?