1<?php 2 3namespace Drupal\Core\Field; 4 5use Drupal\Core\State\StateInterface; 6 7/** 8 * Provides a repository for deleted field and field storage objects. 9 * 10 * @internal 11 */ 12class DeletedFieldsRepository implements DeletedFieldsRepositoryInterface { 13 14 /** 15 * The state key/value store. 16 * 17 * @var \Drupal\Core\State\StateInterface 18 */ 19 protected $state; 20 21 /** 22 * Constructs a new deleted fields repository. 23 * 24 * @param \Drupal\Core\State\StateInterface $state 25 * The state key/value store. 26 */ 27 public function __construct(StateInterface $state) { 28 $this->state = $state; 29 } 30 31 /** 32 * {@inheritdoc} 33 */ 34 public function getFieldDefinitions($field_storage_unique_id = NULL) { 35 $deleted_field_definitions = $this->state->get('field.field.deleted', []); 36 37 if ($field_storage_unique_id) { 38 $deleted_field_definitions = array_filter($deleted_field_definitions, function (FieldDefinitionInterface $field_definition) use ($field_storage_unique_id) { 39 return $field_definition->getFieldStorageDefinition()->getUniqueStorageIdentifier() === $field_storage_unique_id; 40 }); 41 } 42 43 return $deleted_field_definitions; 44 } 45 46 /** 47 * {@inheritdoc} 48 */ 49 public function getFieldStorageDefinitions() { 50 return $this->state->get('field.storage.deleted', []); 51 } 52 53 /** 54 * {@inheritdoc} 55 */ 56 public function addFieldDefinition(FieldDefinitionInterface $field_definition) { 57 $deleted_field_definitions = $this->state->get('field.field.deleted', []); 58 $deleted_field_definitions[$field_definition->getUniqueIdentifier()] = $field_definition; 59 $this->state->set('field.field.deleted', $deleted_field_definitions); 60 61 return $this; 62 } 63 64 /** 65 * {@inheritdoc} 66 */ 67 public function addFieldStorageDefinition(FieldStorageDefinitionInterface $field_storage_definition) { 68 $deleted_storage_definitions = $this->state->get('field.storage.deleted', []); 69 $deleted_storage_definitions[$field_storage_definition->getUniqueStorageIdentifier()] = $field_storage_definition; 70 $this->state->set('field.storage.deleted', $deleted_storage_definitions); 71 72 return $this; 73 } 74 75 /** 76 * {@inheritdoc} 77 */ 78 public function removeFieldDefinition(FieldDefinitionInterface $field_definition) { 79 $deleted_field_definitions = $this->state->get('field.field.deleted', []); 80 unset($deleted_field_definitions[$field_definition->getUniqueIdentifier()]); 81 $this->state->set('field.field.deleted', $deleted_field_definitions); 82 83 return $this; 84 } 85 86 /** 87 * {@inheritdoc} 88 */ 89 public function removeFieldStorageDefinition(FieldStorageDefinitionInterface $field_storage_definition) { 90 $deleted_storage_definitions = $this->state->get('field.storage.deleted', []); 91 unset($deleted_storage_definitions[$field_storage_definition->getUniqueStorageIdentifier()]); 92 $this->state->set('field.storage.deleted', $deleted_storage_definitions); 93 94 return $this; 95 } 96 97} 98