284 lines
12 KiB
PHP
284 lines
12 KiB
PHP
<?php
|
|
|
|
class PoprackmodulecableController extends mfBaseController
|
|
{
|
|
|
|
protected function init()
|
|
{
|
|
$this->needlogin = true;
|
|
$me = new User();
|
|
$me->loadMe();
|
|
$this->me = $me;
|
|
$this->layout()->set("me", $me);
|
|
|
|
if (!$me->is(["Admin"])) {
|
|
$this->redirect("Dashboard");
|
|
}
|
|
}
|
|
protected function apiAction()
|
|
{
|
|
$do = $this->request->do;
|
|
$me = new User(); // Annahme, dass der User geladen werden muss für create_by etc.
|
|
$me->loadMe();
|
|
|
|
switch ($do) {
|
|
case "addCable":
|
|
$data = [
|
|
'poprackmodule_id' => $this->request->poprackmodule_id,
|
|
'cable_name' => trim($this->request->cable_name),
|
|
'port_start' => (int)$this->request->port_start,
|
|
'port_end' => (int)$this->request->port_end,
|
|
'fiber_start' => ($this->request->fiber_start) ? (int)$this->request->fiber_start : null,
|
|
'fiber_end' => ($this->request->fiber_end) ? (int)$this->request->fiber_end : null,
|
|
'description' => trim($this->request->description) ?: null,
|
|
'create_by' => $this->me->id,
|
|
'edit_by' => $this->me->id,
|
|
];
|
|
|
|
$module = new Poprackmodule($data['poprackmodule_id']);
|
|
if (!$module->id) {
|
|
$this->returnJson(['success' => false, 'error' => 'Modul nicht gefunden.']);
|
|
return;
|
|
}
|
|
if (empty($data['cable_name']) || empty($data['port_start']) || empty($data['port_end'])) {
|
|
$this->returnJson(['success' => false, 'error' => 'Alle Felder sind Pflichtfelder.']);
|
|
return;
|
|
}
|
|
if ($data['port_start'] > $data['port_end'] || $data['port_start'] < 1 || $data['port_end'] > $module->ports) {
|
|
$this->returnJson(['success' => false, 'error' => 'Ungültiger Port-Bereich. Ports müssen zwischen 1 und ' . $module->ports . ' liegen.']);
|
|
return;
|
|
}
|
|
if ($data['fiber_start'] && $data['fiber_end']) {
|
|
if ($data['fiber_start'] > $data['fiber_end']) {
|
|
$this->returnJson(['success' => false, 'error' => 'Faser-Start muss kleiner oder gleich Faser-Ende sein.']);
|
|
return;
|
|
}
|
|
$portCount = $data['port_end'] - $data['port_start'] + 1;
|
|
$fiberCount = $data['fiber_end'] - $data['fiber_start'] + 1;
|
|
if ($fiberCount > $portCount) {
|
|
$this->returnJson(['success' => false, 'error' => 'Anzahl der Fasern (' . $fiberCount . ') darf nicht größer als die der Ports (' . $portCount . ') sein.']);
|
|
return;
|
|
}
|
|
}
|
|
$existingCables = PoprackmodulecableModel::getForModule($data['poprackmodule_id']);
|
|
$newStart = $data['port_start'];
|
|
$newEnd = $data['port_end'];
|
|
|
|
foreach ($existingCables as $existingCable) {
|
|
// Die Formel zur Prüfung auf Überlappung lautet: (StartA <= EndeB) und (EndeA >= StartB)
|
|
if ($newStart <= $existingCable->port_end && $newEnd >= $existingCable->port_start) {
|
|
$this->returnJson([
|
|
'success' => false,
|
|
'error' => 'Port-Bereich (' . $newStart . '-' . $newEnd . ') kollidiert mit Kabel "' . $existingCable->cable_name . '" (' . $existingCable->port_start . '-' . $existingCable->port_end . ').'
|
|
]);
|
|
return; // Wichtig: Abbruch, wenn eine Kollision gefunden wurde
|
|
}
|
|
}
|
|
$cable = PoprackmodulecableModel::create($data);
|
|
$newId = $cable->save();
|
|
|
|
$this->returnJson(['success' => (bool)$newId]);
|
|
break;
|
|
case "updateCable":
|
|
$cable_id = $this->request->id;
|
|
$cable = new Poprackmodulecable($cable_id);
|
|
if (!$cable->id) {
|
|
$this->returnJson(['success' => false, 'error' => 'Kabel nicht gefunden']);
|
|
return;
|
|
}
|
|
$data = [
|
|
'cable_name' => trim($this->request->cable_name),
|
|
'port_start' => (int)$this->request->port_start,
|
|
'port_end' => (int)$this->request->port_end,
|
|
'fiber_start' => ($this->request->fiber_start) ? (int)$this->request->fiber_start : null,
|
|
'fiber_end' => ($this->request->fiber_end) ? (int)$this->request->fiber_end : null,
|
|
'description' => trim($this->request->description) ?: null, // NEU
|
|
'edit_by' => $this->me->id,
|
|
];
|
|
$module = new Poprackmodule($cable->poprackmodule_id);
|
|
if (!$module->id) {
|
|
$this->returnJson(['success' => false, 'error' => 'Zugehöriges Modul nicht gefunden.']);
|
|
return;
|
|
}
|
|
if (empty($data['cable_name']) || empty($data['port_start']) || empty($data['port_end'])) {
|
|
$this->returnJson(['success' => false, 'error' => 'Alle Felder sind Pflichtfelder.']);
|
|
return;
|
|
}
|
|
if ($data['port_start'] > $data['port_end'] || $data['port_start'] < 1 || $data['port_end'] > $module->ports) {
|
|
$this->returnJson(['success' => false, 'error' => 'Ungültiger Port-Bereich. Ports müssen zwischen 1 und ' . $module->ports . ' liegen.']);
|
|
return;
|
|
}
|
|
if (($data['fiber_start'] && $data['fiber_end'])) {
|
|
if ($data['fiber_start'] > $data['fiber_end']) {
|
|
$this->returnJson(['success' => false, 'error' => 'Faser-Start muss kleiner oder gleich Faser-Ende sein.']);
|
|
return;
|
|
}
|
|
$portCount = $data['port_end'] - $data['port_start'] + 1;
|
|
$fiberCount = $data['fiber_end'] - $data['fiber_start'] + 1;
|
|
if ($fiberCount > $portCount) {
|
|
$this->returnJson(['success' => false, 'error' => 'Anzahl der Fasern (' . $fiberCount . ') darf nicht größer als die der Ports (' . $portCount . ') sein.']);
|
|
return;
|
|
}
|
|
}
|
|
$existingCables = PoprackmodulecableModel::getForModule($cable->poprackmodule_id);
|
|
$newStart = $data['port_start'];
|
|
$newEnd = $data['port_end'];
|
|
|
|
foreach ($existingCables as $existingCable) {
|
|
if ($existingCable->id == $cable_id) {
|
|
continue;
|
|
}
|
|
if ($newStart <= $existingCable->port_end && $newEnd >= $existingCable->port_start) {
|
|
$this->returnJson([
|
|
'success' => false,
|
|
'error' => 'Port-Bereich (' . $newStart . '-' . $newEnd . ') kollidiert mit Kabel "' . $existingCable->cable_name . '" (' . $existingCable->port_start . '-' . $existingCable->port_end . ').'
|
|
]);
|
|
return;
|
|
}
|
|
}
|
|
|
|
$cable->update($data);
|
|
$cable->save();
|
|
|
|
$this->returnJson(['success' => true]);
|
|
break;
|
|
|
|
case "removeCable":
|
|
$cable_id = $this->request->id;
|
|
if (!is_numeric($cable_id)) {
|
|
$this->returnJson(['success' => false, 'error' => 'Ungültige ID.']);
|
|
return;
|
|
}
|
|
|
|
$cable = new Poprackmodulecable($cable_id);
|
|
if ($cable->id) {
|
|
$cable->delete();
|
|
$this->returnJson(['success' => true]);
|
|
} else {
|
|
$this->returnJson(['success' => false, 'error' => 'Kabel nicht gefunden']);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
$this->returnJson(['success' => false, 'error' => 'Unbekannte Aktion']);
|
|
break;
|
|
}
|
|
}
|
|
protected function indexAction()
|
|
{
|
|
|
|
$this->layout()->setTemplate("Poprackmodulecable/Index");
|
|
$poprackmodulecables = PoprackmodulecableModel::getAll();
|
|
$this->layout()->set("poprackmodulecables", $poprackmodulecables);
|
|
|
|
}
|
|
|
|
protected function addAction()
|
|
{
|
|
$poprackmodules=PoprackmoduleModel::getAll();
|
|
$this->layout()->set("poprackmodules", $poprackmodules);
|
|
|
|
$this->layout()->setTemplate("Poprackmodulecable/Form");
|
|
|
|
}
|
|
|
|
protected function editAction()
|
|
{
|
|
$id = $this->request->id;
|
|
|
|
if (!is_numeric($id) || !$id) {
|
|
$this->layout()->setFlash("dfsdf nicht gefunden", "error");
|
|
$this->redirect("Poprackmodulecable");
|
|
}
|
|
|
|
$poprackmodulecables = new Poprackmodulecable($id);
|
|
if ($poprackmodulecables->id != $id) {
|
|
$this->layout()->setFlash("dfsdf nicht gefunden", "error");
|
|
$this->redirect("Poprackmodulecable");
|
|
}
|
|
|
|
$this->layout()->set("poprackmodulecables", $poprackmodulecables);
|
|
return $this->addAction();
|
|
}
|
|
|
|
protected function saveAction()
|
|
{
|
|
$r = $this->request;
|
|
$id = $r->id;
|
|
//var_dump($r->get());exit;
|
|
if (is_numeric($id) && $id > 0) {
|
|
$mode = "edit";
|
|
$poprackmodulecables = new Poprackmodulecable($id);
|
|
if (!$poprackmodulecables->id) {
|
|
$this->layout()->setFlash("dfsdf nicht gefunden", "error");
|
|
$this->redirect("Poprackmodulecable");
|
|
}
|
|
} else {
|
|
$mode = "add";
|
|
}
|
|
|
|
$data = [];
|
|
$data['poprackmodule_id'] = trim($r->poprackmodule_id);
|
|
$data['cable_name'] = trim($r->cable_name);
|
|
$data['port_start'] = trim($r->port_start);
|
|
$data['port_end'] = trim($r->port_end);
|
|
|
|
|
|
if (!$data['poprackmodule_id']) {
|
|
$data['poprackmodule_id']=NULL;
|
|
}
|
|
if (!$data['cable_name']) {
|
|
$data['cable_name']=NULL;
|
|
}
|
|
if (!$data['port_start']) {
|
|
$data['port_start']=NULL;
|
|
}
|
|
if (!$data['port_end']) {
|
|
$data['port_end']=NULL;
|
|
}
|
|
|
|
|
|
// var_dump($_FILES);
|
|
// var_dump($upload);
|
|
// exit;
|
|
|
|
|
|
if ($mode == "edit") {
|
|
$poprackmodulecables->update($data);
|
|
|
|
} else {
|
|
$poprackmodulecables = PoprackmodulecableModel::create($data);
|
|
}
|
|
// var_dump($filestore);
|
|
// exit;
|
|
$id = $poprackmodulecables->save();
|
|
|
|
if (!$id) {
|
|
$this->layout()->setFlash("dfsdf konnte nicht angelegt werden", "error");
|
|
$this->redirect("Poprackmodulecable");
|
|
}
|
|
|
|
if ($mode == "edit") {
|
|
$this->layout()->setFlash("dfsdf erfolgreich geändert", "success");
|
|
} else if ($mode = "add") {
|
|
$this->layout()->setFlash("dfsdf erfolgreich angelegt", "success");
|
|
}
|
|
$this->redirect("Poprackmodulecable");
|
|
}
|
|
|
|
|
|
protected function deleteAction()
|
|
{
|
|
$id = $this->request->id;
|
|
$poprackmodulecables = new Poprackmodulecable($id);
|
|
if (!$poprackmodulecables->id || $poprackmodulecables->id != $id) {
|
|
$this->layout()->setFlash("dfsdf nicht gefunden.", "error");
|
|
$this->redirect("Poprackmodulecable");
|
|
}
|
|
|
|
$poprackmodulecables->delete();
|
|
$this->redirect("Poprackmodulecable");
|
|
}
|
|
|
|
}
|