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