added new filter and changed displaying
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user