Files
deskhub/DeskHub-Webseite/api/staff/v1/activity.php
T
2026-11-04 07:55:51 +00:00

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) : [],
]);