33 lines
1.4 KiB
PHP
33 lines
1.4 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
require_once __DIR__ . '/common.php';
|
|
|
|
/**
|
|
* Hebt die Bearbeitungssperre eines Tickets auf.
|
|
* POST {number}
|
|
* Jeder Mitarbeiter darf seine eigene Sperre freigeben, Administratoren auch die eines anderen Mitarbeiters.
|
|
* Danach ist das Ticket frei; wer es als Nächstes öffnet, bekommt die Sperre.
|
|
*/
|
|
api_require_method('POST');
|
|
$staff = api_require_staff();
|
|
$body = api_request_body();
|
|
$number = trim((string) ($body['number'] ?? ''));
|
|
if ($number === '') api_error(422, 'TICKET_NUMBER_REQUIRED', 'Eine Ticketnummer ist erforderlich.');
|
|
$pdo = get_db();
|
|
$ticket = api_find_ticket($pdo, $staff, $number);
|
|
|
|
$holderId = (int) ($ticket['locked_by'] ?? 0);
|
|
if ($holderId === 0) api_json(['ok' => true, 'unlocked' => false]);
|
|
if ($holderId !== (int) $staff['id'] && $staff['role'] !== 'admin') {
|
|
api_error(403, 'FORBIDDEN', 'Nur Administratoren können die Sperre eines anderen Mitarbeiters aufheben.');
|
|
}
|
|
$name = '';
|
|
if ($holderId !== (int) $staff['id']) {
|
|
$n = $pdo->prepare('SELECT name FROM staff WHERE id = ?');
|
|
$n->execute([$holderId]);
|
|
$name = (string) ($n->fetchColumn() ?: 'einem anderen Mitarbeiter');
|
|
}
|
|
$pdo->prepare('UPDATE tickets SET locked_by = NULL, locked_at = NULL WHERE id = ?')->execute([$ticket['id']]);
|
|
log_activity($pdo, (int) $ticket['id'], (int) $staff['id'], $name !== '' ? "Sperre von \"{$name}\" durch Admin aufgehoben" : 'Sperre manuell aufgehoben');
|
|
api_json(['ok' => true, 'unlocked' => true]);
|