- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/bot.php
- Класс: BitrixImBot
- Вызов: Bot::update
static function update(array $bot, array $updateFields)
{
$botId = intval($bot['BOT_ID']);
$moduleId = isset($bot['MODULE_ID'])? $bot['MODULE_ID']: '';
$appId = isset($bot['APP_ID'])? $bot['APP_ID']: '';
if ($botId <= 0)
{
return false;
}
if (!BitrixImUser::getInstance($botId)->isExists() || !BitrixImUser::getInstance($botId)->isBot())
{
return false;
}
$bots = self::getListCache();
if (!isset($bots[$botId]))
{
return false;
}
if ($moduleId <> '' && $bots[$botId]['MODULE_ID'] != $moduleId)
{
return false;
}
if ($appId <> '' && $bots[$botId]['APP_ID'] != $appId)
{
return false;
}
if (isset($updateFields['PROPERTIES']))
{
$update = $updateFields['PROPERTIES'];
// update user properties
unset(
$update['ACTIVE'],
$update['LOGIN'],
$update['PASSWORD'],
$update['CONFIRM_PASSWORD'],
$update['GROUP_ID'],
$update['UF_DEPARTMENT']
);
$update['EXTERNAL_AUTH_ID'] = self::EXTERNAL_AUTH_ID;
if (isset($update['NAME']) && trim($update['NAME']) == '')
{
unset($update['NAME']);
}
if (isset($update['WORK_POSITION']) && trim($update['WORK_POSITION']) == '')
{
$update['WORK_POSITION'] = Loc::getMessage('BOT_DEFAULT_WORK_POSITION');
}
$botAvatar = false;
$previousBotAvatar = false;
if (isset($update['PERSONAL_PHOTO']))
{
$previousBotAvatar = (int)BitrixImUser::getInstance($botId)->getAvatarId();
if (is_numeric($update['PERSONAL_PHOTO']) && (int)$update['PERSONAL_PHOTO'] > 0)
{
$botAvatar = (int)$update['PERSONAL_PHOTO'];
unset($update['PERSONAL_PHOTO']);
}
}
$user = new CUser;
$user->Update($botId, $update);
if ($botAvatar > 0 && $botAvatar !== $previousBotAvatar)
{
$connection = MainApplication::getConnection();
$connection->query("UPDATE b_user SET PERSONAL_PHOTO = ".(int)$botAvatar." WHERE ID = ".(int)$botId);
}
if ($previousBotAvatar > 0)
{
CFile::Delete($previousBotAvatar);
}
}
$update = Array();
if (isset($updateFields['CLASS']) && !empty($updateFields['CLASS']))
{
$update['CLASS'] = $updateFields['CLASS'];
}
if (isset($updateFields['TYPE']) && !empty($updateFields['TYPE']))
{
$update['TYPE'] = $updateFields['TYPE'];
}
if (isset($updateFields['CODE']) && !empty($updateFields['CODE']))
{
$update['CODE'] = $updateFields['CODE'];
}
if (isset($updateFields['APP_ID']) && !empty($updateFields['APP_ID']))
{
$update['APP_ID'] = $updateFields['APP_ID'];
}
if (isset($updateFields['LANG']))
{
$update['LANG'] = $updateFields['LANG']? $updateFields['LANG']: '';
}
if (isset($updateFields['METHOD_BOT_DELETE']))
{
$update['METHOD_BOT_DELETE'] = $updateFields['METHOD_BOT_DELETE'];
}
if (isset($updateFields['METHOD_MESSAGE_ADD']))
{
$update['METHOD_MESSAGE_ADD'] = $updateFields['METHOD_MESSAGE_ADD'];
}
if (isset($updateFields['METHOD_MESSAGE_UPDATE']))
{
$update['METHOD_MESSAGE_UPDATE'] = $updateFields['METHOD_MESSAGE_UPDATE'];
}
if (isset($updateFields['METHOD_MESSAGE_DELETE']))
{
$update['METHOD_MESSAGE_DELETE'] = $updateFields['METHOD_MESSAGE_DELETE'];
}
if (isset($updateFields['METHOD_WELCOME_MESSAGE']))
{
$update['METHOD_WELCOME_MESSAGE'] = $updateFields['METHOD_WELCOME_MESSAGE'];
}
if (isset($updateFields['TEXT_PRIVATE_WELCOME_MESSAGE']))
{
$update['TEXT_PRIVATE_WELCOME_MESSAGE'] = $updateFields['TEXT_PRIVATE_WELCOME_MESSAGE'];
}
if (isset($updateFields['TEXT_CHAT_WELCOME_MESSAGE']))
{
$update['TEXT_CHAT_WELCOME_MESSAGE'] = $updateFields['TEXT_CHAT_WELCOME_MESSAGE'];
}
if (isset($updateFields['VERIFIED']))
{
$update['VERIFIED'] = $updateFields['VERIFIED'] == 'Y'? 'Y': 'N';
}
if (!empty($update))
{
BitrixImModelBotTable::update($botId, $update);
$cache = BitrixMainDataCache::createInstance();
$cache->cleanDir(self::CACHE_PATH);
}
self::sendPullNotify($botId, 'botUpdate');
BitrixMainApplication::getInstance()->getTaggedCache()->clearByTag("IM_CONTACT_LIST");
return true;
}