- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/location/search/finder.php
- Класс: BitrixSaleLocationSearchFinder
- Вызов: Finder::find
static function find(
$parameters,
$behaviour = ['FALLBACK_TO_NOINDEX_ON_NOTFOUND' => true, 'USE_INDEX' => true, 'USE_ORM' => true]
)
{
/////////////////////////////////
// parameter check and process
Assert::expectArray($parameters, '$parameters');
if(!is_array($behaviour))
$behaviour = array();
if(!isset($behaviour['FALLBACK_TO_NOINDEX_ON_NOTFOUND']))
$behaviour['FALLBACK_TO_NOINDEX_ON_NOTFOUND'] = true;
if(!isset($behaviour['USE_INDEX']))
$behaviour['USE_INDEX'] = true;
if(!isset($behaviour['USE_ORM']))
$behaviour['USE_ORM'] = true;
if(!isset($parameters['select']))
$parameters['select'] = array('ID');
Assert::expectArray($parameters['select'], '$parameters[select]');
if(isset($parameters['filter']))
{
Assert::expectArray($parameters['filter'], '$parameters[filter]');
// spikes, refactor later
if(isset($parameters['filter']['PHRASE']) || isset($parameters['filter']['=PHRASE']))
{
$key = isset($parameters['filter']['PHRASE']) ? 'PHRASE' : '=PHRASE';
$parameters['filter'][$key] = Assert::expectStringNotNull($parameters['filter'][$key], '$parameters[filter]['.$key.']');
$parameters['filter'][$key] = str_replace('%', '', $parameters['filter'][$key]); // cannot pass '%' to like
}
if(isset($parameters['filter']['SITE_ID']) || isset($parameters['filter']['=SITE_ID']))
{
$key = isset($parameters['filter']['SITE_ID']) ? 'SITE_ID' : '=SITE_ID';
$parameters['filter'][$key] = Assert::expectStringNotNull($parameters['filter'][$key], '$parameters[filter]['.$key.']'); // stronger here
if(!LocationSiteLocationTable::checkLinkUsageAny($parameters['filter'][$key]))
unset($parameters['filter'][$key]);
}
}
if(isset($parameters['limit']))
$parameters['limit'] = Assert::expectIntegerNonNegative($parameters['limit'], '$parameters[limit]');
if(isset($parameters['offset']))
$parameters['offset'] = Assert::expectIntegerNonNegative($parameters['offset'], '$parameters[offset]');
/////////////////////////////////
if(
(isset($parameters['filter']['PHRASE']) || isset($parameters['filter']['SITE_ID']) || isset($parameters['filter']['=PHRASE']) || isset($parameters['filter']['=SITE_ID']))
||
$behaviour['USE_ORM'] === false
)
{
if(static::checkIndexValid() && $behaviour['USE_INDEX'])
{
$result = static::findUsingIndex($parameters);
if(!$behaviour['FALLBACK_TO_NOINDEX_ON_NOTFOUND'])
{
return $result;
}
else
{
$temporalBuffer = array();
while($item = $result->fetch())
{
$temporalBuffer[] = $item;
}
if(empty($temporalBuffer))
{
return static::findNoIndex($parameters);
}
else
{
return new DBArrayResult($temporalBuffer);
}
}
}
else
{
return static::findNoIndex($parameters);
}
}
else
{
return LocationLocationTable::getList($parameters);
}
}