diff --git a/core/lib/Drupal/Core/Field/DeletedFieldsRepository.php b/core/lib/Drupal/Core/Field/DeletedFieldsRepository.php index bdc2324..10070d2 100644 --- a/core/lib/Drupal/Core/Field/DeletedFieldsRepository.php +++ b/core/lib/Drupal/Core/Field/DeletedFieldsRepository.php @@ -29,7 +29,7 @@ public function __construct(StateInterface $state) { /** * {@inheritdoc} */ - public function getFieldDefinitions($field_storage_unique_id = NULL) { + public function getFieldDefinitions($field_storage_unique_id = NULL, $only_config_fields = FALSE) { $deleted_field_definitions = $this->state->get('field.field.deleted', []); $deleted_storage_definitions = $this->getFieldStorageDefinitions(); @@ -57,14 +57,28 @@ public function getFieldDefinitions($field_storage_unique_id = NULL) { }); } + if ($only_config_fields) { + $deleted_field_definitions = array_filter($deleted_field_definitions, function (FieldDefinitionInterface $field_definition) { + return !$field_definition instanceof BaseFieldDefinition; + }); + } + return $deleted_field_definitions; } /** * {@inheritdoc} */ - public function getFieldStorageDefinitions() { - return $this->state->get('field.storage.deleted', []); + public function getFieldStorageDefinitions($only_config_field_storages = FALSE) { + $deleted_field_storage_definitions = $this->state->get('field.storage.deleted', []); + + if ($only_config_field_storages) { + $deleted_field_storage_definitions = array_filter($deleted_field_storage_definitions, function (FieldStorageDefinitionInterface $field_storage_definition) { + return !$field_storage_definition instanceof BaseFieldDefinition; + }); + } + + return $deleted_field_storage_definitions; } /** @@ -74,7 +88,7 @@ public function addFieldDefinition(FieldDefinitionInterface $field_definition) { $deleted_field_definitions = $this->state->get('field.field.deleted', []); // Add a helper property that allows us to filter by the field storage - // unique identifier in getFieldsByFieldStorageId(). + // unique identifier in getFieldDefinitions(). $field_definition->field_storage_unique_id = $field_definition->getFieldStorageDefinition()->getUniqueStorageIdentifier(); $deleted_field_definitions[$field_definition->getUniqueIdentifier()] = $field_definition; diff --git a/core/lib/Drupal/Core/Field/DeletedFieldsRepositoryInterface.php b/core/lib/Drupal/Core/Field/DeletedFieldsRepositoryInterface.php index eabbd10..4e5c90b 100644 --- a/core/lib/Drupal/Core/Field/DeletedFieldsRepositoryInterface.php +++ b/core/lib/Drupal/Core/Field/DeletedFieldsRepositoryInterface.php @@ -13,20 +13,27 @@ * @param string $field_storage_unique_id * (optional) A unique ID of field storage definition for filtering the * deleted fields. Defaults to NULL. + * @param bool $only_config_fields + * (optional) Whether to return only configurable field definitions. + * Defaults to FALSE. * * @return \Drupal\Core\Field\FieldDefinitionInterface[] * An array of field definition objects, keyed by their unique identifier. */ - public function getFieldDefinitions($field_storage_unique_id = NULL); + public function getFieldDefinitions($field_storage_unique_id = NULL, $only_config_fields = FALSE); /** * Returns a list of deleted field storage definitions. * + * @param bool $only_config_field_storages + * (optional) Whether to return only configurable field storage definitions. + * Defaults to FALSE. + * * @return \Drupal\Core\Field\FieldStorageDefinitionInterface[] * An array of field storage definition objects, keyed by their unique * storage identifier. */ - public function getFieldStorageDefinitions(); + public function getFieldStorageDefinitions($only_config_field_storages = FALSE); /** * Adds a field definition object to the deleted list. diff --git a/core/modules/field/src/ConfigImporterFieldPurger.php b/core/modules/field/src/ConfigImporterFieldPurger.php index a69e629..dc5a45b 100644 --- a/core/modules/field/src/ConfigImporterFieldPurger.php +++ b/core/modules/field/src/ConfigImporterFieldPurger.php @@ -39,7 +39,7 @@ public static function process(array &$context, ConfigImporter $config_importer) $field_storage->delete(); } } - field_purge_batch($context['sandbox']['field']['purge_batch_size'], $field_storage->uuid()); + field_purge_batch($context['sandbox']['field']['purge_batch_size'], $field_storage->getUniqueStorageIdentifier()); $context['sandbox']['field']['current_progress']++; $fields_to_delete_count = count(static::getFieldStoragesToPurge($context['sandbox']['field']['extensions'], $config_importer->getUnprocessedConfiguration('delete'))); if ($fields_to_delete_count == 0) { @@ -134,7 +134,7 @@ public static function getFieldStoragesToPurge(array $extensions, array $deletes // Gather deleted fields from modules that are being uninstalled. /** @var \Drupal\field\FieldStorageConfigInterface[] $deleted_storage_definitions */ - $deleted_storage_definitions = \Drupal::service('field.deleted_fields_repository')->getFieldStorageDefinitions(); + $deleted_storage_definitions = \Drupal::service('field.deleted_fields_repository')->getFieldStorageDefinitions(TRUE); foreach ($deleted_storage_definitions as $field_storage) { if (!in_array($field_storage->getTypeProvider(), $providers)) { $storages_to_delete[$field_storage->id()] = $field_storage; diff --git a/core/modules/field/src/FieldConfigStorage.php b/core/modules/field/src/FieldConfigStorage.php index ea3c8d9..8fe8c3b 100644 --- a/core/modules/field/src/FieldConfigStorage.php +++ b/core/modules/field/src/FieldConfigStorage.php @@ -119,7 +119,7 @@ public function loadByProperties(array $conditions = []) { // Merge deleted fields from the deleted fields repository if needed. if ($include_deleted || !empty($conditions['deleted'])) { - $deleted_fields = $this->deletedFieldsRepository->getFieldDefinitions(); + $deleted_fields = $this->deletedFieldsRepository->getFieldDefinitions(NULL, TRUE); foreach ($deleted_fields as $id => $field) { $fields[$id] = $field; } diff --git a/core/modules/field/src/FieldStorageConfigStorage.php b/core/modules/field/src/FieldStorageConfigStorage.php index fd7a853..b4ef22d 100644 --- a/core/modules/field/src/FieldStorageConfigStorage.php +++ b/core/modules/field/src/FieldStorageConfigStorage.php @@ -120,7 +120,7 @@ public function loadByProperties(array $conditions = []) { // Merge deleted field storage definitions from the deleted fields // repository if needed. if ($include_deleted || !empty($conditions['deleted'])) { - $deleted_storage_definitions = $this->deletedFieldsRepository->getFieldStorageDefinitions(); + $deleted_storage_definitions = $this->deletedFieldsRepository->getFieldStorageDefinitions(TRUE); foreach ($deleted_storage_definitions as $id => $storage) { $storages[$id] = $storage; }