- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/classes/general/timermanager.php
- Класс: CTaskTimerManager
- Вызов: CTaskTimerManager::onBeforeTaskUpdate
static function onBeforeTaskUpdate($id, $fields, $task)
{
if ($userId = User::getId())
{
$oTimer = self::getInstance($userId);
$arTimer = $oTimer->getLastTimer();
$completeStatuses = [
Status::SUPPOSEDLY_COMPLETED,
Status::COMPLETED,
Status::DEFERRED,
];
$oldStatus = (int)($task['REAL_STATUS'] ?? null);
$newStatus = (int)($fields['STATUS'] ?? null);
// If task on timer & completed by logged in user, stop timer
if (
$arTimer
&& $arTimer['TASK_ID'] == $task['ID']
&& !in_array($oldStatus, $completeStatuses, true)
&& in_array($newStatus, $completeStatuses, true)
&& ($userId == $task['RESPONSIBLE_ID'] || in_array($userId, (array)$task['ACCOMPLICES']))
)
{
$oTimer->stop();
}
}
// If users are not responsible or accomplices in task elsemore,
// stop they timers
$oldMembers = array_unique(
array_merge(
[$task['RESPONSIBLE_ID']],
$task['ACCOMPLICES']
)
);
$newMembers = array_unique(
array_merge(
[($fields['RESPONSIBLE_ID'] ?? $task['RESPONSIBLE_ID'])],
($fields['ACCOMPLICES'] ?? $task['ACCOMPLICES'])
)
);
$eliminatedMembers = array_diff($oldMembers, $newMembers);
self::stopTimerForUsers($task['ID'], $eliminatedMembers);
}