• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/calllist/calllist.php
  • Класс: Bitrix\Crm\CallList\CallList
  • Вызов: CallList::createWithId
static function createWithId(int $id, bool $loadItems = false, array $options = [])
{
	$row = CallListTable::getById($id)->fetch();
	if (!$row)
	{
		throw new \Bitrix\Main\SystemException('Call list is not found', 404);
	}

	$callList = new static;
	$callList->setFromArray($row);
	$callList->new = false;

	$userId = (int)($options['userId'] ?? Container::getInstance()->getContext()->getUserId());
	$checkPermissions = (bool)($options['checkPermissions'] ?? true);
	$userPermissions = Container::getInstance()->getUserPermissions($userId);

	if ($checkPermissions && !$userPermissions->isAdmin() && (int)$callList->getEntityTypeId() !== 0)
	{
		$canReadType = $userPermissions->canReadType((int)$callList->getEntityTypeId());
		if (!$canReadType)
		{
			throw new \Bitrix\Main\SystemException('Access Denied', 403);
		}
	}

	// todo: add caching
	if($loadItems)
	{
		$callList->loadItems();
		if (empty($callList->items))
		{
			return $callList;
		}

		$itemIds = array();
		/** @var Item $item */
		foreach ($callList->items as $item)
		{
			$itemIds[] = $item->getElementId();
		}

		$itemFields = self::resolveItemFields($callList->getEntityTypeId(), $itemIds);

		foreach ($callList->items as $key => $item)
		{
			if(!isset($itemFields[$item->getElementId()]))
			{
				unset($callList->items[$key]);
			}

			if ($checkPermissions)
			{
				$canReadItem = $userPermissions->checkReadPermissions($callList->entityTypeId, $item->getElementId());
				if (!$canReadItem)
				{
					unset($callList->items[$key]);
					continue;
				}
			}

			$item->setName($itemFields[$item->getElementId()]['NAME']);
			$item->setCompanyTitle($itemFields[$item->getElementId()]['COMPANY_TITLE']);
			$item->setCompanyPost($itemFields[$item->getElementId()]['POST']);
			$item->setEditUrl($itemFields[$item->getElementId()]['EDIT_URL']);

			if (
				isset($itemFields[$item->getElementId()]['PHONES'])
				&& is_array($itemFields[$item->getElementId()]['PHONES'])
			)
			{
				$item->setPhones($itemFields[$item->getElementId()]['PHONES']);
			}

			if (
				isset($itemFields[$item->getElementId()]['ASSOCIATED_ENTITY'])
				&& is_array($itemFields[$item->getElementId()]['ASSOCIATED_ENTITY'])
			)
			{
				$item->setAssociatedEntity($itemFields[$item->getElementId()]['ASSOCIATED_ENTITY']);
			}
		}

		if (empty($callList->items))
		{
			throw new \Bitrix\Main\SystemException('Call list is empty or access denied', 403);
		}
	}

	return $callList;
}