added new filter and changed displaying

This commit is contained in:
Luca Haid
2025-06-10 14:18:28 +02:00
parent a2a2bf54b7
commit 4dd53c3a78
2 changed files with 89 additions and 47 deletions
@@ -121,15 +121,28 @@ class ADBHausnummerModel {
if ($join_tables) {
$sql = "SELECT COUNT(*) as cnt FROM (
SELECT Hausnummer.id FROM Hausnummer
LEFT JOIN Ortschaft ON (Ortschaft.id = Hausnummer.ortschaft_id)
LEFT JOIN Gemeinde ON (Gemeinde.id = Ortschaft.gemeinde_id)
LEFT JOIN Strasse ON (Hausnummer.strasse_id = Strasse.id)
LEFT JOIN Plz ON (Hausnummer.plz_id = Plz.id)
LEFT JOIN HausnummerStatusflagValue ON (HausnummerStatusflagValue.hausnummer_id = Hausnummer.id)
WHERE $where
) hn";
} else $sql = "SELECT COUNT(*) as cnt FROM Hausnummer WHERE $where";
SELECT Hausnummer.id FROM Hausnummer
LEFT JOIN Ortschaft ON (Ortschaft.id = Hausnummer.ortschaft_id)
LEFT JOIN Gemeinde ON (Gemeinde.id = Ortschaft.gemeinde_id)
LEFT JOIN Strasse ON (Hausnummer.strasse_id = Strasse.id)
LEFT JOIN Plz ON (Hausnummer.plz_id = Plz.id)
LEFT JOIN HausnummerStatusflagValue ON (HausnummerStatusflagValue.hausnummer_id = Hausnummer.id)";
} else {
$sql = "SELECT COUNT(*) as cnt FROM Hausnummer";
}
// Only join Wohneinheit table if we're searching for Wohneinheit data
if (!empty($filter['home_oaid_rimo_id'])) {
$sql .= " LEFT JOIN Wohneinheit ON (Wohneinheit.hausnummer_id = Hausnummer.id)";
}
$sql .= " WHERE $where";
if (!empty($filter['home_oaid_rimo_id'])) {
$sql .= " GROUP BY Hausnummer.id";
}
mfLoghandler::singleton()->debug($sql);
@@ -165,45 +178,52 @@ class ADBHausnummerModel {
public static function search($filter, $limit = false, $returnDBRessource = false) {
$items = [];
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
$where = self::getSqlFilter($filter);
$sql = "SELECT Hausnummer.* FROM Hausnummer
$items = [];
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
$where = self::getSqlFilter($filter);
// Base SQL with standard joins
$sql = "SELECT Hausnummer.* FROM Hausnummer
LEFT JOIN Ortschaft ON (Ortschaft.id = Hausnummer.ortschaft_id)
LEFT JOIN Gemeinde ON (Gemeinde.id = Ortschaft.gemeinde_id)
LEFT JOIN Strasse ON (Hausnummer.strasse_id = Strasse.id)
LEFT JOIN Plz ON (Hausnummer.plz_id = Plz.id)
LEFT JOIN HausnummerStatusflagValue ON (HausnummerStatusflagValue.hausnummer_id = Hausnummer.id)
WHERE $where
LEFT JOIN HausnummerStatusflagValue ON (HausnummerStatusflagValue.hausnummer_id = Hausnummer.id)";
if (!empty($filter['home_oaid_rimo_id'])) {
$sql .= " LEFT JOIN Wohneinheit ON (Wohneinheit.hausnummer_id = Hausnummer.id)";
}
$sql .= " WHERE $where
GROUP BY Hausnummer.id
ORDER BY netzgebiet_id,Gemeinde.id,ortschaft_id,strasse_id,LENGTH(hausnummer), hausnummer";
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'];
}
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'];
}
}
mfLoghandler::singleton()->debug($sql);
$res = $db->query($sql);
if($db->num_rows($res)) {
// hack for AddressDBController::exportAction
if($returnDBRessource) {
return $res;
}
while($data = $db->fetch_object($res)) {
$items[] = new ADBHausnummer($data);
}
}
return $items;
}
mfLoghandler::singleton()->debug($sql);
$res = $db->query($sql);
if($db->num_rows($res)) {
// hack for AddressDBController::exportAction
if($returnDBRessource) {
return $res;
}
while($data = $db->fetch_object($res)) {
$items[] = new ADBHausnummer($data);
}
}
return $items;
}
private static function getSqlFilter($filter) {
$where = "1=1 ";
@@ -494,9 +514,22 @@ class ADBHausnummerModel {
: " AND Hausnummer.rimo_op_state = '$rimo_op_state'";
}
if (array_key_exists("home_oaid_rimo_id", $filter)) {
$searchTerm = $filter['home_oaid_rimo_id'];
$searchTerms = explode(',', $searchTerm);
$where .= " AND (";
$conditions = [];
foreach ($searchTerms as $term) {
$escapedTerm = FronkDB::singleton()->escape(trim($term));
if ($escapedTerm) {
$conditions[] = "(Wohneinheit.oaid LIKE '%{$escapedTerm}%' OR Wohneinheit.extref LIKE '%{$escapedTerm}%')";
}
}
$where .= implode(' OR ', $conditions);
$where .= ")";
}
//var_dump($filter, $where);exit;
return $where;
}