Upload via GUI (273 Dateien)
This commit is contained in:
@@ -15,12 +15,19 @@ $ticket = api_find_ticket($pdo, $staff, $number);
|
||||
// in includes/functions.php): wird von einem anderen Mitarbeiter (Web oder App) gerade
|
||||
// frisch bearbeitet, wird das Ticket hier – anders als beim milderen Live-Chat-Lock
|
||||
// weiter unten – gar nicht erst geladen, genau wie im Web-Backend (ticket_view.php).
|
||||
// Administratoren dürfen ein von anderen bearbeitetes Ticket trotzdem lesen und bearbeiten; die Sperre des anderen bleibt dabei
|
||||
// bestehen, bis sie aufgehoben wird (api/staff/v1/ticket_unlock.php). Alle anderen bekommen wie bisher einen Hinweis.
|
||||
$ticketLockedBy = null;
|
||||
if ($ticket['source'] !== 'chat') {
|
||||
$lockedByName = ticket_locked_by_other($ticket, (int) $staff['id'], $pdo);
|
||||
if ($lockedByName) {
|
||||
api_error(409, 'TICKET_LOCKED', "Dieses Ticket wird gerade von \"$lockedByName\" bearbeitet und kann nicht gleichzeitig geöffnet werden.");
|
||||
if ($staff['role'] !== 'admin') {
|
||||
api_error(409, 'TICKET_LOCKED', "Dieses Ticket wird gerade von \"$lockedByName\" bearbeitet und kann nicht gleichzeitig geöffnet werden.");
|
||||
}
|
||||
$ticketLockedBy = $lockedByName;
|
||||
} else {
|
||||
ticket_acquire_lock((int) $ticket['id'], (int) $staff['id'], $pdo);
|
||||
}
|
||||
ticket_acquire_lock((int) $ticket['id'], (int) $staff['id'], $pdo);
|
||||
}
|
||||
|
||||
$threadStmt = $pdo->prepare(
|
||||
@@ -84,6 +91,8 @@ $summary['source'] = $ticket['source'];
|
||||
$summary['firstResponseDueAt'] = $ticket['first_response_due_at'];
|
||||
$summary['resolutionDueAt'] = $ticket['resolution_due_at'];
|
||||
$summary['lockedByOtherName'] = $lockedByOtherName;
|
||||
$summary['lockedBy'] = $ticketLockedBy; // Name, wenn ein Administrator ein fremd gesperrtes Ticket geöffnet hat
|
||||
$summary['canUnlock'] = $staff['role'] === 'admin'; // darf die Sperre eines anderen aufheben
|
||||
$summary['threads'] = $threads;
|
||||
// Rechte für GENAU dieses Ticket: gelten pro Abteilung (Rolle des Mitarbeiters in der Abteilung des Tickets)
|
||||
$summary['permissions'] = [];
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
<?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]);
|
||||
Reference in New Issue
Block a user