• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/lib/integration/ui/entityselector/departmentprovider.php
  • Класс: BitrixIntranetIntegrationUIEntitySelectorDepartmentProvider
  • Вызов: DepartmentProvider::fillDepartments
private function fillDepartments(Dialog $dialog, EO_Section_Collection $departments, ?bool $forceDynamic = null)
{
	$allowDepartment = $this->getAllowOnlyUserDepartment();
	$parents = [];
	$parentIdList = [];
	foreach ($departments as $department)
	{
		$isRootDepartment =
			$department->getDepthLevel() === 1 || $department->getId() === self::getRootDepartmentId()
		;
		$hideRootDepartment = $isRootDepartment && !$this->options['allowSelectRootDepartment'];
		$parentIdList[$department->getId()] = $department->getIblockSectionId();

		$availableInRecentTab = true;
		if ($this->getSelectMode() === self::MODE_USERS_ONLY || $hideRootDepartment)
		{
			$availableInRecentTab = false;
		}

		if (
			is_array($allowDepartment)
			&& !$this->isAllowDepartment(
				$department->getId(),
				$department->getIblockSectionId(),
				$allowDepartment,
				$parentIdList
			)
		)
		{
			continue;
		}

		$item = new Item([
			'id' => $department->getId(),
			'entityId' => 'department',
			'title' => $department->getName(),
			'tabs' => 'departments',
			'searchable' => $availableInRecentTab,
			'availableInRecentTab' => $availableInRecentTab,
			'nodeOptions' => [
				'dynamic' => is_bool($forceDynamic) ? $forceDynamic : true,
				'open' => $isRootDepartment,
			],
		]);

		if ($this->getSelectMode() === self::MODE_DEPARTMENTS_ONLY && !$hideRootDepartment)
		{
			$item->addChild(new Item([
				'id' => $department->getId(),
				'title' => $department->getName(),
				'entityId' => 'department',
				'nodeOptions' => [
					'title' => Loc::getMessage('INTRANET_ENTITY_SELECTOR_SELECT_DEPARTMENT'),
					//'avatar' => '/bitrix/js/intranet/entity-selector/src/images/department-option.svg',
					'renderMode' => 'override',
				],
			]));
		}
		elseif ($this->getSelectMode() === self::MODE_USERS_AND_DEPARTMENTS)
		{
			if (!$hideRootDepartment)
			{
				$item->addChild(new Item([
					'id' => $department->getId(),
					'title' => $department->getName(),
					'entityId' => 'department',
					'nodeOptions' => [
						'title' => Loc::getMessage('INTRANET_ENTITY_SELECTOR_ALL_EMPLOYEES_SUBDIVISIONS'),
						'avatar' => '/bitrix/js/intranet/entity-selector/src/images/department-option.svg',
						'renderMode' => 'override',
					],
				]));
			}

			if ($this->options['allowFlatDepartments'])
			{
				$item->addChild(new Item([
					'id' => $department->getId() . ':F',
					'entityId' => 'department',
					'title' =>
						$department->getName() . ' '
						. Loc::getMessage('INTRANET_ENTITY_SELECTOR_ONLY_EMPLOYEES')
					,
					'nodeOptions' => [
						'title' => Loc::getMessage('INTRANET_ENTITY_SELECTOR_ONLY_DEPARTMENT_EMPLOYEES'),
						'avatar' => '/bitrix/js/intranet/entity-selector/src/images/department-option.svg',
						'renderMode' => 'override',
					],
				]));
			}
		}

		$parentItem = $parents[$department->getIblockSectionId()] ?? null;
		if ($parentItem)
		{
			$parentItem->addChild($item);
		}
		else
		{
			$dialog->addItem($item);
		}

		$parents[$department->getId()] = $item;
	}
}