- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/classes/general/taskitem.php
- Класс: CTaskItem
- Вызов: CTaskItem::runRestMethod
static function runRestMethod($executiveUserId, $methodName, $args, $navigation)
{
static $arManifest = null;
static $arMethodsMetaInfo = null;
$rsData = 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('ctaskitem', $methodName, $args);
$runAs = $methodName;
if(isset($arMethodsMetaInfo[$methodName]['runAs']) && (string) $arMethodsMetaInfo[$methodName]['runAs'] != '')
{
$runAs = $arMethodsMetaInfo[$methodName]['runAs'];
}
$returnValue = null;
if (isset($arMethodMetaInfo['staticMethod']) && $arMethodMetaInfo['staticMethod'])
{
if ($methodName === 'add')
{
$argsParsed[] = $executiveUserId;
/** @var CTaskItem $oTaskItem */
$oTaskItem = call_user_func_array(array('self', $methodName), $argsParsed);
$taskId = (int) $oTaskItem->getId();
$returnValue = $taskId;
self::cacheInstanceInPool($taskId, $executiveUserId, $oTaskItem);
}
elseif ($methodName === 'getlist' || $methodName === 'list') // todo: temporal fix
{
array_unshift($argsParsed, $executiveUserId);
// we need to fill default values up to $arParams (4th) argument
while (!array_key_exists(3, $argsParsed))
{
$argsParsed[] = [];
}
if ($navigation['iNumPage'] > 1)
{
$argsParsed[3]['NAV_PARAMS'] = [
'nPageSize' => CTaskRestService::TASKS_LIMIT_PAGE_SIZE,
'iNumPage' => (int)$navigation['iNumPage'],
];
}
else if (isset($argsParsed[3]['NAV_PARAMS']))
{
if (isset($argsParsed[3]['NAV_PARAMS']['nPageTop']))
{
$argsParsed[3]['NAV_PARAMS']['nPageTop'] = min(
CTaskRestService::TASKS_LIMIT_TOP_COUNT,
(int)$argsParsed[3]['NAV_PARAMS']['nPageTop']
);
}
if (isset($argsParsed[3]['NAV_PARAMS']['nPageSize']))
{
$argsParsed[3]['NAV_PARAMS']['nPageSize'] = min(
CTaskRestService::TASKS_LIMIT_PAGE_SIZE,
(int)$argsParsed[3]['NAV_PARAMS']['nPageSize']
);
}
if (
!isset($argsParsed[3]['NAV_PARAMS']['nPageTop'])
&& !isset($argsParsed[3]['NAV_PARAMS']['nPageSize'])
)
{
$argsParsed[3]['NAV_PARAMS'] = [
'nPageSize' => CTaskRestService::TASKS_LIMIT_PAGE_SIZE,
'iNumPage' => 1,
];
}
}
else
{
$argsParsed[3]['NAV_PARAMS'] = [
'nPageSize' => CTaskRestService::TASKS_LIMIT_PAGE_SIZE,
'iNumPage' => 1,
];
}
$argsParsed[3]['NAV_PARAMS']['getTotalCount'] = true;
$filter = $argsParsed[2];
$allowedParentIdNullValues = ['0', 'NULL', 'null'];
if (array_key_exists('PARENT_ID', $filter) && in_array($filter['PARENT_ID'], $allowedParentIdNullValues))
{
$argsParsed[2]['PARENT_ID'] = false;
}
/** @var CTaskItem[] $oTaskItems */
/** @noinspection PhpUnusedLocalVariableInspection */
[$oTaskItems, $rsData] = call_user_func_array(array('self', 'fetchList'), $argsParsed);
$returnValue = array();
foreach ($oTaskItems as $oTaskItem)
{
$arTaskData = $oTaskItem->getData(false);
$arTaskData['ALLOWED_ACTIONS'] = $oTaskItem->getAllowedActionsAsStrings();
if (isset($argsParsed[3]))
{
if (isset($argsParsed[3]['LOAD_TAGS']) && ($argsParsed[3]['LOAD_TAGS'] == 1 || $argsParsed[3]['LOAD_TAGS'] == 'Y'))
{
$arTaskData['TAGS'] = $oTaskItem->getTags();
}
}
$returnValue[] = $arTaskData;
}
}
else
{
$returnValue = call_user_func_array(array('self', $runAs), $argsParsed);
}
}
else
{
$taskId = array_shift($argsParsed);
if($runAs == 'isactionallowed') // modify isactionallowed() behaviour
{
$actionId = $argsParsed[0];
if(intval($argsParsed[1]))
{
$executiveUserId = intval($argsParsed[1]);
}
$oTask = self::getInstanceFromPool($taskId, $executiveUserId);
if($actionId == self::ACTION_READ)
{
$returnValue = true;
try
{
$oTask->getData(false);
}
catch(Exception $e)
{
$returnValue = false;
}
}
else
{
$returnValue = call_user_func_array(array($oTask, $runAs), array($actionId));
}
}
else
{
$oTask = self::getInstanceFromPool($taskId, $executiveUserId);
$returnValue = call_user_func_array(array($oTask, $runAs), $argsParsed);
}
}
return (array($returnValue, $rsData));
}