static function prepareSearchResults(array $items)
{
/** @var int[] $map */
$map = array();
/** @var Search\ResultItem[] $results */
$results = array();
foreach($items as $item)
{
$entityTypeID = isset($item['ENTITY_TYPE_ID']) ? (int)$item['ENTITY_TYPE_ID'] : 0;
$entityID = isset($item['ENTITY_ID']) ? (int)$item['ENTITY_ID'] : 0;
if(!\CCrmOwnerType::IsDefined($entityTypeID) || $entityID <= 0)
{
continue;
}
$entityTypeName = \CCrmOwnerType::ResolveName($entityTypeID);
if(!isset($map[$entityTypeName]))
{
$map[$entityTypeName] = array();
}
$map[$entityTypeName][] = $entityID;
}
foreach($map as $entityTypeName => $entityIDs)
{
if($entityTypeName === \CCrmOwnerType::LeadName)
{
$dbResult = \CCrmLead::GetListEx(
array(),
array('@ID' => $entityIDs, 'CHECK_PERMISSIONS' => 'N'),
false,
false,
array('ID', 'TITLE', 'HONORIFIC', 'NAME', 'SECOND_NAME', 'LAST_NAME')
);
if(is_object($dbResult))
{
while($fields = $dbResult->Fetch())
{
$entityID = (int)$fields['ID'];
$resultItem = new Search\ResultItem(
$fields['TITLE'],
new Uri(
\CCrmOwnerType::GetEntityShowPath(
\CCrmOwnerType::Lead,
$entityID,
false
)
)
);
$resultItem->setModule('crm');
$resultItem->setType($entityTypeName);
$resultItem->setId($entityID);
$resultItem->setSubTitle(\CCrmLead::PrepareFormattedName($fields));
$results["{$entityTypeName}:{$fields['ID']}"] = $resultItem;
}
}
}
elseif($entityTypeName === \CCrmOwnerType::ContactName)
{
$dbResult = \CCrmContact::GetListEx(
array(),
array('@ID' => $entityIDs, 'CHECK_PERMISSIONS' => 'N'),
false,
false,
array('ID', 'HONORIFIC', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'COMPANY_TITLE', 'PHOTO')
);
if(is_object($dbResult))
{
while($fields = $dbResult->Fetch())
{
$entityID = (int)$fields['ID'];
$resultItem = new Search\ResultItem(
\CCrmContact::PrepareFormattedName($fields),
new Uri(
\CCrmOwnerType::GetEntityShowPath(
\CCrmOwnerType::Contact,
$entityID,
false
)
)
);
$resultItem->setModule('crm');
$resultItem->setType($entityTypeName);
$resultItem->setId($entityID);
if(isset($fields['COMPANY_TITLE']))
{
$resultItem->setSubTitle($fields['COMPANY_TITLE']);
}
$results["{$entityTypeName}:{$fields['ID']}"] = $resultItem;
/*
if(isset($fields['PHOTO']) && $fields['PHOTO'] > 0)
{
$fileInfo = \CFile::ResizeImageGet(
$fields['PHOTO'],
array('width' => 100, 'height' => 100),
BX_RESIZE_IMAGE_EXACT
);
if(is_array($fileInfo))
{
$item['imageUrl'] = $fileInfo['src'];
}
}
*/
}
}
}
elseif($entityTypeName === \CCrmOwnerType::CompanyName)
{
$dbResult = \CCrmCompany::GetListEx(
array(),
array('@ID' => $entityIDs, 'CHECK_PERMISSIONS' => 'N'),
false,
false,
array('ID', 'TITLE', 'COMPANY_TYPE', 'INDUSTRY', 'LOGO')
);
if(is_object($dbResult))
{
$typeList = \CCrmStatus::GetStatusList('COMPANY_TYPE');
$industryList = \CCrmStatus::GetStatusList('INDUSTRY');
while($fields = $dbResult->Fetch())
{
$descriptions = array();
if(isset($typeList[$fields['COMPANY_TYPE']]))
{
$descriptions[] = $typeList[$fields['COMPANY_TYPE']];
}
if(isset($industryList[$fields['INDUSTRY']]))
{
$descriptions[] = $industryList[$fields['INDUSTRY']];
}
$entityID = (int)$fields['ID'];
$resultItem = new Search\ResultItem(
$fields['TITLE'],
new Uri(
\CCrmOwnerType::GetEntityShowPath(
\CCrmOwnerType::Company,
$entityID,
false
)
)
);
$resultItem->setModule('crm');
$resultItem->setType($entityTypeName);
$resultItem->setId($entityID);
if(!empty($descriptions))
{
$resultItem->setSubTitle(implode(', ', $descriptions));
}
$results["{$entityTypeName}:{$fields['ID']}"] = $resultItem;
/*
if(isset($fields['LOGO']) && $fields['LOGO'] > 0)
{
$fileInfo = \CFile::ResizeImageGet(
$fields['LOGO'],
array('width' => 100, 'height' => 100),
BX_RESIZE_IMAGE_EXACT
);
if(is_array($fileInfo))
{
$item['imageUrl'] = $fileInfo['src'];
}
}
*/
}
}
}
elseif($entityTypeName === \CCrmOwnerType::DealName)
{
$dbResult = \CCrmDeal::GetListEx(
array(),
array('@ID' => $entityIDs, 'CHECK_PERMISSIONS' => 'N'),
false,
false,
array('ID', 'TITLE', 'COMPANY_TITLE', 'CONTACT_HONORIFIC', 'CONTACT_NAME', 'CONTACT_SECOND_NAME', 'CONTACT_LAST_NAME')
);
if(is_object($dbResult))
{
while($fields = $dbResult->Fetch())
{
$descriptions = array();
if(isset($fields['COMPANY_TITLE']) && $fields['COMPANY_TITLE'] != '')
{
$descriptions[] = $fields['COMPANY_TITLE'];
}
$descriptions[] =\CCrmContact::PrepareFormattedName(
array(
'LOGIN' => '',
'HONORIFIC' => isset($fields['CONTACT_HONORIFIC']) ? $fields['CONTACT_HONORIFIC'] : '',
'NAME' => isset($fields['CONTACT_NAME']) ? $fields['CONTACT_NAME'] : '',
'SECOND_NAME' => isset($fields['CONTACT_SECOND_NAME']) ? $fields['CONTACT_SECOND_NAME'] : '',
'LAST_NAME' => isset($fields['CONTACT_LAST_NAME']) ? $fields['CONTACT_LAST_NAME'] : ''
)
);
$entityID = (int)$fields['ID'];
$resultItem = new Search\ResultItem(
$fields['TITLE'],
new Uri(
\CCrmOwnerType::GetEntityShowPath(
\CCrmOwnerType::Deal,
$entityID,
false
)
)
);
$resultItem->setModule('crm');
$resultItem->setType($entityTypeName);
$resultItem->setId($entityID);
if(!empty($descriptions))
{
$resultItem->setSubTitle(implode(', ', $descriptions));
}
$results["{$entityTypeName}:{$fields['ID']}"] = $resultItem;
}
}
}
}
foreach($map as $entityTypeName => $entityIDs)
{
if($entityTypeName === \CCrmOwnerType::DealName)
{
continue;
}
$dbResult = \CCrmFieldMulti::GetListEx(
array(),
array(
'=ENTITY_ID' => $entityTypeName,
'@ELEMENT_ID' => $entityIDs,
'@TYPE_ID' => array('PHONE' , 'EMAIL')
)
);
$attributes = array();
while($fields = $dbResult->Fetch())
{
$entityKey = "{$fields['ENTITY_ID']}:{$fields['ELEMENT_ID']}";
if(!isset($results[$entityKey]))
{
continue;
}
if(!isset($attributes[$entityKey]))
{
$attributes[$entityKey] = array();
}
$key = strtolower($fields['TYPE_ID']);
if(!isset($attributes[$entityKey][$key]))
{
$attributes[$entityKey][$key] = array();
}
$attributes[$entityKey][$key][] = array(
'type' => $fields['VALUE_TYPE'],
'value' => $fields['VALUE']
);
}
foreach($attributes as $entityKey => $data)
{
if(!isset($results[$entityKey]))
{
continue;
}
foreach($data as $key => $items)
{
$results[$entityKey]->setAttribute($key, $items);
}
}
}
$results = array_values($results);
if(count($results) > 1)
{
Main\Type\Collection::sortByColumn($results, array('title' => SORT_ASC));
}
return $results;
}