• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/command.php
  • Класс: BitrixImCommand
  • Вызов: Command::register
static function register(array $fields)
{
	$moduleId = $fields['MODULE_ID'];
	$command = mb_substr($fields['COMMAND'], 0, 1) == '/'? mb_substr($fields['COMMAND'], 1) : $fields['COMMAND'];

	$botId = isset($fields['BOT_ID'])? intval($fields['BOT_ID']): 0;
	if ($botId > 0 && (!BitrixImUser::getInstance($botId)->isExists() || !BitrixImUser::getInstance($botId)->isBot()))
	{
		$botId = 0;
	}

	$common = isset($fields['COMMON']) && $fields['COMMON'] == 'Y'? 'Y': 'N';
	if ($botId <= 0)
	{
		$common = 'Y';
	}

	$hidden = isset($fields['HIDDEN']) && $fields['HIDDEN'] == 'Y'? 'Y': 'N';
	$sonetSupport = isset($fields['SONET_SUPPORT']) && $fields['SONET_SUPPORT'] == 'Y'? 'Y': 'N';
	$extranetSupport = isset($fields['EXTRANET_SUPPORT']) && $fields['EXTRANET_SUPPORT'] == 'Y'? 'Y': 'N';

	/* vars for module install */
	$class = isset($fields['CLASS'])? $fields['CLASS']: '';
	$methodCommandAdd = isset($fields['METHOD_COMMAND_ADD'])? $fields['METHOD_COMMAND_ADD']: '';
	$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 == '')
	{
		return false;
	}
	if ($moduleId == 'rest')
	{
		if (empty($appId) || empty($langSet) && $hidden == 'N')
		{
			return false;
		}
	}
	else
	{
		if (empty($class) || empty($methodCommandAdd))
		{
			return false;
		}
		if (empty($methodLangGet))
		{
			$hidden = 'Y';
		}
	}

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

	$result = BitrixImModelCommandTable::add(Array(
		'BOT_ID' => $botId,
		'MODULE_ID' => $moduleId,
		'COMMAND' => $command,
		'COMMON' => $common,
		'HIDDEN' => $hidden,
		'SONET_SUPPORT' => $sonetSupport,
		'EXTRANET_SUPPORT' => $extranetSupport,
		'CLASS' => $class,
		'METHOD_COMMAND_ADD' => $methodCommandAdd,
		'METHOD_LANG_GET' => $methodLangGet,
		'APP_ID' => $appId
	));

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

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

	$commandId = $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
			{
				BitrixImModelCommandLangTable::add(array(
					'COMMAND_ID' => $commandId,
					'LANGUAGE_ID' => mb_strtolower($lang['LANGUAGE_ID']),
					'TITLE' => $lang['TITLE'],
					'PARAMS' => isset($lang['PARAMS'])? $lang['PARAMS']: ''
				));
			}
			catch(Exception $e)
			{
			}
		}
	}

	return $commandId;
}