- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/classes/general/timermanager.php
- Класс: CTaskTimerManager
- Вызов: CTaskTimerManager::stop
public function stop($taskId = 0)
{
global $CACHE_MANAGER;
if ($taskId)
{
$task = CTaskItem::getInstance($taskId, $this->userId);
if (!$task->checkAccess(ActionDictionary::ACTION_TASK_TIME_TRACKING))
{
return false;
}
}
$timer = CTaskTimerCore::stop($this->userId, $taskId);
$dateFormat = Date::convertFormatToPhp(CSite::GetDateFormat());
$userOffset = User::getTimeZoneOffset($this->userId);
$dateStart = date($dateFormat, ($timer['TIMER_STARTED_AT'] ?? null) + $userOffset);
$dateStop = date($dateFormat, ($timer['TIMER_STARTED_AT'] ?? null) + ($timer['TIMER_ACCUMULATOR'] ?? null) + $userOffset);
$this->cachedLastTimer = null;
if ($timer !== false && $timer['TIMER_ACCUMULATOR'] > 0)
{
/** @noinspection PhpDeprecationInspection */
$elapsedTime = new CTaskElapsedTime();
$elapsedTime->add(
[
'USER_ID' => $this->userId,
'TASK_ID' => $timer['TASK_ID'],
'SECONDS' => $timer['TIMER_ACCUMULATOR'],
'COMMENT_TEXT' => '',
'CREATED_DATE' => $dateStart,
'DATE_START' => $dateStart,
'DATE_STOP' => $dateStop,
],
[
'SOURCE_SYSTEM' => 'Y',
]
);
$task = CTaskItem::getInstance($timer['TASK_ID'], $this->userId);
try
{
$taskData = $task->getData(false);
}
catch (TasksException $e)
{
return false;
}
$timeElapsed = [
$this->userId => $taskData['TIME_SPENT_IN_LOGS'],
];
$affectedUsers = array_unique(
array_merge(
[$this->userId, $taskData['RESPONSIBLE_ID']],
(array)$taskData['ACCOMPLICES']
)
);
foreach ($affectedUsers as $userId)
{
$CACHE_MANAGER->ClearByTag("tasks_user_{$userId}");
if ((int)$userId !== $this->userId)
{
$timeElapsed[$userId] = $taskData['TIME_SPENT_IN_LOGS'];
$affectedUserTimer = CTaskTimerCore::get($userId, $timer['TASK_ID']);
if ($affectedUserTimer !== false && $affectedUserTimer['TIMER_STARTED_AT'] > 0)
{
$timeElapsed[$userId] += time() - $affectedUserTimer['TIMER_STARTED_AT'];
}
}
}
PushService::addEvent(
$affectedUsers,
[
'module_id' => 'tasks',
'command' => PushCommand::TASK_TIMER_STOPPED,
'params' => [
'taskId' => (int)$timer['TASK_ID'],
'userId' => $this->userId,
'timeElapsed' => $timeElapsed,
],
]
);
}
return $timer;
}