Skip to content
Snippets Groups Projects
Commit 47726f65 authored by Patrick van Efferen's avatar Patrick van Efferen
Browse files

Issue #3110209 by Emil Stoianov, bgilhome, mnakov: Add event to transform raw data before mapping

parent 980c5c40
No related branches found
No related tags found
1 merge request!31issue #3110209 Add transform event
......@@ -9,6 +9,16 @@ namespace Drupal\external_entities\Event;
*/
final class ExternalEntitiesEvents {
/**
* Name of the event fired before mapping raw data to an external entity.
*
* This event allows you to perform alterations on the raw data before
* mapping.
*
* @Event
*/
const TRANSFORM_RAW_DATA = 'external_entity.transform_raw_data';
/**
* Name of the event fired when extracting raw data from an external entity.
*
......
<?php
namespace Drupal\external_entities\Event;
use Drupal\external_entities\ExternalEntityStorageInterface;
use Symfony\Component\EventDispatcher\Event;
/**
* Defines an external entity raw data transformation event.
*/
class ExternalEntityTransformRawDataEvent extends Event {
/**
* The external entity storage.
*
* @var ExternalEntityStorageInterface
*/
protected $storage;
/**
* The endpoint raw data.
*
* @var array
*/
protected $rawData;
/**
* Constructs a transform raw data event object.
*
* @param ExternalEntityStorageInterface $storage
* The external entity storage object.
* @param array $raw_data
* The raw data.
*/
public function __construct(ExternalEntityStorageInterface $storage, array $raw_data) {
$this->storage = $storage;
$this->rawData = $raw_data;
}
/**
* Gets the external entity storage.
*
* @return ExternalEntityStorageInterface
* The storage client.
*/
public function getStorage() {
return $this->storage;
}
/**
* Gets the raw data.
*
* @return array
* The raw data.
*/
public function getRawData() {
return $this->rawData;
}
/**
* Sets the raw data.
*
* @param array $raw_data
* The raw data.
*/
public function setRawData(array $raw_data) {
$this->rawData = $raw_data;
}
}
......@@ -19,6 +19,7 @@ use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\external_entities\Event\ExternalEntitiesEvents;
use Drupal\external_entities\Event\ExternalEntityMapRawDataEvent;
use Drupal\external_entities\Event\ExternalEntityTransformRawDataEvent;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
......@@ -310,6 +311,11 @@ class ExternalEntityStorage extends ContentEntityStorageBase implements External
$values = [];
foreach ($data as $id => $raw_data) {
// Allow other modules to perform custom mapping logic.
$event = new ExternalEntityTransformRawDataEvent($this, $raw_data);
$this->eventDispatcher->dispatch(ExternalEntitiesEvents::TRANSFORM_RAW_DATA, $event);
$raw_data = $event->getRawData();
if (empty($raw_data)) {
continue;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment