• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/internals/counter/agent.php
  • Класс: BitrixTasksInternalsCounterAgent
  • Вызов: Agent::expired
static function expired($taskId): string
{
	$adminId = User::getAdminId();
	$task = Task::getInstance($taskId, $adminId);
	$statesCompleted = [Status::DEFERRED, Status::COMPLETED, Status::SUPPOSEDLY_COMPLETED];

	if (
		!$task
		|| !$task['RESPONSIBLE_ID']
		|| in_array((int)$task['STATUS'], $statesCompleted, true)
		|| !($taskData = $task->getData())
		|| !array_key_exists('CREATED_BY', $taskData)
		|| !$taskData['CREATED_BY']
	)
	{
		return '';
	}

	CounterCounterService::addEvent(CounterEventEventDictionary::EVENT_TASK_EXPIRED, $taskData);

	$commentPoster = CommentPoster::getInstance($taskId, (int)$taskData['CREATED_BY']);
	$commentPoster && $commentPoster->postCommentsOnTaskExpired($taskData);

	CTaskNotifications::sendExpiredMessage($taskData);

	$event = new Event('tasks', self::EVENT_TASK_EXPIRED, [
		'TASK_ID' => $taskId,
		'TASK' => $taskData,
	]);
	$event->send();

	BizprocListener::onTaskExpired($taskId, $taskData);
	/** @var TaskCollectionMember $members */
	$members = $taskData['SE_MEMBER'];
	$responsibleId = 0;
	foreach ($members as $member)
	{
		$memberData = $member->getData();
		if ($memberData['TYPE'] === RoleDictionary::ROLE_RESPONSIBLE)
		{
			$responsibleId = (int)$memberData['USER_ID'];
		}
	}
	(new TimeLineManager($taskId, $responsibleId))->onTaskExpired()->save();

	return '';
}