From e69b27129596cbf4dfcdf05379ca54fb9b13dab5 Mon Sep 17 00:00:00 2001 From: Frank Schubert Date: Wed, 3 Apr 2024 18:16:52 +0200 Subject: [PATCH] rimo import: Removed AddressHelper requirement, missing address parts option --- .../ADBAddressHelper/address_helper.php | 786 +++++++++--------- scripts/adb-rimo-import/rimo-import-test.php | 6 +- 2 files changed, 419 insertions(+), 373 deletions(-) diff --git a/scripts/adb-rimo-import/ADBAddressHelper/address_helper.php b/scripts/adb-rimo-import/ADBAddressHelper/address_helper.php index f7d252d4e..7691bfb08 100644 --- a/scripts/adb-rimo-import/ADBAddressHelper/address_helper.php +++ b/scripts/adb-rimo-import/ADBAddressHelper/address_helper.php @@ -2,391 +2,437 @@ namespace ADBRimoImport\ADBAddressHelper; -class AddressHelper { - private $log; - private $db; - private $netzgebiet; - private $NetworkHelper; - public $find_address_error; - - public function __construct($dependencies = []) { - foreach(["log", "db", "netzgebiet"] as $type) { - if(array_key_exists($type, $dependencies)) { - $this->$type = $dependencies[$type]; - } - } - - // load network helper - if($this->netzgebiet && $this->netzgebiet->extref) { - // get netzgebiet extref and make classname - $network_extref = $this->netzgebiet->extref; - $network_id = preg_replace('/[^a-zA-Z0-9]/', '_', $network_extref); - $network_helper_name = "ADBRimoImport\\ADBAddressHelper\\Network\\Network_$network_id"; - - // find network helper class - $network_helper_dir = __DIR__."/Network"; - $network_helper_filename = "Network-$network_extref"; - - $dir = opendir($network_helper_dir); - while($filename = readdir($dir)) { - if(preg_match('/^'.$network_helper_filename.'-/', $filename)) { - require_once($network_helper_dir."/$filename"); +use ADBGemeindeModel; +use ADBHausnummer; +use ADBHausnummerModel; +use ADBOrtschaftModel; +use ADBPlzModel; +use ADBStrasseModel; + +class AddressHelper +{ + private $log; + private $db; + private $netzgebiet; + private $NetworkHelper; + public $find_address_error; + + public function __construct($dependencies = []) + { + foreach (["log", "db", "netzgebiet"] as $type) { + if (array_key_exists($type, $dependencies)) { + $this->$type = $dependencies[$type]; + } } - } - - $network_helper = new $network_helper_name(); - $this->NetworkHelper = $network_helper; - } else { - die("Netzgebiet hat keine extref (".$this->netzgebiet->id.": ".$this->netzgebiet->name.")"); + + // load network helper + if ($this->netzgebiet && $this->netzgebiet->extref) { + // get netzgebiet extref and make classname + $network_extref = $this->netzgebiet->extref; + $network_id = preg_replace('/[^a-zA-Z0-9]/', '_', $network_extref); + $network_helper_name = "ADBRimoImport\\ADBAddressHelper\\Network\\Network_$network_id"; + + // find network helper class + $network_helper_dir = __DIR__ . "/Network"; + $network_helper_filename = "Network-$network_extref"; + + + $dir = opendir($network_helper_dir); + while ($filename = readdir($dir)) { + if (preg_match('/^' . $network_helper_filename . '-/', $filename)) { + require_once($network_helper_dir . "/$filename"); + } + } + + if (class_exists($network_helper_name)) { + $network_helper = new $network_helper_name(); + $this->NetworkHelper = $network_helper; + } + + } else { + die("Netzgebiet hat keine extref (" . $this->netzgebiet->id . ": " . $this->netzgebiet->name . ")"); + } + } - - } - - - public function splitStreetHausnummer($strasse_hausnummer) { - $strasse_name = ""; - $hausnummer_name = ""; - $addresszusatz = ""; - - $m = []; - // Lantschern GST 1/5 - - if(preg_match('/^(.+)\s+((?:GNR|GST)\s+\.?\d+[a-z0-9\/&#._-]*)(.+)?/i', $strasse_hausnummer, $m)) { - $strasse_name = trim($m[1]); - $hausnummer_name = trim($m[2]); - if(array_key_exists(3, $m)) { - $addresszusatz = trim($m[3]); - } - } elseif(preg_match('/^(\D+)\s+(\d+[a-z0-9\/&#._-]*)(?:\s+((?:gesch(?:ae|ä)ft|werkstatt|betrieb und wohnungen|stg|paketlogistik|cafe|pavillon|pfarrheim|[^ ]*haus|[^ ]*geb(?:ae|ä)ude|[^ ]*halle|[^ ]*schule|Öhlmühle)(?:\s+[a-z0-9]+)?))?/i', $strasse_hausnummer, $m)) { - $strasse_name = trim($m[1]); - $hausnummer_name = trim($m[2]); - if(array_key_exists(3, $m)) { - $addresszusatz = trim($m[3]); - } - } elseif(preg_match('/^(.+)\s+(\d+[a-z0-9\/&#._-]*)(.+)?/i', $strasse_hausnummer, $m)) { - $strasse_name = trim($m[1]); - $hausnummer_name = trim($m[2]); - if(array_key_exists(3, $m)) { - $addresszusatz = trim($m[3]); - } - } else { - return false; - } /* elseif(preg_match('/^(.+)/i', $strasse_hausnummer, $m)) { + + + public function splitStreetHausnummer($strasse_hausnummer) + { + $strasse_name = ""; + $hausnummer_name = ""; + $addresszusatz = ""; + + $m = []; + // Lantschern GST 1/5 + + if (preg_match('/^(.+)\s+((?:GNR|GST)\s+\.?\d+[a-z0-9\/&#._-]*)(.+)?/i', $strasse_hausnummer, $m)) { + $strasse_name = trim($m[1]); + $hausnummer_name = trim($m[2]); + if (array_key_exists(3, $m)) { + $addresszusatz = trim($m[3]); + } + } elseif (preg_match('/^(\D+)\s+(\d+[a-z0-9\/&#._-]*)(?:\s+((?:gesch(?:ae|ä)ft|werkstatt|betrieb und wohnungen|stg|paketlogistik|cafe|pavillon|pfarrheim|[^ ]*haus|[^ ]*geb(?:ae|ä)ude|[^ ]*halle|[^ ]*schule|Öhlmühle)(?:\s+[a-z0-9]+)?))?/i', $strasse_hausnummer, $m)) { + $strasse_name = trim($m[1]); + $hausnummer_name = trim($m[2]); + if (array_key_exists(3, $m)) { + $addresszusatz = trim($m[3]); + } + } elseif (preg_match('/^(.+)\s+(\d+[a-z0-9\/&#._-]*)(.+)?/i', $strasse_hausnummer, $m)) { + $strasse_name = trim($m[1]); + $hausnummer_name = trim($m[2]); + if (array_key_exists(3, $m)) { + $addresszusatz = trim($m[3]); + } + } else { + return false; + } /* elseif(preg_match('/^(.+)/i', $strasse_hausnummer, $m)) { // ignore GST objects return false; $strasse_name = trim($m[1]); }*/ - - return [$strasse_name, $hausnummer_name, $addresszusatz]; - } - - public function findUpdateAddressFromRimoBuilding($building) { - $hausnummer = false; - - //echo "===================================\n"; - - $rimo_id = trim($building->id); - - if(!$rimo_id) { - return false; + + return [$strasse_name, $hausnummer_name, $addresszusatz]; } - - $name = trim($building->name); - $strasse_hausnummer = trim($building->address->name); - $split_result = $this->splitStreetHausnummer($strasse_hausnummer); - - if(!$split_result) { - $this->logFindAddressError("[EE] Hausnummer nicht gefunden in '$strasse_hausnummer' ($rimo_id)"); - return false; - } - - $strasse_name = $this->db->escape($split_result[0]); - $hausnummer_name = $this->db->escape( $split_result[1]); - $addresszusatz = $this->db->escape($split_result[2]); - - $gem_kz = $this->db->escape(trim($building->municipality->name)); - $gem_name = $this->db->escape(trim($building->municipality->userLabel)); - - $ort_name = $this->db->escape(trim($building->address->city)); - $plz_name = $this->db->escape(trim($building->address->zipCode)); - - $lat = $building->address->latitude; - $long = $building->address->longitude; - $unit_count = $building->homesCount; - $lot_num = $building->address->lotNumber; - $fcp_name = false; - - $adrcd = false; - $subcd = false; - $adr = trim($building->foreignId2); - $adr_parts = explode("-", $adr); - if(count($adr_parts)) { - $adrcd = $adr_parts[0]; - if(array_key_exists(1, $adr_parts)) { - $subcd = $adr_parts[1]; - } - } - - $addr_dbg_str = "strasse_hausnummer: $strasse_hausnummer | zusatz: $addresszusatz | gemkz: $gem_kz | gem_name: $gem_name | ort_name: $ort_name | plz_name: $plz_name | adrcd: $adr | $rimo_id"; - - if(!$hausnummer_name || !$gem_name || !$plz_name || !$ort_name || !$strasse_name) { - $this->logFindAddressError("[WW] Adressbestandteil fehlt ($addr_dbg_str)"); - return false; - } - - // pass variables by ref, so they can be manipulated directly - $continue = $this->NetworkHelper->checkAddress([ - "name" => &$name, - "strasse_name" => &$strasse_name, - "hausnummer_name" => &$hausnummer_name, - "addresszusatz" => &$addresszusatz, - "gem_kz" => &$gem_kz, - "gem_name" => &$gem_name, - "ort_name" => &$ort_name, - "plz_name" => &$plz_name - ]); - - if(!$continue) { - echo "[II] ($addr_dbg_str) Wurde aussortiert\n"; - return false; - } - - - $gemeinde = \ADBGemeindeModel::getFirst(["kennziffer" => $gem_kz]); - if(!$gemeinde) { - //$this->log->warning("[EE] Gemeinde $gem_name $gem_kz nicht gefunden ($addr_dbg_str)"); - $this->logFindAddressError("[EE] Gemeinde '$gem_name' / '$gem_kz' nicht gefunden ($addr_dbg_str)"); - return false; - } - $gemeinde_id = $gemeinde->id; - - - - $hausnummer = \ADBHausnummerModel::getFirst(["rimo_id" => $rimo_id]); - - /*if($hausnummer) { - echo "found hausnummer from rimo_id $rimo_id\n"; - }*/ - - if($adrcd && !$hausnummer) { - // get Hausnummer to update - if($subcd > 1) { - $hausnummer = \ADBHausnummerModel::getFirst(['adrcd' => $adrcd, "subcd" => $subcd]); - } else { - $hausnummer = \ADBHausnummerModel::getFirst(['adrcd' => $adrcd, "subcd" => "1"]); - if(!$hausnummer) { - $hausnummer = \ADBHausnummerModel::getFirst(['adrcd' => $adrcd, "subcd" => null]); - } - } - /*if(!$hausnummer) { - //echo "Hausnummer adrcd $adrcd not found\n"; - } else { - echo "found hausnummer from adrcd $adrcd\n"; - //echo "Hausnummer adrcd $adrcd gefunden!\n"; - }*/ - } - - if(!$hausnummer) { - $hausnummer = $this->findHausnummerByStreet($strasse_name, $hausnummer_name, $gemeinde_id); - if(!$hausnummer) { - // hausnummer anlegen - - $plz = \ADBPlzModel::getFirst(["gemeinde_id" => $gemeinde_id, "plz" => $plz_name]); - if(!$plz) { - $this->logFindAddressError("[EE] PLZ '$plz_name' nicht gefunden ($addr_dbg_str)"); - return false; - } - - $ortschaft = \ADBOrtschaftModel::getFirst(["gemeinde_id" => $gemeinde_id, "name" => $ort_name]); - if(!$ortschaft) { - $this->logFindAddressError("[EE] Ortschaft '$ort_name' nicht gefunden ($addr_dbg_str)"); - return false; - } - - - $strasse = \ADBStrasseModel::getFirst(["gemeinde_id" => $gemeinde_id, "name" => $strasse_name]); - if(!$strasse) { - // try finding strasse with ortschaft prefix - $prefix = ($ortschaft->name) ? $ortschaft->name : $gemeinde->name; - - /*if(!$prefix) { - echo "[EE] ----------- Kein Prefix\n"; // should not happen + + public function findUpdateAddressFromRimoBuilding($building) + { + $hausnummer = false; + + //echo "===================================\n"; + + $rimo_id = trim($building->id); + + if (!$rimo_id) { return false; - }*/ - - if($prefix && strpos($strasse_name, "$prefix ") === 0) { - $strasse_name_sansprefix = substr($strasse_name, strlen($prefix)+1); - if(!$strasse_name_sansprefix) { - $this->logFindAddressError("[EE] Fehler beim prefix entfernen von strasse_name $strasse_name"); - return false; + } + + $create_address_parts = false; + if ($this->netzgebiet) { + $create_address_parts = $this->netzgebiet->getOption("create_address_parts"); + } + + + $name = trim($building->name); + $strasse_hausnummer = trim($building->address->name); + $split_result = $this->splitStreetHausnummer($strasse_hausnummer); + + if (!$split_result) { + $this->logFindAddressError("[EE] Hausnummer nicht gefunden in '$strasse_hausnummer' ($rimo_id)"); + return false; + } + + $strasse_name = $this->db->escape($split_result[0]); + $hausnummer_name = $this->db->escape($split_result[1]); + $addresszusatz = $this->db->escape($split_result[2]); + + $gem_kz = $this->db->escape(trim($building->municipality->name)); + $gem_name = $this->db->escape(trim($building->municipality->userLabel)); + + $ort_name = $this->db->escape(trim($building->address->city)); + $plz_name = $this->db->escape(trim($building->address->zipCode)); + + $lat = $building->address->latitude; + $long = $building->address->longitude; + $unit_count = $building->homesCount; + $lot_num = $building->address->lotNumber; + $fcp_name = false; + + $adrcd = false; + $subcd = false; + $adr = trim($building->foreignId2); + $adr_parts = explode("-", $adr); + if (count($adr_parts)) { + $adrcd = $adr_parts[0]; + if (array_key_exists(1, $adr_parts)) { + $subcd = $adr_parts[1]; } - - $strasse = \ADBStrasseModel::getFirst(["gemeinde_id" => $gemeinde_id, "name" => "$strasse_name_sansprefix"]); - /*if($strasse) { - echo "Found strasse '$strasse_name' without prefix '$prefix' (gemeinde_id => $gemeinde_id, name => $strasse_name_sansprefix) ($rimo_id)\n"; - }*/ - } } - - if(!$strasse) { - $this->logFindAddressError("[EE] Straße '$strasse_name' nicht gefunden ($addr_dbg_str)"); - return false; - - echo "[II] Erstelle Strasse '$strasse_name' ($addr_dbg_str)\n"; - $strasse = $this->createStreet($gemeinde_id, $strasse_name); - if(!$strasse) { - $this->logFindAddressError("[EE] Konnte Strasse '$strasse_name' in Gemeinde '$gemeinde_id' nicht anlegen ($addr_dbg_str)"); + + $addr_dbg_str = "strasse_hausnummer: $strasse_hausnummer | zusatz: $addresszusatz | gemkz: $gem_kz | gem_name: $gem_name | ort_name: $ort_name | plz_name: $plz_name | adrcd: $adr | $rimo_id"; + + if (!$hausnummer_name || !$gem_name || !$plz_name || !$ort_name || !$strasse_name) { + $this->logFindAddressError("[WW] Adressbestandteil fehlt ($addr_dbg_str)"); return false; - } } - - - - $hausnummer_data = [ - "netzgebiet_id" => $this->netzgebiet->id, - "adrcd" => ($adrcd) ? $adrcd : null, - "subcd" => ($subcd) ? $subcd : null, - "extref" => $name, - "ortschaft_id" => $ortschaft->id, - "plz_id" => $plz->id, - "strasse_id" => $strasse->id, - "hausnummer" => $hausnummer_name, - "zusatz" => ($addresszusatz) ? $addresszusatz : null, - "grund_nr" => ($lot_num) ? $lot_num : null, - "gps_lat" => $lat, - "gps_long" => $long, - "unit_count" => ($unit_count) ? $unit_count : 1, - "freigabe" => $this->netzgebiet->freigabe, - "rimo_id" => $rimo_id, - "rimo_fcp_name" => ($fcp_name) ? $fcp_name : null - ]; - $hausnummer = \ADBHausnummerModel::create($hausnummer_data); + + // pass variables by ref, so they can be manipulated directly + if ($this->NetworkHelper) { + $continue = $this->NetworkHelper->checkAddress([ + "name" => &$name, + "strasse_name" => &$strasse_name, + "hausnummer_name" => &$hausnummer_name, + "addresszusatz" => &$addresszusatz, + "gem_kz" => &$gem_kz, + "gem_name" => &$gem_name, + "ort_name" => &$ort_name, + "plz_name" => &$plz_name + ]); + + if (!$continue) { + echo "[II] ($addr_dbg_str) Wurde aussortiert\n"; + return false; + } + } + + + + + + $gemeinde = ADBGemeindeModel::getFirst(["kennziffer" => $gem_kz]); + if (!$gemeinde) { + //$this->log->warning("[EE] Gemeinde $gem_name $gem_kz nicht gefunden ($addr_dbg_str)"); + $this->logFindAddressError("[EE] Gemeinde '$gem_name' / '$gem_kz' nicht gefunden ($addr_dbg_str)"); + return false; + } + $gemeinde_id = $gemeinde->id; + + + $hausnummer = ADBHausnummerModel::getFirst(["rimo_id" => $rimo_id]); + + /*if($hausnummer) { + echo "found hausnummer from rimo_id $rimo_id\n"; + }*/ + + if ($adrcd && !$hausnummer) { + // get Hausnummer to update + if ($subcd > 1) { + $hausnummer = ADBHausnummerModel::getFirst(['adrcd' => $adrcd, "subcd" => $subcd]); + } else { + $hausnummer = ADBHausnummerModel::getFirst(['adrcd' => $adrcd, "subcd" => "1"]); + if (!$hausnummer) { + $hausnummer = ADBHausnummerModel::getFirst(['adrcd' => $adrcd, "subcd" => null]); + } + } + /*if(!$hausnummer) { + //echo "Hausnummer adrcd $adrcd not found\n"; + } else { + echo "found hausnummer from adrcd $adrcd\n"; + //echo "Hausnummer adrcd $adrcd gefunden!\n"; + }*/ + } + + if (!$hausnummer) { + $hausnummer = $this->findHausnummerByStreet($strasse_name, $hausnummer_name, $gemeinde_id); + if (!$hausnummer) { + // hausnummer anlegen + + $plz = ADBPlzModel::getFirst(["gemeinde_id" => $gemeinde_id, "plz" => $plz_name]); + if (!$plz) { + $this->logFindAddressError("[EE] PLZ '$plz_name' nicht gefunden ($addr_dbg_str)"); + return false; + } + + $ortschaft = ADBOrtschaftModel::getFirst(["gemeinde_id" => $gemeinde_id, "name" => $ort_name]); + if (!$ortschaft && $create_address_parts) { + // anlegen + $ortschaft = $this->createOrtschaft($gemeinde->id, $ort_name); + } + if (!$ortschaft) { + $this->logFindAddressError("[EE] Ortschaft '$ort_name' nicht gefunden ($addr_dbg_str)"); + return false; + } + + + $strasse = ADBStrasseModel::getFirst(["gemeinde_id" => $gemeinde_id, "name" => $strasse_name]); + if (!$strasse) { + // try finding strasse with ortschaft prefix + $prefix = ($ortschaft->name) ? $ortschaft->name : $gemeinde->name; + + /*if(!$prefix) { + echo "[EE] ----------- Kein Prefix\n"; // should not happen + return false; + }*/ + + if ($prefix && strpos($strasse_name, "$prefix ") === 0) { + $strasse_name_sansprefix = substr($strasse_name, strlen($prefix) + 1); + if (!$strasse_name_sansprefix) { + $this->logFindAddressError("[EE] Fehler beim prefix entfernen von strasse_name $strasse_name"); + return false; + } + + $strasse = ADBStrasseModel::getFirst(["gemeinde_id" => $gemeinde_id, "name" => "$strasse_name_sansprefix"]); + /*if($strasse) { + echo "Found strasse '$strasse_name' without prefix '$prefix' (gemeinde_id => $gemeinde_id, name => $strasse_name_sansprefix) ($rimo_id)\n"; + }*/ + } + } + + if (!$strasse && $create_address_parts) { + $strasse = $this->createStreet($gemeinde_id, $strasse_name); + } + + if (!$strasse) { + $this->logFindAddressError("[EE] Konnte Strasse '$strasse_name' in Gemeinde '$gemeinde_id' nicht anlegen ($addr_dbg_str)"); + return false; + } + + + $hausnummer_data = [ + "netzgebiet_id" => $this->netzgebiet->id, + "adrcd" => ($adrcd) ? $adrcd : null, + "subcd" => ($subcd) ? $subcd : null, + "extref" => $name, + "ortschaft_id" => $ortschaft->id, + "plz_id" => $plz->id, + "strasse_id" => $strasse->id, + "hausnummer" => $hausnummer_name, + "zusatz" => ($addresszusatz) ? $addresszusatz : null, + "grund_nr" => ($lot_num) ? $lot_num : null, + "gps_lat" => $lat, + "gps_long" => $long, + "unit_count" => ($unit_count) ? $unit_count : 1, + "freigabe" => $this->netzgebiet->freigabe, + "rimo_id" => $rimo_id, + "rimo_fcp_name" => ($fcp_name) ? $fcp_name : null + ]; + $hausnummer = ADBHausnummerModel::create($hausnummer_data); + //var_dump($hausnummer);exit; + //echo "----------------------\ncreating hausnummer:\n"; + //print_r($hausnummer); + $hausnummer->save(); + $this->logFindAddressError("[CC] Neues Gebäude erstellt ($addr_dbg_str)"); + } + } + + $this->checkGemeindeNetzgebiet($gemeinde, $this->netzgebiet); + + // update hausnummer + if ($hausnummer->netzgebiet_id != $this->netzgebiet->id) { + // only if overwriting netzgebiet_id is allowed in old netzgebiet + $dont_overwrite_netzgbiet = $hausnummer->netzgebiet->getOption("hausnummer_dont_overwrite_netzgebiet"); + if (!$dont_overwrite_netzgbiet) { + $hausnummer->netzgebiet_id = $this->netzgebiet->id; + $hausnummer->save(); + } + } + if ($hausnummer->extref != $name) { + $hausnummer->extref = $name; + $hausnummer->save(); + } + if ($lat && $long) { + $hausnummer->gps_lat = (float)$lat; + $hausnummer->gps_long = (float)$long; + $hausnummer->save(); + } + if ($hausnummer->rimo_id != $rimo_id) { + $hausnummer->rimo_id = $rimo_id; + $hausnummer->save(); + } + + if ($hausnummer->rimo_fcp_name != $fcp_name) { + $hausnummer->rimo_fcp_name = $fcp_name; + $hausnummer->save(); + } + //$hausnummer->freigabe = $this->netzgebiet->default_freigabe; + + //echo ">>>>>>>>>>>>>>>>>>>\nupdating hausnummer:\n"; + //print_r($hausnummer);exit; + return $hausnummer; + + } + + + public function findHausnummerByStreet($strasse_name, $hausnummer_name, $gemeinde_id) + { + $strasse_search = [$strasse_name]; + + if (strpos($strasse_name, ' ') !== false) $strasse_search[] = str_replace(' ', '-', $strasse_name); + if (strpos($strasse_name, '-') !== false) $strasse_search[] = str_replace('-', ' ', $strasse_name); + if (strpos($strasse_name, '.') !== false) $strasse_search[] = str_replace('.', '. ', $strasse_name); + if (strpos($strasse_name, '.') !== false) $strasse_search[] = str_replace('.', '.-', $strasse_name); + if (strpos($strasse_name, '. ') !== false) $strasse_search[] = str_replace('. ', '.', $strasse_name); + if (strpos($strasse_name, '. ') !== false) $strasse_search[] = str_replace('. ', '.-', $strasse_name); + if (strpos($strasse_name, '.') !== false) $strasse_search[] = str_replace('.-', '.', $strasse_name); + if (strpos($strasse_name, '.') !== false) $strasse_search[] = str_replace('.-', '. ', $strasse_name); + + foreach ($strasse_search as $search) { + if (strpos($search, 'ß') !== false) $strasse_search[] = str_replace('ß', 'ss', $search); + if (strpos($search, 'ä') !== false) $strasse_search[] = str_replace('ä', 'ae', $search); + if (strpos($search, 'ö') !== false) $strasse_search[] = str_replace('ö', 'oe', $search); + if (strpos($search, 'ü') !== false) $strasse_search[] = str_replace('ü', 'ue', $search); + + if (strpos($search, 'ss') !== false) $strasse_search[] = str_replace('ss', 'ß', $search); + if (strpos($search, 'ae') !== false) $strasse_search[] = str_replace('ae', 'ä', $search); + if (strpos($search, 'oe') !== false) $strasse_search[] = str_replace('oe', 'ö', $search); + if (strpos($search, 'ue') !== false) $strasse_search[] = str_replace('ue', 'ü', $search); + } + + $sql = "SELECT * FROM view_hausnummer WHERE gemeinde_id = $gemeinde_id AND strasse IN ('" . implode("', '", $strasse_search) . "') AND hausnummer='$hausnummer_name'"; + //echo "$sql\n"; + /*if(preg_match('/^Tobelbader/i',$strasse_name)) { + echo "$sql\n"; + }*/ + $res = $this->db->query($sql); + + if ($this->db->num_rows($res)) { + // get Hausnummer to update + //echo "Hausnummer per Suche gefunden\n"; + $data = $this->db->fetch_object($res); + //echo "found by strasse/hausnummer/gemeinde\n"; + return new ADBHausnummer($data->hausnummer_id); + } + return false; + } + + private function createStreet($gemeinde_id, $strasse_name) + { + if (!$gemeinde_id || !$strasse_name) return null; + + $strasse = ADBStrasseModel::create([ + "gemeinde_id" => $gemeinde_id, + "name" => $strasse_name + ]); + + if (!$strasse->save()) { + return null; + } + return $strasse; + + } + + private function createOrtschaft($gemeinde_id, $ortschaft_name) + { + if (!$gemeinde_id || !$ortschaft_name) return false; + + $ortschaft = ADBOrtschaftModel::create([ + "gemeinde_id" => $gemeinde_id, + "name" => $ortschaft_name + ]); + + if (!$ortschaft->save()) { + return false; + } + + return $ortschaft; + } + + public function createHausnummer($hausnummer_data = []) + { + $hausnummer = ADBHausnummerModel::create($hausnummer_data); //var_dump($hausnummer);exit; - //echo "----------------------\ncreating hausnummer:\n"; - //print_r($hausnummer); - $hausnummer->save(); - $this->logFindAddressError("[CC] Neues Gebäude erstellt ($addr_dbg_str)"); - } - } - - $this->checkGemeindeNetzgebiet($gemeinde, $this->netzgebiet); - - // update hausnummer - if($hausnummer->netzgebiet_id != $this->netzgebiet->id) { - // only if overwriting netzgebiet_id is allowed in old netzgebiet - $dont_overwrite_netzgbiet = $hausnummer->netzgebiet->getOption("hausnummer_dont_overwrite_netzgebiet"); - if(!$dont_overwrite_netzgbiet) { - $hausnummer->netzgebiet_id = $this->netzgebiet->id; - $hausnummer->save(); - } - } - if($hausnummer->extref != $name) { - $hausnummer->extref = $name; - $hausnummer->save(); - } - if($lat && $long) { - $hausnummer->gps_lat = (float)$lat; - $hausnummer->gps_long = (float)$long; - $hausnummer->save(); - } - if($hausnummer->rimo_id != $rimo_id) { - $hausnummer->rimo_id = $rimo_id; - $hausnummer->save(); - } - - if($hausnummer->rimo_fcp_name != $fcp_name) { - $hausnummer->rimo_fcp_name = $fcp_name; - $hausnummer->save(); - } - //$hausnummer->freigabe = $this->netzgebiet->default_freigabe; - - //echo ">>>>>>>>>>>>>>>>>>>\nupdating hausnummer:\n"; - //print_r($hausnummer);exit; - return $hausnummer; - - } - - - public function findHausnummerByStreet($strasse_name, $hausnummer_name, $gemeinde_id) { - $strasse_search = [$strasse_name]; - - if(strpos($strasse_name, ' ') !== false) $strasse_search[] = str_replace(' ', '-', $strasse_name); - if(strpos($strasse_name, '-') !== false) $strasse_search[] = str_replace('-', ' ', $strasse_name); - if(strpos($strasse_name, '.') !== false) $strasse_search[] = str_replace('.', '. ', $strasse_name); - if(strpos($strasse_name, '.') !== false) $strasse_search[] = str_replace('.', '.-', $strasse_name); - if(strpos($strasse_name, '. ') !== false) $strasse_search[] = str_replace('. ', '.', $strasse_name); - if(strpos($strasse_name, '. ') !== false) $strasse_search[] = str_replace('. ', '.-', $strasse_name); - if(strpos($strasse_name, '.') !== false) $strasse_search[] = str_replace('.-', '.', $strasse_name); - if(strpos($strasse_name, '.') !== false) $strasse_search[] = str_replace('.-', '. ', $strasse_name); - - foreach($strasse_search as $search) { - if(strpos($search, 'ß') !== false) $strasse_search[] = str_replace('ß', 'ss', $search); - if(strpos($search, 'ä') !== false) $strasse_search[] = str_replace('ä', 'ae', $search); - if(strpos($search, 'ö') !== false) $strasse_search[] = str_replace('ö', 'oe', $search); - if(strpos($search, 'ü') !== false) $strasse_search[] = str_replace('ü', 'ue', $search); - - if(strpos($search, 'ss') !== false) $strasse_search[] = str_replace('ss', 'ß', $search); - if(strpos($search, 'ae') !== false) $strasse_search[] = str_replace('ae', 'ä', $search); - if(strpos($search, 'oe') !== false) $strasse_search[] = str_replace('oe', 'ö', $search); - if(strpos($search, 'ue') !== false) $strasse_search[] = str_replace('ue', 'ü', $search); - } - - $sql = "SELECT * FROM view_hausnummer WHERE gemeinde_id = $gemeinde_id AND strasse IN ('". implode("', '", $strasse_search)."') AND hausnummer='$hausnummer_name'"; - //echo "$sql\n"; - /*if(preg_match('/^Tobelbader/i',$strasse_name)) { - echo "$sql\n"; - }*/ - $res = $this->db->query($sql); - - if($this->db->num_rows($res)) { - // get Hausnummer to update - //echo "Hausnummer per Suche gefunden\n"; - $data = $this->db->fetch_object($res); - //echo "found by strasse/hausnummer/gemeinde\n"; - return new \ADBHausnummer($data->hausnummer_id); - } - return false; - } - - private function createStreet($gemeinde_id, $strasse_name) { - if(!$gemeinde_id || !$strasse_name) return null; - - $strasse = \ADBStrasseModel::create([ - "gemeinde_id" => $gemeinde_id, - "name" => $strasse_name - ]); - - if(!$strasse->save()) { - return null; - } - return $strasse; - - } - - public function createHausnummer($hausnummer_data = []) { - $hausnummer = \ADBHausnummerModel::create($hausnummer_data); - //var_dump($hausnummer);exit; - return $hausnummer->save(); - } - - private function checkGemeindeNetzgebiet($gemeinde, $netzgebiet) { - $sql = "SELECT * FROM GemeindeNetzgebiet WHERE gemeinde_id=".$gemeinde->id." AND netzgebiet_id=".$netzgebiet->id; - $res = $this->db->query($sql); - if($this->db->num_rows($res)) { - return true; + return $hausnummer->save(); } - $sql = "INSERT INTO GemeindeNetzgebiet (gemeinde_id, netzgebiet_id, `create`, `edit`) VALUES (".$gemeinde->id.", ".$netzgebiet->id.", UNIX_TIMESTAMP(), UNIX_TIMESTAMP())"; - if(!$this->db->query($sql)) { - die("SQL Query failed: $sql\n ".$this->db->getLastError()); + private function checkGemeindeNetzgebiet($gemeinde, $netzgebiet) + { + $sql = "SELECT * FROM GemeindeNetzgebiet WHERE gemeinde_id=" . $gemeinde->id . " AND netzgebiet_id=" . $netzgebiet->id; + $res = $this->db->query($sql); + if ($this->db->num_rows($res)) { + return true; + } + + $sql = "INSERT INTO GemeindeNetzgebiet (gemeinde_id, netzgebiet_id, `create`, `edit`) VALUES (" . $gemeinde->id . ", " . $netzgebiet->id . ", UNIX_TIMESTAMP(), UNIX_TIMESTAMP())"; + if (!$this->db->query($sql)) { + die("SQL Query failed: $sql\n " . $this->db->getLastError()); + } + + return true; } - return true; - } - - private function logFindAddressError($text) { - $logtext = trim($text); - $this->find_address_error = $logtext; - echo $logtext."\n"; - } + private function logFindAddressError($text) + { + $logtext = trim($text); + $this->find_address_error = $logtext; + echo $logtext . "\n"; + } } \ No newline at end of file diff --git a/scripts/adb-rimo-import/rimo-import-test.php b/scripts/adb-rimo-import/rimo-import-test.php index 0af949a22..62ee7e16e 100755 --- a/scripts/adb-rimo-import/rimo-import-test.php +++ b/scripts/adb-rimo-import/rimo-import-test.php @@ -122,10 +122,10 @@ foreach($netowners as $apiOwner) { $addressErrors = []; - /*if($cluster_rimo_id != "SDIRolloutRegion_411273870081_1710940292") { - // preding + if($cluster_rimo_id != "SDIRolloutRegion_97586867201_1711003389") { + // stiftingtal continue; - }*/ + } /* * get Cluster Outline Coords