• Модуль: 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);
	}
}