Files
deskhub/DeskHub-Webseite/staff/ticket_merge_search.php
T
2026-10-16 19:12:24 +00:00

73 lines
2.3 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* staff/ticket_merge_search.php
* JSON-Endpunkt für die Ticket-Zusammenführen-Suche.
* Gibt max. 8 Tickets zurück die zur Suchanfrage passen.
*/
require_once __DIR__ . '/../includes/bootstrap.php';
$staff = require_staff_login();
$pdo = get_db();
header('Content-Type: application/json');
$q = trim($_GET['q'] ?? '');
$exclude = trim($_GET['exclude'] ?? '');
if (strlen($q) < 2) {
echo json_encode([]);
exit;
}
$myDeptIds = staff_department_ids($staff);
$like = '%' . $q . '%';
// Basis-Query: Ticket suchen (nicht geschlossene und nicht bereits zusammengeführte)
$sql = "SELECT t.ticket_number, t.subject, t.requester_name, t.requester_email,
t.status, t.created_at,
p.name AS priority_name,
d.name AS department_name,
s.name AS staff_name
FROM tickets t
JOIN priorities p ON p.id = t.priority_id
JOIN departments d ON d.id = t.department_id
LEFT JOIN staff s ON s.id = t.assigned_staff_id
WHERE t.merged_into IS NULL
AND t.status != 'closed'
AND (t.ticket_number LIKE ? OR t.subject LIKE ? OR t.requester_name LIKE ? OR t.requester_email LIKE ?)";
$params = [$like, $like, $like, $like];
// Ausschluss des aktuellen Tickets
if ($exclude !== '') {
$sql .= " AND t.ticket_number != ?";
$params[] = $exclude;
}
// Abteilungsfilter für Nicht-Admins
if ($myDeptIds !== null) {
$placeholders = implode(',', array_fill(0, count($myDeptIds), '?'));
$sql .= " AND t.department_id IN ($placeholders)";
$params = array_merge($params, $myDeptIds);
}
$sql .= " ORDER BY t.updated_at DESC LIMIT 8";
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Nur nötige Felder zurückgeben
$out = array_map(fn($t) => [
'ticket_number' => $t['ticket_number'],
'subject' => $t['subject'],
'requester_name' => $t['requester_name'],
'requester_email' => $t['requester_email'],
'status' => $t['status'],
'priority_name' => $t['priority_name'],
'department_name' => $t['department_name'],
'staff_name' => $t['staff_name'] ?? '–',
'created_at' => $t['created_at'],
], $results);
echo json_encode($out, JSON_UNESCAPED_UNICODE | JSON_HEX_TAG);