EntityTestDefinitionSubscriber.php in Zircon Profile 8
File
core/modules/system/tests/modules/entity_test/src/EntityTestDefinitionSubscriber.php
View source
<?php
namespace Drupal\entity_test;
use Drupal\Core\Entity\EntityTypeEvents;
use Drupal\Core\Entity\EntityTypeEventSubscriberTrait;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Entity\EntityTypeListenerInterface;
use Drupal\Core\Field\FieldStorageDefinitionEvents;
use Drupal\Core\Field\FieldStorageDefinitionEventSubscriberTrait;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Field\FieldStorageDefinitionListenerInterface;
use Drupal\Core\State\StateInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class EntityTestDefinitionSubscriber implements EventSubscriberInterface, EntityTypeListenerInterface, FieldStorageDefinitionListenerInterface {
use EntityTypeEventSubscriberTrait;
use FieldStorageDefinitionEventSubscriberTrait;
protected $state;
protected $trackEvents = FALSE;
function __construct(StateInterface $state) {
$this->state = $state;
}
public static function getSubscribedEvents() {
return static::getEntityTypeEvents() + static::getFieldStorageDefinitionEvents();
}
public function onEntityTypeCreate(EntityTypeInterface $entity_type) {
$this
->storeEvent(EntityTypeEvents::CREATE);
}
public function onEntityTypeUpdate(EntityTypeInterface $entity_type, EntityTypeInterface $original) {
$this
->storeEvent(EntityTypeEvents::UPDATE);
}
public function onEntityTypeDelete(EntityTypeInterface $entity_type) {
$this
->storeEvent(EntityTypeEvents::DELETE);
}
public function onFieldStorageDefinitionCreate(FieldStorageDefinitionInterface $storage_definition) {
$this
->storeEvent(FieldStorageDefinitionEvents::CREATE);
}
public function onFieldStorageDefinitionUpdate(FieldStorageDefinitionInterface $storage_definition, FieldStorageDefinitionInterface $original) {
$this
->storeEvent(FieldStorageDefinitionEvents::UPDATE);
}
public function onFieldStorageDefinitionDelete(FieldStorageDefinitionInterface $storage_definition) {
$this
->storeEvent(FieldStorageDefinitionEvents::DELETE);
}
public function enableEventTracking() {
$this->trackEvents = TRUE;
}
public function hasEventFired($event_name) {
return (bool) $this->state
->get($event_name);
}
protected function storeEvent($event_name) {
if ($this->trackEvents) {
$this->state
->set($event_name, TRUE);
}
}
}