• Модуль: imbot
  • Путь к файлу: ~/bitrix/modules/imbot/lib/bot/support24.php
  • Класс: BitrixImBotBotSupport24
  • Вызов: Support24::refreshAgent
static function refreshAgent(bool $regular = true): string
{
	$botId = self::getBotId();
	$settings = self::getBotSettings([
		'BOT_ID' => $botId
	]);
	if ($settings)
	{
		$prevSupportLevel = Option::get(self::MODULE_ID, self::OPTION_BOT_SUPPORT_LEVEL, self::SUPPORT_LEVEL_FREE);
		$prevPaidCode = Option::get(self::MODULE_ID, self::OPTION_BOT_PAID_CODE, '');
		$prevFreeCode = Option::get(self::MODULE_ID, self::OPTION_BOT_FREE_CODE, '');
		$previousCode = self::getBotCode();

		//$prevRegion = CBitrix24::getPortalZone(CBitrix24::LICENSE_TYPE_PREVIOUS);
		//$currentRegion = CBitrix24::getPortalZone(CBitrix24::LICENSE_TYPE_CURRENT);
		//$isRegionChanged = $prevRegion != $currentRegion;

		$prevDemoState = Option::get(self::MODULE_ID, self::OPTION_BOT_DEMO_ACTIVE, false);
		$currentDemoState = CBitrix24::isDemoLicense();
		$isDemoLevelChanged = $prevDemoState != $currentDemoState;

		if (self::saveSettings($settings))
		{
			self::registerCommands();
			self::registerApps();

			Option::set(self::MODULE_ID, self::OPTION_BOT_DEMO_ACTIVE, $currentDemoState);
			if ($currentDemoState)
			{
				Option::set(self::MODULE_ID, self::OPTION_BOT_FREE_START_DATE, time());
			}

			// support level
			$currentSupportLevel = self::getSupportLevel();
			$isSupportLevelChanged = $prevSupportLevel != $currentSupportLevel;
			if ($isSupportLevelChanged)
			{
				Option::set(self::MODULE_ID, self::OPTION_BOT_SUPPORT_LEVEL, $currentSupportLevel);
			}

			$isPreviousSupportLevelPartner = $prevSupportLevel === self::SUPPORT_LEVEL_PARTNER;

			// line code change
			$currentCode = self::getBotCode();
			$isLineCodeChanged = false;

			if ($isSupportLevelChanged)
			{
				if (self::getSupportLevel() == self::SUPPORT_LEVEL_PAID)
				{
					$previousCode = $prevFreeCode;
					$currentCode = Option::get(self::MODULE_ID, self::OPTION_BOT_PAID_CODE, '');
				}
				elseif (self::getSupportLevel() == self::SUPPORT_LEVEL_FREE)
				{
					$previousCode = $prevPaidCode;
					$currentCode = Option::get(self::MODULE_ID, self::OPTION_BOT_FREE_CODE, '');
				}
				if ($isPreviousSupportLevelPartner)
				{
					$previousCode = Option::get('bitrix24', 'partner_ol', '');
				}
			}
			else
			{
				if (self::getSupportLevel() == self::SUPPORT_LEVEL_PAID)
				{
					$previousCode = $prevPaidCode;
					$currentCode = Option::get(self::MODULE_ID, self::OPTION_BOT_PAID_CODE, '');

					$isLineCodeChanged = (
						!empty($prevPaidCode)
						&& !empty($currentCode)
						&& $prevPaidCode != $currentCode
					);
				}
				else
				{
					$previousCode = $prevFreeCode;
					$currentCode = Option::get(self::MODULE_ID, self::OPTION_BOT_FREE_CODE, '');

					$isLineCodeChanged = (
						!empty($prevFreeCode)
						&& !empty($currentCode)
						&& $prevFreeCode != $currentCode
					);
				}
			}

			if ($isSupportLevelChanged || $isLineCodeChanged)
			{
				(new DialogSession)->clearSessions(['BOT_ID' => self::getBotId()]);

				self::deleteScheduledAction(self::SCHEDULE_DELETE_ALL);
			}

			if (
				$isSupportLevelChanged
				|| $isLineCodeChanged
				|| $isDemoLevelChanged
				//|| $isRegionChanged
			)
			{
				self::onSupportLevelChange([
					'IS_SUPPORT_LEVEL_CHANGE' => $isSupportLevelChanged,
					'IS_DEMO_LEVEL_CHANGE' => $isDemoLevelChanged,
					//'IS_REGION_CHANGED' => $isRegionChanged,
					'IS_SUPPORT_CODE_CHANGE' => $isLineCodeChanged,
					'PREVIOUS_SUPPORT_LEVEL' => $prevSupportLevel,
					'PREVIOUS_BOT_CODE' => $previousCode,
					'CURRENT_BOT_CODE' => $currentCode,
				]);
			}
		}
	}

	return $regular ? __METHOD__. '();' : '';
}