- Модуль: 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;
}