From 9d120c872c1b5849d987e3950f2cf914e1e34fe2 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sat, 19 Dec 2009 13:32:21 +0000 Subject: [PATCH] Fixes block reordering on my page (#2971). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3194 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/my_controller.rb | 33 +++++++++++++-------------- app/views/my/page_layout.rhtml | 3 +-- test/fixtures/user_preferences.yml | 19 ++++++++++----- test/functional/my_controller_test.rb | 26 ++++++++++++++++++++- 4 files changed, 55 insertions(+), 26 deletions(-) diff --git a/app/controllers/my_controller.rb b/app/controllers/my_controller.rb index 8d1405b87..da34418f8 100644 --- a/app/controllers/my_controller.rb +++ b/app/controllers/my_controller.rb @@ -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 diff --git a/app/views/my/page_layout.rhtml b/app/views/my/page_layout.rhtml index 1e348bf5b..b00734c8f 100644 --- a/app/views/my/page_layout.rhtml +++ b/app/views/my/page_layout.rhtml @@ -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' %>

<%=l(:label_my_page)%>

diff --git a/test/fixtures/user_preferences.yml b/test/fixtures/user_preferences.yml index b9ba37765..01e008dc7 100644 --- a/test/fixtures/user_preferences.yml +++ b/test/fixtures/user_preferences.yml @@ -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 diff --git a/test/functional/my_controller_test.rb b/test/functional/my_controller_test.rb index 8862466e7..ef12d7864 100644 --- a/test/functional/my_controller_test.rb +++ b/test/functional/my_controller_test.rb @@ -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 -- 2.39.5