50 lines
2.0 KiB
PHP
50 lines
2.0 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
require_once __DIR__ . '/common.php';
|
|
|
|
api_require_method('GET');
|
|
$staff = api_require_staff();
|
|
$pdo = get_db();
|
|
|
|
/** Echter Stand für den Zähler: Ticket-IDs, die jetzt Aufmerksamkeit brauchen (nicht zugewiesen / mir gehörend), plus Anzahlen. */
|
|
function api_attention(PDO $pdo, array $staff): array
|
|
{
|
|
$a = staff_attention_tickets($pdo, $staff);
|
|
return ['unassigned' => $a['unassigned'], 'mine' => $a['mine'], 'unassignedCount' => count($a['unassigned']), 'mineCount' => count($a['mine'])];
|
|
}
|
|
|
|
$since = trim($_GET['since'] ?? '');
|
|
if ($since === '') {
|
|
// Erster Aufruf nach Login: nur die Serverzeit als Referenzpunkt liefern, noch nichts zählen
|
|
// (verhindert Uhrzeit-Abweichungen zwischen Client und Server bei der Baseline).
|
|
api_json(['newReplies' => 0, 'newUnassigned' => 0, 'attention' => api_attention($pdo, $staff), 'serverTime' => db_now(), 'health' => has_permission($staff, 'manage_email_addresses') ? system_health($pdo) : []]);
|
|
}
|
|
if (strtotime($since) === false) {
|
|
api_error(422, 'INVALID_SINCE', 'Der since-Zeitstempel ist ungültig.');
|
|
}
|
|
$sinceSql = date('Y-m-d H:i:s', strtotime($since));
|
|
|
|
$stmt = $pdo->prepare(
|
|
"SELECT COUNT(*) FROM tickets
|
|
WHERE assigned_staff_id = ? AND updated_at > ? AND status NOT IN ('resolved','closed')"
|
|
);
|
|
$stmt->execute([$staff['id'], $sinceSql]);
|
|
$newReplies = (int) $stmt->fetchColumn();
|
|
|
|
$departmentIds = staff_department_ids($staff);
|
|
[$deptFilter, $deptParams] = dept_filter_sql($departmentIds, 'department_id');
|
|
$stmt = $pdo->prepare(
|
|
"SELECT COUNT(*) FROM tickets
|
|
WHERE assigned_staff_id IS NULL AND created_at > ?{$deptFilter}"
|
|
);
|
|
$stmt->execute([$sinceSql, ...$deptParams]);
|
|
$newUnassigned = (int) $stmt->fetchColumn();
|
|
|
|
api_json([
|
|
'newReplies' => $newReplies,
|
|
'newUnassigned' => $newUnassigned,
|
|
'attention' => api_attention($pdo, $staff),
|
|
'serverTime' => db_now(),
|
|
'health' => has_permission($staff, 'manage_email_addresses') ? system_health($pdo) : [],
|
|
]);
|