static function SearchCrmEntities($arParams)
{
$result = array();
$search = (!empty($arParams['SEARCH']) ? $arParams['SEARCH'] : false);
if (
$search
&& CModule::IncludeModule('crm')
)
{
if (check_email($search, true))
{
$result = array();
if (
empty($arParams['ENTITIES'])
|| in_array('CONTACT', $arParams['ENTITIES'])
)
{
$dbRes = CCrmContact::GetListEx(
array(),
array(
'CHECK_PERMISSIONS' => 'Y',
'@CATEGORY_ID' => 0,
'FM' => array(
'EMAIL' => array(
'VALUE' => $search
)
)
),
false,
false,
array('ID', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'PHOTO')
);
while($ar = $dbRes->Fetch())
{
$formatted = self::formatCrmEmailEntity($ar, array(
'TYPE' => 'CONTACT',
'NAME_TEMPLATE' => $arParams["NAME_TEMPLATE"],
'EMAIL' => $search
));
if (!empty($formatted))
{
$result[$formatted['id']] = $formatted;
}
}
}
if (
empty($arParams['ENTITIES'])
|| in_array('COMPANY', $arParams['ENTITIES'])
)
{
$dbRes = CCrmCompany::GetListEx(
array(),
array(
'CHECK_PERMISSIONS' => 'Y',
'@CATEGORY_ID' => 0,
'FM' => array(
'EMAIL' => array(
'VALUE' => $search
)
)
),
false,
false,
array('ID', 'TITLE', 'LOGO')
);
while($ar = $dbRes->Fetch())
{
$formatted = self::formatCrmEmailEntity($ar, array(
'TYPE' => 'COMPANY',
'EMAIL' => $search
));
if (!empty($formatted))
{
$result[$formatted['id']] = $formatted;
}
}
}
if (
empty($arParams['ENTITIES'])
|| in_array('LEAD', $arParams['ENTITIES'])
)
{
$dbRes = CCrmLead::GetListEx(
array(),
array(
'CHECK_PERMISSIONS' => 'Y',
'FM' => array(
'EMAIL' => array(
'VALUE' => $search
)
)
),
false,
false,
array('ID', 'TITLE', 'NAME', 'SECOND_NAME', 'LAST_NAME')
);
while($ar = $dbRes->Fetch())
{
$formatted = self::formatCrmEmailEntity($ar, array(
'TYPE' => 'LEAD',
'EMAIL' => $search
));
if (!empty($formatted))
{
$result[$formatted['id']] = $formatted;
}
}
}
}
elseif (
!isset($arParams['SEARCH_BY_EMAIL_ONLY'])
|| $arParams['SEARCH_BY_EMAIL_ONLY'] !== 'Y'
)
{
$keysList = array();
$contacts = CCrmActivity::FindContactCommunications($search, 'EMAIL', 50);
foreach($contacts as $contact)
{
$keysList[] = $contact['ENTITY_ID'].'_'.$contact['ENTITY_TYPE_ID'];
}
$contactsByName = CCrmActivity::FindContactCommunications($search, '', 50);
foreach($contactsByName as $contact)
{
if (
in_array($contact['ENTITY_ID'].'_'.$contact['ENTITY_TYPE_ID'], $keysList)
|| empty($contact["VALUE"])
)
{
continue;
}
$contacts[] = $contact;
}
if (!empty($contacts))
{
$arId = $arEmail = array();
foreach($contacts as $contact)
{
$arEmail[intval($contact["ENTITY_ID"])] = $contact["VALUE"];
$arId[] = intval($contact["ENTITY_ID"]);
}
$dbRes = CCrmContact::GetListEx(
array(),
array(
'CHECK_PERMISSIONS' => 'Y',
'ID' => $arId
),
false,
array('nTopCount' => 10),
array('ID', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'PHOTO')
);
while($ar = $dbRes->fetch())
{
$formatted = self::formatCrmEmailEntity($ar, array(
'TYPE' => 'CONTACT',
'NAME_TEMPLATE' => $arParams["NAME_TEMPLATE"],
'EMAIL' => $arEmail[$ar['ID']]
));
if (!empty($formatted))
{
$result[$formatted['id']] = $formatted;
}
}
}
$companies = CCrmActivity::FindCompanyCommunications($search, 'EMAIL', 50);
foreach($companies as $company)
{
$keysList[] = $company['ENTITY_ID'].'_'.$company['ENTITY_TYPE_ID'];
}
$companiesByName = CCrmActivity::FindCompanyCommunications($search, '', 50);
foreach($companiesByName as $company)
{
if (
in_array($company['ENTITY_ID'].'_'.$company['ENTITY_TYPE_ID'], $keysList)
|| empty($company["VALUE"])
)
{
continue;
}
$companies[] = $company;
}
if (!empty($companies))
{
$arId = $arEmail = array();
foreach($companies as $company)
{
$arEmail[intval($company["ENTITY_ID"])] = $company["VALUE"];
$arId[] = intval($company["ENTITY_ID"]);
}
$dbRes = CCrmCompany::GetListEx(
array(),
array(
'CHECK_PERMISSIONS' => 'Y',
'ID' => $arId
),
false,
array('nTopCount' => 10),
array('ID', 'TITLE', 'LOGO')
);
while($ar = $dbRes->Fetch())
{
$formatted = self::formatCrmEmailEntity($ar, array(
'TYPE' => 'COMPANY',
'EMAIL' => $arEmail[$ar['ID']]
));
if (!empty($formatted))
{
$result[$formatted['id']] = $formatted;
}
}
}
$leads = CCrmActivity::FindLeadCommunications($search, 'EMAIL', 50);
foreach($leads as $lead)
{
$keysList[] = $lead['ENTITY_ID'].'_'.$lead['ENTITY_TYPE_ID'];
}
$leadsByName = CCrmActivity::FindLeadCommunications($search, '', 50);
foreach($leadsByName as $lead)
{
if (
in_array($lead['ENTITY_ID'].'_'.$lead['ENTITY_TYPE_ID'], $keysList)
|| empty($lead["VALUE"])
)
{
continue;
}
$leads[] = $lead;
}
if (!empty($leads))
{
$arId = $arEmail = array();
foreach($leads as $lead)
{
$arEmail[intval($lead["ENTITY_ID"])] = $lead["VALUE"];
$arId[] = intval($lead["ENTITY_ID"]);
}
$dbRes = CCrmLead::GetListEx(
array(),
array(
'CHECK_PERMISSIONS' => 'Y',
'ID' => $arId
),
false,
array('nTopCount' => 10),
array('ID', 'TITLE', 'NAME', 'SECOND_NAME', 'LAST_NAME')
);
while($ar = $dbRes->Fetch())
{
$formatted = self::formatCrmEmailEntity($ar, array(
'TYPE' => 'LEAD',
'EMAIL' => $arEmail[$ar['ID']]
));
if (!empty($formatted))
{
$result[$formatted['id']] = $formatted;
}
}
}
}
}
return $result;
}