diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-11-17 14:33:21 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-11-17 14:33:21 +0300 |
commit | 7021455bd1ed7b125c55eb1b33c5a01f2bc55ee0 (patch) | |
tree | 5bdc2229f5198d516781f8d24eace62fc7e589e9 /app/services/work_items | |
parent | 185b095e93520f96e9cfc31d9c3e69b498cdab7c (diff) |
Add latest changes from gitlab-org/gitlab@15-6-stable-eev15.6.0-rc42
Diffstat (limited to 'app/services/work_items')
5 files changed, 73 insertions, 10 deletions
diff --git a/app/services/work_items/create_service.rb b/app/services/work_items/create_service.rb index ebda043e873..87cc690d666 100644 --- a/app/services/work_items/create_service.rb +++ b/app/services/work_items/create_service.rb @@ -30,6 +30,13 @@ module WorkItems error(e.message, :unprocessable_entity) end + def before_create(work_item) + execute_widgets(work_item: work_item, callback: :before_create_callback, + widget_params: @widget_params) + + super + end + def transaction_create(work_item) super.tap do |save_result| if save_result diff --git a/app/services/work_items/widgets/hierarchy_service/base_service.rb b/app/services/work_items/widgets/hierarchy_service/base_service.rb index bb681ef0083..236762d6937 100644 --- a/app/services/work_items/widgets/hierarchy_service/base_service.rb +++ b/app/services/work_items/widgets/hierarchy_service/base_service.rb @@ -7,7 +7,6 @@ module WorkItems private def handle_hierarchy_changes(params) - return feature_flag_error unless feature_flag_enabled? return incompatible_args_error if incompatible_args?(params) if params.key?(:parent) @@ -48,24 +47,16 @@ module WorkItems .execute end - def feature_flag_enabled? - Feature.enabled?(:work_items_hierarchy, work_item&.project) - end - def incompatible_args?(params) params[:children] && params[:parent] end - def feature_flag_error - error(_('`work_items_hierarchy` feature flag disabled for this project')) - end - def incompatible_args_error error(_('A Work Item can be a parent or a child, but not both.')) end def invalid_args_error(params) - error(_("One or more arguments are invalid: %{args}." % { args: params.keys.to_sentence } )) + error(_("One or more arguments are invalid: %{args}." % { args: params.keys.to_sentence })) end def service_response!(result) diff --git a/app/services/work_items/widgets/milestone_service/base_service.rb b/app/services/work_items/widgets/milestone_service/base_service.rb new file mode 100644 index 00000000000..f373e6daea3 --- /dev/null +++ b/app/services/work_items/widgets/milestone_service/base_service.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +module WorkItems + module Widgets + module MilestoneService + class BaseService < WorkItems::Widgets::BaseService + private + + def handle_milestone_change(params:) + return unless params.present? && params.key?(:milestone_id) + + unless has_permission?(:set_work_item_metadata) + params.delete(:milestone_id) + return + end + + if params[:milestone_id].nil? + work_item.milestone = nil + + return + end + + project = work_item.project + milestone = MilestonesFinder.new({ + project_ids: [project.id], + group_ids: project.group&.self_and_ancestors&.select(:id), + ids: [params[:milestone_id]] + }).execute.first + + if milestone + work_item.milestone = milestone + else + params.delete(:milestone_id) + end + end + end + end + end +end diff --git a/app/services/work_items/widgets/milestone_service/create_service.rb b/app/services/work_items/widgets/milestone_service/create_service.rb new file mode 100644 index 00000000000..e8d6bfe503c --- /dev/null +++ b/app/services/work_items/widgets/milestone_service/create_service.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module WorkItems + module Widgets + module MilestoneService + class CreateService < WorkItems::Widgets::MilestoneService::BaseService + def before_create_callback(params:) + handle_milestone_change(params: params) + end + end + end + end +end diff --git a/app/services/work_items/widgets/milestone_service/update_service.rb b/app/services/work_items/widgets/milestone_service/update_service.rb new file mode 100644 index 00000000000..7ff0c2a5367 --- /dev/null +++ b/app/services/work_items/widgets/milestone_service/update_service.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module WorkItems + module Widgets + module MilestoneService + class UpdateService < WorkItems::Widgets::MilestoneService::BaseService + def before_update_callback(params:) + handle_milestone_change(params: params) + end + end + end + end +end |