• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/internals/delivery_paysystem.php
  • Класс: BitrixSaleInternalsDeliveryPaySystemTable
  • Вызов: DeliveryPaySystemTable::getLinks
static function getLinks($entityId, $entityType, array $preparedData = array(), $considerParent = true)
{
	$result = array();

	if(intval($entityId) <= 0)
		return array();

	if($entityType != self::ENTITY_TYPE_DELIVERY && $entityType != self::ENTITY_TYPE_PAYSYSTEM)
		throw new ArgumentOutOfRangeException("entityType");

	if($entityType == self::ENTITY_TYPE_DELIVERY)
	{
		$linkDirection = self::LINK_DIRECTION_DELIVERY_PAYSYSTEM;
		$reverseLinkDirection = self::LINK_DIRECTION_PAYSYSTEM_DELIVERY;
		$reverseEntityType = self::ENTITY_TYPE_PAYSYSTEM;
		$parentId = self::getDeliveryParentId($entityId);
	}
	else
	{
		$linkDirection =  self::LINK_DIRECTION_PAYSYSTEM_DELIVERY;
		$reverseLinkDirection = self::LINK_DIRECTION_DELIVERY_PAYSYSTEM;
		$reverseEntityType = self::ENTITY_TYPE_DELIVERY;
		$parentId = 0;
	}

	if(isset($preparedData[$entityId]["DIRECT"]))
	{
		$result = $preparedData[$entityId]["DIRECT"];
	}
	else
	{
		$glParams = array(
			'filter' => array(
				"=".$entityType => $entityId,
				"=LINK_DIRECTION" => $linkDirection
			),
			'select' => array($reverseEntityType)
		);

		$res = self::getList($glParams);

		while($rec = $res->fetch())
			$result[] = $rec[$reverseEntityType];
	}

	//if entity has links they must be actual
	if(!empty($result))
	{
		if($considerParent)
		{
			if($entityType == self::ENTITY_TYPE_PAYSYSTEM)
			{
				$result = self::includeDeliveryByParent($result);
				$result = self::excludeDeliveryByParent($result);
			}
			elseif($entityType == self::ENTITY_TYPE_DELIVERY && $parentId > 0)
			{
				$result = self::considerDeliveryParent($result, $entityId, $parentId, $preparedData);
			}
		}

		return $result;
	}

	if(isset($preparedData[$entityId]["REVERSE"]))
	{
		$result = $preparedData[$entityId]["REVERSE"];
	}
	else
	{
		$glParams = array(
			'filter' => array(
				"=".$entityType => $entityId,
				"=LINK_DIRECTION" => $reverseLinkDirection
			),
			'select' => array($reverseEntityType)
		);

		$res = self::getList($glParams);

		while($rec = $res->fetch())
			$result[] = $rec[$reverseEntityType];
	}

	$result = array_merge($result, self::getUnlinkedEnityItems($reverseEntityType, $reverseLinkDirection));

	if($considerParent)
	{
		if($entityType == self::ENTITY_TYPE_DELIVERY && $parentId > 0)
		{
			$result = self::considerDeliveryParent($result, $entityId, $parentId, $preparedData);
		}
		elseif($entityType == self::ENTITY_TYPE_PAYSYSTEM && !empty($result))
		{
			$result = self::excludeDeliveryByParent($result);
		}
	}

	return $result;
}