Invalidate stats cache after any ticket-modifying API call
StatsModel::invalidateCache() was never called from any API, so the 60s cached stats persisted after bulk assign/status/priority changes, ticket updates, assignments, and clones. Dashboard tiles showed stale counts until the TTL expired. Added invalidation to the four APIs that affect dashboard stat tiles: - bulk_operation.php: after successful bulk assign/status/priority - assign_ticket.php: after successful reassignment - update_ticket.php: after any successful ticket update - clone_ticket.php: after successful clone (open_tickets changes) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -84,5 +84,7 @@ if (!$success) {
|
|||||||
http_response_code(500);
|
http_response_code(500);
|
||||||
apiRespond(['success' => false, 'error' => 'Failed to update ticket assignment']);
|
apiRespond(['success' => false, 'error' => 'Failed to update ticket assignment']);
|
||||||
} else {
|
} else {
|
||||||
|
require_once dirname(__DIR__) . '/models/StatsModel.php';
|
||||||
|
(new StatsModel($conn))->invalidateCache();
|
||||||
apiRespond(['success' => true]);
|
apiRespond(['success' => true]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -110,6 +110,10 @@ if (isset($result['error'])) {
|
|||||||
'error' => $result['error']
|
'error' => $result['error']
|
||||||
]);
|
]);
|
||||||
} else {
|
} else {
|
||||||
|
// Invalidate stats cache so dashboard tiles reflect changes immediately
|
||||||
|
require_once dirname(__DIR__) . '/models/StatsModel.php';
|
||||||
|
(new StatsModel($conn))->invalidateCache();
|
||||||
|
|
||||||
$message = "Bulk operation completed: {$result['processed']} succeeded, {$result['failed']} failed";
|
$message = "Bulk operation completed: {$result['processed']} succeeded, {$result['failed']} failed";
|
||||||
if ($inaccessibleCount > 0) {
|
if ($inaccessibleCount > 0) {
|
||||||
$message .= " ($inaccessibleCount skipped - no access)";
|
$message .= " ($inaccessibleCount skipped - no access)";
|
||||||
|
|||||||
@@ -111,6 +111,8 @@ try {
|
|||||||
$dependencyModel = new DependencyModel($conn);
|
$dependencyModel = new DependencyModel($conn);
|
||||||
$dependencyModel->addDependency($result['ticket_id'], $sourceTicketId, 'relates_to', $userId);
|
$dependencyModel->addDependency($result['ticket_id'], $sourceTicketId, 'relates_to', $userId);
|
||||||
|
|
||||||
|
require_once dirname(__DIR__) . '/models/StatsModel.php';
|
||||||
|
(new StatsModel($conn))->invalidateCache();
|
||||||
echo json_encode([
|
echo json_encode([
|
||||||
'success' => true,
|
'success' => true,
|
||||||
'new_ticket_id' => $result['ticket_id'],
|
'new_ticket_id' => $result['ticket_id'],
|
||||||
|
|||||||
@@ -271,6 +271,12 @@ try {
|
|||||||
// Discard any output that might have been generated
|
// Discard any output that might have been generated
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
|
|
||||||
|
// Invalidate stats cache on successful ticket update
|
||||||
|
if (!empty($result['success'])) {
|
||||||
|
require_once dirname(__DIR__) . '/models/StatsModel.php';
|
||||||
|
(new StatsModel($conn))->invalidateCache();
|
||||||
|
}
|
||||||
|
|
||||||
// Return response
|
// Return response
|
||||||
if (!empty($result['http_status'])) {
|
if (!empty($result['http_status'])) {
|
||||||
http_response_code($result['http_status']);
|
http_response_code($result['http_status']);
|
||||||
|
|||||||
Reference in New Issue
Block a user