47 lines
1.2 KiB
Ruby
47 lines
1.2 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module IssueLinks
|
||
|
class CreateService < IssuableLinks::CreateService
|
||
|
# rubocop: disable CodeReuse/ActiveRecord
|
||
|
def relate_issuables(referenced_issue)
|
||
|
link = IssueLink.find_or_initialize_by(source: issuable, target: referenced_issue)
|
||
|
|
||
|
set_link_type(link)
|
||
|
|
||
|
if link.changed? && link.save
|
||
|
create_notes(referenced_issue)
|
||
|
end
|
||
|
|
||
|
link
|
||
|
end
|
||
|
# rubocop: enable CodeReuse/ActiveRecord
|
||
|
|
||
|
def linkable_issuables(issues)
|
||
|
@linkable_issuables ||= begin
|
||
|
issues.select { |issue| can?(current_user, :admin_issue_link, issue) }
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def create_notes(referenced_issue)
|
||
|
SystemNoteService.relate_issue(issuable, referenced_issue, current_user)
|
||
|
SystemNoteService.relate_issue(referenced_issue, issuable, current_user)
|
||
|
end
|
||
|
|
||
|
def previous_related_issuables
|
||
|
@related_issues ||= issuable.related_issues(current_user).to_a
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def set_link_type(_link)
|
||
|
# EE only
|
||
|
end
|
||
|
|
||
|
def track_event
|
||
|
track_incident_action(current_user, issuable, :incident_relate)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
IssueLinks::CreateService.prepend_if_ee('EE::IssueLinks::CreateService')
|