/** * The function select all cities * * @param array $arOrder sorting an array of results * @param array $arFilter filtered an array of results * @param string $strLang language regions of the sample * @return true false */ function GetCityList($arOrder = Array("NAME_LANG"=>"ASC"), $arFilter=Array(), $strLang = LANGUAGE_ID) { if(self::isLocationProMigrated()) return parent::GetLocationTypeList('CITY', $arOrder, $arFilter, $strLang); global $DB; $arSqlSearch = Array(); if(!is_array($arFilter)) $filter_keys = Array(); else $filter_keys = array_keys($arFilter); $countFilterKey = count($filter_keys); for($i=0; $i < $countFilterKey; $i++) { $val = $DB->ForSql($arFilter[$filter_keys[$i]]); if (strlen($val)<=0) continue; $key = $filter_keys[$i]; if ($key[0]=="!") { $key = substr($key, 1); $bInvert = true; } else $bInvert = false; switch(ToUpper($key)) { case "ID": $arSqlSearch[] = "C.ID ".($bInvert?"<>":"=")." ".IntVal($val)." "; break; case "NAME": $arSqlSearch[] = "C.NAME ".($bInvert?"<>":"=")." '".$val."' "; break; case "REGION_ID": $arSqlSearch[] = "SL.REGION_ID ".($bInvert?"<>":"=")." '".$val."' "; break; } } $strSqlSearch = ""; $countSqlSearch = count($arSqlSearch); for($i=0; $i < $countSqlSearch; $i++) { $strSqlSearch .= " AND "; $strSqlSearch .= " (".$arSqlSearch[$i].") "; } $strSql = "SELECT C.ID, C.NAME as NAME_ORIG, C.SHORT_NAME, CL.NAME as NAME, ". " IF(CL.ID IS NULL, C.NAME, CL.NAME) as NAME_LANG ". "FROM b_sale_location_city C ". " LEFT JOIN b_sale_location_city_lang CL ON (C.ID = CL.CITY_ID AND CL.LID = '".$DB->ForSql($strLang, 2)."') ". " LEFT JOIN b_sale_location SL ON (SL.CITY_ID = C.ID) ". "WHERE 1 = 1 ". " ".$strSqlSearch." "; $arSqlOrder = Array(); foreach ($arOrder as $by=>$order) { $by = ToUpper($by); $order = ToUpper($order); if ($order!="ASC") $order = "DESC"; if ($by == "SORT") $arSqlOrder[] = " SL.SORT ".$order; elseif ($by == "ID") $arSqlOrder[] = " C.ID ".$order." "; elseif ($by == "NAME") $arSqlOrder[] = " C.NAME ".$order." "; elseif ($by == "SHORT_NAME") $arSqlOrder[] = " C.SHORT_NAME ".$order." "; else { $arSqlOrder[] = " CL.NAME ".$order." "; $by = "NAME_LANG"; } } $strSqlOrder = ""; DelDuplicateSort($arSqlOrder); $countSqlOrder = count($arSqlOrder); for ($i=0; $i < $countSqlOrder; $i++) { if ($i==0) $strSqlOrder = " ORDER BY "; else $strSqlOrder .= ", "; $strSqlOrder .= $arSqlOrder[$i]; } $strSql .= $strSqlOrder; $db_res = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__); return $db_res; }