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"); } }