• Модуль: mail
  • Путь к файлу: ~/bitrix/modules/mail/lib/integration/main/uiselector/mailcontacts.php
  • Класс: BitrixMailIntegrationMainUISelectorMailContacts
  • Вызов: MailContacts::getData
public function getData($params = [])
{
	$entityType = Handler::ENTITY_TYPE_MAILCONTACTS;

	$result = array(
		'ITEMS' => array(),
		'ITEMS_LAST' => array(),
		'ITEMS_HIDDEN' => array(),
		'ADDITIONAL_INFO' => array(
			'GROUPS_LIST' => array(
				'mailcontacts' => array(
					'TITLE' => Loc::getMessage('MAIN_UI_SELECTOR_TITLE_MAILCONTACTS'),
					'TYPE_LIST' => [ $entityType ],
					'DESC_LESS_MODE' => 'N',
					'SORT' => 100
				)
			),
			'SORT_SELECTED' => 100
		)
	);

	$currentUser = BitrixMainEngineCurrentUser::get();
	if (is_null($currentUser->getId()))
	{
		return $result;
	}

	$entityOptions = (!empty($params['options']) ? $params['options'] : array());

	$lastItems = (!empty($params['lastItems']) ? $params['lastItems'] : array());

	$selectedItems = (!empty($params['selectedItems']) ? $params['selectedItems'] : array());
	$selectedItemsData = (!empty($entityOptions['selectedItemsData']) ? $entityOptions['selectedItemsData'] : array());

	$lastMailContactsIdList = [];
	if(!empty($lastItems[$entityType]))
	{
		$result["ITEMS_LAST"] = array_values($lastItems[$entityType]);
		foreach ($lastItems[$entityType] as $value)
		{
			$lastMailContactsIdList[] = str_replace(self::PREFIX, '', $value);
		}
	}

	$selectedMailContactsIdList = [];
	if(!empty($selectedItems[$entityType]))
	{
		foreach ($selectedItems[$entityType] as $value)
		{
			$selectedMailContactsIdList[] = str_replace(self::PREFIX, '', $value);
		}
	}

	$mailContactsIdList = array_merge($selectedMailContactsIdList, $lastMailContactsIdList);
	$mailContactsIdList = array_slice($mailContactsIdList, 0, count($selectedMailContactsIdList) > 20 ? count($selectedMailContactsIdList) : 20);
	$mailContactsIdList = array_unique($mailContactsIdList);

	$mailContactsEmailList = [];
	foreach($mailContactsIdList as $key => $contactId)
	{
		if (
			$contactId !== (int) $contactId.' '
			&& check_email($contactId, true)
		)
		{
			unset($mailContactsIdList[$key]);
			$mailContactsEmailList[] = $contactId;
		}
	}

	$mailContactsList = [];

	$filter = [
		'=USER_ID' => $currentUser->getId()
	];
	$order = [];

	if (!empty($mailContactsIdList))
	{
		$filter['ID'] = $mailContactsIdList;
		$limit = false;
	}
	else
	{
		$order = [
			'ID' => 'DESC'
		];
		$limit = 10;
	}

	$mailContacts = BitrixMailInternalsMailContactTable::getList([
		'order' => $order,
		'filter' => $filter,
		'select' => ['ID', 'NAME', 'EMAIL', 'ICON'],
		'limit' => $limit,
	])->fetchAll();

	foreach ($mailContacts as $mailContact)
	{
		$mailContactsList[self::PREFIX.$mailContact['ID']] = self::prepareEntity($mailContact, $entityOptions);
	}

	if (!empty($mailContactsEmailList))
	{
		foreach ($mailContactsEmailList as $mailContactEmail)
		{
			$mailContactsList[self::PREFIX.$mailContactEmail] = self::prepareEntity([
				'ID' => $mailContactEmail,
				'NAME' => (
					isset($selectedItemsData[self::PREFIX.$mailContactEmail])
					&& isset($selectedItemsData[self::PREFIX.$mailContactEmail]['name'])
						? $selectedItemsData[self::PREFIX.$mailContactEmail]['name']
						: $mailContactEmail
				),
				'EMAIL' => $mailContactEmail,
				'ICON' => BitrixMailHelperMailContact::getIconData($mailContactEmail, '')
			], $entityOptions);
		}
	}

	if (empty($lastMailContactsIdList))
	{
		$result["ITEMS_LAST"] = array_keys($mailContactsList);
	}

	$result['ITEMS'] = $mailContactsList;

	return $result;
}