feat: complete package 2 delete flows and package 3 port management
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user