3 namespace Drupal\entity_test;
5 use Drupal\Core\Entity\EntityTypeEvents;
6 use Drupal\Core\Entity\EntityTypeEventSubscriberTrait;
7 use Drupal\Core\Entity\EntityTypeInterface;
8 use Drupal\Core\Entity\EntityTypeListenerInterface;
9 use Drupal\Core\Field\FieldStorageDefinitionEvents;
10 use Drupal\Core\Field\FieldStorageDefinitionEventSubscriberTrait;
11 use Drupal\Core\Field\FieldStorageDefinitionInterface;
12 use Drupal\Core\Field\FieldStorageDefinitionListenerInterface;
13 use Drupal\Core\State\StateInterface;
14 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
17 * Test entity type and field storage definition event subscriber.
19 class EntityTestDefinitionSubscriber implements EventSubscriberInterface, EntityTypeListenerInterface, FieldStorageDefinitionListenerInterface {
21 use EntityTypeEventSubscriberTrait;
22 use FieldStorageDefinitionEventSubscriberTrait;
27 * @var \Drupal\Core\State\StateInterface
32 * Flag determining whether events should be tracked.
36 protected $trackEvents = FALSE;
41 public function __construct(StateInterface $state) {
42 $this->state = $state;
48 public static function getSubscribedEvents() {
49 return static::getEntityTypeEvents() + static::getFieldStorageDefinitionEvents();
55 public function onEntityTypeCreate(EntityTypeInterface $entity_type) {
56 $this->storeEvent(EntityTypeEvents::CREATE);
62 public function onEntityTypeUpdate(EntityTypeInterface $entity_type, EntityTypeInterface $original) {
63 $this->storeEvent(EntityTypeEvents::UPDATE);
69 public function onEntityTypeDelete(EntityTypeInterface $entity_type) {
70 $this->storeEvent(EntityTypeEvents::DELETE);
76 public function onFieldStorageDefinitionCreate(FieldStorageDefinitionInterface $storage_definition) {
77 $this->storeEvent(FieldStorageDefinitionEvents::CREATE);
83 public function onFieldStorageDefinitionUpdate(FieldStorageDefinitionInterface $storage_definition, FieldStorageDefinitionInterface $original) {
84 $this->storeEvent(FieldStorageDefinitionEvents::UPDATE);
90 public function onFieldStorageDefinitionDelete(FieldStorageDefinitionInterface $storage_definition) {
91 $this->storeEvent(FieldStorageDefinitionEvents::DELETE);
95 * Enables event tracking.
97 public function enableEventTracking() {
98 $this->trackEvents = TRUE;
102 * Checks whether an event has been dispatched.
104 * @param string $event_name
108 * TRUE if the event has been dispatched, FALSE otherwise.
110 public function hasEventFired($event_name) {
111 return (bool) $this->state->get($event_name);
115 * Stores the specified event.
117 * @param string $event_name
120 protected function storeEvent($event_name) {
121 if ($this->trackEvents) {
122 $this->state->set($event_name, TRUE);