• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/calllist/calllist.php
  • Класс: Bitrix\Crm\CallList\CallList
  • Вызов: CallList::getEntitiesFromGridId
static function getEntitiesFromGridId($entityType, $gridId)
{
	$gridFilter = static::getGridFilter($gridId, \CCrmOwnerType::ResolveID($entityType));

	$gridFilter['CHECK_PERMISSIONS'] = 'Y';

	$arImmutableFilters = array(
		'FM', 'ID', 'CURRENCY_ID', 'ASSOCIATED_CONTACT_ID',
		'ASSIGNED_BY_ID', 'CREATED_BY_ID', 'MODIFY_BY_ID',
		'COMPANY_TYPE', 'INDUSTRY', 'EMPLOYEES', 'WEBFORM_ID',
		'HAS_PHONE', 'HAS_EMAIL', 'IS_MY_COMPANY', '!IS_MY_COMPANY', 'RQ',
		'SEARCH_CONTENT', 'TRACKING_SOURCE_ID', 'TRACKING_CHANNEL_CODE',
		'FILTER_ID', 'FILTER_APPLIED', 'PRESET_ID', 'CHECK_PERMISSIONS',
	);

	foreach ($gridFilter as $k => $v)
	{
		if(in_array($k, $arImmutableFilters, true))
		{
			continue;
		}

		$arMatch = array();

		if($k === 'ORIGINATOR_ID')
		{
			// HACK: build filter by internal entities
			$gridFilter['=ORIGINATOR_ID'] = $v !== '__INTERNAL' ? $v : null;
			unset($gridFilter[$k]);
		}
		elseif($k === 'ADDRESS'
			|| $k === 'ADDRESS_2'
			|| $k === 'ADDRESS_CITY'
			|| $k === 'ADDRESS_REGION'
			|| $k === 'ADDRESS_PROVINCE'
			|| $k === 'ADDRESS_POSTAL_CODE'
			|| $k === 'ADDRESS_COUNTRY'
			|| $k === 'ADDRESS_LEGAL'
			|| $k === 'REG_ADDRESS_2'
			|| $k === 'REG_ADDRESS_CITY'
			|| $k === 'REG_ADDRESS_REGION'
			|| $k === 'REG_ADDRESS_PROVINCE'
			|| $k === 'REG_ADDRESS_POSTAL_CODE'
			|| $k === 'REG_ADDRESS_COUNTRY')
		{
			$v = trim($v);
			if($v === '')
			{
				continue;
			}

			if(!isset($gridFilter['ADDRESSES']))
			{
				$gridFilter['ADDRESSES'] = array();
			}

			$addressAliases = array('ADDRESS_LEGAL' => 'REG_ADDRESS');
			$addressTypeID = CompanyAddress::resolveEntityFieldTypeID($k, $addressAliases);

			if(!isset($gridFilter['ADDRESSES'][$addressTypeID]))
			{
				$gridFilter['ADDRESSES'][$addressTypeID] = array();
			}

			$n = CompanyAddress::mapEntityField($k, $addressTypeID, $addressAliases);
			$gridFilter['ADDRESSES'][$addressTypeID][$n] = "{$v}%";

			unset($gridFilter[$k]);
		}
		elseif (preg_match('/(.*)_from$/i'.BX_UTF_PCRE_MODIFIER, $k, $arMatch))
		{
			\Bitrix\Crm\UI\Filter\Range::prepareFrom($gridFilter, $arMatch[1], $v);
		}
		elseif (preg_match('/(.*)_to$/i'.BX_UTF_PCRE_MODIFIER, $k, $arMatch))
		{
			if ($v != '' && ($arMatch[1] == 'DATE_CREATE' || $arMatch[1] == 'DATE_MODIFY') && !preg_match('/\d{1,2}:\d{1,2}(:\d{1,2})?$/'.BX_UTF_PCRE_MODIFIER, $v))
			{
				$v = \CCrmDateTimeHelper::SetMaxDayTime($v);
			}
			\Bitrix\Crm\UI\Filter\Range::prepareTo($gridFilter, $arMatch[1], $v);
		}
		elseif($k === 'COMMUNICATION_TYPE')
		{
			if(!is_array($v))
			{
				$v = array($v);
			}
			foreach($v as $commTypeID)
			{
				if($commTypeID === \CCrmFieldMulti::PHONE)
				{
					$gridFilter['=HAS_PHONE'] = 'Y';
				}
				elseif($commTypeID === \CCrmFieldMulti::EMAIL)
				{
					$gridFilter['=HAS_EMAIL'] = 'Y';
				}
			}
			unset($gridFilter['COMMUNICATION_TYPE']);
		}
		elseif ($k != 'ID' && $k != 'LOGIC' && $k != '__INNER_FILTER' && $k != '__JOINS' && $k != '__CONDITIONS' && mb_strpos($k, 'UF_') !== 0 && preg_match('/^[^\=\%\?\>\<\@]{1}/', $k) === 1)
		{
			$gridFilter['%'.$k] = $v;
			unset($gridFilter[$k]);
		}
	}
	//endregion

	$cursor = null;
	if($entityType === \CCrmOwnerType::LeadName)
	{
		\CCrmLead::prepareFilter($gridFilter);
		$cursor = \CCrmLead::getListEx(array(), $gridFilter, false, false, array('ID'));
	}
	elseif($entityType === \CCrmOwnerType::CompanyName)
	{
		\CCrmCompany::prepareFilter($gridFilter);
		$cursor = \CCrmCompany::getListEx(array(), $gridFilter, false, false, array('ID'));
	}
	elseif($entityType === \CCrmOwnerType::ContactName)
	{
		\CCrmContact::prepareFilter($gridFilter);
		$cursor = \CCrmContact::getListEx(array(), $gridFilter, false, false, array('ID'));
	}
	elseif($entityType === \CCrmOwnerType::DealName)
	{
		\CCrmDeal::prepareFilter($gridFilter);
		$cursor = \CCrmDeal::getListEx(array(), $gridFilter, false, false, array('ID'));
	}
	elseif($entityType === \CCrmOwnerType::QuoteName)
	{
		\CCrmQuote::prepareFilter($gridFilter);
		$cursor = \CCrmQuote::getList(array(), $gridFilter, false, false, array('ID'));
	}
	elseif($entityType === \CCrmOwnerType::InvoiceName)
	{
		\CCrmInvoice::prepareFilter($gridFilter);
		$cursor = \CCrmInvoice::getList(array(), $gridFilter, false, false, array('ID'));
	}

	if(!$cursor)
		throw new \Bitrix\Main\SystemException('Database error');

	$entityIds = array();

	$count = 0;
	while($row = $cursor->fetch())
	{
		$count++;
		if($count > self::ITEMS_LIMIT)
		{
			throw new \Bitrix\Main\SystemException(Loc::getMessage('CRM_CALL_LIST_LIMIT_ERROR', array("#LIMIT#" => self::ITEMS_LIMIT)));
		}

		$entityIds[] = $row['ID'];
	}
	return $entityIds;
}