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;
}