• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/exchange/integration/router.php
  • Класс: BitrixSaleExchangeIntegrationRouter
  • Вызов: Router::redirect
public function redirect()
{
	$placementType = $this->getPlacement();

	if(PlacementType::isDefined(
		PlacementType::resolveId($placementType)))
	{
		$placement = PlacementFactory::create(PlacementType::resolveId($placementType), $this->fields->getValues());

		$link = AdminFactory::create($placement->getModeType());

		if($placement->getModeType() == AdminModeType::APP_LAYOUT_TYPE)
		{
			$type = $placement->getType();
			if($type == PlacementType::DEFAULT_TOOLBAR)
			{
				$entityTypeId = $this->resolveTypeId($placement->getEntityTypeId());
				//TODO: fabric
				if($entityTypeId == EntityType::ORDER)
				{
					$orderId = $this->getBySourceEntity(
						EntityType::ORDER, '',
						$placement->getEntityTypeId(), $placement->getEntityId());

					if($orderId>0)
					{
						$orderId = Order::load($orderId) ? $orderId
							:0;
					}

					$dealId = $orderId>0 ? $this->getByDestinationEntity(
							EntityType::ORDER, $orderId,
							CRMEntityType::DEAL, '')
						:0;

					if($orderId>0 && $dealId>0)
					{
						$link
							->setPageByType(AdminRegistry::SALE_ORDER_VIEW)
							->setField('entityId', $dealId)
							->setField('entityTypeId', CRMEntityType::DEAL)
							->setField('ID', $orderId)
							->setFilterParams(false)
							->fill()
							->redirect();
					}
					else
					{
						$title = Loc::getMessage("SALE_ROUTER_INTERNAL_ERROR_TITLE");

						if($orderId == 0)
						{
							$message = Loc::getMessage("SALE_ROUTER_ORDER_NOT_FOUND", ['#PLACEMENT_ENTITY_ID#'=>$placement->getEntityId()]);
							$link
								->setPage('/bitrix/services/sale/b24integration/500/rest-app-warning.php')
								->setField('message', urlencode($message))
								->setField('title', $title)
								->redirect();
						}

						$message = Loc::getMessage("SALE_ROUTER_INTERNAL_ERROR");
						$link
							->setPage('/bitrix/services/sale/b24integration/500/rest-app-warning.php')
							->setField('message', urlencode($message))
							->setField('title', $title)
							->redirect();
						 die;
					}
				}
			}
			elseif($type == PlacementType::DEAL_DETAIL_TOOLBAR)
			{
				if($placement->getTypeHandler() == HandlerType::ORDER_NEW)
				{
					$link
						->setPageByType(AdminRegistry::SALE_ORDER_CREATE)
						->setField('entityId', $placement->getEntityId())
						->setField('entityTypeId', $placement->getEntityTypeId())
						->setFilterParams(false)
						->setField('SITE', SITE_ID)
						->setField('HANDLER', HandlerType::ORDER_NEW)
						->fill()
						->redirect();
				}
				elseif ($placement->getTypeHandler() == HandlerType::ORDER_REGISTRY)
				{
					$link
						->setPageByType(AdminRegistry::SALE_ORDER)
						->setField('entityId', $placement->getEntityId())
						->setField('entityTypeId', $placement->getEntityTypeId())
						->setFilterParams('&set_filter=Y&filter_is_sync_b24=N')
						->fill()
						->redirect();
				}
			}
		}
	}

	$link = AdminFactory::create(AdminModeType::APP_LAYOUT_TYPE);
	$title = Loc::getMessage("SALE_ROUTER_INTERNAL_ERROR_TITLE");
	$message = Loc::getMessage("SALE_ROUTER_PAGE_NOT_FOUND");
	$link
		->setPage('/bitrix/services/sale/b24integration/500/rest-app-warning.php')
		->setField('message', urlencode($message))
		->setField('title', $title)
		->redirect();
}