]> source.dussan.org Git - redmine.git/commitdiff
Adds #add_block and #remove_block methods.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 29 Oct 2016 10:25:55 +0000 (10:25 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 29 Oct 2016 10:25:55 +0000 (10:25 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@15932 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/my_controller.rb
app/models/user_preference.rb

index 6e328c270292ff49b0c3755b186b0537a1966de3..a01d4e0ea855924106b00d3ffaf090ee3df266ec 100644 (file)
@@ -140,52 +140,34 @@ class MyController < ApplicationController
   # The block is added on top of the page
   # params[:block] : id of the block to add
   def add_block
-    block = params[:block].to_s.underscore
-    if block.present? && Redmine::MyPage.blocks.key?(block)
-      @user = User.current
-      layout = @user.pref.my_page_layout
-      # remove if already present in a group
-      %w(top left right).each {|f| (layout[f] ||= []).delete block }
-      # add it on top
-      layout['top'].unshift block
-      @user.pref.my_page_layout = layout
-      @user.pref.save
-    end
+    @user = User.current
+    @user.pref.add_block params[:block]
+    @user.pref.save
     redirect_to my_page_layout_path
   end
 
   # Remove a block to user's page
   # 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
-    layout = @user.pref.my_page_layout
-    %w(top left right).each {|f| (layout[f] ||= []).delete block }
-    @user.pref.my_page_layout = layout
+    @user.pref.remove_block params[:block]
     @user.pref.save
     redirect_to my_page_layout_path
   end
 
   # Change blocks order on user's page
   # params[:group] : group to order (top, left or right)
-  # params[:list-(top|left|right)] : array of block ids of the group
+  # params[:blocks] : array of block ids of the group
   def order_blocks
     group = params[:group]
     @user = User.current
     if group.is_a?(String)
       group_items = (params["blocks"] || []).collect(&:underscore)
       group_items.each {|s| s.sub!(/^block_/, '')}
-      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|
-          layout[f] = (layout[f] || []) - group_items
-        }
-        layout[group] = group_items
-        @user.pref.my_page_layout = layout
-        @user.pref.save
-      end
+      # remove group blocks if they are presents in other groups
+      group_items.each {|s| @user.pref.remove_block(s)}
+      @user.pref.my_page_layout[group] = group_items
+      @user.pref.save
     end
     head 200
   end
index bf54e5a5b055b80d5e0e4fc69b8f3b35edfa02fd..f492ac139f0289b71670897a032c3838dcd3c5ff 100644 (file)
@@ -90,4 +90,22 @@ class UserPreference < ActiveRecord::Base
   def my_page_layout=(arg)
     self[:my_page_layout] = arg
   end
+
+  def remove_block(block)
+    block = block.to_s.underscore
+    %w(top left right).each do |f|
+      (my_page_layout[f] ||= []).delete(block)
+    end
+    my_page_layout
+  end
+
+  def add_block(block)
+    block = block.to_s.underscore
+    return unless Redmine::MyPage.blocks.key?(block)
+
+    remove_block(block)
+    # add it on top
+    my_page_layout['top'] ||= []
+    my_page_layout['top'].unshift(block)
+  end
 end