needlogin = true; $me = new User(); $me->loadMe(); $this->me = $me; $this->layout()->set("me", $me); if (!$me->is(["Admin"])) { $this->redirect("Dashboard"); } } protected function indexAction() : void { $this->layout()->setTemplate("ConstructionConsent/Index"); if ($this->request->resetFilter) { unset($_SESSION[MFAPPNAME . '-ConstructionConsent-filter']); $this->redirect("ConstructionConsent"); } $filter = []; if (is_array($this->request->filter)) { $filter = $this->request->filter; $_SESSION[MFAPPNAME . '-ConstructionConsent-filter'] = $filter; } else { if (array_key_exists(MFAPPNAME . '-ConstructionConsent-filter', $_SESSION) && count($_SESSION[MFAPPNAME . '-ConstructionConsent-filter'])) { $filter = $_SESSION[MFAPPNAME . '-ConstructionConsent-filter']; } } $this->layout->set("filter", $filter); $filter = $this->getPreparedFilter($filter); // pagination defaults $pagination = []; $pagination['start'] = 0; $pagination['count'] = 20; $pagination['maxItems'] = 0; if (is_numeric($this->request->s)) { $pagination['start'] = intval($this->request->s); } //var_dump($filter);exit; $pagination['maxItems'] = ConstructionConsent::count($filter); $this->layout()->set("pagination", $pagination); $items = ConstructionConsent::search($filter); $this->layout->set("items", $items); } private function getPreparedFilter($filter) : array { $new_filter = []; if (is_array($filter) && count($filter)) { foreach ($filter as $name => $value) { $new_filter[$name] = $value; } } return $new_filter; } protected function addAction() : void { $this->layout()->setTemplate("ConstructionConsent/Form"); } protected function editAction() : void { $id = $this->request->id; if(!is_numeric($id) || $id < 1) { $this->layout()->setFlash("Zustimmungserklärung nicht gefunden", "error"); $this->redirect("ConstructionConsent"); } $item = new ConstructionConsent($id); if(!$item || !$item->id) { $this->layout()->setFlash("Zustimmungserklärung nicht gefunden", "error"); $this->redirect("ConstructionConsent"); } $this->layout()->set("item", $item); $this->addAction(); } protected function apiAction() { if(!$this->me->is(["Admin","netowner"]) && !$this->me->can("Preorder")) { $this->redirect("Dashboard"); } $do = $this->request->do; $data = []; switch($do) { case "findStreet": $return = $this->findStreetApi(); break; default: $this->log->warn(__METHOD__ . ": Called API function '$do' does not exist"); $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 findStreetApi() { $addresses = []; $search = trim($this->request->q); $project_id = $this->request->project_id; $scluster_ids = []; if($project_id) { $project = new ConstructionConsentProject($project_id); if(!$project->id) { header("Content-Type: application/json"); echo json_encode(["results" => []]); exit; } foreach($project->adb_networks as $network) { $scluster_ids[] = $network->id; } } else { // get all salesclusters foreach(ADBNetzgebietModel::getAll() as $network) { $scluster_ids[] = $network->id; } } $results = []; $search_parts = explode(" ", $search); $ort_search = $strasse_search = $plz_search = $hausnummer_search = $gst_search = []; foreach($search_parts as $p) { $p = $this->db->escape(trim($p)); if(!$p) continue; $ort_search[] = "ortschaft like '$p%'"; $strasse_search[] = "strasse like '$p%'"; $plz_search[] = "plz like '%$p%'"; $hausnummer_search[] = "hausnummer like '%$p%'"; $gst_search[] = "grund_nr like '%$p%'"; } $where = "1=1"; if(count($scluster_ids)) { $where .= " AND netzgebiet_id IN (".implode(', ',$scluster_ids).")"; } /*if($include_gst) { $sql = "SELECT * FROM view_hausnummer WHERE $where AND ((".implode(" OR ", $ort_search).") OR (".implode(" OR ", $strasse_search).") OR (".implode(" OR ", $plz_search).") OR (".implode(" OR ", $hausnummer_search).") OR (".implode(" OR ", $gst_search).") ) ORDER BY strasse, LENGTH(hausnummer), hausnummer"; } else { $sql = "SELECT * FROM view_hausnummer WHERE $where AND ((".implode(" OR ", $ort_search).") OR (".implode(" OR ", $strasse_search).") OR (".implode(" OR ", $plz_search).") OR (".implode(" OR ", $hausnummer_search).")) ORDER BY strasse, LENGTH(hausnummer), hausnummer"; }*/ $sql = "SELECT strasse_id,plz,ortschaft,strasse FROM view_hausnummer WHERE $where AND ((".implode(" OR ", $ort_search).") OR (".implode(" OR ", $strasse_search).") OR (".implode(" OR ", $plz_search).") OR (".implode(" OR ", $hausnummer_search).")) GROUP BY plz,ortschaft,strasse,strasse_id ORDER BY strasse "; $this->log->debug($sql); $adb = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); $res = $adb->query($sql); $this->log->debug("done"); if(!$adb->num_rows($res)) { header("Content-Type: application/json"); echo json_encode(["results" => []]); exit; } while($data = $adb->fetch_object($res)) { //$address_string = $data->plz." ".$data->ortschaft.", ".$data->strasse." ".$data->hausnummer; $address_string = $data->plz." ".$data->ortschaft.", ".$data->strasse; /*if($include_gst) { $address_string .= " | GST: ".$data->grund_nr; }*/ $sort_key = $data->plz." ".$data->ortschaft." ".$data->strasse; $address = []; $address['id'] = $data->strasse_id; $address["text"] = $address_string; $address['sort_key'] = $sort_key; $addresses[] = $address; } // sort results by most occurences of search strings $sort = []; foreach($addresses as $key => $address) { $includes_int = false; $count = 0; foreach($search_parts as $p) { $p = $this->db->escape(trim($p)); if(!$p) continue; if(is_numeric(($p))) { $includes_int = true; if(substr_count(strtolower($address['text']), strtolower($p))) { $count++; } } else { $count += substr_count(strtolower($address['text']), strtolower($p)); } } unset($address['sort_key']); //echo $address['text']." $p $count
\n"; if($includes_int && (($count + 1) - count($search_parts) ) < 1) { continue; } if(!array_key_exists($count, $sort)) { $sort[$count] = []; } $sort[$count][] = $address; } ksort($sort, SORT_NUMERIC); $sort = array_reverse($sort, true); //var_dump($sort);exit; foreach($sort as $res) { foreach($res as $a) { $results[] = $a; } } header("Content-Type: application/json"); echo json_encode(["results" => $results]); exit; } }