feat: complete package 2 delete flows and package 3 port management

This commit is contained in:
2026-02-18 10:16:24 +01:00
parent f4ce7f360d
commit 77758f71d3
14 changed files with 754 additions and 141 deletions

View File

@@ -25,6 +25,7 @@ $rackHeightHe = (int)($_POST['rack_height_he'] ?? 1);
$serialNumber = trim($_POST['serial_number'] ?? '');
$comment = trim($_POST['comment'] ?? '');
$webConfigUrl = trim($_POST['web_config_url'] ?? '');
$devicePortRows = is_array($_POST['device_ports'] ?? null) ? $_POST['device_ports'] : [];
if ($webConfigUrl === '') {
$webConfigUrl = null;
}
@@ -88,6 +89,9 @@ if ($isNewDevice) {
if ($isNewDevice && $deviceId > 0) {
copyDevicePortsFromType($sql, $deviceId, $deviceTypeId);
}
if ($deviceId > 0 && !$isNewDevice && !empty($devicePortRows)) {
syncDevicePorts($sql, $deviceId, $devicePortRows);
}
$_SESSION['success'] = "Gerät gespeichert";
@@ -139,3 +143,105 @@ function copyDevicePortsFromType($sql, $deviceId, $deviceTypeId)
}
}
}
function syncDevicePorts($sql, $deviceId, array $rows)
{
$ports = $sql->get(
"SELECT id, name FROM device_ports WHERE device_id = ?",
"i",
[$deviceId]
);
if (empty($ports)) {
return;
}
$allowedIds = [];
$currentNames = [];
foreach ($ports as $port) {
$portId = (int)($port['id'] ?? 0);
if ($portId <= 0) {
continue;
}
$allowedIds[$portId] = true;
$currentNames[$portId] = (string)($port['name'] ?? '');
}
foreach ($rows as $portIdRaw => $row) {
$portId = (int)$portIdRaw;
if ($portId <= 0 || !isset($allowedIds[$portId]) || !is_array($row)) {
continue;
}
$name = trim((string)($row['name'] ?? ''));
if ($name === '') {
$name = $currentNames[$portId] ?? ('Port ' . $portId);
}
$status = trim((string)($row['status'] ?? 'active'));
if (!in_array($status, ['active', 'disabled'], true)) {
$status = 'active';
}
$mode = trim((string)($row['mode'] ?? ''));
$mode = $mode !== '' ? $mode : null;
$vlanJson = normalizeVlanConfig($row['vlan_config'] ?? '');
if ($mode !== null && $vlanJson !== null) {
$sql->set(
"UPDATE device_ports
SET name = ?, status = ?, mode = ?, vlan_config = ?
WHERE id = ? AND device_id = ?",
"ssssii",
[$name, $status, $mode, $vlanJson, $portId, $deviceId]
);
} elseif ($mode !== null) {
$sql->set(
"UPDATE device_ports
SET name = ?, status = ?, mode = ?, vlan_config = NULL
WHERE id = ? AND device_id = ?",
"sssii",
[$name, $status, $mode, $portId, $deviceId]
);
} elseif ($vlanJson !== null) {
$sql->set(
"UPDATE device_ports
SET name = ?, status = ?, mode = NULL, vlan_config = ?
WHERE id = ? AND device_id = ?",
"sssii",
[$name, $status, $vlanJson, $portId, $deviceId]
);
} else {
$sql->set(
"UPDATE device_ports
SET name = ?, status = ?, mode = NULL, vlan_config = NULL
WHERE id = ? AND device_id = ?",
"ssii",
[$name, $status, $portId, $deviceId]
);
}
}
}
function normalizeVlanConfig($raw)
{
$value = trim((string)$raw);
if ($value === '') {
return null;
}
$parts = preg_split('/[\s,;]+/', $value);
$normalized = [];
foreach ((array)$parts as $part) {
$entry = trim((string)$part);
if ($entry === '') {
continue;
}
$normalized[$entry] = true;
}
if (empty($normalized)) {
return null;
}
return json_encode(array_keys($normalized), JSON_UNESCAPED_UNICODE);
}