1# frozen_string_literal: true 2 3module IssueLinks 4 class CreateService < IssuableLinks::CreateService 5 # rubocop: disable CodeReuse/ActiveRecord 6 def relate_issuables(referenced_issue) 7 link = IssueLink.find_or_initialize_by(source: issuable, target: referenced_issue) 8 9 set_link_type(link) 10 11 if link.changed? && link.save 12 create_notes(referenced_issue) 13 end 14 15 link 16 end 17 # rubocop: enable CodeReuse/ActiveRecord 18 19 def linkable_issuables(issues) 20 @linkable_issuables ||= begin 21 issues.select { |issue| can?(current_user, :admin_issue_link, issue) } 22 end 23 end 24 25 def create_notes(referenced_issue) 26 SystemNoteService.relate_issue(issuable, referenced_issue, current_user) 27 SystemNoteService.relate_issue(referenced_issue, issuable, current_user) 28 end 29 30 def previous_related_issuables 31 @related_issues ||= issuable.related_issues(current_user).to_a 32 end 33 34 private 35 36 def set_link_type(_link) 37 # EE only 38 end 39 40 def track_event 41 track_incident_action(current_user, issuable, :incident_relate) 42 end 43 end 44end 45 46IssueLinks::CreateService.prepend_mod_with('IssueLinks::CreateService') 47