Skip to content

Commit

Permalink
EWPP-2630: Remove MetadataMappingEvent.
Browse files Browse the repository at this point in the history
  • Loading branch information
Hernani Borges de Freitas authored and upchuk committed Nov 15, 2022
1 parent 25812cb commit 038bce5
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 177 deletions.
4 changes: 2 additions & 2 deletions oe_search.services.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ services:
arguments: [ '@entity_type.manager' ]
tags:
- { name: 'event_subscriber' }
oe_search.metadata_mapping_event_subscriber:
class: Drupal\oe_search\EventSubscriber\MetadataMappingSubscriber
oe_search.europa_entity_creation_subscriber:
class: Drupal\oe_search\EventSubscriber\EuropaEntityCreationSubscriber
arguments: [ '@entity_type.manager' ]
tags:
- { name: 'event_subscriber' }
Expand Down
7 changes: 1 addition & 6 deletions src/EntityMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
use Drupal\Core\Entity\Plugin\DataType\EntityAdapter;
use Drupal\Core\Field\TypedData\FieldItemDataDefinition;
use Drupal\oe_search\Event\EuropaEntityCreationEvent;
use Drupal\oe_search\Event\MetadataMappingEvent;
use Drupal\search_api\Plugin\search_api\datasource\ContentEntity;
use Drupal\search_api\Query\QueryInterface;

Expand Down Expand Up @@ -89,10 +88,6 @@ public function map(array $metadata, QueryInterface $query) : ?EntityAdapter {
}
}

$event = new MetadataMappingEvent($query, $metadata, $index_fields, $entity_values);
$this->eventDispatcher->dispatch($event, MetadataMappingEvent::class);
$entity_values = $event->getValues();

// We want to be able to call getUrl() on the entity, so we set a fake id.
$entity_values[$entity_id_key] = PHP_INT_MAX;

