• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/livechat.php
  • Класс: BitrixImOpenLinesLiveChat
  • Вызов: LiveChat::getGuestUser
private function getGuestUser($userId = null)
{
	$xmlId = $this->sessionId;

	if (isset($this->temporary['USER_NAME']) && $this->temporary['USER_NAME'])
	{
		$userName = $this->temporary['USER_NAME'];
		$userLastName = isset($this->temporary['USER_LAST_NAME'])? $this->temporary['USER_LAST_NAME']: '';
	}
	else
	{
		$userName = self::getDefaultGuestName();
		$userLastName = '';
	}
	$userEmail = isset($this->temporary['USER_EMAIL'])? $this->temporary['USER_EMAIL']: '';
	$userWebsite = isset($this->temporary['USER_PERSONAL_WWW'])? $this->temporary['USER_PERSONAL_WWW']: '';
	$userGender = '';
	$userAvatar = isset($this->temporary['USER_AVATAR'])? self::uploadAvatar($this->temporary['USER_AVATAR']): '';
	$userWorkPosition = '';

	if ($userId && BitrixImUser::getInstance($userId)->isExists())
	{
		if (BitrixImUser::getInstance($userId)->isConnector())
		{
			return $userId;
		}
		$userData = BitrixImUser::getInstance($userId);
		$xmlId = $userData->getId();
		$userName = $userData->getName(false);
		$userLastName = $userData->getLastName(false);
		$userGender = $userData->getGender();
		$userWebsite = $userData->getWebsite();
		$userWorkPosition = $userData->getWorkPosition();
		$userAvatar = $userData->getAvatarId();
		$userEmail = $userData->getEmail();
		if ($userAvatar)
		{
			$userAvatar = CFile::MakeFileArray($userAvatar);
		}
	}

	global $USER;
	if ($USER->IsAuthorized())
	{
		$orm = BitrixMainUserTable::getList(array(
			'filter' => array('=ID' => $USER->GetId())
		));
	}
	else
	{
		$orm = BitrixMainUserTable::getList(array(
			'filter' => array(
				'=EXTERNAL_AUTH_ID' => self::EXTERNAL_AUTH_ID,
				'=XML_ID' => 'livechat|'.$xmlId
			),
			'limit' => 1
		));
	}

	if($userFields = $orm->fetch())
	{
		$userId = $userFields['ID'];
		if ($userFields['EXTERNAL_AUTH_ID'] == self::EXTERNAL_AUTH_ID)
		{
		$updateFields = Array();
		if ($userWebsite && $userWebsite != $userFields['PERSONAL_WWW'])
		{
			$updateFields['PERSONAL_WWW'] = $userWebsite;
		}

		if (!empty($updateFields))
		{
			$cUser = new CUser;
			$cUser->Update($userId, $updateFields);}
		}
	}
	else
	{
		$cUser = new CUser;
		$fields['LOGIN'] = self::MODULE_ID . '_' . rand(1000,9999) . randString(5);
		$fields['NAME'] = $userName;
		$fields['LAST_NAME'] = $userLastName;
		if ($userAvatar)
		{
			$fields['PERSONAL_PHOTO'] = $userAvatar;
		}
		if ($userEmail)
		{
			$fields['EMAIL'] = $userEmail;
		}
		if ($userWebsite)
		{
			$fields['PERSONAL_WWW'] = $userWebsite;
		}
		$fields['PERSONAL_GENDER'] = $userGender;
		$fields['WORK_POSITION'] = $userWorkPosition;
		$fields['PASSWORD'] = md5($fields['LOGIN'].'|'.rand(1000,9999).'|'.time());
		$fields['CONFIRM_PASSWORD'] = $fields['PASSWORD'];
		$fields['EXTERNAL_AUTH_ID'] = self::EXTERNAL_AUTH_ID;
		$fields['XML_ID'] =  'livechat|'.$xmlId;
		$fields['ACTIVE'] = 'Y';

		$userId = $cUser->Add($fields);
	}

	return $userId;
}