• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/elapseditem.php
  • Класс: CTaskElapsedItem
  • Вызов: CTaskElapsedItem::runRestMethod
static function runRestMethod($executiveUserId, $methodName, $args, $navigation)
{
	static $arManifest = null;
	static $arMethodsMetaInfo = null;

	if ($arManifest === null)
	{
		$arManifest = self::getManifest();
		$arMethodsMetaInfo = $arManifest['REST: available methods'];
	}

	// Check and parse params
	CTaskAssert::assert(isset($arMethodsMetaInfo[$methodName]));
	$arMethodMetaInfo = $arMethodsMetaInfo[$methodName];
	$argsParsed = CTaskRestService::_parseRestParams('ctaskelapseditem', $methodName, $args);

	$runAs = $methodName;
	if(isset($arMethodsMetaInfo[$methodName]['runAs']) && (string) $arMethodsMetaInfo[$methodName]['runAs'] != '')
	{
		$runAs = $arMethodsMetaInfo[$methodName]['runAs'];
	}

	$returnValue = null;
	$navData = null;

	if (isset($arMethodMetaInfo['staticMethod']) && $arMethodMetaInfo['staticMethod'])
	{
		if ($methodName === 'add')
		{
			$taskId    = $argsParsed[0];
			$arFields  = $argsParsed[1];
			$oTaskItem = CTaskItem::getInstance($taskId, $executiveUserId);	// taskId in $argsParsed[0]
			$oItem     = self::add($oTaskItem, $arFields);

			$returnValue = $oItem->getId();
		}
		elseif ($methodName === 'getlist')
		{
			$taskId = $argsParsed[0];
			$order = ($argsParsed[1] ?? []);
			$filter = ($argsParsed[2] ?? []);
			$select = ($argsParsed[3] ?? []);
			$navParams = $argsParsed[4]['NAV_PARAMS'];

			$byTaskId = false;
			if (count($argsParsed) > 0 && $taskId !== 0)
			{
				$taskItem = CTaskItem::getInstance($taskId, $executiveUserId);
				if ($taskItem->getData())
				{
					$byTaskId = true;
					$filter = array_merge($filter, array('TASK_ID' => $taskId));
				}
			}

			if (isset($navParams))
			{
				if (isset($navParams['nPageSize']))
				{
					$navParams['nPageSize'] = min(CTaskRestService::TASKS_LIMIT_PAGE_SIZE, (int)$navParams['nPageSize']);
				}
				else
				{
					$navParams['nPageSize'] = CTaskRestService::TASKS_LIMIT_PAGE_SIZE;
				}

				if (isset($navParams['iNumPage']))
				{
					$numPage = (int)$navParams['iNumPage'];
					$numPage = ($numPage > 0? ($numPage - 1) * $navParams['nPageSize'] : 0);

					$navParams['iNumPage'] = $numPage;
				}
				else
				{
					$navParams['iNumPage'] = 0;
				}
			}
			else
			{
				$navParams = array(
					'nPageSize' => ($byTaskId? 0 : CTaskRestService::TASKS_LIMIT_PAGE_SIZE),
					'iNumPage' => 0
				);
			}

			$params = array(
				'NAV_PARAMS' => $navParams,
				'count_total' => true
			);
			[$elapsedItems, $navData] = self::getList($order, $filter, $select, $params);

			$returnValue = $elapsedItems;
		}
		else
		{
			$returnValue = call_user_func_array(array('self', $runAs), $argsParsed);
		}
	}
	else
	{
		$taskId     = array_shift($argsParsed);
		$itemId     = array_shift($argsParsed);
		$oTaskItem  = CTaskItem::getInstance($taskId, $executiveUserId);
		$obElapsed  = new self($oTaskItem, $itemId);

		if ($methodName === 'get')
		{
			$returnValue = $obElapsed->getData();
		}
		else
		{
			$returnValue = call_user_func_array(array($obElapsed, $runAs), $argsParsed);
		}
	}

	return array($returnValue, $navData);
}