From 952f25797daaf14e9f7497de0c11048b110605e2 Mon Sep 17 00:00:00 2001 From: Frank Schubert Date: Mon, 29 Aug 2022 17:14:55 +0200 Subject: [PATCH] Added AdressDB + AddressDB API --- .gitignore | 1 + application/ADBGemeinde/ADBGemeinde.php | 1 + application/ADBGemeinde/ADBGemeindeModel.php | 148 +++++++++ application/ADBHausnummer/ADBHausnummer.php | 1 + .../ADBHausnummer/ADBHausnummerModel.php | 147 +++++++++ application/ADBOrtschaft/ADBOrtschaft.php | 1 + .../ADBOrtschaft/ADBOrtschaftModel.php | 157 ++++++++++ application/ADBPlz/ADBPlz.php | 1 + application/ADBPlz/ADBPlzModel.php | 156 ++++++++++ application/ADBStrasse/ADBStrasse.php | 3 +- .../ADBStrasse/ADBStrasseController.php | 2 +- application/ADBStrasse/ADBStrasseModel.php | 166 ++++++++++ application/ADBWohneinheit/ADBWohneinheit.php | 87 ++++++ .../ADBWohneinheit/ADBWohneinheitModel.php | 225 ++++++++++++++ application/AddressDB/AddressDB.php | 288 ++++++++++++------ application/Api/v1/AddressdbApicontroller.php | 120 ++++++++ application/Api/v1/OrtApicontroller.php | 71 ----- lib/FronkDB/FronkDB.php | 12 +- lib/mvcfronk/mfBase/mfBaseApicontroller.php | 5 +- scripts/addressdb_delete_multiple_streets.php | 56 ++++ scripts/addressdb_import.php | 19 ++ 21 files changed, 1494 insertions(+), 173 deletions(-) create mode 100644 application/ADBGemeinde/ADBGemeindeModel.php create mode 100644 application/ADBHausnummer/ADBHausnummerModel.php create mode 100644 application/ADBOrtschaft/ADBOrtschaftModel.php create mode 100644 application/ADBPlz/ADBPlzModel.php create mode 100644 application/ADBStrasse/ADBStrasseModel.php create mode 100644 application/ADBWohneinheit/ADBWohneinheit.php create mode 100644 application/ADBWohneinheit/ADBWohneinheitModel.php create mode 100644 application/Api/v1/AddressdbApicontroller.php delete mode 100644 application/Api/v1/OrtApicontroller.php create mode 100644 scripts/addressdb_delete_multiple_streets.php create mode 100755 scripts/addressdb_import.php diff --git a/.gitignore b/.gitignore index 2142b9d08..511838bbb 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ composer.lock .idea nbproject config/config.php +scripts/import todo files/* vendor/ diff --git a/application/ADBGemeinde/ADBGemeinde.php b/application/ADBGemeinde/ADBGemeinde.php index 3f70d7a96..4dee56996 100644 --- a/application/ADBGemeinde/ADBGemeinde.php +++ b/application/ADBGemeinde/ADBGemeinde.php @@ -6,6 +6,7 @@ class ADBGemeinde extends mfBaseModel { protected function init() { $this->db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + $this->table = "Gemeinde"; } diff --git a/application/ADBGemeinde/ADBGemeindeModel.php b/application/ADBGemeinde/ADBGemeindeModel.php new file mode 100644 index 000000000..02be4a9aa --- /dev/null +++ b/application/ADBGemeinde/ADBGemeindeModel.php @@ -0,0 +1,148 @@ + $value) { + if(property_exists(get_called_class(), $field)) { + $model ->$field = $value; + } + } + + $me = mfValuecache::singleton()->get("me"); + if(!$me) { + $me = new User(); + $me->loadMe(); + mfValuecache::singleton()->set("me", $me); + } + /* + if($model->create_by === null) { + $model->create_by = $me->id; + } + if($model->edit_by === null) { + $model->edit_by = $me->id; + }*/ + + return $model; + } + + public static function getFirst($filter) { + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + $res = $db->select("Gemeinde", "*", "$where ORDER BY name,code,kennziffer LIMIT 1"); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + $item = new ADBGemeinde($data); + if($item->id) { + return $item; + } else { + return null; + } + } + return null; + } + + public static function getAll() { + $items = []; + + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $res = $db->select("Gemeinde", "*", "1=1 ORDER BY name,code,kennziffer"); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new ADBGemeinde($data); + } + } + return $items; + + } + + + public static function count($filter) { + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + $sql = "SELECT COUNT(*) as cnt FROM Gemeinde + WHERE $where + "; + + $res = $db->query($sql); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + return $data->cnt; + } + return 0; + } + + public static function search($filter, $limit = false) { + $items = []; + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + $sql = "SELECT Gemeinde.* FROM Gemeinde + WHERE $where + ORDER BY name,code,kennziffer"; + + //mfLoghandler::singleton()->debug($sql); + if(is_array($limit) && count($limit)) { + if(is_numeric($limit['start']) && is_numeric($limit['count'])) { + $sql .= " LIMIT ".$limit['start'].", ".$limit['count']; + } elseif(is_numeric($count)) { + $sql .= " LIMIT ".$limit['count']; + } + } + + $res = $db->query($sql); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new ADBGemeinde($data); + } + } + return $items; + } + + private static function getSqlFilter($filter) { + $where = "1=1 "; + + + if(array_key_exists("code", $filter)) { + $code = $filter['code']; + if(is_numeric($code)) { + $where .= " AND Gemeinde.code=$code"; + } elseif(is_array($code) && count($code)) { + $where .= " AND Gemeinde.code IN (". implode(",", $code).")"; + } + } + + if(array_key_exists("kennziffer", $filter)) { + $kennziffer = $filter['kennziffer']; + if(is_numeric($kennziffer)) { + $where .= " AND Gemeinde.kennziffer=$kennziffer"; + } elseif(is_array($kennziffer) && count($kennziffer)) { + $where .= " AND Gemeinde.kennziffer IN (". implode(",", $kennziffer).")"; + } + } + + if(array_key_exists("name", $filter)) { + $name = FronkDB::singleton()->escape($filter['name']); + if($name) { + $where .= " AND Gemeinde.`name` like '%$name%'"; + } + } + + //var_dump($filter, $where);exit; + return $where; + } + +} diff --git a/application/ADBHausnummer/ADBHausnummer.php b/application/ADBHausnummer/ADBHausnummer.php index d8ea63d5e..c1f36a2bd 100644 --- a/application/ADBHausnummer/ADBHausnummer.php +++ b/application/ADBHausnummer/ADBHausnummer.php @@ -8,6 +8,7 @@ class ADBHausnummer extends mfBaseModel { protected function init() { $this->db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + $this->table = "Hausnummer"; } public function afterLoad() { diff --git a/application/ADBHausnummer/ADBHausnummerModel.php b/application/ADBHausnummer/ADBHausnummerModel.php new file mode 100644 index 000000000..19df84c25 --- /dev/null +++ b/application/ADBHausnummer/ADBHausnummerModel.php @@ -0,0 +1,147 @@ + $value) { + if(property_exists(get_called_class(), $field)) { + $model ->$field = $value; + } + } + + $me = mfValuecache::singleton()->get("me"); + if(!$me) { + $me = new User(); + $me->loadMe(); + mfValuecache::singleton()->set("me", $me); + } + /* + if($model->create_by === null) { + $model->create_by = $me->id; + } + if($model->edit_by === null) { + $model->edit_by = $me->id; + }*/ + + return $model; + } + + public static function getFirst($filter) { + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + $res = $db->select("Hausnummer", "*", "$where ORDER BY strasse_id,hausnummer LIMIT 1"); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + $item = new ADBHausnummer($data); + if($item->id) { + return $item; + } else { + return null; + } + } + return null; + } + + public static function getAll() { + $items = []; + + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $res = $db->select("Hausnummer", "*", "1=1 ORDER BY strasse_id,hausnummer"); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new ADBHausnummer($data); + } + } + return $items; + + } + + + public static function count($filter) { + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + $sql = "SELECT COUNT(*) as cnt FROM Hausnummer + WHERE $where + "; + + $res = $db->query($sql); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + return $data->cnt; + } + return 0; + } + + public static function search($filter, $limit = false) { + $items = []; + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + $sql = "SELECT Hausnummer.* FROM Hausnummer + WHERE $where + ORDER BY strasse_id,hausnummer"; + + //mfLoghandler::singleton()->debug($sql); + if(is_array($limit) && count($limit)) { + if(is_numeric($limit['start']) && is_numeric($limit['count'])) { + $sql .= " LIMIT ".$limit['start'].", ".$limit['count']; + } elseif(is_numeric($limit['count'])) { + $sql .= " LIMIT ".$limit['count']; + } + } + + $res = $db->query($sql); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new ADBHausnummer($data); + } + } + return $items; + } + + private static function getSqlFilter($filter) { + $where = "1=1 "; + + + if(array_key_exists("strasse_id", $filter)) { + $strasse_id = $filter['strasse_id']; + if(is_numeric($strasse_id)) { + $where .= " AND Hausnummer.strasse_id=$strasse_id"; + } elseif(is_array($strasse_id) && count($strasse_id)) { + $where .= " AND Hausnummer.strasse_id IN (". implode(",", $strasse_id).")"; + } + } + + if(array_key_exists("hausnummer", $filter)) { + $hausnummer = FronkDB::singleton()->escape($filter['hausnummer']); + if($hausnummer) { + $where .= " AND Hausnummer.`hausnummer` = '$hausnummer'"; + } + } + + if(array_key_exists("hausnummer%", $filter)) { + $hausnummer = FronkDB::singleton()->escape($filter['hausnummer']); + if($hausnummer) { + $where .= " AND Hausnummer.`hausnummer` like '%$hausnummer%'"; + } + } + + //var_dump($filter, $where);exit; + return $where; + } + +} diff --git a/application/ADBOrtschaft/ADBOrtschaft.php b/application/ADBOrtschaft/ADBOrtschaft.php index 014b3dc98..45d171d7a 100644 --- a/application/ADBOrtschaft/ADBOrtschaft.php +++ b/application/ADBOrtschaft/ADBOrtschaft.php @@ -4,6 +4,7 @@ class ADBOrtschaft extends mfBaseModel { protected function init() { $this->db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + $this->table = "Ortschaft"; } public function find($search) { diff --git a/application/ADBOrtschaft/ADBOrtschaftModel.php b/application/ADBOrtschaft/ADBOrtschaftModel.php new file mode 100644 index 000000000..560b7ed69 --- /dev/null +++ b/application/ADBOrtschaft/ADBOrtschaftModel.php @@ -0,0 +1,157 @@ + $value) { + if(property_exists(get_called_class(), $field)) { + $model ->$field = $value; + } + } + + $me = mfValuecache::singleton()->get("me"); + if(!$me) { + $me = new User(); + $me->loadMe(); + mfValuecache::singleton()->set("me", $me); + } + /* + if($model->create_by === null) { + $model->create_by = $me->id; + } + if($model->edit_by === null) { + $model->edit_by = $me->id; + }*/ + + return $model; + } + + public static function getFirst($filter) { + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + $res = $db->select("Ortschaft", "*", "$where ORDER BY name,kennziffer LIMIT 1"); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + $item = new ADBOrtschaft($data); + if($item->id) { + return $item; + } else { + return null; + } + } + return null; + } + + public static function getAll() { + $items = []; + + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $res = $db->select("Ortschaft", "*", "1=1 ORDER BY name,kennziffer"); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new ADBOrtschaft($data); + } + } + return $items; + + } + + + public static function count($filter) { + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + $sql = "SELECT COUNT(*) as cnt FROM Ortschaft + WHERE $where + "; + + $res = $db->query($sql); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + return $data->cnt; + } + return 0; + } + + public static function search($filter, $limit = false) { + $items = []; + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + $sql = "SELECT Ortschaft.* FROM Ortschaft + WHERE $where + ORDER BY name,kennziffer"; + + //mfLoghandler::singleton()->debug($sql); + if(is_array($limit) && count($limit)) { + if(is_numeric($limit['start']) && is_numeric($limit['count'])) { + $sql .= " LIMIT ".$limit['start'].", ".$limit['count']; + } elseif(is_numeric($limit['count'])) { + $sql .= " LIMIT ".$limit['count']; + } + } + + $res = $db->query($sql); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new ADBOrtschaft($data); + } + } + return $items; + } + + private static function getSqlFilter($filter) { + $where = "1=1 "; + + + + if(array_key_exists("gemeinde_id", $filter)) { + $gemeinde_id = $filter['gemeinde_id']; + if(is_numeric($gemeinde_id)) { + $where .= " AND Ortschaft.gemeinde_id=$gemeinde_id"; + } elseif(is_array($gemeinde_id) && count($gemeinde_id)) { + $where .= " AND Ortschaft.gemeinde_id IN (". implode(",", $gemeinde_id).")"; + } + } + + if(array_key_exists("kennziffer", $filter)) { + $kennziffer = $filter['kennziffer']; + if(is_numeric($kennziffer)) { + $where .= " AND Ortschaft.kennziffer=$kennziffer"; + } elseif(is_array($kennziffer) && count($kennziffer)) { + $where .= " AND Ortschaft.kennziffer IN (". implode(",", $kennziffer).")"; + } + } + + if(array_key_exists("name", $filter)) { + $name = FronkDB::singleton()->escape($filter['name']); + if($name) { + $where .= " AND Ortschaft.`name` = '$name'"; + } + } + + if(array_key_exists("name%", $filter)) { + $name = FronkDB::singleton()->escape($filter['name%']); + if($name) { + $where .= " AND Ortschaft.`name` like '%$name%'"; + } + } + + //var_dump($filter, $where);exit; + return $where; + } + +} diff --git a/application/ADBPlz/ADBPlz.php b/application/ADBPlz/ADBPlz.php index d6d368453..93e168fa0 100644 --- a/application/ADBPlz/ADBPlz.php +++ b/application/ADBPlz/ADBPlz.php @@ -4,6 +4,7 @@ class ADBPlz extends mfBaseModel { protected function init() { $this->db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + $this->table = "Plz"; } } diff --git a/application/ADBPlz/ADBPlzModel.php b/application/ADBPlz/ADBPlzModel.php new file mode 100644 index 000000000..80e9a3db8 --- /dev/null +++ b/application/ADBPlz/ADBPlzModel.php @@ -0,0 +1,156 @@ + $value) { + if(property_exists(get_called_class(), $field)) { + $model ->$field = $value; + } + } + + $me = mfValuecache::singleton()->get("me"); + if(!$me) { + $me = new User(); + $me->loadMe(); + mfValuecache::singleton()->set("me", $me); + } + /* + if($model->create_by === null) { + $model->create_by = $me->id; + } + if($model->edit_by === null) { + $model->edit_by = $me->id; + }*/ + + return $model; + } + + public static function getFirst($filter) { + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + $res = $db->select("Plz", "*", "$where ORDER BY gemeinde_id,plz LIMIT 1"); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + $item = new ADBPlz($data); + if($item->id) { + return $item; + } else { + return null; + } + } + return null; + } + + public static function getAll() { + $items = []; + + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $res = $db->select("Plz", "*", "1=1 ORDER BY gemeinde_id,plz"); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new ADBPlz($data); + } + } + return $items; + + } + + + public static function count($filter) { + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + $sql = "SELECT COUNT(*) as cnt FROM Plz + WHERE $where + "; + + $res = $db->query($sql); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + return $data->cnt; + } + return 0; + } + + public static function search($filter, $limit = false) { + $items = []; + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + $sql = "SELECT Plz.* FROM Plz + WHERE $where + ORDER BY gemeinde_id,plz"; + + //mfLoghandler::singleton()->debug($sql); + if(is_array($limit) && count($limit)) { + if(is_numeric($limit['start']) && is_numeric($limit['count'])) { + $sql .= " LIMIT ".$limit['start'].", ".$limit['count']; + } elseif(is_numeric($limit['count'])) { + $sql .= " LIMIT ".$limit['count']; + } + } + + $res = $db->query($sql); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new ADBPlz($data); + } + } + return $items; + } + + private static function getSqlFilter($filter) { + $where = "1=1 "; + + + + if(array_key_exists("gemeinde_id", $filter)) { + $gemeinde_id = $filter['gemeinde_id']; + if(is_numeric($gemeinde_id)) { + $where .= " AND Plz.gemeinde_id=$gemeinde_id"; + } elseif(is_array($gemeinde_id) && count($gemeinde_id)) { + $where .= " AND Plz.gemeinde_id IN (". implode(",", $gemeinde_id).")"; + } + } + + if(array_key_exists("plz", $filter)) { + $plz = $filter['plz']; + if(is_numeric($plz)) { + $where .= " AND Plz.plz=$plz"; + } elseif(is_array($plz) && count($plz)) { + $where .= " AND Plz.plz IN (". implode(",", $plz).")"; + } + } + + if(array_key_exists("plzstring", $filter)) { + $plzstring = FronkDB::singleton()->escape($filter['plzstring']); + if($plzstring) { + $where .= " AND Plz.`plzstring` = '$plzstring'"; + } + } + + if(array_key_exists("plzstring%", $filter)) { + $plzstring = FronkDB::singleton()->escape($filter['plzstring%']); + if($plzstring) { + $where .= " AND Plz.`plzstring` like '%$plzstring%'"; + } + } + + //var_dump($filter, $where);exit; + return $where; + } + +} diff --git a/application/ADBStrasse/ADBStrasse.php b/application/ADBStrasse/ADBStrasse.php index a0ab98206..2c0642cea 100644 --- a/application/ADBStrasse/ADBStrasse.php +++ b/application/ADBStrasse/ADBStrasse.php @@ -1,10 +1,11 @@ db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + $this->table = "Strasse"; } public function afterLoad() { diff --git a/application/ADBStrasse/ADBStrasseController.php b/application/ADBStrasse/ADBStrasseController.php index e1c6f0299..a7fcec888 100644 --- a/application/ADBStrasse/ADBStrasseController.php +++ b/application/ADBStrasse/ADBStrasseController.php @@ -1,6 +1,6 @@ db(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); diff --git a/application/ADBStrasse/ADBStrasseModel.php b/application/ADBStrasse/ADBStrasseModel.php new file mode 100644 index 000000000..f058e65e2 --- /dev/null +++ b/application/ADBStrasse/ADBStrasseModel.php @@ -0,0 +1,166 @@ + $value) { + if(property_exists(get_called_class(), $field)) { + $model ->$field = $value; + } + } + + $me = mfValuecache::singleton()->get("me"); + if(!$me) { + $me = new User(); + $me->loadMe(); + mfValuecache::singleton()->set("me", $me); + } + /* + if($model->create_by === null) { + $model->create_by = $me->id; + } + if($model->edit_by === null) { + $model->edit_by = $me->id; + }*/ + + return $model; + } + + public static function getFirst($filter = false) { + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + $res = $db->select("Strasse", "*", "$where ORDER BY gemeinde_id,kennziffer,name LIMIT 1"); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + $item = new ADBStrasse($data); + if($item->id) { + return $item; + } else { + return null; + } + } + return null; + } + + public static function getAll() { + $items = []; + + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $res = $db->select("Strasse", "*", "1=1 ORDER BY gemeinde_id,name,kennziffer"); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new ADBStrasse($data); + } + } + return $items; + + } + + + public static function count($filter) { + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + $sql = "SELECT COUNT(*) as cnt FROM Strasse + WHERE $where + "; + + $res = $db->query($sql); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + return $data->cnt; + } + return 0; + } + + public static function search($filter, $limit = false) { + $items = []; + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + //$sql = "SELECT MIN(id) as id, MIN(ortschaft_id) as ortschaft_id, gemeinde_id, MIN(kennziffer) as kennziffer, MIN(name) as name, MIN(`create`) as `create`, MIN(`edit`) as `edit` FROM Strasse + $sql = "SELECT Strasse.* FROM Strasse + WHERE $where + ORDER BY gemeinde_id,name,kennziffer"; + + //mfLoghandler::singleton()->debug($sql); + if(is_array($limit) && count($limit)) { + if(is_numeric($limit['start']) && is_numeric($limit['count'])) { + $sql .= " LIMIT ".$limit['start'].", ".$limit['count']; + } elseif(is_numeric($count)) { + $sql .= " LIMIT ".$limit['count']; + } + } + + $res = $db->query($sql); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new ADBStrasse($data); + } + } + return $items; + } + + private static function getSqlFilter($filter) { + $where = "1=1 "; + + + if(array_key_exists("gemeinde_id", $filter)) { + $gemeinde_id = $filter['gemeinde_id']; + if(is_numeric($gemeinde_id)) { + $where .= " AND Strasse.gemeinde_id=$gemeinde_id"; + } elseif(is_array($gemeinde_id) && count($gemeinde_id)) { + $where .= " AND Strasse.gemeinde_id IN (". implode(",", $gemeinde_id).")"; + } + } + + if(array_key_exists("ortschaft_id", $filter)) { + $ortschaft_id = $filter['ortschaft_id']; + if(is_numeric($ortschaft_id)) { + $where .= " AND Strasse.ortschaft_id=$ortschaft_id"; + } elseif(is_array($ortschaft_id) && count($ortschaft_id)) { + $where .= " AND Strasse.ortschaft_id IN (". implode(",", $ortschaft_id).")"; + } + } + + if(array_key_exists("kennziffer", $filter)) { + $kennziffer = $filter['kennziffer']; + if(is_numeric($kennziffer)) { + $where .= " AND Strasse.kennziffer=$kennziffer"; + } elseif(is_array($kennziffer) && count($kennziffer)) { + $where .= " AND Strasse.kennziffer IN (". implode(",", $kennziffer).")"; + } + } + + if(array_key_exists("name", $filter)) { + $name = FronkDB::singleton()->escape($filter['name']); + if($name) { + $where .= " AND Strasse.`name` = '$name'"; + } + } + + if(array_key_exists("name%", $filter)) { + $name = FronkDB::singleton()->escape($filter['name%']); + if($name) { + $where .= " AND Strasse.`name` like '%$name%'"; + } + } + + //var_dump($filter, $where);exit; + return $where; + } + +} diff --git a/application/ADBWohneinheit/ADBWohneinheit.php b/application/ADBWohneinheit/ADBWohneinheit.php new file mode 100644 index 000000000..579c36a3f --- /dev/null +++ b/application/ADBWohneinheit/ADBWohneinheit.php @@ -0,0 +1,87 @@ +db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + $this->table = "Wohneinheit"; + } + + public static function parseHausnummerZusatz($text) { + + $data = []; + $data['block'] = ""; + $data['stock'] = ""; + $data['stiege'] = ""; + $data['tuer'] = ""; + $data['zusatz'] = ""; + + $text = trim($text); + if(!$text) return $data; + $text = " ".$text; + + $m = []; + if(preg_match('/(?:t(?:ü|ue)r|topp|door?)\s+(\d\d?|\w\w?)/i', $text, $m)) { + $data['tuer'] = $m[1]; + $text = str_replace($m[0], "", $text); + } + + if(preg_match('/(\d+)\.\s+(?:stock|geschoss|etage|level|floor)/i', $text, $m)) { + $data['stock'] = $m[1]; + $text = str_replace($m[0], "", $text); + } + + if(preg_match('/(?: stock(?:werk)?| geschoss| etage| level | floor)\s+(\d\d?|parterre|erdgescho(?:ss|ß))\.?/i', $text, $m)) { + $data['stock'] = $m[1]; + $text = str_replace($m[0], "", $text); + } + + if(preg_match('/(parterre|erdgescho(?:ss|ß))/i', $text, $m)) { + $data['stock'] = $m[1]; + $text = str_replace($m[0], "", $text); + } + + + $text = trim(preg_replace('/\s{2,}/', "", $text)); + + if($text) { + $data['zusatz'] = $text; + } + + + return $data; + } + + public function afterLoad() { + $this->hausnummer = new ADBHausnummer($this->hausnummer_id); + //$this->loadStatus(); + //$this->loadProvider(); + } + /* + public function loadStatus() { + if(!$this->id) { + return false; + } + $status = HausnummerStatus::singleton(); + $this->status = $status->getObject($this->status_id); + } + + public function loadProvider() { + if(!$this->id) { + return false; + } + + $res = $this->db->select("HausnummerProvider", "*", "hausnummer_id=".$this->id); + if($this->db->num_rows($res)) { + while($data = $this->db->fetch_object($res)) { + $provider = new Provider($data->provider_id); + $this->providerlist[$provider->id] = $provider->name; + $this->providers[] = $provider; + } + } + + return true; + }*/ + +} diff --git a/application/ADBWohneinheit/ADBWohneinheitModel.php b/application/ADBWohneinheit/ADBWohneinheitModel.php new file mode 100644 index 000000000..e638c2139 --- /dev/null +++ b/application/ADBWohneinheit/ADBWohneinheitModel.php @@ -0,0 +1,225 @@ + $value) { + if(property_exists(get_called_class(), $field)) { + $model ->$field = $value; + } + } + + $me = mfValuecache::singleton()->get("me"); + if(!$me) { + $me = new User(); + $me->loadMe(); + mfValuecache::singleton()->set("me", $me); + } + /* + if($model->create_by === null) { + $model->create_by = $me->id; + } + if($model->edit_by === null) { + $model->edit_by = $me->id; + }*/ + + return $model; + } + + public static function getFirst($filter) { + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + $res = $db->select("Wohneinheit", "*", "$where ORDER BY hausnummer_id,block,stiege,stock,tuer LIMIT 1"); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + $item = new ADBWohneinheit($data); + if($item->id) { + return $item; + } else { + return null; + } + } + return null; + } + + public static function getAll() { + $items = []; + + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $res = $db->select("Wohneinheit", "*", "1=1 ORDER BY hausnummer_id,block,stiege,stock,tuer"); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new ADBWohneinheit($data); + } + } + return $items; + + } + + + public static function count($filter) { + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + $sql = "SELECT COUNT(*) as cnt FROM Wohneinheit + WHERE $where + "; + + $res = $db->query($sql); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + return $data->cnt; + } + return 0; + } + + public static function search($filter, $limit = false) { + $items = []; + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + $sql = "SELECT Wohneinheit.* FROM Wohneinheit + WHERE $where + ORDER BY hausnummer_id,block,stiege,stock,tuer"; + + //mfLoghandler::singleton()->debug($sql); + if(is_array($limit) && count($limit)) { + if(is_numeric($limit['start']) && is_numeric($limit['count'])) { + $sql .= " LIMIT ".$limit['start'].", ".$limit['count']; + } elseif(is_numeric($limit['count'])) { + $sql .= " LIMIT ".$limit['count']; + } + } + + $res = $db->query($sql); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new ADBWohneinheit($data); + } + } + return $items; + } + + private static function getSqlFilter($filter) { + $where = "1=1 "; + + + if(array_key_exists("hausnummer_id", $filter)) { + $hausnummer_id = $filter['hausnummer_id']; + if(is_numeric($hausnummer_id)) { + $where .= " AND Wohneinheit.hausnummer_id=$hausnummer_id"; + } elseif(is_array($hausnummer_id) && count($hausnummer_id)) { + $where .= " AND Wohneinheit.hausnummer_id IN (". implode(",", $hausnummer_id).")"; + } + } + + if(array_key_exists("num", $filter)) { + $num = $filter['num']; + if(is_numeric($num)) { + $where .= " AND Wohneinheit.num=$num"; + } elseif(is_array($num) && count($num)) { + $where .= " AND Wohneinheit.num IN (". implode(",", $num).")"; + } + } + + if(array_key_exists("block", $filter)) { + $block = FronkDB::singleton()->escape($filter['block']); + if(strlen($block)) { + $where .= " AND Wohneinheit.`block` = '$block'"; + } else { + $where .= " AND (Wohneinheit.`block` IS NULL OR Wohneinheit.`block` = '')"; + } + } + if(array_key_exists("stock", $filter)) { + $stock = FronkDB::singleton()->escape($filter['stock']); + if(strlen($stock)) { + $where .= " AND Wohneinheit.`stock` = '$stock'"; + } else { + $where .= " AND (Wohneinheit.`stock` IS NULL OR Wohneinheit.`stock` = '')"; + } + } + if(array_key_exists("stiege", $filter)) { + $stiege = FronkDB::singleton()->escape($filter['stiege']); + if(strlen($stiege)) { + $where .= " AND Wohneinheit.`stiege` = '$stiege'"; + } else { + $where .= " AND (Wohneinheit.`stiege` IS NULL OR Wohneinheit.`stiege` = '')"; + } + } + if(array_key_exists("tuer", $filter)) { + $tuer = FronkDB::singleton()->escape($filter['tuer']); + if(strlen($tuer)) { + $where .= " AND Wohneinheit.`tuer` = '$tuer'"; + } else { + $where .= " AND (Wohneinheit.`tuer` IS NULL OR Wohneinheit.`tuer` = '')"; + } + } + if(array_key_exists("zusatz", $filter)) { + $zusatz = FronkDB::singleton()->escape($filter['zusatz']); + if(strlen($zusatz)) { + $where .= " AND Wohneinheit.`zusatz` = '$zusatz'"; + } else { + $where .= " AND (Wohneinheit.`zusatz` IS NULL OR Wohneinheit.`zusatz` = '')"; + } + } + + if(array_key_exists("nutzung", $filter)) { + $nutzung = FronkDB::singleton()->escape($filter['nutzung']); + if(strlen($nutzung)) { + $where .= " AND Wohneinheit.`nutzung` = '$nutzung'"; + } else { + $where .= " AND (Wohneinheit.`nutzung` IS NULL OR Wohneinheit.`nutzung` = '')"; + } + } + + if(array_key_exists("block%", $filter)) { + $block = FronkDB::singleton()->escape($filter['block']); + if($block) { + $where .= " AND Wohneinheit.`block` like '%$block%'"; + } + } + if(array_key_exists("stock%", $filter)) { + $stock = FronkDB::singleton()->escape($filter['stock']); + if($stock) { + $where .= " AND Wohneinheit.`stock` like '%$stock%'"; + } + } + if(array_key_exists("stiege%", $filter)) { + $stiege = FronkDB::singleton()->escape($filter['stiege']); + if($stiege) { + $where .= " AND Wohneinheit.`stiege` like '%$stiege%'"; + } + } + if(array_key_exists("tuer%", $filter)) { + $tuer = FronkDB::singleton()->escape($filter['tuer']); + if($tuer) { + $where .= " AND Wohneinheit.`tuer` like '%$tuer%'"; + } + } + if(array_key_exists("zusatz%", $filter)) { + $zusatz = FronkDB::singleton()->escape($filter['zusatz']); + if($zusatz) { + $where .= " AND Wohneinheit.`zusatz` like '%$zusatz%'"; + } + } + + //var_dump($filter, $where);exit; + return $where; + } + +} diff --git a/application/AddressDB/AddressDB.php b/application/AddressDB/AddressDB.php index b82765e8b..b871261da 100644 --- a/application/AddressDB/AddressDB.php +++ b/application/AddressDB/AddressDB.php @@ -1,111 +1,209 @@ db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + $this->log = mfLoghandler::singleton(); } - public function findAddress($search) { - if(!is_array($search)) { + public function import($input) { + if(!$input) { return false; } - $gemeinde_name = $search['gemeinde_name']; - $ort_name = $search['ort_name']; - $plz = $search['plz']; - $strasse_name = $search['strasse_name']; - $hausnummer = $search['hausnummer']; - $block = $search['block']; - $stiege = $search['stiege']; - $stock = $search['stock']; - $tuer = $search['tuee']; - - /* - if($gemeinde_id < 1 || $strasse_id < 1 || !$hausnummer - || $gemeinde_id > pow(2, 30) || $strasse_id > pow(2, 30) || strlen($hausnummer) > 32) { - $this->redirect('Check','',['status' => 'error']); - }*/ - - $hausnummerMatch = true; - - $gemeinde = new Gemeinde($gemeinde_id); - $strasse = new Strasse($strasse_id); - - // try exact hausnummer - $res = $this->db()->select("view_adresseProvider", "*", "gemeinde = '".$gemeinde->name."' AND strasse = '".$strasse->name."' AND hausnummer = '$hausnummer'"); - if(!$this->db()->num_rows($res)) { - $hausnummerMatch = false; - // check for anschlüsse in the same street - $res = $this->db()->select("view_adresseProvider", "*", "gemeinde = '".$gemeinde->name."' AND strasse = '".$strasse->name."'"); - if(!$this->db()->num_rows($res)) { - // XXX: if breitband stmk - $this->layout()->setTemplate("Check/Result/Fail"); - - // xdsl anzeigen - return $this->checkVull($request); + if(is_string($input)) { + if(!file_exists($input)) { + return false; } + $file = fopen($input, "r"); + if(!$file) { + return false; + } + + $input = $file; } - // if multiple hausnummern, anschluss in street available, or multiple providers - if($this->db()->num_rows($res)) { - $addresses = []; - $providers = []; - $homeProvider = false; - $multipleAddress = false; - - while($data = $this->db()->fetch_object($res)) { - $addresses[] = new Hausnummer($data->id); - if($data->provider_id == HOME_PROVIDER_ID) { - $homeProvider = true; - } - if(!in_array($data->provider, $providers)) { - $providers[$data->provider_id] = $data->provider; - } - if($data->hausnummer != $hausnummer) { - $multipleAddress = true; - } - } - - $pc = new ProductController(); - - if($homeProvider && $multipleAddress) { - $this->layout()->set("debug", "multi hausnummern, homeprovider"); - $this->layout()->setTemplate("Check/Result/Street"); - return true; - } - if($homeProvider) { - $this->layout()->set("debug", "single hausnummer, homeprovider"); - $this->layout()->setTemplate("Check/Result/Success"); - $this->layout()->set("productsPrivate", $pc->getProducts(1, "fiber", "privat")); - $this->layout()->set("productsBusiness", $pc->getProducts(1, "fiber", "business")); - if($data->status == 1) { - $this->layout()->set("debug", "single hausnummer, homeprovider, rohr am grundstück"); - $this->layout()->setTemplate("Check/Result/Street"); - } - return true; - } - if(!$homeProvider) { - $this->layout()->set("providers", $providers); - $this->layout()->set("debug", "single hausnummer, partner provider"); - $this->layout()->setTemplate("Check/Result/SuccessPartner"); - return true; - } - - return true; - } /*elseif($this->db()->num_rows($res) == 1 && $hausnummerMatch) { - // exactly 1 match - $data = $this->db()->fetch_object($res); - $address = new Hausnummer($data->id); - $this->layout()->set("adresse", $address); - $this->layout()->set("debug", "single address, only homeprovider"); - $this->layout()->setTemplate("Check/Result/Success"); - return true; - }*/ + if(!is_resource($input)) { + return false; + } + + $gem_kz = ""; + $gem_name = ""; + $ort_kz = ""; + $plz_name = ""; + $ort_name = ""; + $strasse_building = ""; + $strasse = ""; + $hausnummer_name = ""; + + $i = 0; + while($csv = fgetcsv($input, 0, ";")) { + $i++; + if($i == 1) continue; + + //var_dump($csv); + + + if(trim($csv[0])) { + $gem_kz = trim($csv[0]); + $gem_name = trim($csv[1]); + $ort_kz = trim($csv[2]); + $plz_name = trim($csv[3]); + $ort_name = trim($csv[4]); + $strasse_building = trim($csv[5]); + $strasse_name = trim($csv[6]); + + //echo "strasse: $strasse\n"; + //echo "strasse_building: $strasse_building\n"; + + $hausnummer_name = preg_replace('/^'.$strasse_name.'\s+/', "", $strasse_building); + //echo "$strasse_name $hausnummer_name\n"; + } + + $strasse_we = trim($csv[7]); + $nutzung = trim($csv[8]); + $we_num = trim($csv[11]); + + if(!$strasse_we) { + echo "Adresse Wohneinheit fehlt.\n"; + continue; + } + + //echo "strasse_we: $strasse_we\n"; + if($strasse_building == $strasse_we) { + $addresszusatz = ""; + } else { + $addresszusatz = preg_replace('/^'.$strasse_building.'\s+/', "", $strasse_we); + } + + + + $hausnummer_zusatz = ADBWohneinheit::parseHausnummerZusatz($addresszusatz); + //var_dump($hausnummer_zusatz); + + echo "$gem_name $plz_name $ort_name $strasse_name $hausnummer_name "; + foreach($hausnummer_zusatz as $key => $value) { + if($value) { + if($key == "zusatz") { + echo $value; + continue; + } + echo ucfirst($key)." ".$value; + } + } + echo " ($nutzung)\n"; + + $gemeinde = ADBGemeindeModel::getFirst(['kennziffer' => $gem_kz]); + if(!$gemeinde) { + $gemeinde = new ADBGemeinde(); + $gemeinde->kennziffer = $gem_kz; + $gemeinde->code = $gem_kz; + $gemeinde->name = $gem_name; + $gemeinde_id = $gemeinde->save(); + if(!$gemeinde_id) { + + } + } + + $ort = ADBOrtschaftModel::getFirst(['kennziffer' => $ort_kz]); + if(!$ort) { + $ort = new ADBOrtschaft(); + $ort->gemeinde_id = $gemeinde->id; + $ort->kennziffer = $ort_kz; + $ort->name = $ort_name; + $ort->plz = $plz_name; + $ort_id = $ort->save(); + if(!$ort_id) { + die("Error creating Ortschaft $ort_kz $ort_name!\n"); + } + } + + $plz = ADBPlzModel::getFirst(['gemeinde_id' => $gemeinde->id, 'plz' => $plz_name]); + if(!$plz) { + $plz = new ADBPlz(); + $plz->gemeinde_id = $gemeinde->id; + $plz->plz = $plz_name; + $plz->plzstring = $plz_name; + $plz_id = $plz->save(); + if(!$plz) { + die("Error creating Plz $plz_name!\n"); + } + } + + //var_dump($plz);exit; + + $strasse = ADBStrasseModel::getFirst(['gemeinde_id' => $gemeinde->id, 'ortschaft_id' => $ort->id, 'name' => $strasse_name]); + if(!$strasse) { + $strasse = new ADBStrasse(); + $strasse->ortschaft_id = $ort->id; + $strasse->gemeinde_id = $gemeinde->id; + $strasse->name = $strasse_name; + $strasse_id = $strasse->save(); + if(!$strasse_id) { + die("error creating Strasse $strasse_name (gemeinde ".$gemeinde->id.", ort ".$ort->id.")"); + } + } + + //var_dump($strasse);exit; + + $hausnummer = ADBHausnummerModel::getFirst(['strasse_id' => $strasse->id, 'hausnummer' => $hausnummer_name]); + if(!$hausnummer) { + $hausnummer = new ADBHausnummer(); + $hausnummer->strasse_id = $strasse->id; + $hausnummer->hausnummer = $hausnummer_name; + $hausnummer_id = $hausnummer->save(); + if(!$hausnummer_id) { + die("error creating Hausnummer $strasse_name $hausnummer_name"); + } + } + //var_dump($hausnummer);exit; + + $we_search = [ + 'hausnummer_id' => $hausnummer->id, + 'num' => $we_num, + 'block' => $hausnummer_zusatz['block'], + 'stiege' => $hausnummer_zusatz['stiege'], + 'stock' => $hausnummer_zusatz['stock'], + 'tuer' => $hausnummer_zusatz['tuer'], + 'zusatz' => $hausnummer_zusatz['zusatz'], + 'nutzung' => $nutzung + ]; + + /*if($hausnummer_name == "12a") { + var_dump($we_search);exit; + }*/ + + $wohneinheit = ADBWohneinheitModel::getFirst($we_search); + if(!$wohneinheit) { + $wohneinheit = new ADBWohneinheit(); + $wohneinheit->hausnummer_id = $hausnummer->id; + $wohneinheit->num = $we_num; + $wohneinheit->block = ($hausnummer_zusatz['block']) ? $hausnummer_zusatz['block'] : null; + $wohneinheit->stiege = ($hausnummer_zusatz['stiege']) ? $hausnummer_zusatz['stiege'] : null; + $wohneinheit->stock = ($hausnummer_zusatz['stock']) ? $hausnummer_zusatz['stock'] : null; + $wohneinheit->tuer = ($hausnummer_zusatz['tuer']) ? $hausnummer_zusatz['tuer'] : null; + $wohneinheit->zusatz = ($hausnummer_zusatz['zusatz']) ? $hausnummer_zusatz['zusatz'] : null; + $wohneinheit->nutzung = $nutzung; + $wohneinheit_id = $wohneinheit->save(); + if(!$wohneinheit_id) { + die("error creating Wohneinheit $strasse_name $hausnummer_name ".implode(", ", $hausnummer_zusatz)); + } + } else { + echo "XXXX wohneinheit gibts schon: $strasse_name $hausnummer_name ".implode(", ", $hausnummer_zusatz)."\n\n"; + } + + + /*if($i > 10) { + exit; + }*/ + } + + return true; } + + } \ No newline at end of file diff --git a/application/Api/v1/AddressdbApicontroller.php b/application/Api/v1/AddressdbApicontroller.php new file mode 100644 index 000000000..4041f9378 --- /dev/null +++ b/application/Api/v1/AddressdbApicontroller.php @@ -0,0 +1,120 @@ +db(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $this->addRoute("/addressdb/findAddress", "find", "POST"); + $this->addRoute("/addressdb/findStreet", "findStreet", "POST"); + $this->addRoute("/addressdb/findZip", "findZip", "POST"); + $this->addRoute("/addressdb/findCity", "findCity", "POST"); + } + + protected function findCity() { + $search = $this->db()->escape($this->post['search']); + if(!$search) { + return mfResponse::BadRequest(['message' => "Searchstring cannot be empty!"]); + } + + $results = ADBOrtschaftModel::search(['name%' => $search], ['count' => 20]); + + + $cities = []; + foreach($results as $result) { + $cities[] = $result->name; + } + + $citiesv= array_unique($cities); + return mfResponse::Ok(['cities' => $cities]); + } + + protected function findZip() { + $search = $this->db()->escape($this->post['search']); + if(!$search) { + return mfResponse::BadRequest(['message' => "Searchstring cannot be empty!"]); + } + + $results = ADBPlzModel::search(['plzstring%' => $search], ['count' => 20]); + + + $zips = []; + foreach($results as $result) { + $zips[] = $result->plz; + } + + $zips = array_unique($zips); + return mfResponse::Ok(['zips' => $zips]); + } + + protected function findStreet() { + $search = $this->db()->escape($this->post['search']); + if(!$search) { + return mfResponse::BadRequest(['message' => "Searchstring cannot be empty!"]); + } + + $results = ADBStrasseModel::search(['name%' => $search], ['count' => 20]); + + + $streets = []; + foreach($results as $result) { + $streets[] = $result->name; + } + + $streets = array_unique($streets); + return mfResponse::Ok(['streets' => $streets]); + } + + protected function find() { + $search_street = $this->db()->escape($this->post['street']); + $search_zip = $this->db()->escape($this->post['zip']); + $search_city = $this->db()->escape($this->post['city']); + $search_housenumber = $this->db()->escape($this->post['housenumber']); + + + if(!$search_street) { + return mfResponse::BadRequest(['message' => "Searchstring cannot be empty!"]); + } + + $addresses = []; + + $where = "1 = 1"; + + if($search_zip) { + $where .= " AND plz like '%$search_zip%'"; + } + if($search_city) { + $where .= " AND ortschaft like '%$search_city%'"; + } + if($search_street) { + $where .= " AND strasse like '%$search_street%'"; + } + if($search_housenumber) { + $where .= " AND hausnummer like '%$search_housenumber%'"; + } + + //$res = $this->db()->select("view_wohneinheit_plz", "*", $where); + $sql = "SELECT * FROM view_wohneinheit WHERE $where ORDER BY plz, ortschaft, strasse, LENGTH(hausnummer), hausnummer, block, stiege, stock, LENGTH(tuer), tuer LIMIT 20"; + //echo $sql;exit; + $res = $this->db()->query($sql); + + if($this->db()->num_rows($res)) { + while($data = $this->db()->fetch_object($res)) { + $addresses[] = [ + 'zip' => $data->plz, + 'city' => $data->ortschaft, + 'street' => $data->strasse, + 'housenumber' => $data->hausnummer, + 'block' => $data->block, + 'stock' => $data->stock, + 'stiege' => $data->stiege, + 'tuer' => $data->tuer, + 'zusatz' => $data->zusatz + ]; + } + } + + return mfResponse::Ok(['addresses' => $addresses]); + } + +} \ No newline at end of file diff --git a/application/Api/v1/OrtApicontroller.php b/application/Api/v1/OrtApicontroller.php deleted file mode 100644 index a1c66de95..000000000 --- a/application/Api/v1/OrtApicontroller.php +++ /dev/null @@ -1,71 +0,0 @@ -addRoute("/home/getAll", "getHomes", "GET"); - $this->addRoute("/ort/find", "findOrt", "POST"); - //$this->addRoute("/home/:oanid/products", "getHomeProducts", "GET"); - } - - protected function findOrt() { - $search = $this->post['search']; - - if(!$search) { - return mfResponse::BadRequest(['message' => "Suchbegriff darf nicht leer sein!"]); - } - - $orte = []; - - $ag = new ADBGemeinde(); - $results = $ag->find($search); - //var_dump($results);exit; - foreach($results as $result) { - if(is_array($result->plz) && count($result->plz)) { - foreach($result->plz as $plz) { - $orte[] = ['plz' => $plz->plzstring, 'ort' => $result->name]; - } - } - - } - - return mfResponse::Ok(['orte' => $orte]); - } - - /* - protected function getHomes() { - $homes = []; - - foreach(HomeModel::search(['operationalstate_id' => [5,3]]) as $home) { - $homes[] = $home->getApiArray(); - } - - return mfResponse::Ok(['homes' => $homes]); - }*/ - /* - protected function validateOan($oan_id) { - $home = new Home(); - $home->loadByOan($oan_id); - if(!$home->id) { - return mfResponse::NotFound(['oan_d' => $oan_id, 'isValid' => false]); - } - - return mfResponse::Ok(['oan_d' => $oan_id, 'isValid' => true]); - }*/ - /* - protected function getHomeProducts($oanid) { - $home = new Home(); - $home->loadByOan($oanid); - if(!$home->id) { - return mfResponse::NotFound(['message' => "Home not found"]); - } - - $products = []; - foreach(ProductModel::search(['provider_id' => $this->me->provider_id]) as $product) { - $products[] = $product->getApiArray(); - } - - return mfResponse::Ok(["products" => $products]); - - }*/ -} \ No newline at end of file diff --git a/lib/FronkDB/FronkDB.php b/lib/FronkDB/FronkDB.php index 4f69b629c..0eabe60e7 100644 --- a/lib/FronkDB/FronkDB.php +++ b/lib/FronkDB/FronkDB.php @@ -26,14 +26,22 @@ class FronkDB { public static function singleton($host=false,$user=false,$pass=false,$db=false) { $instance_name = $host.$user.$db; - if(!isset(self::$instances[$instance_name])) { + if(!$instance_name) { + $instance_name = "default"; + } + + if(!isset(self::$instances[$instance_name])) { + //echo "new FronkDB instance $instance_name\n"; $c = __CLASS__; self::$instances[$instance_name] = new $c($host,$user,$pass,$db); - } + } else { + //echo "existing FronkDB instance $instance_name\n"; + } return self::$instances[$instance_name]; } private function connect() { + //echo "FronkDB connection to ".$this->host." (".$this->user.", ".$this->db.")\n"; if(!$this->link) { $this->link=mysqli_connect($this->host,$this->user,$this->pass,$this->db) or die("Error connecting to database...".mysqli_error($this->link)); } diff --git a/lib/mvcfronk/mfBase/mfBaseApicontroller.php b/lib/mvcfronk/mfBase/mfBaseApicontroller.php index 76d67745b..a3f53169c 100644 --- a/lib/mvcfronk/mfBase/mfBaseApicontroller.php +++ b/lib/mvcfronk/mfBase/mfBaseApicontroller.php @@ -347,16 +347,15 @@ class mfBaseApicontroller { $this->mfDBI=FronkDB::singleton(); } - return $this->mfDBI; } else { // else return a new instance - var_dump($args); $dbhost=$args[0]; $dbuser=$args[1]; $dbpass=$args[2]; $dbname=$args[3]; - return $this->getNewDBInstance($dbhost,$dbuser,$dbpass,$dbname); + $this->mfDBI = $this->getNewDBInstance($dbhost,$dbuser,$dbpass,$dbname); } + return $this->mfDBI; } diff --git a/scripts/addressdb_delete_multiple_streets.php b/scripts/addressdb_delete_multiple_streets.php new file mode 100644 index 000000000..618e7ebca --- /dev/null +++ b/scripts/addressdb_delete_multiple_streets.php @@ -0,0 +1,56 @@ +#!/usr/bin/php +select("Strasse", "*"); +if(!$db->num_rows($res)) { + die("Keine Strassen gefunden\n"); +} + +//echo "!!num rows: ".$db->num_rows($res)."\n"; + +$streets = []; +$toDelete = []; +$i = 0; +$c = 0; + +while($data = $db->fetch_object($res)) { + $idx = $data->name."--".$data->gemeinde_id; + //echo "$idx\n"; + + if(array_key_exists($idx, $streets)) { + $toDelete[] = $data->id; + //echo "!!num rows: ".$db->num_rows($res)."\n"; + } else { + $streets[$idx] = $data->id; + } + $i++; +} + + + +//var_dump(count($toDelete));exit; + +foreach($toDelete as $id) { + $s = new ADBStrasse($id); + if($s->id === $id) { + $s->delete(); + $c++; + } + +} + +echo "Deleted $c duplicate streets ($i).\n"; diff --git a/scripts/addressdb_import.php b/scripts/addressdb_import.php new file mode 100755 index 000000000..c4dd6ce0d --- /dev/null +++ b/scripts/addressdb_import.php @@ -0,0 +1,19 @@ +#!/usr/bin/php +import($filename);