• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/timercore.php
  • Класс: CTaskTimerCore
  • Вызов: CTaskTimerCore::start
static function start($userId, $taskId)
{
	global $DB;

	$userId = (int) $userId;
	$taskId = (int) $taskId;

	$ts = time();
	if ($ts < 1)
	{
		CTaskAssert::logError('[0x574ed9ab] current unix timestamp is in past, check system time');
		CTaskAssert::assert(false);
	}

	if ($taskId < 1)
	{
		CTaskAssert::logError('[0xf119fc40] invalid taskId: ' . $taskId);
		CTaskAssert::assert(false);
	}

	$DB->query(
		"UPDATE b_tasks_timer 
		SET TASK_ID = $taskId, TIMER_STARTED_AT = $ts, TIMER_ACCUMULATOR = 0
		WHERE USER_ID = $userId"
	);

	$arData = self::get($userId);
	if ($arData === false)		// there is no timer in DB?
	{
		// create it
		$DB->query(
			"INSERT IGNORE INTO b_tasks_timer (USER_ID, TASK_ID, TIMER_STARTED_AT, TIMER_ACCUMULATOR) 
			VALUES ($userId, $taskId, $ts, 0)"
		);

		$arData = self::get($userId);
	}

	// Some other timer can be started between our queries, so check it.
	if ((int) $arData['TASK_ID'] !== $taskId)
		return (false);

	return ($arData);
}