fix: Resolve multiple UI and API bugs
- Remove is_active filter from get_users.php (column doesn't exist) - Fix ticket ID validation regex in upload_attachment.php (9-digit format) - Fix createSettingsModal reference to use openSettingsModal from settings.js - Add error handling for dependencies tab to prevent infinite loading - Add try-catch wrapper to ticket_dependencies.php API - Make export dropdown visible only when tickets are selected - Export only selected tickets instead of all filtered tickets Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -47,13 +47,31 @@ try {
|
||||
$type = isset($_GET['type']) ? $_GET['type'] : null;
|
||||
$search = isset($_GET['search']) ? trim($_GET['search']) : null;
|
||||
$format = isset($_GET['format']) ? $_GET['format'] : 'csv';
|
||||
$ticketIds = isset($_GET['ticket_ids']) ? $_GET['ticket_ids'] : null;
|
||||
|
||||
// Initialize model
|
||||
$ticketModel = new TicketModel($conn);
|
||||
|
||||
// Get all tickets (no pagination for export)
|
||||
$result = $ticketModel->getAllTickets(1, 10000, $status, 'created_at', 'desc', $category, $type, $search);
|
||||
$tickets = $result['tickets'];
|
||||
// Check if specific ticket IDs are provided
|
||||
if ($ticketIds) {
|
||||
// Parse and validate ticket IDs
|
||||
$ticketIdArray = array_filter(array_map('trim', explode(',', $ticketIds)));
|
||||
if (empty($ticketIdArray)) {
|
||||
header('Content-Type: application/json');
|
||||
http_response_code(400);
|
||||
echo json_encode(['success' => false, 'error' => 'No valid ticket IDs provided']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Get specific tickets by IDs
|
||||
$tickets = $ticketModel->getTicketsByIds($ticketIdArray);
|
||||
// Convert associative array to indexed array
|
||||
$tickets = array_values($tickets);
|
||||
} else {
|
||||
// Get all tickets with filters (no pagination for export)
|
||||
$result = $ticketModel->getAllTickets(1, 10000, $status, 'created_at', 'desc', $category, $type, $search);
|
||||
$tickets = $result['tickets'];
|
||||
}
|
||||
|
||||
if ($format === 'csv') {
|
||||
// CSV Export
|
||||
|
||||
@@ -34,8 +34,8 @@ try {
|
||||
|
||||
header('Content-Type: application/json');
|
||||
|
||||
// Get all active users for mentions
|
||||
$sql = "SELECT user_id, username, display_name FROM users WHERE is_active = 1 ORDER BY display_name, username";
|
||||
// Get all users for mentions/assignment
|
||||
$sql = "SELECT user_id, username, display_name FROM users ORDER BY display_name, username";
|
||||
$result = $conn->query($sql);
|
||||
|
||||
$users = [];
|
||||
|
||||
@@ -47,11 +47,16 @@ if ($conn->connect_error) {
|
||||
ResponseHelper::serverError('Database connection failed');
|
||||
}
|
||||
|
||||
$dependencyModel = new DependencyModel($conn);
|
||||
$auditLog = new AuditLogModel($conn);
|
||||
try {
|
||||
$dependencyModel = new DependencyModel($conn);
|
||||
$auditLog = new AuditLogModel($conn);
|
||||
} catch (Exception $e) {
|
||||
ResponseHelper::serverError('Failed to initialize models: ' . $e->getMessage());
|
||||
}
|
||||
|
||||
$method = $_SERVER['REQUEST_METHOD'];
|
||||
|
||||
try {
|
||||
switch ($method) {
|
||||
case 'GET':
|
||||
// Get dependencies for a ticket
|
||||
@@ -139,5 +144,8 @@ switch ($method) {
|
||||
default:
|
||||
ResponseHelper::error('Method not allowed', 405);
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
ResponseHelper::serverError('An error occurred: ' . $e->getMessage());
|
||||
}
|
||||
|
||||
$conn->close();
|
||||
|
||||
@@ -31,8 +31,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') {
|
||||
ResponseHelper::error('Ticket ID is required');
|
||||
}
|
||||
|
||||
// Validate ticket ID format
|
||||
if (!preg_match('/^[A-Z]{3}\d{6}$/', $ticketId)) {
|
||||
// Validate ticket ID format (9-digit number)
|
||||
if (!preg_match('/^\d{9}$/', $ticketId)) {
|
||||
ResponseHelper::error('Invalid ticket ID format');
|
||||
}
|
||||
|
||||
@@ -72,8 +72,8 @@ if (empty($ticketId)) {
|
||||
ResponseHelper::error('Ticket ID is required');
|
||||
}
|
||||
|
||||
// Validate ticket ID format
|
||||
if (!preg_match('/^[A-Z]{3}\d{6}$/', $ticketId)) {
|
||||
// Validate ticket ID format (9-digit number)
|
||||
if (!preg_match('/^\d{9}$/', $ticketId)) {
|
||||
ResponseHelper::error('Invalid ticket ID format');
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user