From 9dc93a4519d9d5d7be48ff274127136236a3adb3 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Tue, 20 Apr 2021 23:50:22 +0000 Subject: Add latest changes from gitlab-org/gitlab@13-11-stable-ee --- app/services/boards/base_item_move_service.rb | 20 +++++++- app/services/boards/base_service.rb | 4 +- app/services/boards/destroy_service.rb | 8 +++- app/services/boards/issues/move_service.rb | 23 +--------- app/services/boards/lists/base_update_service.rb | 58 ++++++++++++++++++++++++ app/services/boards/lists/list_service.rb | 10 ++-- app/services/boards/lists/update_service.rb | 45 +----------------- 7 files changed, 94 insertions(+), 74 deletions(-) create mode 100644 app/services/boards/lists/base_update_service.rb (limited to 'app/services/boards') diff --git a/app/services/boards/base_item_move_service.rb b/app/services/boards/base_item_move_service.rb index bf3e29df54b..28fb1e43043 100644 --- a/app/services/boards/base_item_move_service.rb +++ b/app/services/boards/base_item_move_service.rb @@ -22,6 +22,12 @@ module Boards ) end + reposition_ids = move_between_ids(params) + if reposition_ids + attrs[:move_between_ids] = reposition_ids + attrs.merge!(reposition_parent) + end + attrs end @@ -63,10 +69,22 @@ module Boards if moving_to_list.movable? moving_from_list.label_id else - ::Label.ids_on_board(board.id) + board_label_ids end Array(label_ids).compact end + + def board_label_ids + ::Label.ids_on_board(board.id) + end + + def move_between_ids(move_params) + ids = [move_params[:move_after_id], move_params[:move_before_id]] + .map(&:to_i) + .map { |m| m > 0 ? m : nil } + + ids.any? ? ids : nil + end end end diff --git a/app/services/boards/base_service.rb b/app/services/boards/base_service.rb index 439a5c06223..83bb69b3822 100644 --- a/app/services/boards/base_service.rb +++ b/app/services/boards/base_service.rb @@ -6,7 +6,9 @@ module Boards attr_accessor :parent, :current_user, :params def initialize(parent, user, params = {}) - @parent, @current_user, @params = parent, user, params.dup + @parent = parent + @current_user = user + @params = params.dup end end end diff --git a/app/services/boards/destroy_service.rb b/app/services/boards/destroy_service.rb index 8f3d4b58b7b..0b1cd61b119 100644 --- a/app/services/boards/destroy_service.rb +++ b/app/services/boards/destroy_service.rb @@ -3,7 +3,7 @@ module Boards class DestroyService < Boards::BaseService def execute(board) - if parent.boards.size == 1 + if boards.size == 1 return ServiceResponse.error(message: "The board could not be deleted, because the parent doesn't have any other boards.") end @@ -11,5 +11,11 @@ module Boards ServiceResponse.success end + + private + + def boards + parent.boards + end end end diff --git a/app/services/boards/issues/move_service.rb b/app/services/boards/issues/move_service.rb index 99374fa01ae..76ea57968b2 100644 --- a/app/services/boards/issues/move_service.rb +++ b/app/services/boards/issues/move_service.rb @@ -3,8 +3,6 @@ module Boards module Issues class MoveService < Boards::BaseItemMoveService - extend ::Gitlab::Utils::Override - def execute_multiple(issues) return execute_multiple_empty_result if issues.empty? @@ -57,25 +55,8 @@ module Boards ::Issues::UpdateService.new(issue.project, current_user, issue_modification_params).execute(issue) end - override :issuable_params - def issuable_params(issuable) - attrs = super - - move_between_ids = move_between_ids(params) - if move_between_ids - attrs[:move_between_ids] = move_between_ids - attrs[:board_group_id] = board.group&.id - end - - attrs - end - - def move_between_ids(move_params) - ids = [move_params[:move_after_id], move_params[:move_before_id]] - .map(&:to_i) - .map { |m| m > 0 ? m : nil } - - ids.any? ? ids : nil + def reposition_parent + { board_group_id: board.group&.id } end end end diff --git a/app/services/boards/lists/base_update_service.rb b/app/services/boards/lists/base_update_service.rb new file mode 100644 index 00000000000..faf58e405fc --- /dev/null +++ b/app/services/boards/lists/base_update_service.rb @@ -0,0 +1,58 @@ +# frozen_string_literal: true + +module Boards + module Lists + class BaseUpdateService < Boards::BaseService + def execute(list) + if execute_by_params(list) + success(list: list) + else + error(list.errors.messages, 422) + end + end + + private + + def execute_by_params(list) + update_preferences_result = update_preferences(list) if can_read?(list) + update_position_result = update_position(list) if can_admin?(list) + + update_preferences_result || update_position_result + end + + def update_preferences(list) + return unless preferences? + + list.update_preferences_for(current_user, preferences) + end + + def update_position(list) + return unless position? + + move_service = Boards::Lists::MoveService.new(parent, current_user, params) + + move_service.execute(list) + end + + def preferences + { collapsed: Gitlab::Utils.to_boolean(params[:collapsed]) } + end + + def preferences? + params.has_key?(:collapsed) + end + + def position? + params.has_key?(:position) + end + + def can_read?(list) + raise NotImplementedError + end + + def can_admin?(list) + raise NotImplementedError + end + end + end +end diff --git a/app/services/boards/lists/list_service.rb b/app/services/boards/lists/list_service.rb index 3c296cde51e..03d54a8c74c 100644 --- a/app/services/boards/lists/list_service.rb +++ b/app/services/boards/lists/list_service.rb @@ -23,12 +23,10 @@ module Boards end def hidden_lists_for(board) - hidden = [] - - hidden << ::List.list_types[:backlog] if board.hide_backlog_list - hidden << ::List.list_types[:closed] if board.hide_closed_list - - hidden + [].tap do |hidden| + hidden << ::List.list_types[:backlog] if board.hide_backlog_list? + hidden << ::List.list_types[:closed] if board.hide_closed_list? + end end end end diff --git a/app/services/boards/lists/update_service.rb b/app/services/boards/lists/update_service.rb index e2d9c371ca2..2e1a6592cd9 100644 --- a/app/services/boards/lists/update_service.rb +++ b/app/services/boards/lists/update_service.rb @@ -2,50 +2,7 @@ module Boards module Lists - class UpdateService < Boards::BaseService - def execute(list) - if execute_by_params(list) - success(list: list) - else - error(list.errors.messages, 422) - end - end - - private - - def execute_by_params(list) - update_preferences_result = update_preferences(list) if can_read?(list) - update_position_result = update_position(list) if can_admin?(list) - - update_preferences_result || update_position_result - end - - def update_preferences(list) - return unless preferences? - - list.update_preferences_for(current_user, preferences) - end - - def update_position(list) - return unless position? - - move_service = Boards::Lists::MoveService.new(parent, current_user, params) - - move_service.execute(list) - end - - def preferences - { collapsed: Gitlab::Utils.to_boolean(params[:collapsed]) } - end - - def preferences? - params.has_key?(:collapsed) - end - - def position? - params.has_key?(:position) - end - + class UpdateService < Boards::Lists::BaseUpdateService def can_read?(list) Ability.allowed?(current_user, :read_issue_board_list, parent) end -- cgit v1.2.3