- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/classes/general/taskelapsed.php
- Класс: not
- Вызов: not::Add
function Add($arFields, $arParams = array())
{
global $DB;
$executiveUserId = null;
if (isset($arParams['USER_ID']))
$executiveUserId = (int) $arParams['USER_ID'];
elseif ($userId = BitrixTasksUtilUser::getId())
$executiveUserId = $userId;
$occurAsUserId = CTasksTools::getOccurAsUserId();
if ( ! $occurAsUserId )
$occurAsUserId = ($executiveUserId ? $executiveUserId : 1);
if ($this->CheckFields($arFields))
{
$curDuration = 0;
$rsTask = CTasks::getList(
array(),
array('ID' => $arFields['TASK_ID']),
array('ID', 'TIME_SPENT_IN_LOGS')
);
if ($rsTask && ($arTask = $rsTask->fetch()))
$curDuration = (int) $arTask['TIME_SPENT_IN_LOGS'];
// Maintance backward compatibility
if (isset($arFields['MINUTES'], $arFields['SECONDS']))
{
CTaskAssert::logError('[0x1e85844c] ');
CTaskAssert::assert(false);
}
if (isset($arFields['SECONDS']))
$arFields['MINUTES'] = (int) round($arFields['SECONDS'] / 60, 0);
elseif (isset($arFields['MINUTES']))
$arFields['SECONDS'] = 60 * $arFields['MINUTES'];
else
{
CTaskAssert::logError('[0x85bbae77] ');
CTaskAssert::assert(false);
}
foreach(GetModuleEvents('tasks', 'OnBeforeTaskElapsedTimeAdd', true) as $arEvent)
{
if (ExecuteModuleEventEx($arEvent, array(&$arFields))===false)
return false;
}
$arFields['SOURCE'] = CTaskElapsedItem::SOURCE_MANUAL;
if (isset($arParams['SOURCE_SYSTEM']) && ($arParams['SOURCE_SYSTEM'] === 'Y'))
$arFields['SOURCE'] = CTaskElapsedItem::SOURCE_SYSTEM;
if ($arFields['CREATED_DATE'])
$createdDate = BitrixMainTypeDateTime::createFromUserTime($arFields['CREATED_DATE']);
else
$createdDate = new BitrixMainTypeDateTime();
$addResult = BitrixTasksInternalsTaskElapsedTimeTable::add(array(
"CREATED_DATE" => $createdDate,
"DATE_START" => BitrixMainTypeDateTime::createFromUserTime($arFields['DATE_START'] ?? null),
"DATE_STOP" => BitrixMainTypeDateTime::createFromUserTime($arFields['DATE_STOP'] ?? null),
"USER_ID" => $arFields["USER_ID"],
"TASK_ID" => $arFields["TASK_ID"],
"MINUTES" => $arFields["MINUTES"],
"SECONDS" => $arFields["SECONDS"],
"SOURCE" => $arFields["SOURCE"],
"COMMENT_TEXT" => $arFields["COMMENT_TEXT"],
));
$ID = $addResult->isSuccess()? $addResult->getId(): false;
$oLog = new CTaskLog();
$oLog->Add(array(
'TASK_ID' => $arFields['TASK_ID'],
'USER_ID' => $occurAsUserId,
'~CREATED_DATE' => $DB->currentTimeFunction(),
'FIELD' => 'TIME_SPENT_IN_LOGS',
'FROM_VALUE' => $curDuration,
'TO_VALUE' => $curDuration + (int) $arFields['SECONDS']
));
foreach(GetModuleEvents('tasks', 'OnTaskElapsedTimeAdd', true) as $arEvent)
ExecuteModuleEventEx($arEvent, array($ID, $arFields));
return $ID;
}
return false;
}