false, 'message' => 'Ungueltige Geraete-ID']); exit; } $_SESSION['error'] = "Ungueltige Geraete-ID"; header('Location: ?module=devices&action=list'); exit; } $device = $sql->single( "SELECT id, name FROM devices WHERE id = ?", "i", [$deviceId] ); if (!$device) { if ($isPost) { header('Content-Type: application/json; charset=utf-8'); http_response_code(404); echo json_encode(['success' => false, 'message' => 'Geraet nicht gefunden']); exit; } $_SESSION['error'] = "Geraet nicht gefunden"; header('Location: ?module=devices&action=list'); exit; } $dependencies = $sql->single( "SELECT ( SELECT COUNT(*) FROM device_ports dp WHERE dp.device_id = ? ) AS port_count, ( SELECT COUNT(*) FROM device_port_modules dpm JOIN device_ports dp2 ON dp2.id = dpm.device_port_id WHERE dp2.device_id = ? ) AS module_count, ( SELECT COUNT(*) FROM connections c WHERE ((c.port_a_type = 'device' OR c.port_a_type = 'device_ports') AND c.port_a_id IN ( SELECT dp3.id FROM device_ports dp3 WHERE dp3.device_id = ? )) OR ((c.port_b_type = 'device' OR c.port_b_type = 'device_ports') AND c.port_b_id IN ( SELECT dp4.id FROM device_ports dp4 WHERE dp4.device_id = ? )) ) AS connection_count", "iiii", [$deviceId, $deviceId, $deviceId, $deviceId] ); $portCount = (int)($dependencies['port_count'] ?? 0); $moduleCount = (int)($dependencies['module_count'] ?? 0); $connectionCount = (int)($dependencies['connection_count'] ?? 0); $hasDependencies = $portCount > 0 || $moduleCount > 0 || $connectionCount > 0; if ($hasDependencies && !$forceDelete) { $parts = []; if ($connectionCount > 0) { $parts[] = $connectionCount . ' Verbindungen'; } if ($portCount > 0) { $parts[] = $portCount . ' Ports'; } if ($moduleCount > 0) { $parts[] = $moduleCount . ' Port-Module'; } $dependencyMessage = "Geraet hat abhaengige Daten (" . implode(', ', $parts) . "). Loeschen bitte bestaetigen."; if ($isPost) { header('Content-Type: application/json; charset=utf-8'); http_response_code(409); echo json_encode([ 'success' => false, 'requires_force' => true, 'message' => $dependencyMessage, 'dependencies' => [ 'connections' => $connectionCount, 'ports' => $portCount, 'modules' => $moduleCount ] ]); exit; } $_SESSION['error'] = $dependencyMessage; header('Location: ?module=devices&action=edit&id=' . urlencode((string)$deviceId)); exit; } // Connections referenzieren device_ports nur logisch, daher manuell entfernen. $sql->set( "DELETE FROM connections WHERE ((port_a_type = 'device' OR port_a_type = 'device_ports') AND port_a_id IN (SELECT id FROM device_ports WHERE device_id = ?)) OR ((port_b_type = 'device' OR port_b_type = 'device_ports') AND port_b_id IN (SELECT id FROM device_ports WHERE device_id = ?))", "ii", [$deviceId, $deviceId] ); $deleted = $sql->set( "DELETE FROM devices WHERE id = ?", "i", [$deviceId] ); if ($deleted > 0) { if ($isPost) { header('Content-Type: application/json; charset=utf-8'); echo json_encode(['success' => true, 'message' => "Geraet geloescht: " . $device['name']]); exit; } $_SESSION['success'] = "Geraet geloescht: " . $device['name']; } else { if ($isPost) { header('Content-Type: application/json; charset=utf-8'); http_response_code(500); echo json_encode(['success' => false, 'message' => 'Geraet konnte nicht geloescht werden']); exit; } $_SESSION['error'] = "Geraet konnte nicht geloescht werden"; } header('Location: ?module=devices&action=list'); exit;