• Модуль: 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;
}