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