summaryrefslogtreecommitdiff
path: root/app/services/boards
diff options
context:
space:
mode:
authorDouglas Barbosa Alexandre <dbalexandre@gmail.com>2016-07-28 02:20:23 -0300
committerDouglas Barbosa Alexandre <dbalexandre@gmail.com>2016-08-17 12:58:57 -0300
commit26ac0846408b21bd541f3c31f082f00e9422d9f4 (patch)
tree453bd22cfc5d4ef9fd349228f1c110a9340c2c6a /app/services/boards
parent5ef567e33df9f4562f56fdbf60329c027dbfa913 (diff)
downloadgitlab-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.rb31
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