minor changes to searchAddress sorting logic

This commit is contained in:
Frank Schubert
2022-12-12 16:10:02 +01:00
parent 2cd3f2ccfd
commit 20eae9a79b

View File

@@ -307,12 +307,16 @@ class AddressdbApicontroller extends mfBaseApicontroller {
return mfResponse::BadRequest(['message' => "Search string cannot be empty"]);
}
$search_parts = explode(" ", $search);
$search_parts = [];
$search = str_replace(",", "", $search);
$tmp_search_parts = explode(" ", $search);
$ort_search = $strasse_search = $plz_search = $hausnummer_search = [];
foreach($search_parts as $p) {
foreach($tmp_search_parts as $p) {
$p = $this->db()->escape(trim($p));
if(!$p) continue;
if(in_array($p,$search_parts)) continue;
$search_parts[] = $p;
$gem_search[] = "gemeinde like '$p%'";
$ort_search[] = "ortschaft like '$p%'";
$strasse_search[] = "strasse like '$p%'";
@@ -339,7 +343,8 @@ class AddressdbApicontroller extends mfBaseApicontroller {
if($this->hausnummer_add_zusatz) {
$address_key = $data->hausnummer_id."-".$data->zusatz;
}
$sort_key = $data->plz." ".$data->ortschaft." ".$data->strasse." ".$data->hausnummer." ".$data->zusatz;
//$sort_key = $data->plz." ".$data->gemeinde." ".$data->ortschaft." ".$data->strasse." ".$data->hausnummer." ".$data->zusatz;
$sort_key = $data->plz." ".$data->gemeinde." ".$data->strasse." ".$data->hausnummer." ".$data->zusatz;
if(!array_key_exists($address_key, $tmp_addresses)) {
// get allowed preorderTypes
@@ -400,32 +405,52 @@ class AddressdbApicontroller extends mfBaseApicontroller {
foreach($tmp_addresses as $temp_add) {
$includes_int = false;
$count = 0;
$count_parts = 0;
/*if($temp_add['oaid'] == "AT-8951-1592d361") {
var_dump($temp_add);
}*/
foreach($search_parts as $p) {
$p = $this->db->escape(trim($p));
if(strlen($p) === 0) continue;
if(is_numeric(($p))) {
$includes_int = true;
$count_parts++;
if(substr_count(strtolower($temp_add['sort_key']), strtolower($p))) {
$count++;
}
} else {
$count += substr_count(strtolower($temp_add['sort_key']), strtolower($p));
$p_count = substr_count(strtolower($temp_add['sort_key']), strtolower($p));
if($p_count) {
$count += $p_count;
$count_parts++;
}
}
}
unset($temp_add['sort_key']);
//echo $address['text']." $p $count<br />\n";
if($includes_int && (($count + 1) - count($search_parts) ) < 1) {
continue;
}
//var_dump(count($search_parts), $count, $count_parts, $temp_add);
if($count_parts == count($search_parts)) {
$count = 50;
}
//var_dump($count);exit;
if(!array_key_exists($count, $sorted_addresses)) {
$sorted_addresses[$count] = [];
}
$sorted_addresses[$count][] = $temp_add;
}
//exit;
ksort($sorted_addresses, SORT_NUMERIC);
$sorted_addresses = array_reverse($sorted_addresses, true);
//var_dump($sorted_addresses);exit;
// sort / format
if($format == "tree") {