• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/internals/counter/event/usereventprocessor.php
  • Класс: BitrixTasksInternalsCounterEventUserEventProcessor
  • Вызов: UserEventProcessor::getTasksMembers
private function getTasksMembers(array $taskIds): array
{
	if (
		empty($taskIds)
		|| (count($taskIds) === 1 && $taskIds[0] == 0)
	)
	{
		return [];
	}

	$originData = $this->getResourceCollection()->getOrigin();
	$updatedData = $this->getResourceCollection()->getModified();


	$members = [];
	foreach ($taskIds as $taskId)
	{
		$taskMembers = [];
		if (isset($originData[$taskId]))
		{
			$taskMembers = array_merge($taskMembers, $originData[$taskId]->getMemberIds());
		}
		if (isset($updatedData[$taskId]))
		{
			$taskMembers = array_merge($taskMembers, $updatedData[$taskId]->getMemberIds());
		}

		foreach ($taskMembers as $userId)
		{
			$members[(int) $userId][$taskId] = (int) $taskId;
		}
	}

	if (!isset($updatedData[$taskId]))
	{
		$sql = "
			SELECT 
				TASK_ID,
				USER_ID
			FROM b_tasks_member
			WHERE TASK_ID IN (". implode(',', $taskIds) .")
		";
		$res = Application::getConnection()->query($sql);

		while ($row = $res->fetch())
		{
			$members[(int) $row['USER_ID']][$row['TASK_ID']] = (int) $row['TASK_ID'];
		}
	}


	return $members;
}