@@ -77,9 +77,6 @@ $isEndpointAllowed = static function (string $type, int $id) use ($occupiedByTyp
|
||||
if ($id <= 0) {
|
||||
return false;
|
||||
}
|
||||
if ($type === 'outlet') {
|
||||
return true;
|
||||
}
|
||||
if ($type === $portAType && $id === $portAId) {
|
||||
return true;
|
||||
}
|
||||
@@ -173,7 +170,14 @@ foreach ($outletPorts as $row) {
|
||||
if (!$isEndpointAllowed('outlet', $id)) {
|
||||
continue;
|
||||
}
|
||||
$parts = array_filter([(string)($row['floor_name'] ?? ''), (string)($row['room_name'] ?? ''), (string)$row['outlet_name'], (string)$row['name']]);
|
||||
$portName = trim((string)($row['name'] ?? ''));
|
||||
$includePortName = ($portName !== '' && strcasecmp($portName, 'Port 1') !== 0);
|
||||
$parts = array_filter([
|
||||
(string)($row['floor_name'] ?? ''),
|
||||
(string)($row['room_name'] ?? ''),
|
||||
(string)$row['outlet_name'],
|
||||
$includePortName ? $portName : '',
|
||||
]);
|
||||
$endpointOptions['outlet'][] = [
|
||||
'id' => $id,
|
||||
'label' => implode(' / ', $parts),
|
||||
|
||||
@@ -75,25 +75,16 @@ $otherConnections = $sql->get(
|
||||
);
|
||||
|
||||
$endpointUsage = [];
|
||||
$trackUsage = static function (string $endpointType, int $endpointId, string $otherType) use (&$endpointUsage): void {
|
||||
$trackUsage = static function (string $endpointType, int $endpointId) use (&$endpointUsage): void {
|
||||
if ($endpointId <= 0) {
|
||||
return;
|
||||
}
|
||||
if (!isset($endpointUsage[$endpointType][$endpointId])) {
|
||||
$endpointUsage[$endpointType][$endpointId] = [
|
||||
'total' => 0,
|
||||
'patchpanel' => 0,
|
||||
'other' => 0,
|
||||
];
|
||||
}
|
||||
$endpointUsage[$endpointType][$endpointId]['total']++;
|
||||
if ($endpointType === 'outlet') {
|
||||
if ($otherType === 'patchpanel') {
|
||||
$endpointUsage[$endpointType][$endpointId]['patchpanel']++;
|
||||
} else {
|
||||
$endpointUsage[$endpointType][$endpointId]['other']++;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
foreach ((array)$otherConnections as $row) {
|
||||
@@ -102,43 +93,29 @@ foreach ((array)$otherConnections as $row) {
|
||||
$idA = (int)($row['port_a_id'] ?? 0);
|
||||
$idB = (int)($row['port_b_id'] ?? 0);
|
||||
|
||||
$trackUsage($typeA, $idA, $typeB);
|
||||
$trackUsage($typeB, $idB, $typeA);
|
||||
$trackUsage($typeA, $idA);
|
||||
$trackUsage($typeB, $idB);
|
||||
}
|
||||
|
||||
$validateEndpointUsage = static function (string $endpointType, int $endpointId, string $otherType, string $label) use ($endpointUsage): ?string {
|
||||
$validateEndpointUsage = static function (string $endpointType, int $endpointId, string $label) use ($endpointUsage): ?string {
|
||||
if ($endpointId <= 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$stats = $endpointUsage[$endpointType][$endpointId] ?? ['total' => 0, 'patchpanel' => 0, 'other' => 0];
|
||||
$stats = $endpointUsage[$endpointType][$endpointId] ?? ['total' => 0];
|
||||
if ((int)$stats['total'] <= 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if ($endpointType !== 'outlet') {
|
||||
return $label . " ist bereits in Verwendung";
|
||||
}
|
||||
|
||||
if ($otherType === 'patchpanel') {
|
||||
if ((int)$stats['patchpanel'] > 0) {
|
||||
return $label . " hat bereits eine Patchpanel-Verbindung";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
if ((int)$stats['other'] > 0) {
|
||||
return $label . " hat bereits eine Endgeraete-Verbindung";
|
||||
}
|
||||
return null;
|
||||
return $label . " ist bereits in Verwendung";
|
||||
};
|
||||
|
||||
$errorA = $validateEndpointUsage($portAType, $portAId, $portBType, 'Port an Endpunkt A');
|
||||
$errorA = $validateEndpointUsage($portAType, $portAId, 'Port an Endpunkt A');
|
||||
if ($errorA !== null) {
|
||||
$errors[] = $errorA;
|
||||
}
|
||||
|
||||
$errorB = $validateEndpointUsage($portBType, $portBId, $portAType, 'Port an Endpunkt B');
|
||||
$errorB = $validateEndpointUsage($portBType, $portBId, 'Port an Endpunkt B');
|
||||
if ($errorB !== null) {
|
||||
$errors[] = $errorB;
|
||||
}
|
||||
|
||||
@@ -248,11 +248,6 @@ if ($type === 'outlet' && $id > 0) {
|
||||
<div id="panel-floor-plan-group" class="form-group" <?php echo $showPanelPlacementFields ? '' : 'hidden'; ?>>
|
||||
<label>Stockwerkskarte</label>
|
||||
<div class="floor-plan-block">
|
||||
<div class="floor-plan-toolbar">
|
||||
<button type="button" class="button button-small" data-floor-plan-zoom="in">+</button>
|
||||
<button type="button" class="button button-small" data-floor-plan-zoom="out">-</button>
|
||||
<button type="button" class="button button-small" data-floor-plan-zoom="reset">Reset</button>
|
||||
</div>
|
||||
<div id="floor-plan-canvas" class="floor-plan-canvas"
|
||||
data-marker-width="<?php echo $markerWidth; ?>"
|
||||
data-marker-height="<?php echo $markerHeight; ?>"
|
||||
@@ -262,10 +257,9 @@ if ($type === 'outlet' && $id > 0) {
|
||||
data-active-id="<?php echo (int)($panel['id'] ?? 0); ?>"
|
||||
data-reference-panels="<?php echo htmlspecialchars(json_encode($mapPatchPanels, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), ENT_QUOTES, 'UTF-8'); ?>"
|
||||
data-reference-outlets="<?php echo htmlspecialchars(json_encode($mapOutlets, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), ENT_QUOTES, 'UTF-8'); ?>">
|
||||
<img id="floor-plan-svg" class="floor-plan-svg" alt="Stockwerksplan">
|
||||
<svg id="floor-plan-overlay" class="floor-plan-overlay" viewBox="0 0 1 1" preserveAspectRatio="xMidYMid meet" aria-hidden="true"></svg>
|
||||
</div>
|
||||
<p class="floor-plan-hint">Nur das aktuell bearbeitete Patchpanel ist verschiebbar. Andere Objekte werden als Referenz halbtransparent angezeigt. Neue Objekte starten bei Position 30 x 30. Zoom per Mausrad, verschieben mit Shift + Drag.</p>
|
||||
<p class="floor-plan-hint">Nur das aktuell bearbeitete Patchpanel ist verschiebbar. Andere Objekte werden als Referenz halbtransparent angezeigt. Neue Objekte starten bei Position 30 x 30. Zoom mit Mausrad, verschieben mit Shift + Drag.</p>
|
||||
<p class="floor-plan-position">Koordinate: <span id="floor-plan-position"></span></p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -350,11 +344,6 @@ if ($type === 'outlet' && $id > 0) {
|
||||
<div class="form-group">
|
||||
<label>Stockwerkskarte</label>
|
||||
<div class="floor-plan-block">
|
||||
<div class="floor-plan-toolbar">
|
||||
<button type="button" class="button button-small" data-floor-plan-zoom="in">+</button>
|
||||
<button type="button" class="button button-small" data-floor-plan-zoom="out">-</button>
|
||||
<button type="button" class="button button-small" data-floor-plan-zoom="reset">Reset</button>
|
||||
</div>
|
||||
<div id="floor-plan-canvas" class="floor-plan-canvas"
|
||||
data-marker-width="<?php echo $markerWidth; ?>"
|
||||
data-marker-height="<?php echo $markerHeight; ?>"
|
||||
@@ -364,10 +353,9 @@ if ($type === 'outlet' && $id > 0) {
|
||||
data-active-id="<?php echo (int)($outlet['id'] ?? 0); ?>"
|
||||
data-reference-panels="<?php echo htmlspecialchars(json_encode($mapPatchPanels, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), ENT_QUOTES, 'UTF-8'); ?>"
|
||||
data-reference-outlets="<?php echo htmlspecialchars(json_encode($mapOutlets, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), ENT_QUOTES, 'UTF-8'); ?>">
|
||||
<img id="floor-plan-svg" class="floor-plan-svg" alt="Stockwerksplan">
|
||||
<svg id="floor-plan-overlay" class="floor-plan-overlay" viewBox="0 0 1 1" preserveAspectRatio="xMidYMid meet" aria-hidden="true"></svg>
|
||||
</div>
|
||||
<p class="floor-plan-hint">Nur die aktuell bearbeitete Wandbuchse ist verschiebbar. Blau = Patchpanel, Gruen = Dosen-Referenz, Orange = gewaehlter Raum. Netzwerkdosen sind immer 10 x 10. Zoom per Mausrad, verschieben mit Shift + Drag.</p>
|
||||
<p class="floor-plan-hint">Nur die aktuell bearbeitete Wandbuchse ist verschiebbar. Blau = Patchpanel, Gruen = Dosen-Referenz, Orange = gewaehlter Raum. Netzwerkdosen sind immer 10 x 10. Zoom mit Mausrad, verschieben mit Shift + Drag.</p>
|
||||
<p class="floor-plan-position">Koordinate: <span id="floor-plan-position"></span></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user