OrganizationProfileCreator.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Service\Organization;
  4. use App\ApiResources\Profile\OrganizationProfile;
  5. use App\Entity\Organization\Organization;
  6. use App\Service\Network\Tree;
  7. use App\Service\Security\Module;
  8. use App\Test\Service\Organization\OrganizationProfileCreatorTest;
  9. /**
  10. * Class OrganizationProfileCreator : Service contenant les manipulations associés à la ressource OrganizationProfile
  11. * @package App\Service\ProfileCreator
  12. */
  13. class OrganizationProfileCreator
  14. {
  15. public function __construct(
  16. private Module $module,
  17. private Tree $tree
  18. )
  19. { }
  20. /**
  21. * Classe permettant de créer le profile d'une organisation à partir d'une entité Organization
  22. * @param Organization $organization
  23. * @return OrganizationProfile
  24. * @see OrganizationProfileCreatorTest::testCreateCompleteOrganizationProfile()
  25. */
  26. public function createCompleteOrganizationProfile(Organization $organization): OrganizationProfile{
  27. $organizationProfile = $this->createLightOrganizationProfile($organization);
  28. $organizationProfile->setModules($this->module->getOrganizationModules($organization));
  29. $organizationProfile->setProduct($organization->getSettings()->getProduct());
  30. $organizationProfile->setHasChildren($organization->getNetworkOrganizationChildren()->count() > 1);
  31. foreach ($organization->getNetworkOrganizations() as $networkOrganization){
  32. $organizationProfile->addNetwork($networkOrganization->getNetwork()->getName());
  33. }
  34. /** @var \App\Entity\Organization\Organization $parent */
  35. foreach ($this->tree->findAllParentsAndSortByType($organization) as $parent){
  36. $parentProfile = $this->createLightOrganizationProfile($parent);
  37. $organizationProfile->addParent($parentProfile);
  38. }
  39. return $organizationProfile;
  40. }
  41. /**
  42. * Classe permettant de créer et Setter les éléments de base d'un profile d'organisation à partir d'une entité Organization
  43. * @param Organization $organization
  44. * @return OrganizationProfile
  45. */
  46. public function createLightOrganizationProfile(Organization $organization): OrganizationProfile{
  47. $organizationProfile = new OrganizationProfile();
  48. $organizationProfile
  49. ->setId($organization->getId())
  50. ->setName($organization->getName())
  51. ->setSubDomain($organization->getParameters()->getSubDomain())
  52. ->setWebsite($organization->getParameters()->getWebsite());
  53. return $organizationProfile;
  54. }
  55. }