networkOrganizationRepository = $networkOrganizationRepository; } /** * Retrouve tous les parents d'une structure et les tries selon leur type principal * @param Organization $organization * @return array */ public function findAllParentsAndSortByType(Organization $organization): array { return $this->sortByType($this->networkOrganizationRepository->findAllParents($organization)); } /** * Trie les organisations par rapport à leur type principal : * DELEGATION, GROUPMENT, LOCAL_FEDERATION, DEPARTEMENTAL_FEDERATION, REGIONAL_FEDERATION, NATIONAL_FEDERATION * @param array $organizations * @return array * @see TreeTest::testSortByType() */ public function sortByType(array $organizations): array { $typeOrder = [ PrincipalTypeEnum::DELEGATION(), PrincipalTypeEnum::GROUPMENT(), PrincipalTypeEnum::LOCAL_FEDERATION(), PrincipalTypeEnum::DEPARTEMENTAL_FEDERATION(), PrincipalTypeEnum::REGIONAL_FEDERATION(), PrincipalTypeEnum::NATIONAL_FEDERATION() ]; usort($organizations, function(Organization $organization1, Organization $organization2) use($typeOrder){ $orderOrganization1 = array_keys($typeOrder, $organization1->getPrincipalType()); $orderOrganization2 = array_keys($typeOrder, $organization2->getPrincipalType()); if ($orderOrganization1 == $orderOrganization2) { return 0; } return ($orderOrganization1 < $orderOrganization2) ? -1 : 1; }); return $organizations; } }