$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()]); }