Expand All @@ -103,7 +98,7 @@ public function map(array $metadata, QueryInterface $query) : ?EntityAdapter {
$entity->in_preview = TRUE;
// Allow event subscribers to alter the created entity.
$event = new EuropaEntityCreationEvent($entity, $metadata, $query);
$this->eventDispatcher->dispatch($event);
$this->eventDispatcher->dispatch($event, EuropaEntityCreationEvent::EUROPA_ENTITY_CREATED);
$mapped_entity = EntityAdapter::createFromEntity($entity);
}
catch (EntityStorageException $e) {
Expand Down
7 changes: 7 additions & 0 deletions src/Event/EuropaEntityCreationEvent.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,13 @@ class EuropaEntityCreationEvent extends Event {
*/
protected $query;

/**
* The name of the event dispatched when a new europa entity is instatiated.
*
* Allows subscribers to alter the entity values.
*/
const EUROPA_ENTITY_CREATED = 'oe_search.europa_entity_created';

/**
* Constructs a new EuropaEntityCreationEvent object.
*
Expand Down
145 changes: 0 additions & 145 deletions src/Event/MetadataMappingEvent.php

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@
namespace Drupal\oe_search\EventSubscriber;

use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\oe_search\Event\MetadataMappingEvent;
use Drupal\Core\Field\TypedData\FieldItemDataDefinitionInterface;
use Drupal\oe_search\Event\EuropaEntityCreationEvent;
use Drupal\oe_search\Utility;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
* Event subscriber for ES Entity Mapping.
*/
class MetadataMappingSubscriber implements EventSubscriberInterface {
class EuropaEntityCreationSubscriber implements EventSubscriberInterface {

/**
* The entity type manager.
Expand All @@ -36,57 +37,64 @@ public function __construct(EntityTypeManagerInterface $entity_type_manager) {
*/
public static function getSubscribedEvents(): array {
return [
MetadataMappingEvent::class => 'map',
EuropaEntityCreationEvent::EUROPA_ENTITY_CREATED => 'map',
];
}

/**
* Subscribes to the metadata mapping creation event.
*
* @param \Drupal\oe_search\Event\MetadataMappingEvent $event
* @param \Drupal\oe_search\Event\EuropaEntityCreationEvent $event
* The event object.
*
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
* @SuppressWarnings(PHPMD.NPathComplexity)
*/
public function map(MetadataMappingEvent $event): void {

public function map(EuropaEntityCreationEvent $event): void {
$metadata = $event->getMetadata();
$index_fields = $event->getIndexFields();
$values = $event->getValues();
$entity = $event->getEntity();
$query = $event->getQuery();
$datasource = $event->getQuery()
->getIndex()
->getDatasource($metadata['SEARCH_API_DATASOURCE'][0]);

$datasource_id = $metadata[Utility::getEsFieldName('search_api_datasource', $query)][0];
$index_fields = $query->getIndex()->getFieldsByDatasource($datasource_id);

$entity_type_id = $datasource->getDerivativeId();
$entity_type = $this->entityTypeManager->getDefinition($entity_type_id);
$entity_bundle_key = $entity_type->getKey('bundle');

foreach ($index_fields as $field) {
$metadata_key = Utility::getEsFieldName($field->getFieldIdentifier(), $query);
$original_field_id = $field->getOriginalFieldIdentifier();
$original_field_type = $field->getDataDefinition()
->getFieldDefinition()
->getType();
$data_definition = $field->getDataDefinition();

// We only map here values present in metadata.
if (empty($values[$original_field_id])) {
if (!$data_definition instanceof FieldItemDataDefinitionInterface) {
continue;
}
$original_field_type = $data_definition
->getFieldDefinition()
->getType();

// Drop entity references, unless they are the bundle key.
$entity_reference_types = [
'entity_reference',
'entity_reference_revisions',
];

// We only alter values present in metadata.
if (empty($metadata[$metadata_key][0])) {
continue;
}

if ($metadata_key != Utility::getEsFieldName($entity_bundle_key, $query) && in_array($original_field_type, $entity_reference_types)) {
unset($values[$original_field_id]);
$entity->get($original_field_id)->removeItem(0);
}

// Support for booleans.
if ($field->getType() == 'boolean') {
$values[$original_field_id] = filter_var($values[$original_field_id], FILTER_VALIDATE_BOOLEAN);
$entity->set($original_field_id, filter_var($entity->get($original_field_id)->value, FILTER_VALIDATE_BOOLEAN));
}
elseif ($field->getType() == 'date') {
$date = \DateTime::createFromFormat('Y-m-d\TH:i:s.vP', $metadata[$metadata_key][0]);
Expand All @@ -101,26 +109,24 @@ public function map(MetadataMappingEvent $event): void {

// Date time fields with date only.
if ($date_type == 'datetime' && $datetime_type == 'date') {
$values[$original_field_id] = date('Y-m-d', $date->getTimestamp());
$entity->set($original_field_id, date('Y-m-d', $date->getTimestamp()));
}
// Date time fields with date and time.
elseif ($date_type == 'datetime' && $datetime_type == 'datetime') {
$values[$original_field_id] = date('Y-m-d\TH:i:s', $date->getTimestamp());
$entity->set($original_field_id, date('Y-m-d\TH:i:s', $date->getTimestamp()));
}
elseif ($date_type == 'daterange_timezone') {
$values[$field->getOriginalFieldIdentifier()] = [
$entity->set($field->getOriginalFieldIdentifier(), [
'value' => date('Y-m-d\TH:i:s', $date->getTimestamp()),
'end_value' => date('Y-m-d\TH:i:s', $date->getTimestamp()),
'timezone' => $date->getTimezone()->getName(),
];
]);
}
else {
$values[$original_field_id] = $date->getTimestamp();
$entity->set($original_field_id, $date->getTimestamp());
}
}
}

$event->setValues($values);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -447,10 +447,11 @@ public function deleteAllIndexItems(IndexInterface $index, $datasource_id = NULL
*/
public function search(QueryInterface $query): void {
$results = $query->getResults();
$page_number = $limit = NULL;
$page_number = NULL;
$limit = $query->getOptions()['limit'] ?? NULL;

// Set page number.
if (!empty($query->getOptions()['offset']) && !empty($query->getOptions()['limit'])) {
if (!empty($query->getOptions()['offset']) && !empty($limit)) {
$offset = $query->getOptions()['offset'];
$limit = $query->getOptions()['limit'];
$page_number = ($offset / $limit) + 1;
Expand Down

0 comments on commit 038bce5

Please sign in to comment.