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