Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/work_items/parent_links/create_service.rb')
-rw-r--r--app/services/work_items/parent_links/create_service.rb60
1 files changed, 60 insertions, 0 deletions
diff --git a/app/services/work_items/parent_links/create_service.rb b/app/services/work_items/parent_links/create_service.rb
new file mode 100644
index 00000000000..9940776e367
--- /dev/null
+++ b/app/services/work_items/parent_links/create_service.rb
@@ -0,0 +1,60 @@
+# frozen_string_literal: true
+
+module WorkItems
+ module ParentLinks
+ class CreateService < IssuableLinks::CreateService
+ private
+
+ # rubocop: disable CodeReuse/ActiveRecord
+ def relate_issuables(work_item)
+ link = WorkItems::ParentLink.find_or_initialize_by(work_item: work_item)
+ link.work_item_parent = issuable
+
+ if link.changed? && link.save
+ create_notes(work_item)
+ end
+
+ link
+ end
+ # rubocop: enable CodeReuse/ActiveRecord
+
+ def linkable_issuables(work_items)
+ @linkable_issuables ||= begin
+ return [] unless can?(current_user, :admin_parent_link, issuable)
+
+ work_items.select do |work_item|
+ linkable?(work_item)
+ end
+ end
+ end
+
+ def linkable?(work_item)
+ can?(current_user, :admin_parent_link, work_item) &&
+ !previous_related_issuables.include?(work_item)
+ end
+
+ def previous_related_issuables
+ @related_issues ||= issuable.work_item_children.to_a
+ end
+
+ def extract_references
+ params[:issuable_references]
+ end
+
+ # TODO: Create system notes when work item's parent or children are updated
+ # See https://gitlab.com/gitlab-org/gitlab/-/issues/362213
+ def create_notes(work_item)
+ # no-op
+ end
+
+ def target_issuable_type
+ issuable.issue_type == 'issue' ? 'task' : issuable.issue_type
+ end
+
+ def issuables_not_found_message
+ _('No matching %{issuable} found. Make sure that you are adding a valid %{issuable} ID.' %
+ { issuable: target_issuable_type })
+ end
+ end
+ end
+end