vendor/ibexa/site-factory/src/lib/Event/Subscriber/CopyUserGroupSkeletonSubscriber.php line 50

Open in your IDE?
  1. <?php
  2. /**
  3. * @copyright Copyright (C) Ibexa AS. All rights reserved.
  4. * @license For full copyright and license information view LICENSE file distributed with this source code.
  5. */
  6. declare(strict_types=1);
  7. namespace Ibexa\SiteFactory\Event\Subscriber;
  8. use Ibexa\Contracts\Core\Repository\LocationService;
  9. use Ibexa\Contracts\Core\Repository\RoleService;
  10. use Ibexa\Contracts\Core\Repository\UserService;
  11. use Ibexa\Contracts\Core\Repository\Values\Content\Location;
  12. use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface;
  13. use Ibexa\SiteFactory\Event\CopySkeletonEvent;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. final class CopyUserGroupSkeletonSubscriber implements EventSubscriberInterface
  16. {
  17. /** @var \Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface */
  18. private $configResolver;
  19. /** @var \Ibexa\Contracts\Core\Repository\LocationService */
  20. private $locationService;
  21. /** @var \Ibexa\Contracts\Core\Repository\RoleService */
  22. private $roleService;
  23. /** @var \Ibexa\Contracts\Core\Repository\UserService */
  24. private $userService;
  25. public function __construct(
  26. ConfigResolverInterface $configResolver,
  27. LocationService $locationService,
  28. RoleService $roleService,
  29. UserService $userService
  30. ) {
  31. $this->configResolver = $configResolver;
  32. $this->locationService = $locationService;
  33. $this->roleService = $roleService;
  34. $this->userService = $userService;
  35. }
  36. public static function getSubscribedEvents(): array
  37. {
  38. return [CopySkeletonEvent::class => ['copyUserGroupSkeleton']];
  39. }
  40. public function copyUserGroupSkeleton(CopySkeletonEvent $event): void
  41. {
  42. $userGroupSkeletonIds = $event->getSiteCreateStruct()->userGroupSkeletonIds;
  43. if (empty($userGroupSkeletonIds)) {
  44. return;
  45. }
  46. $usersLocation = $this->locationService->loadLocation(
  47. $this->configResolver->getParameter('location_ids.users')
  48. );
  49. foreach ($userGroupSkeletonIds as $userGroupLocationId) {
  50. $userGroupLocation = $this->locationService->loadLocation($userGroupLocationId);
  51. $copiedUserGroupLocation = $this->locationService->copySubtree($userGroupLocation, $usersLocation);
  52. $this->rewriteRoles($userGroupLocation, $copiedUserGroupLocation);
  53. }
  54. }
  55. private function rewriteRoles(Location $userGroupLocation, Location $copiedUserGroupLocation): void
  56. {
  57. $userGroup = $this->userService->loadUserGroup($userGroupLocation->contentId);
  58. $roleAssignments = $this->roleService->getRoleAssignmentsForUserGroup($userGroup);
  59. $copiedUserGroup = $this->userService->loadUserGroup($copiedUserGroupLocation->contentId);
  60. foreach ($roleAssignments as $roleAssignment) {
  61. $this->roleService->assignRoleToUserGroup(
  62. $roleAssignment->role,
  63. $copiedUserGroup,
  64. $roleAssignment->limitation
  65. );
  66. }
  67. }
  68. }
  69. class_alias(CopyUserGroupSkeletonSubscriber::class, 'EzSystems\EzPlatformSiteFactory\Event\Subscriber\CopyUserGroupSkeletonSubscriber');