]> source.dussan.org Git - redmine.git/commitdiff
Fixes block reordering on my page (#2971).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 19 Dec 2009 13:32:21 +0000 (13:32 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 19 Dec 2009 13:32:21 +0000 (13:32 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3194 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/my_controller.rb
app/views/my/page_layout.rhtml
test/fixtures/user_preferences.yml
test/functional/my_controller_test.rb

index 8d1405b87da2fc15fb24e522b738b71e4dc26de3..da34418f8b0acc1b9dc9cfa3c6904d8fd5bd1bc7 100644 (file)
@@ -35,7 +35,6 @@ class MyController < ApplicationController
                    }.freeze
 
   verify :xhr => true,
-         :session => :page_layout,
          :only => [:add_block, :remove_block, :order_blocks]
 
   def index
@@ -109,8 +108,6 @@ class MyController < ApplicationController
   def page_layout
     @user = User.current
     @blocks = @user.pref[:my_page_layout] || DEFAULT_LAYOUT.dup
-    session[:page_layout] = @blocks
-    %w(top left right).each {|f| session[:page_layout][f] ||= [] }
     @block_options = []
     BLOCKS.each {|k, v| @block_options << [l("my.blocks.#{v}", :default => [v, v.to_s.humanize]), k.dasherize]}
   end
@@ -122,10 +119,13 @@ class MyController < ApplicationController
     block = params[:block].to_s.underscore
     (render :nothing => true; return) unless block && (BLOCKS.keys.include? block)
     @user = User.current
+    layout = @user.pref[:my_page_layout] || {}
     # remove if already present in a group
-    %w(top left right).each {|f| (session[:page_layout][f] ||= []).delete block }
+    %w(top left right).each {|f| (layout[f] ||= []).delete block }
     # add it on top
-    session[:page_layout]['top'].unshift block
+    layout['top'].unshift block
+    @user.pref[:my_page_layout] = layout
+    @user.pref.save 
     render :partial => "block", :locals => {:user => @user, :block_name => block}
   end
   
@@ -133,8 +133,12 @@ class MyController < ApplicationController
   # params[:block] : id of the block to remove
   def remove_block
     block = params[:block].to_s.underscore
+    @user = User.current
     # remove block in all groups
-    %w(top left right).each {|f| (session[:page_layout][f] ||= []).delete block }
+    layout = @user.pref[:my_page_layout] || {}
+    %w(top left right).each {|f| (layout[f] ||= []).delete block }
+    @user.pref[:my_page_layout] = layout
+    @user.pref.save 
     render :nothing => true
   end
 
@@ -143,25 +147,20 @@ class MyController < ApplicationController
   # params[:list-(top|left|right)] : array of block ids of the group
   def order_blocks
     group = params[:group]
+    @user = User.current
     if group.is_a?(String)
       group_items = (params["list-#{group}"] || []).collect(&:underscore)
       if group_items and group_items.is_a? Array
+        layout = @user.pref[:my_page_layout] || {}
         # remove group blocks if they are presents in other groups
         %w(top left right).each {|f|
-          session[:page_layout][f] = (session[:page_layout][f] || []) - group_items
+          layout[f] = (layout[f] || []) - group_items
         }
-        session[:page_layout][group] = group_items    
+        layout[group] = group_items
+        @user.pref[:my_page_layout] = layout
+        @user.pref.save 
       end
     end
     render :nothing => true
   end
-  
-  # Save user's page layout  
-  def page_layout_save
-    @user = User.current
-    @user.pref[:my_page_layout] = session[:page_layout] if session[:page_layout]
-    @user.pref.save
-    session[:page_layout] = nil
-    redirect_to :action => 'page'
-  end
 end
index 1e348bf5b7de8dce3cd532d72faacc1bcee5ddd2..b00734c8fc53cee0476d2090ce92aef816bb8638 100644 (file)
@@ -46,8 +46,7 @@ function removeBlock(block) {
            }, :class => 'icon icon-add'
              %>
 <% end %>
-<%= link_to l(:button_save), {:action => 'page_layout_save'}, :class => 'icon icon-save' %>
-<%= link_to l(:button_cancel), {:action => 'page'}, :class => 'icon icon-cancel' %>
+<%= link_to l(:button_back), {:action => 'page'}, :class => 'icon icon-cancel' %>
 </div>
 
 <h2><%=l(:label_my_page)%></h2>
index b9ba377654c7769c302a31dd818ee1e32fde54d6..01e008dc7b6cc033ded217469052c4c44c676e6f 100644 (file)
@@ -4,11 +4,10 @@ user_preferences_001:
     --- 
     :my_page_layout: 
       left: 
-      - latest_news
+      - latestnews
       - documents
       right: 
-      - issues_assigned_to_me
-      - issues_reported_by_me
+      - issuesassignedtome
       top: 
       - calendar
 
@@ -16,9 +15,17 @@ user_preferences_001:
   user_id: 1
   hide_mail: true
 user_preferences_002: 
-  others: |+
-    --- {}
-    
+  others: |
+    --- 
+    :my_page_layout: 
+      left: 
+      - latestnews
+      - documents
+      right: 
+      - issuesassignedtome
+      top: 
+      - calendar
+  
   id: 2
   user_id: 3
   hide_mail: false
\ No newline at end of file
index 8862466e7952a9b4e393e6387b3593bddfed5df0..ef12d78646cbd00b3398a9aa82e26cfa0ecfa880 100644 (file)
@@ -22,7 +22,7 @@ require 'my_controller'
 class MyController; def rescue_action(e) raise e end; end
 
 class MyControllerTest < ActionController::TestCase
-  fixtures :users, :issues, :issue_statuses, :trackers, :enumerations, :custom_fields
+  fixtures :users, :user_preferences, :roles, :projects, :issues, :issue_statuses, :trackers, :enumerations, :custom_fields
   
   def setup
     @controller = MyController.new
@@ -105,4 +105,28 @@ class MyControllerTest < ActionController::TestCase
     assert_redirected_to 'my/account'
     assert User.try_to_login('jsmith', 'hello')
   end
+  
+  def test_page_layout
+    get :page_layout
+    assert_response :success
+    assert_template 'page_layout'
+  end
+  
+  def test_add_block
+    xhr :post, :add_block, :block => 'issuesreportedbyme'
+    assert_response :success
+    assert User.find(2).pref[:my_page_layout]['top'].include?('issuesreportedbyme')
+  end
+
+  def test_remove_block
+    xhr :post, :remove_block, :block => 'issuesassignedtome'
+    assert_response :success
+    assert !User.find(2).pref[:my_page_layout].values.flatten.include?('issuesassignedtome')
+  end
+
+  def test_order_blocks
+    xhr :post, :order_blocks, :group => 'left', 'list-left' => ['documents', 'calendar', 'latestnews']
+    assert_response :success
+    assert_equal ['documents', 'calendar', 'latestnews'], User.find(2).pref[:my_page_layout]['left']
+  end
 end