vendor/ibexa/elasticsearch/src/lib/DocumentMapper/EventSubscriber/UserContentDocumentMapper.php line 33

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\Elasticsearch\DocumentMapper\EventSubscriber;
  8. use Ibexa\Contracts\Core\Persistence\Content as SPIContent;
  9. use Ibexa\Contracts\Core\Search\Field;
  10. use Ibexa\Contracts\Core\Search\FieldType\BooleanField;
  11. use Ibexa\Contracts\Core\Search\FieldType\IdentifierField;
  12. use Ibexa\Contracts\Elasticsearch\Mapping\Event\ContentIndexCreateEvent;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. final class UserContentDocumentMapper implements EventSubscriberInterface
  15. {
  16. /** @internal */
  17. public const HASHING_ALGORITHM = 'sha256';
  18. public static function getSubscribedEvents(): array
  19. {
  20. return [
  21. ContentIndexCreateEvent::class => [
  22. 'onContentIndexCreate',
  23. -100,
  24. ],
  25. ];
  26. }
  27. public function onContentIndexCreate(ContentIndexCreateEvent $event): void
  28. {
  29. $content = $event->getContent();
  30. $field = $this->getUserField($content);
  31. if ($field === null) {
  32. return;
  33. }
  34. $document = $event->getDocument();
  35. if (isset($field->value->externalData['login'])) {
  36. $document->fields[] = new Field(
  37. 'user_login',
  38. hash(self::HASHING_ALGORITHM, $field->value->externalData['login']),
  39. new IdentifierField()
  40. );
  41. }
  42. if (isset($field->value->externalData['email'])) {
  43. $document->fields[] = new Field(
  44. 'user_email',
  45. hash(self::HASHING_ALGORITHM, $field->value->externalData['email']),
  46. new IdentifierField()
  47. );
  48. }
  49. if (isset($field->value->externalData['enabled'])) {
  50. $document->fields[] = new Field(
  51. 'user_is_enabled',
  52. $field->value->externalData['enabled'],
  53. new BooleanField()
  54. );
  55. }
  56. }
  57. private function getUserField(SPIContent $content): ?SPIContent\Field
  58. {
  59. foreach ($content->fields as $field) {
  60. if ($field->type === 'ezuser') {
  61. return $field;
  62. }
  63. }
  64. return null;
  65. }
  66. }