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