diff options
author | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2016-07-28 02:20:23 -0300 |
---|---|---|
committer | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2016-08-17 12:58:57 -0300 |
commit | 26ac0846408b21bd541f3c31f082f00e9422d9f4 (patch) | |
tree | 453bd22cfc5d4ef9fd349228f1c110a9340c2c6a /app/services/boards | |
parent | 5ef567e33df9f4562f56fdbf60329c027dbfa913 (diff) | |
download | gitlab-ce-26ac0846408b21bd541f3c31f082f00e9422d9f4.tar.gz |
Does not allow Backlog/Done lists to be moved
Diffstat (limited to 'app/services/boards')
-rw-r--r-- | app/services/boards/lists/move_service.rb | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/app/services/boards/lists/move_service.rb b/app/services/boards/lists/move_service.rb index 4a3000d1648..9dbc0f224a5 100644 --- a/app/services/boards/lists/move_service.rb +++ b/app/services/boards/lists/move_service.rb @@ -7,8 +7,11 @@ module Boards end def execute + return false unless list.label? return false if new_position.blank? return false if new_position == old_position + return false if new_position == first_position + return false if new_position == last_position list.with_lock do reorder_intermediate_lists @@ -24,6 +27,14 @@ module Boards @list ||= board.lists.find(params[:list_id]) end + def first_position + board.lists.first.try(:position) + end + + def last_position + board.lists.last.try(:position) + end + def old_position @old_position ||= list.position end @@ -34,16 +45,24 @@ module Boards def reorder_intermediate_lists if old_position < new_position - board.lists.where('position > ?', old_position) - .where('position <= ?', new_position) - .update_all('position = position - 1') + decrement_intermediate_lists else - board.lists.where('position >= ?', new_position) - .where('position < ?', old_position) - .update_all('position = position + 1') + increment_intermediate_lists end end + def decrement_intermediate_lists + board.lists.where('position > ?', old_position) + .where('position <= ?', new_position) + .update_all('position = position - 1') + end + + def increment_intermediate_lists + board.lists.where('position >= ?', new_position) + .where('position < ?', old_position) + .update_all('position = position + 1') + end + def update_list_position list.update_attribute(:position, new_position) end |