use Drupal\Core\Config\Config;
use Drupal\Core\Entity\EntityManagerInterface;
use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\Core\Field\DeletedFieldsRepositoryInterface;
use Drupal\Core\Field\FieldConfigStorageBase;
use Drupal\Core\Field\FieldTypePluginManagerInterface;
use Drupal\Core\Language\LanguageManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Component\Uuid\UuidInterface;
-use Drupal\Core\State\StateInterface;
/**
- * Controller class for fields.
+ * Storage handler for field config.
*/
class FieldConfigStorage extends FieldConfigStorageBase {
protected $entityManager;
/**
- * The state keyvalue collection.
+ * The field type plugin manager.
*
- * @var \Drupal\Core\State\StateInterface
+ * @var \Drupal\Core\Field\FieldTypePluginManagerInterface
*/
- protected $state;
+ protected $fieldTypeManager;
/**
- * The field type plugin manager.
+ * The deleted fields repository.
*
- * @var \Drupal\Core\Field\FieldTypePluginManagerInterface
+ * @var \Drupal\Core\Field\DeletedFieldsRepositoryInterface
*/
- protected $fieldTypeManager;
+ protected $deletedFieldsRepository;
/**
* Constructs a FieldConfigStorage object.
* The language manager.
* @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
* The entity manager.
- * @param \Drupal\Core\State\StateInterface $state
- * The state key value store.
* @param \Drupal\Core\Field\FieldTypePluginManagerInterface $field_type_manager
* The field type plugin manager.
+ * @param \Drupal\Core\Field\DeletedFieldsRepositoryInterface $deleted_fields_repository
+ * The deleted fields repository.
*/
- public function __construct(EntityTypeInterface $entity_type, ConfigFactoryInterface $config_factory, UuidInterface $uuid_service, LanguageManagerInterface $language_manager, EntityManagerInterface $entity_manager, StateInterface $state, FieldTypePluginManagerInterface $field_type_manager) {
+ public function __construct(EntityTypeInterface $entity_type, ConfigFactoryInterface $config_factory, UuidInterface $uuid_service, LanguageManagerInterface $language_manager, EntityManagerInterface $entity_manager, FieldTypePluginManagerInterface $field_type_manager, DeletedFieldsRepositoryInterface $deleted_fields_repository) {
parent::__construct($entity_type, $config_factory, $uuid_service, $language_manager);
$this->entityManager = $entity_manager;
- $this->state = $state;
$this->fieldTypeManager = $field_type_manager;
+ $this->deletedFieldsRepository = $deleted_fields_repository;
}
/**
$container->get('uuid'),
$container->get('language_manager'),
$container->get('entity.manager'),
- $container->get('state'),
- $container->get('plugin.manager.field.field_type')
+ $container->get('plugin.manager.field.field_type'),
+ $container->get('entity_field.deleted_fields_repository')
);
}
// Get fields stored in configuration. If we are explicitly looking for
// deleted fields only, this can be skipped, because they will be
- // retrieved from state below.
+ // retrieved from the deleted fields repository below.
if (empty($conditions['deleted'])) {
if (isset($conditions['entity_type']) && isset($conditions['bundle']) && isset($conditions['field_name'])) {
// Optimize for the most frequent case where we do have a specific ID.
}
}
- // Merge deleted fields (stored in state) if needed.
+ // Merge deleted fields from the deleted fields repository if needed.
if ($include_deleted || !empty($conditions['deleted'])) {
- $deleted_fields = $this->state->get('field.field.deleted') ?: [];
- $deleted_storages = $this->state->get('field.storage.deleted') ?: [];
- foreach ($deleted_fields as $id => $config) {
- // If the field storage itself is deleted, inject it directly in the field.
- if (isset($deleted_storages[$config['field_storage_uuid']])) {
- $config['field_storage'] = $this->entityManager->getStorage('field_storage_config')->create($deleted_storages[$config['field_storage_uuid']]);
+ $deleted_field_definitions = $this->deletedFieldsRepository->getFieldDefinitions();
+ foreach ($deleted_field_definitions as $id => $field_definition) {
+ if ($field_definition instanceof FieldConfigInterface) {
+ $fields[$id] = $field_definition;
}
- $fields[$id] = $this->create($config);
}
}