false, 'error' => 'id is required']); exit; } 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()]); }