Пример #1
0
 /**
  * {@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);
                 }
             }
         }
     }
 }