• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/restservice.php
  • Класс: CTaskRestService
  • Вызов: CTaskRestService::onRestServiceBuildDescription
static function onRestServiceBuildDescription()
{
	if (!self::$inited)
	{
		self::_init();
	}

	$arFunctionsMap = [
		CRestUtil::EVENTS     => [
			'OnTaskAdd'           => ['tasks', 'OnTaskAdd', ['CTaskRestService', 'onEventFilter']],
			'OnTaskUpdate'        => ['tasks', 'OnTaskUpdate', ['CTaskRestService', 'onEventFilter']],
			'OnTaskDelete'        => ['tasks', 'OnTaskDelete', ['CTaskRestService', 'onEventFilter']],

			// task comments
			'OnTaskCommentAdd'    => ['tasks', 'OnAfterCommentAdd', ['CTaskCommentItem', 'onEventFilter']],
			'OnTaskCommentUpdate' => ['tasks', 'OnAfterCommentUpdate', ['CTaskCommentItem', 'onEventFilter']],
			'OnTaskCommentDelete' => ['tasks', 'OnAfterCommentDelete', ['CTaskCommentItem', 'onEventFilter']],
		],
		CRestUtil::PLACEMENTS => [
			self::PLACEMENT_TASK_TOP_MENU          => [],
			self::PLACEMENT_TASK_LIST_CONTEXT_MENU => [],
			self::PLACEMENT_TASK_VIEW_MODE         => [],
			self::PLACEMENT_TASK_VIEW_TAB          => [
				'options' => [
					'groupId' => 'string',
				]
			],
			self::PLACEMENT_TASK_VIEW_SIDEBAR      => [
				'options' => [
					'groupId' => 'string',
				]
			],
			self::PLACEMENT_TASK_VIEW_TOP_PANEL	   => [],
			self::PLACEMENT_TASK_VIEW_MENU_ADD	   => [],

		]
	];

	foreach (self::$arAllowedMethods as $className => $arMethods)
	{
		$aliasClassName = null;
		if (isset(self::$arClassAliases[$className]))
		{
			$aliasClassName = self::$arClassAliases[$className];
		}

		foreach ($arMethods as $methodName)
		{
			$aliasMethodName = null;
			if (isset(self::$arMethodsMetaInfo[$className][$methodName]['alias']))
			{
				$aliasMethodName = self::$arMethodsMetaInfo[$className][$methodName]['alias'];
			}

			$transitMethodName = $className.self::delimiter.$methodName;

			$arPublicNames = ['task.'.$className.'.'.$methodName];

			if ($aliasMethodName !== null)
			{
				$arPublicNames[] = 'task.'.$className.'.'.$aliasMethodName;
			}

			// Is class alias exists?
			if ($aliasClassName !== null)
			{
				$arPublicNames[] = 'task.'.$aliasClassName.'.'.$methodName;

				if ($aliasMethodName !== null)
				{
					$arPublicNames[] = 'task.'.$aliasClassName.'.'.$aliasMethodName;
				}
			}

			foreach ($arPublicNames as $publicMethodName)
			{
				$arFunctionsMap[$publicMethodName] = ['CTaskRestService', $transitMethodName];
			}
		}
	}

	// additional routing rules, for "subclasses"
	foreach (self::$allowedSpecialClasses as $className => $subclass)
	{
		$methods = self::$arMethodsMetaInfo[$className];

		if (is_array($methods))
		{
			foreach ($methods as $methodName => $methodDesc)
			{
				// query like "task.item.userfield.add"
				$publicMethodName = implode(
					'.',
					[
						'task',
						$subclass['publicParentClassName'],
						$subclass['publicClassName'],
						$methodName
					]
				);
				// goes to "BitrixTasksRestItemUserField::add()"
				$transitMethodName = implode(self::delimiter, [$className, $methodName]);

				$arFunctionsMap[$publicMethodName] = ['CTaskRestService', $transitMethodName];
			}
		}
	}

	return [
		self::SCOPE_NAME_NORMAL   => $arFunctionsMap,
		self::SCOPE_NAME_EXTENDED => [
			'tasks_extended.meta.setAnyStatus'  => ['CTaskRestService', 'tasks_extended_meta_setAnyStatus'],
			'tasks_extended.meta.occurInLogsAs' => ['CTaskRestService', 'tasks_extended_meta_occurInLogsAs']
		]
	];
}