• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/app.php
  • Класс: BitrixImApp
  • Вызов: App::update
static function update(array $app, array $updateFields)
{
	$appId = intval($app['ID']);
	$userId = intval($app['USER_ID']);
	$moduleId = isset($app['MODULE_ID'])? $app['MODULE_ID']: '';
	$restAppId = isset($app['APP_ID'])? $app['APP_ID']: '';

	if (intval($appId) <= 0)
		return false;

	$apps = self::getListCache();
	if (!isset($apps[$appId]))
		return false;

	if ($moduleId <> '' && $apps[$appId]['MODULE_ID'] != $moduleId)
		return false;

	if ($restAppId <> '' && $apps[$appId]['APP_ID'] != $restAppId)
		return false;

	if (isset($updateFields['LANG']) && $apps[$appId]['MODULE_ID'] == 'rest')
	{
		$orm = BitrixImModelAppLangTable::getList(Array(
			'filter' => Array('=APP_ID' => $appId)
		));
		while ($row = $orm->fetch())
		{
			BitrixImModelAppLangTable::delete($row['ID']);
		}
		foreach ($updateFields['LANG'] as $lang)
		{
			if (!isset($lang['LANGUAGE_ID']) || empty($lang['LANGUAGE_ID']))
				continue;

			if (!isset($lang['TITLE']) && empty($lang['TITLE']))
				continue;

			try
			{
				BitrixImModelAppLangTable::add(array(
					'APP_ID' => $appId,
					'LANGUAGE_ID' => mb_strtolower($lang['LANGUAGE_ID']),
					'TITLE' => $lang['TITLE'],
					'DESCRIPTION' => $lang['DESCRIPTION'],
					'COPYRIGHT' => $lang['COPYRIGHT']
				));
			}
			catch(Exception $e)
			{
			}
		}
	}

	$update = Array();
	if (isset($updateFields['CONTEXT']) && !empty($updateFields['CONTEXT']))
	{
		$update['CONTEXT'] = ToLower($updateFields['CONTEXT']);
	}
	if (isset($updateFields['HASH']) && !empty($updateFields['HASH']))
	{
		$update['HASH'] = $updateFields['HASH'];
	}
	if (isset($updateFields['HIDDEN']))
	{
		$update['HIDDEN'] = $updateFields['HIDDEN'] == 'Y'? 'Y': 'N';
	}
	if (isset($updateFields['REGISTERED']))
	{
		$update['REGISTERED'] = $updateFields['REGISTERED'] == 'N'? 'N': 'Y';
	}
	if (isset($updateFields['IFRAME']) && !empty($updateFields['IFRAME']))
	{
		$check = parse_url($updateFields['IFRAME']);
		if (!isset($check['scheme']) && !isset($check['host']))
		{
			if (mb_strpos($updateFields['IFRAME'], '/desktop_app/iframe/') !== 0)
			{
				return false;
			}
		}
		else if (!in_array($check['scheme'], Array('http', 'https')) || empty($check['host']))
		{
			return false;
		}
		$update['IFRAME'] = $updateFields['IFRAME'].(isset($check['query'])? '&': '?');
	}
	else if (isset($updateFields['JS']) && !empty($updateFields['JS']))
	{
		$update['JS'] = $updateFields['JS'];
	}
	if (isset($updateFields['IFRAME_WIDTH']))
	{
		$update['IFRAME_WIDTH'] = intval($updateFields['IFRAME_WIDTH']) > 250? intval($updateFields['IFRAME_WIDTH']): 250;
	}
	if (isset($updateFields['IFRAME_HEIGHT']))
	{
		$update['IFRAME_HEIGHT'] = intval($updateFields['IFRAME_HEIGHT']) > 50? intval($updateFields['IFRAME_HEIGHT']): 50;
	}
	if (isset($updateFields['IFRAME_POPUP']))
	{
		$update['IFRAME_POPUP'] = $updateFields['IFRAME_POPUP'] == 'Y'? 'Y': 'N';
	}
	if (isset($updateFields['ICON_ID']) && $updateFields['ICON_ID'])
	{
		$update['ICON_FILE_ID'] = intval($updateFields['ICON_ID']);
	}
	if (isset($updateFields['CLASS']) && !empty($updateFields['CLASS']))
	{
		$update['CLASS'] = $updateFields['CLASS'];
	}
	if (isset($updateFields['METHOD_LANG_GET']))
	{
		$update['METHOD_LANG_GET'] = $updateFields['METHOD_LANG_GET'];
	}
	if (isset($updateFields['EXTRANET_SUPPORT']))
	{
		$update['EXTRANET_SUPPORT'] = $updateFields['EXTRANET_SUPPORT'] == 'Y'? 'Y': 'N';
	}
	if (isset($updateFields['LIVECHAT_SUPPORT']))
	{
		$update['LIVECHAT_SUPPORT'] = $updateFields['LIVECHAT_SUPPORT'] == 'Y'? 'Y': 'N';
	}

	if (!empty($update))
	{
		BitrixImModelAppTable::update($appId, $update);

		$cache = BitrixMainDataCache::createInstance();
		$cache->cleanDir(self::CACHE_PATH);
	}

	if (BitrixMainLoader::includeModule('pull'))
	{
		if (
			$update['REGISTERED']
			|| $update['DOMAIN_HASH']
			|| $update['CONTEXT']
			|| $update['IFRAME']
			|| $update['JS']
			|| $update['IFRAME_WIDTH']
			|| $update['IFRAME_HEIGHT']
			|| $update['IFRAME_POPUP']
		)
		{
			CPullStack::AddShared(Array(
				'module_id' => 'im',
				'command' => 'appUpdateIcon',
				'params' => Array(
					'iconId' => $appId,
					'userId' => $userId,
					'domainHash' => $update['HASH'],
					'context' => $update['CONTEXT'],
					'js' => $update['JS'],
					'iframe' => $update['IFRAME'],
					'iframeWidth' => $update['IFRAME_WIDTH'],
					'iframeHeight' => $update['IFRAME_HEIGHT'],
					'iframePopup' => $update['IFRAME_POPUP'],
				),
				'extra' => BitrixImCommon::getPullExtra()
			));
		}
		else if ($update['ICON_ID'])
		{
		}
		else
		{
			CPullStack::AddShared(Array(
				'module_id' => 'im',
				'command' => 'appDeleteIcon',
				'params' => Array(
					'iconId' => $appId
				),
				'extra' => BitrixImCommon::getPullExtra()
			));
		}
	}

	return true;
}