From 8a8de499c6c3e789b1e90bf30a402f77b78ce4bb Mon Sep 17 00:00:00 2001 From: Frank Schubert Date: Thu, 15 Jul 2021 22:48:35 +0200 Subject: [PATCH] Building/Form: pop is updated when network is changed --- Layout/default/Building/Form.php | 74 ++++++++++++++++++++- application/Building/BuildingController.php | 4 ++ application/Pop/PopController.php | 44 +++++++++++- lib/Gmaps/Geocoding.php | 8 ++- 4 files changed, 123 insertions(+), 7 deletions(-) diff --git a/Layout/default/Building/Form.php b/Layout/default/Building/Form.php index 5a6723485..f471269c7 100644 --- a/Layout/default/Building/Form.php +++ b/Layout/default/Building/Form.php @@ -190,7 +190,7 @@
- is("Admin")) ? "disabled='disabled'" : ""?>> @@ -202,6 +202,38 @@
+

Berechtigungen

+
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+
@@ -241,13 +273,46 @@ // disable mousewheel on input number field when in focus $('form').on('focus', 'input[type=number]', function (e) { $(this).on('wheel.disableScroll', function (e) { - e.preventDefault() + e.preventDefault(); }) }); $('form').on('blur', 'input[type=number]', function (e) { - $(this).off('wheel.disableScroll') + $(this).off('wheel.disableScroll'); }); + function updatePops() { + var network_id = $("#network_id").val(); + if(!network_id) { + return true; + } + // get new pops + $.get("", + { + "do": "getPops", + network_id: network_id + }, + function(success) { + if(success.status == "OK") { + console.log(success); + pops = success.result.pops; + if(typeof pops !== 'object' || pops === null) { + return true; + } + $("#pop_id option:gt(0)").remove(); + console.log(pops); + for(var pop_id in pops) { + console.log(pop_id + ": " + pops[pop_id]); + $("#pop_id").append($("").attr("value", pop_id).text(pops[pop_id])); + } + } + }, + 'json' + ); + } + + $("#network_id").change(function() { + updatePops(); + }); @@ -278,6 +343,9 @@ + $( document ).ready(function() { + updatePops(); + }); diff --git a/application/Building/BuildingController.php b/application/Building/BuildingController.php index e74a5f8ad..33f1a9dea 100644 --- a/application/Building/BuildingController.php +++ b/application/Building/BuildingController.php @@ -24,6 +24,8 @@ class BuildingController extends mfBaseController { $this->layout()->set("networks", NetworkModel::getAll()); $this->layout()->set("types", BuildingtypeModel::getAll()); $this->layout()->set("statuses", BuildingstatusModel::getAll()); + $this->layout()->set("pipeworkers", AddressModel::search(["addresstype" => ["pipeworker"]])); + $this->layout()->set("lineworkers", AddressModel::search(["addresstype" => ["lineworker"]])); } protected function editAction() { @@ -70,6 +72,7 @@ class BuildingController extends mfBaseController { $data['type_id'] = $r->type_id; $data['status_id'] = ($r->status_id) ? $r->status_id : null; $data['pipeworker_id'] = ($r->pipeworker_id) ? $r->pipeworker_id : null; + $data['lineworker_id'] = ($r->lineworker_id) ? $r->lineworker_id : null; $data['oan_id'] = $r->oan_id; $data['street'] = $r->street; @@ -118,6 +121,7 @@ class BuildingController extends mfBaseController { 'street' => $building->street ]; $coords = Gmaps_Geocoding::getCoords($search); + if(is_array($coords) && count($coords) == 2) { $building->gps_lat = str_replace(",",".",$coords[0]); $building->gps_long = str_replace(",",".",$coords[1]); diff --git a/application/Pop/PopController.php b/application/Pop/PopController.php index 80b9ee326..00e4e3c38 100644 --- a/application/Pop/PopController.php +++ b/application/Pop/PopController.php @@ -72,8 +72,8 @@ class PopController extends mfBaseController { $data = []; $data['network_id'] = $r->network_id; $data['name'] = $r->name; - $data['gps_lat'] = $r->gps_lat; - $data['gps_long'] = $r->gps_long; + $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; @@ -101,4 +101,44 @@ class PopController extends mfBaseController { $this->layout()->setFlash("Netzgebiet erfolgreich gespeichert.", "success"); $this->redirect("Network", "Index", [], "view=pops&net=".$pop->network_id); } + + 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]; + } } \ No newline at end of file diff --git a/lib/Gmaps/Geocoding.php b/lib/Gmaps/Geocoding.php index f9f47b005..ba2ba8aab 100644 --- a/lib/Gmaps/Geocoding.php +++ b/lib/Gmaps/Geocoding.php @@ -30,15 +30,19 @@ class Gmaps_Geocoding { $url .= "&components=$component_string"; } - $log->debug(__FILE__.": $url"); + //$log->debug(__FILE__.": $url"); $resp = file_get_contents($url); //print_r($resp); if($resp) { $json = json_decode($resp); + if($json->status != "OK") { + $log->warn(__FILE__.": No Results ($url)"); + return false; + } $results = $json->results; if(count($results) > 1) { - $log->warn(__FILE__."> Got more then 1 result. Aborting."); + $log->warn(__FILE__.": Got more then 1 result. Aborting. ($url)"); return false; } $lat = $results[0]->geometry->location->lat;