feat: Add admin navigation, fix modals, clickable stats, update docs

- Add admin dropdown menu in dashboard header with links to all admin pages
- Fix template modal: larger size (800px), responsive grid, type/priority dropdowns
- Fix recurring tickets modal: add Type and Assign To fields, larger size
- Make dashboard stat cards clickable for quick filtering
- Fix user-activity query (remove is_active requirement)
- Add table existence check in ticket_dependencies API
- Fix table overflow on dashboard
- Update Claude.md and README.md with current project status
- Remove migrations directory (all migrations completed)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-20 21:11:49 -05:00
parent 08d6808bc3
commit 0046721fde
9 changed files with 406 additions and 751 deletions

View File

@@ -1,18 +1,34 @@
<?php
/**
* Ticket Dependencies API
*
* GET: Get dependencies for a ticket
* POST: Add a new dependency
* DELETE: Remove a dependency
*/
// Capture ALL errors for debugging
// Immediately set JSON header and start output buffering
ob_start();
header('Content-Type: application/json');
// Register shutdown function to catch fatal errors
register_shutdown_function(function() {
$error = error_get_last();
if ($error && in_array($error['type'], [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR])) {
ob_end_clean();
http_response_code(500);
header('Content-Type: application/json');
echo json_encode([
'success' => false,
'error' => 'Fatal: ' . $error['message'],
'file' => basename($error['file']),
'line' => $error['line']
]);
}
});
ini_set('display_errors', 0);
error_reporting(E_ALL);
// Custom error handler to return JSON errors
// Custom error handler
set_error_handler(function($errno, $errstr, $errfile, $errline) {
ob_end_clean();
http_response_code(500);
header('Content-Type: application/json');
echo json_encode([
@@ -26,6 +42,7 @@ set_error_handler(function($errno, $errstr, $errfile, $errline) {
// Custom exception handler
set_exception_handler(function($e) {
ob_end_clean();
http_response_code(500);
header('Content-Type: application/json');
echo json_encode([
@@ -81,6 +98,12 @@ if ($conn->connect_error) {
ResponseHelper::serverError('Database connection failed');
}
// Check if ticket_dependencies table exists
$tableCheck = $conn->query("SHOW TABLES LIKE 'ticket_dependencies'");
if ($tableCheck->num_rows === 0) {
ResponseHelper::serverError('Ticket dependencies feature not available. The ticket_dependencies table does not exist. Please run the migration.');
}
try {
$dependencyModel = new DependencyModel($conn);
$auditLog = new AuditLogModel($conn);