Files
tinker_tickets/api/add_comment.php

91 lines
2.6 KiB
PHP
Raw Normal View History

<?php
// Disable error display in the output
ini_set('display_errors', 0);
error_reporting(E_ALL);
// Start output buffering to capture any errors
ob_start();
try {
// Include required files with proper error handling
$configPath = dirname(__DIR__) . '/config/config.php';
$commentModelPath = dirname(__DIR__) . '/models/CommentModel.php';
2026-01-01 15:40:32 -05:00
$auditLogModelPath = dirname(__DIR__) . '/models/AuditLogModel.php';
if (!file_exists($configPath)) {
throw new Exception("Config file not found: $configPath");
}
2026-01-01 15:40:32 -05:00
if (!file_exists($commentModelPath)) {
throw new Exception("CommentModel file not found: $commentModelPath");
}
2026-01-01 15:40:32 -05:00
require_once $configPath;
require_once $commentModelPath;
2026-01-01 15:40:32 -05:00
require_once $auditLogModelPath;
// Check authentication via session
session_start();
if (!isset($_SESSION['user']) || !isset($_SESSION['user']['user_id'])) {
throw new Exception("Authentication required");
}
$currentUser = $_SESSION['user'];
$userId = $currentUser['user_id'];
// Create database connection
$conn = new mysqli(
$GLOBALS['config']['DB_HOST'],
$GLOBALS['config']['DB_USER'],
$GLOBALS['config']['DB_PASS'],
$GLOBALS['config']['DB_NAME']
);
2026-01-01 15:40:32 -05:00
if ($conn->connect_error) {
throw new Exception("Database connection failed: " . $conn->connect_error);
}
2026-01-01 15:40:32 -05:00
// Get POST data
$data = json_decode(file_get_contents('php://input'), true);
2026-01-01 15:40:32 -05:00
if (!$data) {
throw new Exception("Invalid JSON data received");
}
2026-01-01 15:40:32 -05:00
$ticketId = $data['ticket_id'];
2026-01-01 15:40:32 -05:00
// Initialize models
$commentModel = new CommentModel($conn);
2026-01-01 15:40:32 -05:00
$auditLog = new AuditLogModel($conn);
// Add comment with user tracking
$result = $commentModel->addComment($ticketId, $data, $userId);
// Log comment creation to audit log
if ($result['success'] && isset($result['comment_id'])) {
$auditLog->logCommentCreate($userId, $result['comment_id'], $ticketId);
}
// Add user display name to result for frontend
if ($result['success']) {
$result['user_name'] = $currentUser['display_name'] ?? $currentUser['username'];
}
// Discard any unexpected output
ob_end_clean();
2026-01-01 15:40:32 -05:00
// Return JSON response
header('Content-Type: application/json');
echo json_encode($result);
} catch (Exception $e) {
// Discard any unexpected output
ob_end_clean();
// Return error response
header('Content-Type: application/json');
echo json_encode([
'success' => false,
'error' => $e->getMessage()
]);
}