load(['sourceTicket', 'targetTicket', 'ticketLinkType']); abort_unless( $ticketLink->source_ticket_id === $ticket->id || $ticketLink->target_ticket_id === $ticket->id, 404, ); $linkedTicket = $ticketLink->source_ticket_id === $ticket->id ? $ticketLink->targetTicket : $ticketLink->sourceTicket; $label = $ticketLink->ticketLinkType->label; DB::transaction(function () use ($label, $linkedTicket, $user, $ticket, $ticketLink): void { $ticketLink->delete(); $this->createTicketWorklogEntry->handle( $ticket, $user, TicketWorklogEntryType::LinkRemoved, "Removed {$label} link to {$linkedTicket->ticket_key}.", [ 'linked_ticket_key' => $linkedTicket->ticket_key, 'ticket_link_type' => $label, ], ); $this->createTicketWorklogEntry->handle( $linkedTicket, $user, TicketWorklogEntryType::LinkRemoved, "Removed {$label} link to {$ticket->ticket_key}.", [ 'linked_ticket_key' => $ticket->ticket_key, 'ticket_link_type' => $label, ], ); }); return $label; } }