vendor/ibexa/core/src/lib/Search/Common/EventSubscriber/TrashEventSubscriber.php line 59

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\Events\Trash\DeleteTrashItemEvent;
  8. use Ibexa\Contracts\Core\Repository\Events\Trash\EmptyTrashEvent;
  9. use Ibexa\Contracts\Core\Repository\Events\Trash\RecoverEvent;
  10. use Ibexa\Contracts\Core\Repository\Events\Trash\TrashEvent;
  11. use Ibexa\Contracts\Core\Repository\Values\Content\TrashItem;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. class TrashEventSubscriber extends AbstractSearchEventSubscriber implements EventSubscriberInterface
  14. {
  15. public static function getSubscribedEvents(): array
  16. {
  17. return [
  18. RecoverEvent::class => 'onRecover',
  19. TrashEvent::class => 'onTrash',
  20. DeleteTrashItemEvent::class => 'onDeleteTrashItem',
  21. EmptyTrashEvent::class => 'onEmptyTrashEvent',
  22. ];
  23. }
  24. public function onRecover(RecoverEvent $event)
  25. {
  26. $this->indexSubtree($event->getLocation()->id);
  27. }
  28. public function onTrash(TrashEvent $event)
  29. {
  30. if ($event->getTrashItem() instanceof TrashItem) {
  31. $this->searchHandler->deleteContent(
  32. $event->getLocation()->contentId
  33. );
  34. }
  35. $this->searchHandler->deleteLocation(
  36. $event->getLocation()->id,
  37. $event->getLocation()->contentId
  38. );
  39. }
  40. public function onDeleteTrashItem(DeleteTrashItemEvent $event): void
  41. {
  42. $contentHandler = $this->persistenceHandler->contentHandler();
  43. $reverseRelationContentIds = $event->getResult()->reverseRelationContentIds;
  44. foreach ($reverseRelationContentIds as $contentId) {
  45. $persistenceContent = $contentHandler->load($contentId);
  46. $this->searchHandler->indexContent($persistenceContent);
  47. }
  48. }
  49. public function onEmptyTrashEvent(EmptyTrashEvent $event): void
  50. {
  51. $contentHandler = $this->persistenceHandler->contentHandler();
  52. $results = $event->getResultList()->getIterator();
  53. /** @var \Ibexa\Contracts\Core\Repository\Values\Content\Trash\TrashItemDeleteResult $result */
  54. foreach ($results as $result) {
  55. $reverseRelationContentIds = $result->reverseRelationContentIds;
  56. foreach ($reverseRelationContentIds as $contentId) {
  57. $persistenceContent = $contentHandler->load($contentId);
  58. $this->searchHandler->indexContent($persistenceContent);
  59. }
  60. }
  61. }
  62. }
  63. class_alias(TrashEventSubscriber::class, 'eZ\Publish\Core\Search\Common\EventSubscriber\TrashEventSubscriber');