$e->getMessage(), 'trace'=>$e->getTraceAsString()]); if (php_sapi_name() !== 'cli') http_response_code(500); echo json_encode(['success'=>false,'error'=>$e->getMessage()]); exit; }); register_shutdown_function(function(){ $err = error_get_last(); if ($err) { if (function_exists('writeLog')) writeLog('ERROR', 'Shutdown error in delete_template.php', ['error' => $err]); if (php_sapi_name() !== 'cli') { http_response_code(500); echo json_encode(['success'=>false,'error'=>$err['message']]); } } }); // Bypass authentication when debug=true is provided in query string $debugMode = isset($_GET['debug']) && $_GET['debug'] === 'true'; if (!$debugMode && function_exists('requireAuthentication')) { requireAuthentication(); } $input = json_decode(file_get_contents('php://input'), true) ?: $_POST; // Debug log if (function_exists('writeLog')) writeLog('INFO', 'delete_template.php start', ['raw_input' => $input, 'query' => $_GET]); // Allow single id or array of ids $ids = []; if (isset($input['id'])) { if (is_array($input['id'])) { $ids = array_map('intval', $input['id']); } else { $ids = [intval($input['id'])]; } } if (empty($ids) || array_filter($ids) === []) { http_response_code(400); echo json_encode(['success' => false, 'error' => 'id is required']); exit; } if (function_exists('writeLog')) writeLog('INFO', 'delete_template.php parsed ids', ['ids' => $ids]); try { $db = Database::getInstance(); // Verify existence $placeholders = implode(',', array_fill(0, count($ids), '?')); $existing = $db->fetchAll("SELECT id, name, template_name FROM message_templates WHERE id IN ($placeholders)", $ids); if (!$existing) { http_response_code(404); echo json_encode(['success' => false, 'error' => 'No templates found for given id(s)']); exit; } // Start transaction $db->beginTransaction(); try { $db->execute("DELETE FROM message_templates WHERE id IN ($placeholders)", $ids); // Log operator activity if session present try { $operatorId = $_SESSION['admin_user']['id'] ?? null; $now = date('Y-m-d H:i:s'); foreach ($existing as $t) { $db->insert('operator_activity', [ 'user_id' => null, 'operator_id' => $operatorId, 'action' => 'delete_template', 'details' => 'Deleted template: ' . ($t['name'] ?? $t['template_name'] ?? $t['id']), 'created_at' => $now ]); } } catch (Exception $e) { // ignore logging errors } $db->commit(); echo json_encode(['success' => true, 'deleted' => array_map(function($t){ return $t['id']; }, $existing)]); } catch (Exception $e) { $db->rollback(); http_response_code(500); echo json_encode(['success' => false, 'error' => 'Failed to delete templates: ' . $e->getMessage()]); } } catch (Exception $e) { http_response_code(500); echo json_encode(['success' => false, 'error' => $e->getMessage()]); }