/** * {@inheritdoc} */ protected function fillTree(OwnerTreeInterface $tree) { $userClass = $this->getOwnershipMetadataProvider()->getBasicLevelClass(); $businessUnitClass = $this->getOwnershipMetadataProvider()->getLocalLevelClass(); /** @var User[] $users */ $users = $this->getManagerForClass($userClass)->getRepository($userClass)->findAll(); /** @var BusinessUnit[] $businessUnits */ $businessUnitsRepo = $this->getManagerForClass($businessUnitClass)->getRepository($businessUnitClass); $businessUnits = $businessUnitsRepo->createQueryBuilder('bu')->select(['bu.id', 'IDENTITY(bu.organization) organization', 'IDENTITY(bu.owner) owner'])->getQuery()->getArrayResult(); foreach ($businessUnits as $businessUnit) { if (!empty($businessUnit['organization'])) { $tree->addLocalEntity($businessUnit['id'], $businessUnit['organization']); if ($businessUnit['owner']) { $tree->addDeepEntity($businessUnit['id'], $businessUnit['owner']); } } } $tree->buildTree(); foreach ($users as $user) { $owner = $user->getOwner(); $tree->addBasicEntity($user->getId(), $owner ? $owner->getId() : null); foreach ($user->getOrganizations() as $organization) { $organizationId = $organization->getId(); $tree->addGlobalEntity($user->getId(), $organizationId); $userBusinessUnits = $user->getBusinessUnits(); foreach ($userBusinessUnits as $businessUnit) { $buOrganizationId = $businessUnit->getOrganization()->getId(); if ($organizationId == $buOrganizationId) { $tree->addLocalEntityToBasic($user->getId(), $businessUnit->getId(), $organizationId); } } } } }