static function PreparePopupItems($entityTypeNames, $addPrefix = true, $nameFormat = '', $count = 50, $options = array())
{
if(!is_array($entityTypeNames))
{
$entityTypeNames = array(strval($entityTypeNames));
}
$addPrefix = (bool)$addPrefix;
$count = intval($count);
if($count <= 0)
{
$count = 50;
}
// options
$requireRequisiteData = (
is_array($options) && isset($options['REQUIRE_REQUISITE_DATA'])
&& ($options['REQUIRE_REQUISITE_DATA'] === true || $options['REQUIRE_REQUISITE_DATA'] === 'Y')
);
$companiesFilter = array();
if (is_array($options['SEARCH_OPTIONS']))
{
if (isset($options['SEARCH_OPTIONS']['ONLY_MY_COMPANIES'])
&& $options['SEARCH_OPTIONS']['ONLY_MY_COMPANIES'] === 'Y')
{
$companiesFilter['=IS_MY_COMPANY'] = 'Y';
}
else if (isset($options['SEARCH_OPTIONS']['NOT_MY_COMPANIES'])
&& $options['SEARCH_OPTIONS']['NOT_MY_COMPANIES'] === 'Y')
{
$companiesFilter['=IS_MY_COMPANY'] = 'N';
}
}
$userPermissions = CCrmPerms::GetCurrentUserPermissions();
$arItems = array();
$i = 0;
foreach($entityTypeNames as $typeName)
{
$typeName = mb_strtoupper(strval($typeName));
if($typeName === 'CONTACT')
{
$entityIDs = CCrmContact::GetTopIDsInCategory(0, $count, 'DESC', $userPermissions);
if(!empty($entityIDs))
{
$contactTypes = CCrmStatus::GetStatusList('CONTACT_TYPE');
$contactIndex = array();
$dbResult = CCrmContact::GetListEx(
array('ID' => 'DESC'),
array('@ID' => $entityIDs, 'CHECK_PERMISSIONS' => 'N'),
false,
false,
array('ID', 'HONORIFIC', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'COMPANY_TITLE', 'PHOTO', 'TYPE_ID')
);
while ($arRes = $dbResult->Fetch())
{
$arImg = array();
if (!empty($arRes['PHOTO']) && !isset($arFiles[$arRes['PHOTO']]))
{
if(intval($arRes['PHOTO']) > 0)
{
$arImg = CFile::ResizeImageGet($arRes['PHOTO'], array('width' => 25, 'height' => 25), BX_RESIZE_IMAGE_EXACT);
}
}
$arRes['SID'] = $addPrefix ? 'C_'.$arRes['ID']: $arRes['ID'];
// advanced info
$advancedInfo = array();
if (isset($arRes['TYPE_ID']) && $arRes['TYPE_ID'] != '' && isset($contactTypes[$arRes['TYPE_ID']]))
{
$advancedInfo['contactType'] = array(
'id' => $arRes['TYPE_ID'],
'name' => $contactTypes[$arRes['TYPE_ID']]
);
}
$arItems[$i] = array(
'title' => CCrmContact::PrepareFormattedName(
array(
'HONORIFIC' => isset($arRes['HONORIFIC']) ? $arRes['HONORIFIC'] : '',
'NAME' => isset($arRes['NAME']) ? $arRes['NAME'] : '',
'SECOND_NAME' => isset($arRes['SECOND_NAME']) ? $arRes['SECOND_NAME'] : '',
'LAST_NAME' => isset($arRes['LAST_NAME']) ? $arRes['LAST_NAME'] : ''
),
$nameFormat
),
'desc' => empty($arRes['COMPANY_TITLE'])? "": $arRes['COMPANY_TITLE'],
'id' => $arRes['SID'],
'url' => CComponentEngine::MakePathFromTemplate(COption::GetOptionString('crm', 'path_to_contact_show'),
array(
'contact_id' => $arRes['ID']
)
),
'image' => $arImg['src'],
'type' => 'contact',
'selected' => 'N'
);
if (!empty($advancedInfo))
$arItems[$i]['advancedInfo'] = $advancedInfo;
unset($advancedInfo);
// requisites
if ($requireRequisiteData)
$arItems[$i]['advancedInfo']['requisiteData'] = self::PrepareRequisiteData(
CCrmOwnerType::Contact, $arRes['ID'], array('VIEW_DATA_ONLY' => true)
);
$contactIndex[$arRes['ID']] = &$arItems[$i];
$i++;
}
// advanced info - phone number, e-mail
$obRes = CCrmFieldMulti::GetList(array('ID' => 'asc'), array('ENTITY_ID' => 'CONTACT', 'ELEMENT_ID' => array_keys($contactIndex)));
while($arRes = $obRes->Fetch())
{
if (isset($contactIndex[$arRes['ELEMENT_ID']])
&& ($arRes['TYPE_ID'] === 'PHONE' || $arRes['TYPE_ID'] === 'EMAIL'))
{
$item = &$contactIndex[$arRes['ELEMENT_ID']];
if (!is_array($item['advancedInfo']))
$item['advancedInfo'] = array();
if (!is_array($item['advancedInfo']['multiFields']))
$item['advancedInfo']['multiFields'] = array();
$item['advancedInfo']['multiFields'][] = array(
'ID' => $arRes['ID'],
'TYPE_ID' => $arRes['TYPE_ID'],
'VALUE_TYPE' => $arRes['VALUE_TYPE'],
'VALUE' => $arRes['VALUE']
);
unset($item);
}
}
unset($contactIndex);
}
}
elseif($typeName === 'COMPANY')
{
if(empty($companiesFilter))
{
$entityIDs = CCrmCompany::GetTopIDsInCategory(0, $count, 'DESC', $userPermissions);
}
else
{
$dbResult = CCrmCompany::GetListEx(
array('ID' => 'DESC'),
array_merge($companiesFilter, ['@CATEGORY_ID' => 0,]),
false,
array('nTopCount' => $count),
array('ID')
);
$entityIDs = array();
while ($arRes = $dbResult->Fetch())
{
$entityIDs[] = (int)$arRes['ID'];
}
}
if(!empty($entityIDs))
{
$companyIndex = array();
$arCompanyTypeList = CCrmStatus::GetStatusListEx('COMPANY_TYPE');
$arCompanyIndustryList = CCrmStatus::GetStatusListEx('INDUSTRY');
$dbResult = CCrmCompany::GetListEx(
array('ID' => 'DESC'),
array('@ID' => $entityIDs, 'CHECK_PERMISSIONS' => 'N'),
false,
false,
array('ID', 'TITLE', 'COMPANY_TYPE', 'INDUSTRY', 'LOGO')
);
$arFiles = array();
while ($arRes = $dbResult->Fetch())
{
$arImg = array();
if (!empty($arRes['LOGO']) && !isset($arFiles[$arRes['LOGO']]))
{
if(intval($arRes['LOGO']) > 0)
$arImg = CFile::ResizeImageGet($arRes['LOGO'], array('width' => 25, 'height' => 25), BX_RESIZE_IMAGE_EXACT);
$arFiles[$arRes['LOGO']] = $arImg['src'];
}
$arRes['SID'] = $addPrefix ? 'CO_'.$arRes['ID']: $arRes['ID'];
$arDesc = Array();
if (isset($arCompanyTypeList[$arRes['COMPANY_TYPE']]))
$arDesc[] = $arCompanyTypeList[$arRes['COMPANY_TYPE']];
if (isset($arCompanyIndustryList[$arRes['INDUSTRY']]))
$arDesc[] = $arCompanyIndustryList[$arRes['INDUSTRY']];
$arItems[$i] = array(
'title' => (str_replace(array(';', ','), ' ', $arRes['TITLE'])),
'desc' => implode(', ', $arDesc),
'id' => $arRes['SID'],
'url' => CComponentEngine::MakePathFromTemplate(COption::GetOptionString('crm', 'path_to_company_show'),
array(
'company_id' => $arRes['ID']
)
),
'image' => $arImg['src'],
'type' => 'company',
'selected' => 'N'
);
// requisites
if ($requireRequisiteData)
$arItems[$i]['advancedInfo']['requisiteData'] = self::PrepareRequisiteData(
CCrmOwnerType::Company, $arRes['ID'], array('VIEW_DATA_ONLY' => true)
);
$companyIndex[$arRes['ID']] = &$arItems[$i];
$i++;
}
// advanced info - phone number, e-mail
$obRes = CCrmFieldMulti::GetList(array('ID' => 'asc'), array('ENTITY_ID' => 'COMPANY', 'ELEMENT_ID' => array_keys($companyIndex)));
while($arRes = $obRes->Fetch())
{
if (isset($companyIndex[$arRes['ELEMENT_ID']])
&& ($arRes['TYPE_ID'] === 'PHONE' || $arRes['TYPE_ID'] === 'EMAIL'))
{
$item = &$companyIndex[$arRes['ELEMENT_ID']];
if (!is_array($item['advancedInfo']))
$item['advancedInfo'] = array();
if (!is_array($item['advancedInfo']['multiFields']))
$item['advancedInfo']['multiFields'] = array();
$item['advancedInfo']['multiFields'][] = array(
'ID' => $arRes['ID'],
'TYPE_ID' => $arRes['TYPE_ID'],
'VALUE_TYPE' => $arRes['VALUE_TYPE'],
'VALUE' => $arRes['VALUE']
);
unset($item);
}
}
unset($companyIndex);
}
}
elseif($typeName === 'LEAD')
{
$entityIDs = CCrmLead::GetTopIDs($count, 'DESC', $userPermissions);
if(!empty($entityIDs))
{
$leadIndex = array();
$dbResult = CCrmLead::GetListEx(
array('ID' => 'DESC'),
array('@ID' => $entityIDs, 'CHECK_PERMISSIONS' => 'N'),
false,
false,
array('ID', 'TITLE', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'STATUS_ID')
);
while ($arRes = $dbResult->Fetch())
{
$arRes['SID'] = $addPrefix ? 'L_'.$arRes['ID']: $arRes['ID'];
$arItems[$i] = array(
'title' => isset($arRes['TITLE']) ? $arRes['TITLE'] : '',
'desc' => CCrmLead::PrepareFormattedName(
array(
'HONORIFIC' => isset($arRes['HONORIFIC']) ? $arRes['HONORIFIC'] : '',
'NAME' => isset($arRes['NAME']) ? $arRes['NAME'] : '',
'SECOND_NAME' => isset($arRes['SECOND_NAME']) ? $arRes['SECOND_NAME'] : '',
'LAST_NAME' => isset($arRes['LAST_NAME']) ? $arRes['LAST_NAME'] : ''
),
$nameFormat
),
'id' => $arRes['SID'],
'url' => CComponentEngine::MakePathFromTemplate(COption::GetOptionString('crm', 'path_to_lead_show'),
array(
'lead_id' => $arRes['ID']
)
),
'type' => 'lead',
'selected' => 'N'
);
$leadIndex[$arRes['ID']] = &$arItems[$i];
$i++;
}
// advanced info - phone number, e-mail
$obRes = CCrmFieldMulti::GetList(array('ID' => 'asc'), array('ENTITY_ID' => 'LEAD', 'ELEMENT_ID' => array_keys($leadIndex)));
while($arRes = $obRes->Fetch())
{
if (isset($leadIndex[$arRes['ELEMENT_ID']])
&& ($arRes['TYPE_ID'] === 'PHONE' || $arRes['TYPE_ID'] === 'EMAIL'))
{
$item = &$leadIndex[$arRes['ELEMENT_ID']];
if (!is_array($item['advancedInfo']))
$item['advancedInfo'] = array();
if (!is_array($item['advancedInfo']['multiFields']))
$item['advancedInfo']['multiFields'] = array();
$item['advancedInfo']['multiFields'][] = array(
'ID' => $arRes['ID'],
'TYPE_ID' => $arRes['TYPE_ID'],
'VALUE_TYPE' => $arRes['VALUE_TYPE'],
'VALUE' => $arRes['VALUE']
);
unset($item);
}
}
unset($leadIndex);
}
}
elseif($typeName === 'DEAL')
{
$entityIDs = CCrmDeal::GetTopIDs($count, 'DESC', $userPermissions);
if(!empty($entityIDs))
{
$dbResult = CCrmDeal::GetListEx(
array('ID' => 'DESC'),
array('@ID' => $entityIDs, 'CHECK_PERMISSIONS' => 'N'),
false,
false,
array('ID', 'TITLE', 'STAGE_ID', 'COMPANY_TITLE', 'CONTACT_FULL_NAME')
);
while ($arRes = $dbResult->Fetch())
{
$arRes['SID'] = $addPrefix ? 'D_'.$arRes['ID']: $arRes['ID'];
$clientTitle = (!empty($arRes['COMPANY_TITLE'])) ? $arRes['COMPANY_TITLE'] : '';
$clientTitle .= (($clientTitle !== '' && !empty($arRes['CONTACT_FULL_NAME'])) ? ', ' : '').$arRes['CONTACT_FULL_NAME'];
$arItems[] = array(
'title' => isset($arRes['TITLE']) ? str_replace(array(';', ','), ' ', $arRes['TITLE']) : '',
'desc' => $clientTitle,
'id' => $arRes['SID'],
'url' => CComponentEngine::MakePathFromTemplate(COption::GetOptionString('crm', 'path_to_deal_show'),
array(
'deal_id' => $arRes['ID']
)
),
'type' => 'deal',
'selected' => 'N'
);
}
}
}
elseif($typeName === 'QUOTE')
{
$entityIDs = CCrmQuote::GetTopIDs($count, 'DESC', $userPermissions);
if(!empty($entityIDs))
{
$dbResult = CCrmQuote::GetList(
array('ID' => 'DESC'),
array('@ID' => $entityIDs, 'CHECK_PERMISSIONS' => 'N'),
false,
false,
array('ID', 'QUOTE_NUMBER', 'TITLE', 'COMPANY_TITLE', 'CONTACT_FULL_NAME')
);
while ($arRes = $dbResult->Fetch())
{
$arRes['SID'] = $addPrefix ? CCrmQuote::OWNER_TYPE.'_'.$arRes['ID']: $arRes['ID'];
$clientTitle = (!empty($arRes['COMPANY_TITLE'])) ? $arRes['COMPANY_TITLE'] : '';
$clientTitle .= (($clientTitle !== '' && !empty($arRes['CONTACT_FULL_NAME'])) ? ', ' : '').$arRes['CONTACT_FULL_NAME'];
$quoteTitle = empty($arRes['TITLE']) ? $arRes['QUOTE_NUMBER'] : $arRes['QUOTE_NUMBER'].' - '.$arRes['TITLE'];
$arItems[] = array(
'title' => empty($quoteTitle) ? '' : str_replace(array(';', ','), ' ', $quoteTitle),
'desc' => $clientTitle,
'id' => $arRes['SID'],
'url' => CComponentEngine::MakePathFromTemplate(COption::GetOptionString('crm', 'path_to_quote_show'),
array(
'quote_id' => $arRes['ID']
)
),
'type' => 'quote',
'selected' => 'N'
);
}
}
}
}
unset($typeName);
return $arItems;
}