• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/delivery/restrictions/bylocation.php
  • Класс: BitrixSaleDeliveryRestrictionsByLocation
  • Вызов: ByLocation::getLocationsCompat
static function getLocationsCompat(array $restrictionFields, $leftMargin, $rightMargin)
{
	$result = array();
	$groups = array();
	$class = static::getD2LClass();

	$res = $class::getList(array(
		'filter' => array(
			'=DELIVERY_ID' => array_keys($restrictionFields),
			array(
				'LOGIC' => 'OR',
				array(
					'LOGIC' => 'AND',
					'=LOCATION_TYPE' => $class::DB_LOCATION_FLAG,
					'<=LOCATION.LEFT_MARGIN' => $leftMargin,
					'>=LOCATION.RIGHT_MARGIN' => $rightMargin
				),
				array(
					'LOGIC' => 'AND',
					'=LOCATION_TYPE' => $class::DB_GROUP_FLAG
				)
			)
		)
	));

	while($d2l = $res->fetch())
	{
		if($d2l['LOCATION_TYPE'] == $class::DB_LOCATION_FLAG)
		{
			if (!isset($result[$d2l['LOCATION_CODE']]))
			{
				$result[$d2l['LOCATION_CODE']] = [];
			}

			if(!in_array($d2l['DELIVERY_ID'] ,$result[$d2l['LOCATION_CODE']]))
				$result[$d2l['LOCATION_CODE']][] = $d2l['DELIVERY_ID'];
		}
		elseif($d2l['LOCATION_TYPE'] == $class::DB_GROUP_FLAG)
		{
			if (!isset($groups[$d2l['LOCATION_CODE']]))
			{
				$groups[$d2l['LOCATION_CODE']] = [];
			}

			if(!in_array($d2l['DELIVERY_ID'] ,$groups[$d2l['LOCATION_CODE']]))
				$groups[$d2l['LOCATION_CODE']][] = $d2l['DELIVERY_ID'];
		}
	}

	//groups
	if(!empty($groups))
	{
		$res = GroupLocationTable::getList(array(
			'filter' => array(
				'=GROUP.CODE' => array_keys($groups),
				'<=LOCATION.LEFT_MARGIN' => $leftMargin,
				'>=LOCATION.RIGHT_MARGIN' => $rightMargin
			),
			'select' => array(
				'LOCATION_ID', 'LOCATION_GROUP_ID',
				'LOCATION_CODE' => 'LOCATION.CODE',
				'GROUP_CODE' => 'GROUP.CODE'
			)
		));

		while($loc = $res->fetch())
		{
			if(!is_array($result[$loc['LOCATION_CODE']]))
				$result[$loc['LOCATION_CODE']] = array();

			foreach($groups[$loc['GROUP_CODE']] as $srvId)
				if(!in_array($srvId, $result[$loc['LOCATION_CODE']]))
					$result[$loc['LOCATION_CODE']][] = $srvId;
		}
	}

	return $result;
}