From 63092ac070b6a6a18299ac963440bcaffaed1ad4 Mon Sep 17 00:00:00 2001 From: Jared Vititoe Date: Sat, 11 Apr 2026 13:02:49 -0400 Subject: [PATCH] Fix leading-zero ticket ID in clone_ticket.php - Preserve source ticket ID as string (ctype_digit validation) instead of int-casting with (int) - Use $sourceTicket['ticket_id'] (canonical DB form) when creating the relates_to dependency and audit log entry; avoids storing "123456" instead of "000123456" which breaks string-based depends_on_id lookups in DependencyModel Co-Authored-By: Claude Sonnet 4.6 --- api/clone_ticket.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/api/clone_ticket.php b/api/clone_ticket.php index ecb1969..4d900cd 100644 --- a/api/clone_ticket.php +++ b/api/clone_ticket.php @@ -54,12 +54,13 @@ try { exit; } - $sourceTicketId = (int)$data['ticket_id']; - if ($sourceTicketId <= 0) { + $sourceTicketIdRaw = trim((string)$data['ticket_id']); + if (!ctype_digit($sourceTicketIdRaw) || (int)$sourceTicketIdRaw <= 0) { http_response_code(400); echo json_encode(['success' => false, 'error' => 'Invalid ticket ID']); exit; } + $sourceTicketId = $sourceTicketIdRaw; $userId = $_SESSION['user']['user_id']; $isAdmin = $_SESSION['user']['is_admin'] ?? false; @@ -102,14 +103,14 @@ try { $auditLog = new AuditLogModel($conn); $auditLog->log($userId, 'create', 'ticket', $result['ticket_id'], [ 'action' => 'clone', - 'source_ticket_id' => $sourceTicketId, + 'source_ticket_id' => $sourceTicket['ticket_id'], 'title' => $clonedTicketData['title'] ]); // Optionally create a "relates_to" dependency require_once dirname(__DIR__) . '/models/DependencyModel.php'; $dependencyModel = new DependencyModel($conn); - $dependencyModel->addDependency($result['ticket_id'], $sourceTicketId, 'relates_to', $userId); + $dependencyModel->addDependency($result['ticket_id'], $sourceTicket['ticket_id'], 'relates_to', $userId); require_once dirname(__DIR__) . '/models/StatsModel.php'; (new StatsModel($conn))->invalidateCache();