- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/bot.php
- Класс: BitrixImBot
- Вызов: Bot::register
static function register(array $fields)
{
$code = isset($fields['CODE'])? $fields['CODE']: '';
$type = in_array($fields['TYPE'], [self::TYPE_HUMAN, self::TYPE_BOT, self::TYPE_SUPERVISOR, self::TYPE_NETWORK, self::TYPE_OPENLINE])
? $fields['TYPE']
: self::TYPE_BOT;
$moduleId = $fields['MODULE_ID'];
$installType = in_array($fields['INSTALL_TYPE'], [self::INSTALL_TYPE_SYSTEM, self::INSTALL_TYPE_USER, self::INSTALL_TYPE_SILENT])
? $fields['INSTALL_TYPE']
: self::INSTALL_TYPE_SILENT;
$botFields = $fields['PROPERTIES'];
$language = isset($fields['LANG'])? $fields['LANG']: null;
/* vars for module install */
$class = isset($fields['CLASS'])? $fields['CLASS']: '';
$methodBotDelete = isset($fields['METHOD_BOT_DELETE'])? $fields['METHOD_BOT_DELETE']: '';
$methodMessageAdd = isset($fields['METHOD_MESSAGE_ADD'])? $fields['METHOD_MESSAGE_ADD']: '';
$methodMessageUpdate = isset($fields['METHOD_MESSAGE_UPDATE'])? $fields['METHOD_MESSAGE_UPDATE']: '';
$methodMessageDelete = isset($fields['METHOD_MESSAGE_DELETE'])? $fields['METHOD_MESSAGE_DELETE']: '';
$methodWelcomeMessage = isset($fields['METHOD_WELCOME_MESSAGE'])? $fields['METHOD_WELCOME_MESSAGE']: '';
$textPrivateWelcomeMessage = isset($fields['TEXT_PRIVATE_WELCOME_MESSAGE'])? $fields['TEXT_PRIVATE_WELCOME_MESSAGE']: '';
$textChatWelcomeMessage = isset($fields['TEXT_CHAT_WELCOME_MESSAGE'])? $fields['TEXT_CHAT_WELCOME_MESSAGE']: '';
$openline = isset($fields['OPENLINE']) && $fields['OPENLINE'] == 'Y'? 'Y': 'N';
/* rewrite vars for openline type */
if ($type == self::TYPE_OPENLINE)
{
$openline = 'Y';
$installType = self::INSTALL_TYPE_SILENT;
}
/* vars for rest install */
$appId = isset($fields['APP_ID'])? $fields['APP_ID']: '';
$verified = isset($fields['VERIFIED']) && $fields['VERIFIED'] == 'Y'? 'Y': 'N';
if ($moduleId == 'rest')
{
if (empty($appId))
{
return false;
}
}
else
{
if (empty($class) || empty($methodMessageAdd))
{
return false;
}
if (!(!empty($methodWelcomeMessage) || isset($fields['TEXT_PRIVATE_WELCOME_MESSAGE'])))
{
return false;
}
}
$bots = self::getListCache();
if ($moduleId && $code)
{
foreach ($bots as $bot)
{
if ($bot['MODULE_ID'] == $moduleId && $bot['CODE'] == $code)
{
return $bot['BOT_ID'];
}
}
}
$userCode = $code? $moduleId.'_'.$code: $moduleId;
$color = null;
if (isset($botFields['COLOR']))
{
$color = $botFields['COLOR'];
unset($botFields['COLOR']);
}
$userId = 0;
if ($installType == self::INSTALL_TYPE_USER)
{
if (isset($fields['USER_ID']) && intval($fields['USER_ID']) > 0)
{
$userId = intval($fields['USER_ID']);
}
else
{
global $USER;
if (is_object($USER))
{
$userId = $USER->GetID() > 0? $USER->GetID(): 0;
}
}
if ($userId <= 0)
{
$installType = self::INSTALL_TYPE_SYSTEM;
}
}
if ($moduleId == '')
{
return false;
}
if (!(isset($botFields['NAME']) || isset($botFields['LAST_NAME'])))
{
return false;
}
$botFields['LOGIN'] = mb_substr(self::LOGIN_START. mb_substr($userCode, 0, 40). '_'. randString(5), 0, 50);
$botFields['PASSWORD'] = md5($botFields['LOGIN'].'|'.rand(1000,9999).'|'.time());
$botFields['CONFIRM_PASSWORD'] = $botFields['PASSWORD'];
$botFields['EXTERNAL_AUTH_ID'] = self::EXTERNAL_AUTH_ID;
unset($botFields['GROUP_ID']);
$botFields['ACTIVE'] = 'Y';
unset($botFields['UF_DEPARTMENT']);
$botFields['WORK_POSITION'] = isset($botFields['WORK_POSITION'])? trim($botFields['WORK_POSITION']): '';
if (empty($botFields['WORK_POSITION']))
{
$botFields['WORK_POSITION'] = Loc::getMessage('BOT_DEFAULT_WORK_POSITION');
}
$user = new CUser;
$botId = $user->Add($botFields);
if (!$botId)
{
return false;
}
$result = BitrixImModelBotTable::add(Array(
'BOT_ID' => $botId,
'CODE' => $code? $code: $botId,
'MODULE_ID' => $moduleId,
'CLASS' => $class,
'TYPE' => $type,
'LANG' => $language? $language: '',
'METHOD_BOT_DELETE' => $methodBotDelete,
'METHOD_MESSAGE_ADD' => $methodMessageAdd,
'METHOD_MESSAGE_UPDATE' => $methodMessageUpdate,
'METHOD_MESSAGE_DELETE' => $methodMessageDelete,
'METHOD_WELCOME_MESSAGE' => $methodWelcomeMessage,
'TEXT_PRIVATE_WELCOME_MESSAGE' => $textPrivateWelcomeMessage,
'TEXT_CHAT_WELCOME_MESSAGE' => $textChatWelcomeMessage,
'APP_ID' => $appId,
'VERIFIED' => $verified,
'OPENLINE' => $openline
));
$cache = BitrixMainDataCache::createInstance();
$cache->cleanDir(self::CACHE_PATH);
if ($result->isSuccess())
{
if (BitrixMainLoader::includeModule('pull'))
{
if ($color)
{
CIMStatus::SetColor($botId, $color);
}
self::sendPullNotify($botId, 'botAdd');
if ($installType != self::INSTALL_TYPE_SILENT)
{
$message = '';
if ($installType == self::INSTALL_TYPE_USER && BitrixImUser::getInstance($userId)->isExists())
{
$userName = '[USER='.$userId.'][/USER]';
$userGender = BitrixImUser::getInstance($userId)->getGender();
$message = Loc::getMessage('BOT_MESSAGE_INSTALL_USER'.($userGender == 'F'? '_F':''), Array('#USER_NAME#' => $userName));
}
if (empty($message))
{
$message = Loc::getMessage('BOT_MESSAGE_INSTALL_SYSTEM');
}
$attach = new CIMMessageParamAttach(null, $color);
$attach->AddBot(Array(
"NAME" => BitrixImUser::getInstance($botId)->getFullName(),
"AVATAR" => BitrixImUser::getInstance($botId)->getAvatar(),
"BOT_ID" => $botId,
));
$attach->addMessage(BitrixImUser::getInstance($botId)->getWorkPosition());
CIMChat::AddGeneralMessage(Array(
'MESSAGE' => $message,
'ATTACH' => $attach,
'SKIP_USER_CHECK' => 'Y',
));
}
}
BitrixMainApplication::getInstance()->getTaggedCache()->clearByTag("IM_CONTACT_LIST");
}
else
{
$user->Delete($botId);
$botId = 0;
}
return $botId;
}