• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/integration/main/uiselector/emailusers.php
  • Класс: BitrixSocialnetworkIntegrationMainUISelectorEmailUsers
  • Вызов: EmailUsers::getData
public function getData($params = array())
{
	global $USER;

	$result = array(
		'ITEMS' => array(),
		'ITEMS_LAST' => array(),
		'ITEMS_HIDDEN' => array(),
		'ADDITIONAL_INFO' => array(
			'SORT_SELECTED' => 200
		)
	);

	if (!ModuleManager::isModuleInstalled('mail'))
	{
		return $result;
	}

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

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

	$lastUserList = array();
	if(!empty($lastItems[Handler::ENTITY_TYPE_USERS]))
	{
		foreach ($lastItems[Handler::ENTITY_TYPE_USERS] as $value)
		{
			$lastUserList[] = str_replace('U', '', $value);
		}
	}

	$selectedUserList = array();
	if(!empty($selectedItems[Handler::ENTITY_TYPE_USERS]))
	{
		foreach ($selectedItems[Handler::ENTITY_TYPE_USERS] as $value)
		{
			$selectedUserList[] = str_replace('U', '', $value);
		}
	}

	if (
		!empty($lastUserList)
		|| !empty($selectedUserList)
	)
	{
		$usersList = CSocNetLogDestination::getUsers(array(
			'id' => array_merge($lastUserList, $selectedUserList),
			'CRM_ENTITY' => ModuleManager::isModuleInstalled('crm')
		));

		$crmInstalled = ModuleManager::isModuleInstalled('crm');

		foreach($usersList as $key => $user)
		{
			if (
				(
					!empty($user['isEmail'])
					&& $user['isEmail'] == 'Y'
				)
				&& (
					empty($user['isCrmEmail'])
					|| $user['isCrmEmail'] != 'Y'
					|| empty($options['allowSearchCrmEmailUsers'])
					|| $options['allowSearchCrmEmailUsers'] == 'N'
					|| !$crmInstalled
				)
			)
			{
				$result['ITEMS'][$key] = $user;
				$result["ITEMS_LAST"][] = $key;
			}
		}

		if (
			!empty($selectedUserList)
			&& $USER->isAuthorized()
			&& !CSocNetUser::isCurrentUserModuleAdmin(SITE_ID, false)
		)
		{
			$mySelectedEmailUserIdList = [];
			$finderDestFilter = array(
				"USER_ID" => $USER->getId(),
				"=CODE_TYPE" => "U",
				"=CODE_USER.EXTERNAL_AUTH_ID" => 'email',
			);
			$finderDestSelect = array(
				'CODE_USER_ID'
			);
			$res = BitrixMainFinderDestTable::getList(array(
				'order' => array(),
				'filter' => $finderDestFilter,
				'group' => array("CODE_USER_ID"),
				'select' => $finderDestSelect
			));
			while ($userFields = $res->fetch())
			{
				if (!empty($userFields))
				{
					$mySelectedEmailUserIdList[] = 'U'.$userFields['CODE_USER_ID'];
				}
			}

			foreach($selectedUserList as $selectedUserId)
			{
				$code = 'U'.$selectedUserId;
				if (
					isset($result['ITEMS'][$code])
					&& isset($result['ITEMS'][$code])
					&& isset($result['ITEMS'][$code]['isEmail'])
					&& $result['ITEMS'][$code]['isEmail'] == 'Y'
					&& !in_array($code, $mySelectedEmailUserIdList)
				)
				{
					$result['ITEMS_HIDDEN'][] = $code;
					unset($result['ITEMS'][$code]);
				}
			}
			$result["ITEMS_LAST"] = array_filter(
				$result["ITEMS_LAST"],
				function ($item) use ($mySelectedEmailUserIdList)
				{
					return in_array($item, $mySelectedEmailUserIdList);
				}
			);
		}
	}

	return $result;
}