• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/internals/registry/taskregistry.php
  • Класс: BitrixTasksInternalsRegistryTaskRegistry
  • Вызов: TaskRegistry::fillDepartments
private function fillDepartments(array $taskIds)
{
	$userIds = [];

	foreach ($taskIds as $taskId)
	{
		$this->storage[$taskId]['DEPARTMENTS'] = [
			MemberTable::MEMBER_TYPE_RESPONSIBLE => [],
			MemberTable::MEMBER_TYPE_ORIGINATOR => [],
			MemberTable::MEMBER_TYPE_ACCOMPLICE => [],
			MemberTable::MEMBER_TYPE_AUDITOR => [],
		];

		if (!isset($this->storage[$taskId]['MEMBER_LIST']))
		{
			continue;
		}

		foreach($this->storage[$taskId]['MEMBER_LIST'] as $row)
		{
			$userIds[$row['USER_ID']] = $row['USER_ID'];
		}
	}

	if (empty($userIds))
	{
		return;
	}

	$userIds = implode(',', $userIds);
	$res = BitrixTasksUtilUser::getList(
		[
			'filter' => [
				'@ID' => new SqlExpression($userIds),
			],
			'select' => ['ID', 'UF_DEPARTMENT']
		]
	);

	$deps = [];
	foreach ($res as $row)
	{
		if (!is_array($row['UF_DEPARTMENT']) || empty($row['UF_DEPARTMENT']))
		{
			continue;
		}
		$deps[$row['ID']] = $row['UF_DEPARTMENT'];
	}

	foreach ($taskIds as $taskId)
	{
		if (!isset($this->storage[$taskId]['MEMBER_LIST']))
		{
			continue;
		}

		foreach($this->storage[$taskId]['MEMBER_LIST'] as $row)
		{
			if (!isset($deps[$row['USER_ID']]))
			{
				continue;
			}
			$this->storage[$taskId]['DEPARTMENTS'][$row['TYPE']] = array_merge($this->storage[$taskId]['DEPARTMENTS'][$row['TYPE']], $deps[$row['USER_ID']]);
		}
	}
}