vendor/ibexa/core/src/lib/Search/Common/EventSubscriber/UserEventSubscriber.php line 165

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. namespace Ibexa\Core\Search\Common\EventSubscriber;
  7. use Ibexa\Contracts\Core\Repository\Event\AfterEvent;
  8. use Ibexa\Contracts\Core\Repository\Events\User\AssignUserToUserGroupEvent;
  9. use Ibexa\Contracts\Core\Repository\Events\User\BeforeUnAssignUserFromUserGroupEvent;
  10. use Ibexa\Contracts\Core\Repository\Events\User\CreateUserEvent;
  11. use Ibexa\Contracts\Core\Repository\Events\User\CreateUserGroupEvent;
  12. use Ibexa\Contracts\Core\Repository\Events\User\DeleteUserEvent;
  13. use Ibexa\Contracts\Core\Repository\Events\User\DeleteUserGroupEvent;
  14. use Ibexa\Contracts\Core\Repository\Events\User\MoveUserGroupEvent;
  15. use Ibexa\Contracts\Core\Repository\Events\User\UnAssignUserFromUserGroupEvent;
  16. use Ibexa\Contracts\Core\Repository\Events\User\UpdateUserEvent;
  17. use Ibexa\Contracts\Core\Repository\Events\User\UpdateUserGroupEvent;
  18. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  19. class UserEventSubscriber extends AbstractSearchEventSubscriber implements EventSubscriberInterface
  20. {
  21. public static function getSubscribedEvents(): array
  22. {
  23. return [
  24. CreateUserEvent::class => 'onCreateUser',
  25. CreateUserGroupEvent::class => 'onCreateUserGroup',
  26. DeleteUserEvent::class => 'onDeleteUser',
  27. DeleteUserGroupEvent::class => 'onDeleteUserGroup',
  28. MoveUserGroupEvent::class => 'onMoveUserGroup',
  29. UpdateUserEvent::class => 'onUpdateUser',
  30. UpdateUserGroupEvent::class => 'onUpdateUserGroup',
  31. AssignUserToUserGroupEvent::class => 'onAssignUserToUserGroup',
  32. UnAssignUserFromUserGroupEvent::class => 'onUnAssignUserFromUserGroup',
  33. BeforeUnAssignUserFromUserGroupEvent::class => 'onBeforeUnAssignUserFromUserGroup',
  34. ];
  35. }
  36. public function onCreateUser(CreateUserEvent $event)
  37. {
  38. $userContentInfo = $this->persistenceHandler->contentHandler()->loadContentInfo(
  39. $event->getUser()->id
  40. );
  41. $this->searchHandler->indexContent(
  42. $this->persistenceHandler->contentHandler()->load(
  43. $userContentInfo->id,
  44. $userContentInfo->currentVersionNo
  45. )
  46. );
  47. $locations = $this->persistenceHandler->locationHandler()->loadLocationsByContent(
  48. $userContentInfo->id
  49. );
  50. foreach ($locations as $location) {
  51. $this->searchHandler->indexLocation($location);
  52. }
  53. }
  54. public function onCreateUserGroup(CreateUserGroupEvent $event)
  55. {
  56. $userGroupContentInfo = $this->persistenceHandler->contentHandler()->loadContentInfo(
  57. $event->getUserGroup()->id
  58. );
  59. $this->searchHandler->indexContent(
  60. $this->persistenceHandler->contentHandler()->load(
  61. $userGroupContentInfo->id,
  62. $userGroupContentInfo->currentVersionNo
  63. )
  64. );
  65. $locations = $this->persistenceHandler->locationHandler()->loadLocationsByContent(
  66. $userGroupContentInfo->id
  67. );
  68. foreach ($locations as $location) {
  69. $this->searchHandler->indexLocation($location);
  70. }
  71. }
  72. public function onDeleteUser(DeleteUserEvent $event)
  73. {
  74. $this->searchHandler->deleteContent($event->getUser()->id);
  75. foreach ($event->getLocations() as $locationId) {
  76. $this->searchHandler->deleteLocation($locationId, $event->getUser()->id);
  77. }
  78. }
  79. public function onDeleteUserGroup(DeleteUserGroupEvent $event)
  80. {
  81. $this->searchHandler->deleteContent($event->getUserGroup()->id);
  82. foreach ($event->getLocations() as $locationId) {
  83. $this->searchHandler->deleteLocation($locationId, $event->getUserGroup()->id);
  84. }
  85. }
  86. public function onMoveUserGroup(MoveUserGroupEvent $event)
  87. {
  88. $userGroupContentInfo = $this->persistenceHandler->contentHandler()->loadContentInfo(
  89. $event->getUserGroup()->id
  90. );
  91. $this->indexSubtree($userGroupContentInfo->mainLocationId);
  92. }
  93. public function onUpdateUser(UpdateUserEvent $event)
  94. {
  95. $userContentInfo = $this->persistenceHandler->contentHandler()->loadContentInfo(
  96. $event->getUser()->id
  97. );
  98. $this->searchHandler->indexContent(
  99. $this->persistenceHandler->contentHandler()->load(
  100. $userContentInfo->id,
  101. $userContentInfo->currentVersionNo
  102. )
  103. );
  104. $locations = $this->persistenceHandler->locationHandler()->loadLocationsByContent(
  105. $userContentInfo->id
  106. );
  107. foreach ($locations as $location) {
  108. $this->searchHandler->indexLocation($location);
  109. }
  110. }
  111. public function onUpdateUserGroup(UpdateUserGroupEvent $event)
  112. {
  113. $userContentInfo = $this->persistenceHandler->contentHandler()->loadContentInfo(
  114. $event->getUserGroup()->id
  115. );
  116. $this->searchHandler->indexContent(
  117. $this->persistenceHandler->contentHandler()->load(
  118. $userContentInfo->id,
  119. $userContentInfo->currentVersionNo
  120. )
  121. );
  122. $locations = $this->persistenceHandler->locationHandler()->loadLocationsByContent(
  123. $userContentInfo->id
  124. );
  125. foreach ($locations as $location) {
  126. $this->searchHandler->indexLocation($location);
  127. }
  128. }
  129. public function onAssignUserToUserGroup(AssignUserToUserGroupEvent $event): void
  130. {
  131. $this->indexUserContentWithLocation($event);
  132. }
  133. public function onUnAssignUserFromUserGroup(UnAssignUserFromUserGroupEvent $event): void
  134. {
  135. $this->indexUserContentWithLocation($event);
  136. }
  137. public function onBeforeUnAssignUserFromUserGroup(BeforeUnAssignUserFromUserGroupEvent $event): void
  138. {
  139. $userContentInfo = $this->persistenceHandler->contentHandler()->loadContentInfo(
  140. $event->getUser()->id
  141. );
  142. $locations = $this->persistenceHandler->locationHandler()->loadLocationsByContent(
  143. $userContentInfo->id
  144. );
  145. foreach ($locations as $location) {
  146. $this->searchHandler->deleteLocation($location->id, $userContentInfo->id);
  147. }
  148. }
  149. private function indexUserContentWithLocation(AfterEvent $event): void
  150. {
  151. $userContentInfo = $this->persistenceHandler->contentHandler()->loadContentInfo(
  152. $event->getUser()->id
  153. );
  154. $locations = $this->persistenceHandler->locationHandler()->loadLocationsByContent(
  155. $userContentInfo->id
  156. );
  157. $this->searchHandler->indexContent(
  158. $this->persistenceHandler->contentHandler()->load(
  159. $userContentInfo->id,
  160. $userContentInfo->currentVersionNo
  161. )
  162. );
  163. foreach ($locations as $location) {
  164. $this->searchHandler->indexLocation($location);
  165. }
  166. }
  167. }
  168. class_alias(UserEventSubscriber::class, 'eZ\Publish\Core\Search\Common\EventSubscriber\UserEventSubscriber');