- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/classes/general/taskelapsed.php
- Класс: not
- Вызов: not::Update
function Update($ID, $arFields, $arParams = array())
{
global $DB;
$ID = intval($ID);
if ($ID < 1)
return false;
$executiveUserId = null;
if (isset($arParams['USER_ID']))
$executiveUserId = (int) $arParams['USER_ID'];
elseif ($userId = BitrixTasksUtilUser::getId())
$executiveUserId = $userId;
if ($this->CheckFields($arFields, $ID))
{
/** @noinspection PhpDeprecationInspection */
$rsUpdatingLogItem = self::getByID($ID);
if ($rsUpdatingLogItem && ($arUpdatingLogItem = $rsUpdatingLogItem->fetch()))
$taskId = $arUpdatingLogItem['TASK_ID'];
else
return (false);
$curDuration = 0;
$rsTask = CTasks::getList(
array(),
array('ID' => $taskId),
array('ID', 'TIME_SPENT_IN_LOGS')
);
if ($rsTask && ($arTask = $rsTask->fetch()))
$curDuration = (int) $arTask['TIME_SPENT_IN_LOGS'];
unset($arFields["ID"]);
$arBinds = array(
"COMMENT_TEXT" => $arFields["COMMENT_TEXT"]
);
// Maintance backward compatibility
if (isset($arFields['MINUTES'], $arFields['SECONDS']))
{
CTaskAssert::logError('[0x63038b4f] ');
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('[0x14e5d0eb] ');
CTaskAssert::assert(false);
}
foreach(GetModuleEvents('tasks', 'OnBeforeTaskElapsedTimeUpdate', true) as $arEvent)
{
if (ExecuteModuleEventEx($arEvent, array($ID, $arUpdatingLogItem, &$arFields))===false)
return false;
}
// If time changed - set CTaskElapsedItem::SOURCE_MANUAL flag
if (
($arUpdatingLogItem['MINUTES'] != $arFields['MINUTES'])
|| ($arUpdatingLogItem['SECONDS'] != $arFields['SECONDS'])
)
{
$arFields['SOURCE'] = CTaskElapsedItem::SOURCE_MANUAL;
}
$update = array();
if (array_key_exists("CREATED_DATE", $arFields))
$update["CREATED_DATE"] = BitrixMainTypeDateTime::createFromUserTime($arFields['CREATED_DATE']);
if (array_key_exists("DATE_START", $arFields))
$update["DATE_START"] = BitrixMainTypeDateTime::createFromUserTime($arFields['DATE_START']);
if (array_key_exists("DATE_STOP", $arFields))
$update["DATE_STOP"] = BitrixMainTypeDateTime::createFromUserTime($arFields['DATE_STOP']);
if (array_key_exists("USER_ID", $arFields))
$update["USER_ID"] = $arFields['USER_ID'];
if (array_key_exists("TASK_ID", $arFields))
$update["TASK_ID"] = $arFields['TASK_ID'];
if (array_key_exists("MINUTES", $arFields))
$update["MINUTES"] = $arFields['MINUTES'];
if (array_key_exists("SECONDS", $arFields))
$update["SECONDS"] = $arFields['SECONDS'];
if (array_key_exists("SOURCE", $arFields))
$update["SOURCE"] = $arFields['SOURCE'];
if (array_key_exists("COMMENT_TEXT", $arFields))
$update["COMMENT_TEXT"] = $arFields['COMMENT_TEXT'];
$updateResult = BitrixTasksInternalsTaskElapsedTimeTable::update($ID, $update);
$occurAsUserId = CTasksTools::getOccurAsUserId();
if ( ! $occurAsUserId )
$occurAsUserId = ($executiveUserId ? $executiveUserId : 1);
$oLog = new CTaskLog();
$oLog->Add(array(
'TASK_ID' => $taskId,
'USER_ID' => $occurAsUserId,
'~CREATED_DATE' => $DB->currentTimeFunction(),
'FIELD' => 'TIME_SPENT_IN_LOGS',
'FROM_VALUE' => $curDuration,
'TO_VALUE' => $curDuration - (int) $arUpdatingLogItem['SECONDS'] + (int) $arFields['SECONDS']
));
foreach(GetModuleEvents('tasks', 'OnTaskElapsedTimeUpdate', true) as $arEvent)
ExecuteModuleEventEx($arEvent, array($ID, $arFields));
return $updateResult;
}
return false;
}