• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/textareaicon.php
  • Класс: BitrixImTextareaIcon
  • Вызов: TextareaIcon::register
static function register(array $fields)
{
	$moduleId = $fields['MODULE_ID'];
	if (strlen($moduleId) <= 0)
	{
		return false;
	}
	
	$iframe = '';
	$iframeWidth = 350;
	$iframeHeight = 250;
	$jscommand = isset($fields['JS'])? $fields['JS']: '';
	
	if (isset($fields['IFRAME']))
	{
		$check = parse_url($fields['IFRAME']);
		if (!isset($check['scheme']) && !isset($check['host']))
		{
			if (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'])? '&': '?');
		$iframeWidth = isset($fields['IFRAME_WIDTH']) && intval($fields['IFRAME_WIDTH']) > 250? intval($fields['IFRAME_WIDTH']): $iframeWidth;
		$iframeHeight = isset($fields['IFRAME_HEIGHT']) && intval($fields['IFRAME_HEIGHT']) > 50? intval($fields['IFRAME_HEIGHT']): $iframeHeight;
	}
	else if (!$jscommand)
	{
		return false;
	}
	
	
	$icon = $fields['ICON_CODE'];
	if (!$icon)
	{
		return false;
	}
	
	$iconFileId = intval($fields['ICON_FILE_ID']);
	
	$hash = isset($fields['HASH'])? substr($fields['HASH'], 0, 32): 'register';
	$context = isset($fields['CONTEXT'])? $fields['CONTEXT']: 'ALL';
	$hidden = isset($fields['HIDDEN']) && $fields['HIDDEN'] == 'Y'? 'Y': 'N';
	$botId = isset($fields['BOT_ID'])? intval($fields['BOT_ID']): 0;
	if ($botId > 0 && (!BitrixImUser::getInstance($botId)->isExists() || !BitrixImUser::getInstance($botId)->isBot()))
	{
		$botId = 0;
	}
	
	$extranetSupport = isset($fields['EXTRANET_SUPPORT']) && $fields['EXTRANET_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 */
	$appId = 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;
		}
	}

	$icons = self::getListCache();
	foreach ($icons as $cmd)
	{
		if ($botId)
		{
			if ($botId == $cmd['BOT_ID'] && $icon == $cmd['ICON_CODE'])
			{
				return $cmd['ID'];
			}
		}
		else if ($appId)
		{
			if ($appId == $cmd['APP_ID'] && $icon == $cmd['ICON_CODE'])
			{
				return $cmd['ID'];
			}
		}
		else if ($moduleId == $cmd['MODULE_ID'] && $icon == $cmd['ICON_CODE'])
		{
			return $cmd['ID'];
		}
	}

	$result = BitrixImModelTextareaIconTable::add(Array(
		'HASH' => $hash,
		'BOT_ID' => $botId,
		'MODULE_ID' => $moduleId,
		'ICON_CODE' => $icon,
		'ICON_FILE_ID' => $iconFileId,
		'CONTEXT' => ToLower($context),
		'HIDDEN' => $hidden,
		'IFRAME' => $iframe,
		'IFRAME_WIDTH' => $iframeWidth,
		'IFRAME_HEIGHT' => $iframeHeight,
		'JS' => $jscommand,
		'EXTRANET_SUPPORT' => $extranetSupport,
		'CLASS' => $class,
		'METHOD_LANG_GET' => $methodLangGet,
		'APP_ID' => $appId
	));

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

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

	$iconId = $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
			{
				BitrixImModelTextareaIconLangTable::add(array(
					'ICON_ID' => $iconId,
					'LANGUAGE_ID' => strtolower($lang['LANGUAGE_ID']),
					'TITLE' => $lang['TITLE'],
					'DESCRIPTION' => $lang['DESCRIPTION'],
					'COPYRIGHT' => $lang['COPYRIGHT']
				));
			}
			catch(Exception $e)
			{
			}
		}
	}

	return $iconId;
}