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