- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/rest/controllers/task.php
- Класс: BitrixTasksRestControllersTask
- Вызов: Task::startTimer
private function startTimer(CTaskItem $task, bool $stopPrevious = false): ?bool
{
$userId = $this->getCurrentUser()->getId();
$timer = CTaskTimerManager::getInstance($userId);
$lastTimer = $timer->getLastTimer();
$lastTimerTaskId = (int)$lastTimer['TASK_ID'];
if (
!$stopPrevious
&& $lastTimerTaskId
&& $lastTimer['TIMER_STARTED_AT'] > 0
&& $lastTimerTaskId !== (int)$task->getId()
)
{
// use direct query here, avoiding cached CTaskItem::getData(), because $lastTimerTaskId unlikely will be in cache
[$tasks,] = CTaskItem::fetchList($userId, [], ['ID' => $lastTimerTaskId], [], ['ID', 'TITLE']);
if (is_array($tasks) && !empty($tasks))
{
$task = array_shift($tasks);
if ($task)
{
$data = $task->getData(false);
$replace = ['ID' => $data['ID'], 'TITLE' => $data['TITLE']];
$this->addError(new Error(GetMessage('TASKS_OTHER_TASK_ON_TIMER', $replace)));
}
}
return null;
}
if ($timer->start($task->getId()) === false)
{
$this->addError(new Error(GetMessage('TASKS_FAILED_START_TASK_TIMER')));
return null;
}
return true;
}