Files
thetool/Layout/default/Pop/Detail.php
Daniel Spitzer 4ef8e733a3 Poprack
Features:

* Komplettes kabelmanagement auf Rack He Modul Basis
2025-10-12 12:19:54 +02:00

897 lines
41 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 include(realpath(dirname(__FILE__) . "/../../$mfLayoutPackage") . "/header.php"); ?>
<link href="<?= self::getResourcePath() ?>assets/css/datatables-std.css?<?= $git_merge_ts ?>" rel="stylesheet"
type="text/css"/>
<style>
.card-border {
border-left: 1px solid #428bca;
border-left-width: 5px;
border-radius: 3px;
}
.font-weight-500 {
font-weight: 500;
}
.order-date-pill {
margin: 2px;
white-space: nowrap;
}
.rack-he:hover {
box-shadow: 2px 2px 5px 2px rgba(0, 0, 0, 0.31);
}
.rack-color-lwl {
background: rgb(159, 255, 96);
background: linear-gradient(180deg, rgb(129 223 68) 0%, rgb(62 155 3) 100%);
color: #000000;
padding-top: 2px;
}
.rack-color-device {
background: rgb(182, 198, 240);
background: linear-gradient(180deg, rgba(182, 198, 240, 1) 0%, rgb(131 158 255 / 82%) 100%);
font-weight: 500;
padding-top: 2px;
}
.rack-color-infra {
background: rgb(251 181 109);
background: linear-gradient(180deg, rgb(247 184 118) 0%, rgb(255 149 40) 100%);
font-weight: 500;
padding-top: 2px;
}
.rack-color-panel {
background: rgb(150, 243, 222);
background: linear-gradient(180deg, rgba(150, 243, 222, 1) 0%, rgba(87, 249, 212, 1) 100%);
font-weight: 500;
padding-top: 2px;
}
.rack-color-blocked {
background: rgb(255, 0, 0);
background: linear-gradient(180deg, rgba(255, 0, 0, 1) 0%, rgba(196, 0, 0, 1) 100%);
font-weight: 500;
padding-top: 2px;
color: #fff;
}
.rack-color-rpanel {
background: rgb(88, 201, 240);
background: linear-gradient(180deg, rgba(88, 201, 240, 1) 0%, rgba(64, 188, 231, 1) 100%);
font-weight: 500;
padding-top: 2px;
}
.user-select-none {
user-select: none;
}
.fa-edit {
margin-right: 5px;
margin-top: 2px;
cursor: pointer;
}
.rack-name {
}
.move-handle {
cursor: grab;
margin-left: 5px;
margin-top: 2px;
}
.move-handle:active {
cursor: grabbing;
}
.border-right {
border-right-color: #dee2e6 !important;
}
.form-control:disabled, .form-control[readonly] {
background-color: #d7d7d7;
opacity: 1;
}
.switch-rack-side {
margin-right: 8px;
margin-top: 2px;
cursor: pointer;
}
.cable-container {
display: flex;
width: 100%;
height: 100%;
align-items: stretch;
color: #000;
cursor: pointer;
}
.cable-item {
border-right: 1px solid #797979;
box-sizing: border-box;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: 12px;
line-height: 1.1;
color: #333;
background-color: #e1ffdf;
cursor: pointer;
overflow: hidden;
white-space: nowrap;
padding: 1px 0;
position: relative;
}
.cable-item .port-range, .cable-item .fiber-range {
font-size: 12px;
color: #040404;
font-weight: 500;
}
.cable-item:hover {
background-color: #cfffc8;
}
.cable-item:last-child {
border-right: none;
}
.cable-free {
flex-grow: 1;
}
.context-menu {
display: none;
position: absolute;
z-index: 1000;
width: 180px;
background-color: #fff;
border: 1px solid #ccc;
border-radius: 5px;
box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.15);
}
.context-menu ul {
list-style: none;
padding: 5px 0;
margin: 0;
}
.context-menu ul li {
padding: 8px 15px;
cursor: pointer;
font-size: 14px;
}
.context-menu ul li:hover {
background-color: #f0f0f0;
}
.context-menu ul li i {
margin-right: 10px;
color: #555;
}
#cable-context-menu {
position: absolute; /* Popper setzt top/left */
z-index: 20000;
transform: none !important; /* falls doch mal ein transform reingeschummelt wird */
}
.dropdown-menu[x-placement^=left], .dropdown-menu[x-placement^=right], .dropdown-menu[x-placement^=top] {
top: unset;
-webkit-animation: none !important;
animation: none !important;
}
.context-span {
min-width: 25px;
display: inline-block;
}
.dropdown-item {
padding: .3rem 1.2rem;
}
.w-10 {
width: 10% !important;
}
.cable-highlight {
background-color: #e6ff00 !important;
border: 2px solid #e0a800 !important;
color: #000;
}
/* NEU: Animation für das "Aufblinken" */
.cable-flash {
/*animation: flash-animation 1s;*/
}
@keyframes flash-animation {
0% {
transform: scale(1);
}
25% {
transform: scale(1.05);
}
50% {
transform: scale(1);
}
75% {
transform: scale(1.05);
}
100% {
transform: scale(1);
}
}
/* Sorgt dafür, dass die Autocomplete-Vorschläge über anderen Elementen liegen */
.ui-autocomplete {
z-index: 2000;
}
.module-highlight {
/*box-shadow: inset 0 0 0 3px #007bff !important; !* Ein auffälliger, blauer Innen-Rahmen *!*/
/*transition: box-shadow 0.3s ease-in-out;*/
}
.rack-color-lwl-planned {
background: rgb(255, 0, 0);
background: linear-gradient(180deg, rgba(255, 0, 0, 1) 0%, rgba(196, 0, 0, 1) 100%);
font-weight: 500;
padding-top: 2px;
color: #fff;
}
.port-info {
font-size: 12px;
font-weight: 500;
}
.cable-description
{
font-size: 12px;
font-style: italic;
color: #000000;
white-space: normal;
line-height: 1.2;
font-weight: 400;
}
</style>
<div class="row">
<div class="col-12">
<div class="page-title-box">
<div class="page-title-right">
<ol class="breadcrumb m-0">
<li class="breadcrumb-item"><a href="<?= self::getUrl("Dashboard") ?>"><?= MFAPPNAME_SLUG ?></a>
</li>
<li class="breadcrumb-item"><a href="<?= self::getUrl("Pop") ?>">Pops</a>
</li>
<li class="breadcrumb-item active">Pop Detail</li>
</ol>
</div>
<h4 class="page-title">Pop: <span class="font-weight-normal ml-1"><?= $pops->data->name ?></span> <span
class="ml-2">
<a href="<?= self::getUrl("Pop", "edit", ["id" => $pops->id, 'returnto' => "pop-detail"]) ?>">
<button class="btn btn-primary">Bearbeiten</button>
</a>
</span>
<button class="btn btn-success" data-popid="<?= $pops->id ?>" data-toggle="modal"
data-target="#rackModal"><i class="fas fa-plus"></i> Schrank hinzufügen
</button>
</h4>
</div>
</div>
</div>
<?php
$plugs[1] = "LC/APC";
$plugs[2] = "SC/APC";
$plugs[3] = "E2000/APC";
$vlans = "";
if (!empty(trim($pops->vlan_public)))
$vlans .= '<span class="order-date-pill active mb-0 d-inline-block d-lg-inline">Public: <span class="font-weight-500">' . $pops->vlan_public . '</span class="font-weight-500"></span>';
if (!empty(trim($pops->vlan_nat)))
$vlans .= '<span class="order-date-pill active mb-0 d-inline-block d-lg-inline">Nat: <span class="font-weight-500">' . $pops->vlan_nat . '</span></span>';
if (!empty(trim($pops->vlan_ipv6)))
$vlans .= '<span class="order-date-pill active mb-0 d-inline-block d-lg-inline">IPv6: <span class="font-weight-500">' . $pops->vlan_ipv6 . '</span></span>';
?>
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-12 col-lg-5 card-border">
<div>
<h4>Allgemeine Informationen </h4>
</div>
<div>
<table class="table table-sm">
<tbody>
<tr>
<th class="w-30">Netzgebiet</th>
<td><?= $popnetwork ?> </td>
</tr>
<tr>
<th>Name</th>
<td><?= $pops->name ?> </td>
</tr>
<tr>
<th>Standort</th>
<td>
<a title="Google-Maps: <?= rtrim($pops->gps_lat, '0') ?> , <?= $pops->gps_long ?>"
class="mapsLink"
href="http://maps.google.com/?q=<?= $pops->gps_lat ?> , <?= $pops->gps_long ?>"
target="_blank"><?= rtrim($pops->gps_lat, '0') ?>
, <?= rtrim($pops->gps_long, 0) ?></a></td>
</tr>
<tr>
<th class="text-nowrap">Standort Info</th>
<td><?= nl2br($pops->location) ?> </td>
</tr>
<tr>
<th class="text-nowrap">Access VLANs</th>
<td><?= $vlans ?> </td>
</tr>
<tr>
<th class="text-nowrap">Dokustand | Status</th>
<td><?= ($pops->doku_date) ? date("d.m.Y", $pops->doku_date) : '-' ?><span
class="ml-2 mr-2">|</span><?= ($pops->state) ? $stateArray[$pops->state] : '-' ?>
</td>
</tr>
<tr>
<th class="text-nowrap">Fotospeicherort</th>
<td><?php if ($pops->folder_link): ?> <a
href="file://<?= $pops->folder_link ?>"><?= $pops->folder_link ?></a><?php endif; ?>
</td>
</tr>
<tr>
<th class="text-nowrap">Interne Notiz</th>
<td><?= nl2br($pops->note) ?> </td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="col-12 col-lg-7 card-border">
<div>
<h4>Pop Devices</h4>
</div>
<?php
if (!empty($devices)) {
?>
<div>
<table id="datatable" class="table table-striped table-hover" style="width: 100%">
<thead>
<tr>
<th class="all">Geräte Name</th>
<th class="text-center ">Geräte Typ</th>
<th class="text-center ">Hersteller</th>
<th class="text-center all">IP-Adresse</th>
<th class="text-center ">Seriennummer</th>
<th class="text-center ">Preis</th>
<th title="maximale Leistung" class="text-center text-nowrap">max. P.</th>
</tr>
<tr id="filterrow" class="d-none d-lg-table-row">
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody class="font-13">
<?php
foreach ($devices as $device):
if (!empty($device->price)) {
$price = $device->price;
} else {
$price = $device->devicetype->price;
}
?>
<tr>
<td class="text-nowrap">
<a href="<?= self::getUrl("Device", "detail", ["id" => $device->id]) ?>"><?= $device->name ?></a>
</td>
<td class="text-center text-nowrap"><?= $device->devicetype->name ?></td>
<td class="text-center"><?= $device->devicetype->devicemanufactor->name ?></td>
<td class="text-center"><?= $device->ip ?></td>
<td class="text-center"><?= $device->serial ?></td>
<td class="text-right"><?= $price ?> €</td>
<td class="text-right"><?= $device->devicetype->power ?> Watt</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php
} else {
?>
<h5 class="text-center">Keine Devices vorhanden</h5>
<?php
}
?>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="rackModal" tabindex="-1" role="dialog" aria-labelledby="rackModalLabel"
aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="rackModalLabel">Schrank</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="form-group row">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="rack-name">Schrank Name*</label>
<div class="col-lg-6">
<input required="required" type="text" id="rack-name" name="rack-name"
class="form-control"/>
</div>
</div>
<div class="form-group row">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="rack-he">Höheneinheiten*</label>
<div class="col-lg-3">
<input required="required" type="number" min="1" max="50" id="rack-he" name="rack-he"
class="form-control"/>
</div>
</div>
<div class="alert alert-danger text-center" role="alert" style="display: none"></div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" id="rack-add">Schrank hinzufügen</button>
<button type="button" class="btn btn-primary" id="rack-update" style="display:none">Schrank
speichern
</button>
<button type="button" class="btn btn-danger" id="rack-remove" style="display:none">Schrank
entfernen
</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Abbrechen</button>
</div>
</div>
</div>
</div>
<?php if ($popracks) : ?>
<div class="modal fade bd-example-modal-xl" tabindex="-1" role="dialog" aria-labelledby="myExtraLargeModalLabel"
aria-hidden="true">
<div class="modal-dialog modal-xl">
<div class="modal-content">
...
</div>
</div>
</div>
<div class="modal fade " id="rackModuleModal" tabindex="-1" role="dialog" aria-labelledby="rackModuleModalLabel"
aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="rackModuleModalLabel">Modul hinzufügen</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="card">
<div class="card-body">
<div class="form-group row " id="module-slot-div" style="display:none">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="module-slot">19 Zoll Position</label>
<div class="col-lg-3">
<input type="hidden" value="front" id="module-side" name="module-side"/>
<select required="required" id="module-slot" name="module-slot"
class="form-control">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
</div>
</div>
<div class="form-group row">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="module-type">Modul Typ*</label>
<div class="col-lg-6">
<select required="required" id="module-type" name="module-type"
class="form-control">
<option value="0">LWL Patch Panel</option>
<option value="1">Device</option>
<option value="2">Rangierpanel</option>
<option value="4">CU Patch Panel</option>
<option value="3">Infrastruktur</option>
<option value="5">Geblockt</option>
</select>
</div>
</div>
<div class="form-group row" id="module-status-div" style="display: none;">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="module-status">Status*</label>
<div class="col-lg-6">
<select required="required" id="module-status" name="module-status"
class="form-control">
<option value="productive">Produktiv</option>
<option value="planned">Geplant</option>
</select>
</div>
</div>
<div class="form-group row" id="module-name-div">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="module-name">Modul Name*</label>
<div class="col-lg-6">
<input required="required" type="text" id="module-name" name="module-name"
class="form-control"/>
</div>
</div>
<div class="form-group row" id="module-device-div">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="module-device-id">Device*</label>
<div class="col-lg-6">
<select required="required" id="module-device-id" name="module-type"
class="form-control">
<?php foreach ($devices as $device): ?>
<option value="<?= $device->id ?>"><?= $device->name ?></option>
<?php endforeach; ?>
</select>
<label class="col-form-label" id="module-device-text"></label>
</div>
</div>
<div class="form-group row" id="module-ports-div">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="module-ports">Ports</label>
<div class="col-lg-6">
<select required="required" id="module-ports" name="module-ports"
class="form-control">
<option value="96" data-plugs="1;2">96</option>
<option selected="selected" value="48" data-plugs="1;2">48</option>
<option value="24" data-plugs="2;3">24</option>
<option value="12" data-plugs="2;3">12</option>
</select>
</div>
</div>
<div class="form-group row" id="module-plug-div">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="module-plug">Stecker</label>
<div class="col-lg-6">
<select required="required" id="module-plug" name="module-plug"
class="form-control">
<option value="1">LC/APC</option>
<option value="2">SC/APC</option>
<option style="display: none" value="3">E2000/APC</option>
</select>
</div>
</div>
<div class="form-group row">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="he-start">Start HE*</label>
<div class="col-lg-3" id="he-start-div">
</div>
</div>
<div class="form-group row">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="he-count">Anzahl HE*</label>
<div class="col-lg-3" id="he-count-div">
</div>
</div>
<div class="form-group row">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="">Größe</label>
<div class="col-lg-4">
<select required="required" id="module-width" name="module-width"
class="form-control">
<option value="12">19 Zoll</option>
<option value="6">1/2 19 Zoll</option>
<option value="4">1/3 19 Zoll</option>
<option value="3">1/4 19 Zoll</option>
</select>
</div>
</div>
<div class="form-group row" id="module-position-div" style="display: none">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="">Position</label>
<div class="col-lg-4">
<select required="required" id="module-position" name="module-position"
class="form-control">
</select>
</div>
</div>
<div class="alert alert-danger text-center" role="alert" style="display: none"></div>
</div>
</div>
</div>
<div class="modal-footer">
<button id="module-add" type="button" class="btn btn-primary">Modul hinzufügen</button>
<button id="module-update" type="button" class="btn btn-primary">Modul Speichern</button>
<button id="module-remove" type="button" class="btn btn-danger" style="display:none">Modul
entfernen
</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Abbrechen</button>
</div>
</div>
</div>
</div>
<div class="row" id="pop-rack-div" style="display:none">
<div class="col-12">
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-12 card-border">
<div class="row align-items-center mb-2">
<div class="col-md-2">
<h4>Schränke</h4>
</div>
<div class="col-md-3 justify-content-center">
<div class="">
<label for="cable-search" class="mr-2">Kabelsuche:</label>
<select id="cable-search" class="form-control form-select">
<option></option>
</select>
</div>
</div>
</div>
<div id="sortracklist" class="row" data-popid="<?= $pops->id ?>">
<?php foreach ($popracks as $poprack) : ?>
<div class="col-lg-4 col-12 list-group-item-move mb-3">
<table class="w-100 p-0 font-13"
style="max-width: 100%; box-shadow: 2px 2px 5px 2px rgba(0,0,0,0.31);border-radius: 5px 5px 5px 5px;">
<thead>
<tr>
<th colspan="13"
class="text-center border-bottom font-15 pt-1 pb-1"
data-rackhe="<?= $poprack['rack']['he'] ?>"
data-rackid="<?= $poprack['rack']['id']; ?>"><span
class="rack-name"><i
class="fa-regular fa-arrows-up-down-left-right move-handle float-left"></i><?= $poprack['rack']['name']; ?>&nbsp;<span
class="rack-side-indicator font-weight-normal">-&nbsp;Vorderseite</span></span>
<i class="fas fa-sync-alt float-right switch-rack-side"
title="Seite wechseln"></i>
<i class="far fa-edit float-right" title="Bearbeiten"
data-toggle="modal" data-target="#rackModal"></i>
</th>
</tr>
</thead>
<tbody id="rack-body-<?= $poprack['rack']['id'] ?>" data-side="front">
<?php
$modules_to_render = $poprack['modules']['front'] ?? [];
$rack_he = $poprack['rack']['he'];
include('_rack_body.php');
?>
</tbody>
</table>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<?php endif; ?>
<div class="modal fade" id="cableModal" tabindex="-1" role="dialog" aria-labelledby="cableModalLabel"
aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="cableModalLabel">Kabel auf Patch Panel legen</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div class="card">
<div class="card-body">
<input type="hidden" id="cable-poprackmodule-id" name="poprackmodule_id">
<div class="form-group row">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="cable-name">Kabel-Name*</label>
<div class="col-lg-6">
<input required="required" type="text" id="cable-name" name="cable-name"
class="form-control"
placeholder="z.B. K001"/>
</div>
</div>
<div class="form-group row">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="port-start">Start-Port*</label>
<div class="col-lg-3">
<input required="required" type="number" min="1" id="port-start" name="port-start"
class="form-control"/>
</div>
</div>
<div class="form-group row">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="port-end">End-Port*</label>
<div class="col-lg-3">
<input required="required" type="number" min="1" id="port-end" name="port-end"
class="form-control"/>
</div>
</div>
<div class="form-group row">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="fiber-start">Faser von</label>
<div class="col-lg-3">
<input type="number" min="1" id="fiber-start" name="fiber-start" class="form-control"/>
</div>
</div>
<div class="form-group row">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="fiber-end">Faser bis</label>
<div class="col-lg-3">
<input type="number" min="1" id="fiber-end" name="fiber-end" class="form-control"/>
</div>
</div>
<div class="form-group row">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="cable-description">Beschreibung</label>
<div class="col-lg-6">
<textarea id="cable-description" name="cable-description" class="form-control" rows="3"></textarea>
</div>
</div>
<div class="alert alert-danger text-center" role="alert" style="display: none"
id="cable-modal-alert"></div>
</div>
</div>
</div>
<div class="modal-footer">
<button id="cable-add-button" type="button" class="btn btn-primary">Kabel hinzufügen</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Abbrechen</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="cableEditModal" tabindex="-1" role="dialog" aria-labelledby="cableEditModalLabel"
aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="cableEditModalLabel">Kabel bearbeiten</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">×</span></button>
</div>
<div class="modal-body">
<div class="card">
<div class="card-body">
<input type="hidden" id="edit-cable-id">
<div class="form-group row">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="edit-cable-name">Kabel-Name*</label>
<div class="col-lg-6">
<input required="required" type="text" id="edit-cable-name" class="form-control"/>
</div>
</div>
<div class="form-group row">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="edit-port-start">Start-Port*</label>
<div class="col-lg-3">
<input required="required" type="number" min="1" id="edit-port-start"
class="form-control"/>
</div>
</div>
<div class="form-group row">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="edit-port-end">End-Port*</label>
<div class="col-lg-3">
<input required="required" type="number" min="1" id="edit-port-end"
class="form-control"/>
</div>
</div>
<div class="form-group row">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="edit-fiber-start">Faser von</label>
<div class="col-lg-3">
<input type="number" min="1" id="edit-fiber-start" name="fiber-start"
class="form-control"/>
</div>
</div>
<div class="form-group row">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="edit-fiber-end">Faser bis</label>
<div class="col-lg-3">
<input type="number" min="1" id="edit-fiber-end" name="fiber-end" class="form-control"/>
</div>
</div>
<div class="form-group row">
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="cable-description">Beschreibung</label>
<div class="col-lg-6">
<textarea id="edit-cable-description" name="cable-description" class="form-control" rows="3"></textarea>
</div>
</div>
<div class="alert alert-danger text-center" role="alert" style="display: none"
id="cable-edit-modal-alert"></div>
</div>
</div>
</div>
<div class="modal-footer">
<button id="cable-update-button" type="button" class="btn btn-primary">Änderungen speichern</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Abbrechen</button>
</div>
</div>
</div>
</div>
<div id="cable-context-menu" class="dropdown-menu" style="display:none;">
<a class="dropdown-item" href="#" data-action="view"><span class="context-span"><i
class="fas fa-eye fa-fw"></i></span> Ansehen</a>
<a class="dropdown-item" href="#" data-action="edit"><span class="context-span"><i
class="fas fa-edit fa-fw"></i></span> Bearbeiten</a>
<a class="dropdown-item" href="#" data-action="delete"><span class="context-span"><i class="fas fa-trash fa-fw"></i></span>
Löschen</a>
</div>
<script type="text/javascript" src="<?= self::getResourcePath() ?>assets/js/Sortable.js?<?= $git_merge_ts ?>"></script>
<script type="text/javascript">
var hidesearch = [5, 6];
let trigger;
let linkSorTracklist = "<?= self::getUrl("Poprack", "api", ['do' => 'sortRack']) ?>";
let linkAddModule = "<?= self::getUrl("Poprackmodule", "api", ['do' => 'addModule']) ?>";
let linkRemoveModule = "<?= self::getUrl("Poprackmodule", "api", ['do' => 'removeModule']) ?>";
let linkGenerateRack = "<?= self::getUrl("Poprack", "api", ['do' => 'generateRack']) ?>";
let linkUpdateModule = "<?= self::getUrl("Poprackmodule", "api", ['do' => 'updateModule']) ?>";
let linkEditRack = "<?= self::getUrl("Poprack", "api", ['do' => 'editRack']) ?>";
let linkAddRack = "<?= self::getUrl("Poprack", "api", ['do' => 'addRack']) ?>";
let linkRemoveRack = "<?= self::getUrl("Poprack", "api", ['do' => 'removeRack']) ?>";
let linkAddCable = "<?= self::getUrl("Poprackmodulecable", "api", ['do' => 'addCable']) ?>";
let linkRemoveCable = "<?= self::getUrl("Poprackmodulecable", "api", ['do' => 'removeCable']) ?>";
let linkUpdateCable = "<?= self::getUrl("Poprackmodulecable", "api", ['do' => 'updateCable']) ?>";
</script>
<script type="text/javascript" src="<?= self::getResourcePath() ?>js/pages/pop/detail.js?<?= $git_merge_ts ?>"></script>
<script type="text/javascript"
src="<?= self::getResourcePath() ?>assets/js/datatables-std.js?<?= $git_merge_ts ?>"></script>
<?php include(realpath(dirname(__FILE__) . "/../../$mfLayoutPackage") . "/footer.php"); ?>