296 lines
8.8 KiB
PHP
296 lines
8.8 KiB
PHP
<?php
|
|
|
|
class PopController extends mfBaseController
|
|
{
|
|
private $returUrl = "Network";
|
|
|
|
protected function init()
|
|
{
|
|
$this->needlogin = true;
|
|
$me = new User();
|
|
$me->loadMe();
|
|
$this->me = $me;
|
|
$this->layout()->set("me", $me);
|
|
|
|
if (!$me->is(["Admin", "netowner", "pipeplanner"])) {
|
|
$this->redirect("Dashboard");
|
|
}
|
|
}
|
|
|
|
protected function indexAction()
|
|
{
|
|
$networks = array_map(function($network) {
|
|
return [
|
|
"text" => $network->name,
|
|
"value" => $network->name
|
|
];
|
|
}, NetworkModel::getAll());
|
|
|
|
$pops = array_map(function($pop) {
|
|
return [
|
|
"id" => $pop->id,
|
|
"name" => $pop->name,
|
|
"networkArea" => $pop->networks,
|
|
"location" => $pop->location,
|
|
"state" => $pop->state,
|
|
"folder_link" => $pop->folder_link,
|
|
"doku_date" => $pop->doku_date,
|
|
"vlan" => [
|
|
"public" => $pop->vlan_public,
|
|
"nat" => $pop->vlan_nat,
|
|
"ipv6" => $pop->vlan_ipv6
|
|
],
|
|
"gps" => $pop->gps_lat . ", " . $pop->gps_long
|
|
];
|
|
}, PopModel::getAlladv());
|
|
|
|
$JSGlobals = ["BASE_URL" => self::getUrl(""),
|
|
"DASHBOARD_URL" => self::getUrl("Dashboard"),
|
|
"MFAPPNAME" => MFAPPNAME_SLUG,
|
|
"PAGE_TITLE" => "Pops",
|
|
"PATH" => [
|
|
["text" => MFAPPNAME_SLUG, "href" => self::getUrl("Dashboard")],
|
|
["text" => "Devices", "href" => self::getUrl("Pop")]
|
|
],
|
|
"NETWORKS" => $networks,
|
|
"POPS" => $pops,
|
|
"IS_ADMIN" => $this->me->is("Admin"),
|
|
];
|
|
|
|
$this->layout()->set("vueViewName", "Pop");
|
|
$this->layout()->set("JSGlobals", $JSGlobals);
|
|
$this->layout()->setTemplate("VueViews/Vue");
|
|
|
|
}
|
|
|
|
protected function detailAction()
|
|
{
|
|
$id = $this->request->id;
|
|
|
|
if (!is_numeric($id) || !$id) {
|
|
$this->layout()->setFlash("pop nicht gefunden", "error");
|
|
$this->redirect("Pop");
|
|
}
|
|
|
|
$pop = new Pop($id);
|
|
if ($pop->id != $id) {
|
|
$this->layout()->setFlash("Pop nicht gefunden", "error");
|
|
$this->redirect("Pop");
|
|
}
|
|
$popnetwork = PopNetworkModel::getbyPopid($id);
|
|
$stateArray=PopModel::$stateArray;
|
|
$this->layout()->set("stateArray", $stateArray);
|
|
$this->layout()->set("popnetwork", implode(', ' , $popnetwork['name']));
|
|
$this->layout()->setTemplate("Pop/Detail");
|
|
$filter['pop_id'] = $id;
|
|
$this->layout()->set("popracks", PoprackModel::getAllbyPop($id));
|
|
$this->layout()->set("devices", DeviceModel::search($filter));
|
|
$pops = PopModel::getOne($id);
|
|
$this->layout()->set("pops", $pops);
|
|
|
|
}
|
|
|
|
protected function addAction()
|
|
{
|
|
$stateArray=PopModel::$stateArray;
|
|
$this->layout()->set("stateArray", $stateArray);
|
|
$this->layout()->setTemplate("Pop/Form");
|
|
$this->layout()->set("networks", NetworkModel::getAll());
|
|
|
|
|
|
if ($this->request->network_id) {
|
|
$pop = new Pop();
|
|
$pop->network_id = $this->request->network_id;
|
|
$this->layout()->set("pop", $pop);
|
|
}
|
|
}
|
|
|
|
protected function editAction()
|
|
{
|
|
$id = $this->request->id;
|
|
|
|
if (!is_numeric($id) || !$id) {
|
|
$this->layout()->setFlash("POP nicht gefunden", "error");
|
|
$this->redirect("Network");
|
|
}
|
|
|
|
$pop = new Pop($id);
|
|
if ($pop->id != $id) {
|
|
$this->layout()->setFlash("POP nicht gefunden", "error");
|
|
$this->redirect("Network");
|
|
}
|
|
|
|
$popnetwork = PopNetworkModel::getbyPopid($id);
|
|
$this->layout()->set("popnetwork", $popnetwork['network_id']);
|
|
$this->layout()->set("pop", $pop);
|
|
$this->addAction();
|
|
}
|
|
|
|
protected function saveAction()
|
|
{
|
|
$r = $this->request;
|
|
$id = $r->id;
|
|
//var_dump($r);exit;
|
|
if (is_numeric($id) && $id > 0) {
|
|
$mode = "edit";
|
|
$pop = new Pop($id);
|
|
if (!$pop->id) {
|
|
$this->layout()->setFlash("POP nicht gefunden", "error");
|
|
$this->redirect("Network");
|
|
}
|
|
} else {
|
|
$mode = "add";
|
|
}
|
|
|
|
//var_dump($r->addresstypes);exit;
|
|
$this->log->debug(print_r($r, true));
|
|
if (!$r->network_id || !$r->name) {
|
|
$this->layout()->setFlash("Bitte Name und Netzgebiet eintragen", "error");
|
|
$this->layout()->set("pop", $pop);
|
|
unset($r->network_id);
|
|
return $this->add();
|
|
}
|
|
|
|
$data = [];
|
|
|
|
|
|
$data['name'] = $r->name;
|
|
$data['gps_lat'] = ($r->gps_lat) ? $r->gps_lat : null;
|
|
$data['gps_long'] = ($r->gps_long) ? $r->gps_long : null;
|
|
$data['location'] = $r->location;
|
|
$data['vlan_public'] = ($r->vlan_public) ? $r->vlan_public : null;
|
|
$data['vlan_nat'] = ($r->vlan_nat) ? $r->vlan_nat : null;
|
|
$data['vlan_ipv6'] = ($r->vlan_ipv6) ? $r->vlan_ipv6 : null;
|
|
$data['state'] = ($r->state) ? $r->state : null;
|
|
$data['folder_link'] = ($r->folder_link) ? $r->folder_link : null;
|
|
$data['doku_date'] = ($r->doku_date) ? strtotime($r->doku_date) : null;
|
|
$data['note'] = $r->note;
|
|
|
|
$data['edit_by'] = 1;
|
|
|
|
if ($mode == "add") {
|
|
$data['create_by'] = 1;
|
|
$pop = PopModel::create($data);
|
|
} else {
|
|
$pop->update($data);
|
|
}
|
|
|
|
|
|
$new_id = $pop->save();
|
|
|
|
|
|
if (!$new_id) {
|
|
$this->layout()->setFlash("Fehler beim Speichern", "error");
|
|
if (isset($network)) $this->layout()->set("network", $network);
|
|
$this->addAction();
|
|
}
|
|
|
|
if ($r->network_id) {
|
|
$oldPopnetworks = json_encode(PopNetworkModel::getbyPopid($new_id));
|
|
|
|
|
|
if ($oldPopnetworks != json_encode($r->network_id)) {
|
|
PopNetworkModel::deletebyPopid($new_id);
|
|
unset($data);
|
|
$data = [];
|
|
foreach ($r->network_id as $networkid) {
|
|
$data['network_id'] = $networkid;
|
|
$data['pop_id'] = $new_id;
|
|
$popNetwork = PopNetworkModel::create($data);
|
|
$popNetwork->save();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
if ($this->request->returnto) {
|
|
$returnAction = "Index";
|
|
$returnVariables = array();
|
|
$returnAnker = "";
|
|
|
|
|
|
if (strpos($this->request->returnto, "-") !== false) {
|
|
$urls = explode('-', $this->request->returnto);
|
|
$urlCounter = 0;
|
|
$returnUrl = "";
|
|
foreach ($urls as $url) {
|
|
if ($urlCounter > 0) {
|
|
$returnUrl .= "/";
|
|
}
|
|
$returnUrl .= ucfirst($url);
|
|
$urlCounter++;
|
|
}
|
|
$returnAction = "";
|
|
$returnVariables['id'] = $id;
|
|
$this->returUrl = $returnUrl;
|
|
} else {
|
|
$this->returUrl = ucfirst($this->request->returnto);
|
|
|
|
}
|
|
} else {
|
|
$returnAnker = "view=pops&net=" . $pop->network_id;
|
|
}
|
|
|
|
$this->layout()->setFlash("Pop erfolgreich gespeichert.", "success");
|
|
$this->redirect($this->returUrl, $returnAction, $returnVariables, $returnAnker);
|
|
}
|
|
|
|
protected function apiAction()
|
|
{
|
|
$do = $this->request->do;
|
|
$data = [];
|
|
|
|
switch ($do) {
|
|
case "getPops":
|
|
$return = $this->getPopsApi();
|
|
break;
|
|
default:
|
|
$return = false;
|
|
}
|
|
|
|
if (!is_array($return) || !count($return)) {
|
|
$data = ["status" => "error"];
|
|
$this->returnJson($data);
|
|
}
|
|
$data['status'] = "OK";
|
|
$data['result'] = $return;
|
|
$this->returnJson($data);
|
|
}
|
|
|
|
private function getPopsApi()
|
|
{
|
|
$network_id = $this->request->network_id;
|
|
if (!is_numeric($network_id) || $network_id < 1) {
|
|
return false;
|
|
}
|
|
|
|
$network = new Network($network_id);
|
|
if (!$network->id) {
|
|
return false;
|
|
}
|
|
|
|
$pops = [];
|
|
foreach ($network->pops as $pop) {
|
|
$pops[$pop->id] = $pop->name;
|
|
}
|
|
|
|
return ["pops" => $pops];
|
|
}
|
|
|
|
|
|
protected function deleteAction()
|
|
{
|
|
$id = $this->request->id;
|
|
|
|
|
|
$pop = new Pop($id);
|
|
|
|
if (!$pop->id || $pop->id != $id) {
|
|
$this->layout()->setFlash("Datei nicht gefunden.", "error");
|
|
$this->redirect("Pop");
|
|
}
|
|
|
|
$pop->delete();
|
|
$this->redirect("Pop");
|
|
}
|
|
} |