• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/app.php
  • Класс: BitrixImApp
  • Вызов: App::register
static function register(array $fields)
{
	$moduleId = $fields['MODULE_ID'];
	if ($moduleId == '')
	{
		return false;
	}

	$iframe = '';
	$iframeWidth = 350;
	$iframeHeight = 250;
	$iframePopup = 'N';
	$jscommand = isset($fields['JS'])? $fields['JS']: '';

	if (isset($fields['IFRAME']) && $fields['IFRAME'])
	{
		$check = parse_url($fields['IFRAME']);
		if (!isset($check['scheme']) && !isset($check['host']))
		{
			if (mb_strpos($fields['IFRAME'], '/desktop_app/iframe/') !== 0)
			{
				return false;
			}
		}
		else if (!in_array($check['scheme'], Array('http', 'https')) || empty($check['host']))
		{
			return false;
		}
		$iframe = $fields['IFRAME'].(isset($check['query'])? '&': '?');
		if (isset($fields['IFRAME_WIDTH']))
		{
			$iframeWidth = intval($fields['IFRAME_WIDTH']) > 250? $fields['IFRAME_WIDTH']: 250;
		}
		if (isset($fields['IFRAME_HEIGHT']))
		{
			$iframeHeight = intval($fields['IFRAME_HEIGHT']) > 50? $fields['IFRAME_HEIGHT']: 50;
		}
		$iframePopup = isset($fields['IFRAME_POPUP']) && $fields['IFRAME_POPUP'] == 'Y'? 'Y': $iframePopup;
	}
	else if (!$jscommand)
	{
		return false;
	}

	$code = $fields['CODE'];
	if (!$code)
	{
		return false;
	}

	$iconFileId = intval($fields['ICON_ID']);

	$botId = isset($fields['BOT_ID'])? intval($fields['BOT_ID']): 0;
	$hash = isset($fields['HASH']) && !empty($fields['HASH'])? mb_substr($fields['HASH'], 0, 32) : md5($botId.$fields['CODE'].CMain::GetServerUniqID());
	$context = isset($fields['CONTEXT'])? $fields['CONTEXT']: 'ALL';
	$registered = isset($fields['REGISTERED']) && $fields['REGISTERED'] == 'N'? 'N': 'Y';
	$hidden = isset($fields['HIDDEN']) && $fields['HIDDEN'] == 'Y'? 'Y': 'N';
	if ($botId > 0 && (!BitrixImUser::getInstance($botId)->isExists() || !BitrixImUser::getInstance($botId)->isBot()))
	{
		$botId = 0;
	}

	$extranetSupport = isset($fields['EXTRANET_SUPPORT']) && $fields['EXTRANET_SUPPORT'] == 'Y'? 'Y': 'N';
	$livechatSupport = isset($fields['LIVECHAT_SUPPORT']) && $fields['LIVECHAT_SUPPORT'] == 'Y'? 'Y': 'N';

	/* vars for module install */
	$class = isset($fields['CLASS'])? $fields['CLASS']: '';
	$methodLangGet = isset($fields['METHOD_LANG_GET'])? $fields['METHOD_LANG_GET']: '';

	/* vars for rest install */
	$restAppId = isset($fields['APP_ID'])? $fields['APP_ID']: '';
	$langSet = isset($fields['LANG'])? $fields['LANG']: Array();

	if ($moduleId == 'rest')
	{
		if (empty($langSet))
		{
			return false;
		}
	}
	else
	{
		if (empty($class) || empty($methodLangGet))
		{
			return false;
		}
	}

	$apps = self::getListCache();
	foreach ($apps as $cmd)
	{
		if ($botId)
		{
			if ($botId == $cmd['BOT_ID'] && $code == $cmd['CODE'])
			{
				return $cmd['ID'];
			}
		}
		else if ($restAppId)
		{
			if ($restAppId == $cmd['APP_ID'] && $code == $cmd['CODE'])
			{
				return $cmd['ID'];
			}
		}
		else if ($moduleId == $cmd['MODULE_ID'] && $code == $cmd['CODE'])
		{
			return $cmd['ID'];
		}
	}

	$result = BitrixImModelAppTable::add(Array(
		'HASH' => $hash,
		'BOT_ID' => $botId,
		'MODULE_ID' => $moduleId,
		'CODE' => $code,
		'ICON_FILE_ID' => $iconFileId,
		'CONTEXT' => ToLower($context),
		'HIDDEN' => $hidden,
		'REGISTERED' => $registered,
		'IFRAME' => $iframe,
		'IFRAME_WIDTH' => $iframeWidth,
		'IFRAME_HEIGHT' => $iframeHeight,
		'IFRAME_POPUP' => $iframePopup,
		'JS' => $jscommand,
		'EXTRANET_SUPPORT' => $extranetSupport,
		'LIVECHAT_SUPPORT' => $livechatSupport,
		'CLASS' => $class,
		'METHOD_LANG_GET' => $methodLangGet,
		'APP_ID' => $restAppId
	));

	if (!$result->isSuccess())
		return false;

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

	$appId = $result->getId();

	if ($moduleId == 'rest')
	{
		foreach ($langSet 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)
			{
			}
		}
	}

	return $appId;
}