diff --git a/core/modules/field/field.crud.inc b/core/modules/field/field.crud.inc index de8725c..780854a 100644 --- a/core/modules/field/field.crud.inc +++ b/core/modules/field/field.crud.inc @@ -6,6 +6,7 @@ */ use Drupal\Core\Entity\EntityInterface; +use Drupal\field\Plugin\Core\Entity\Field; use Drupal\field\Plugin\Core\Entity\FieldInstance; use Drupal\field\FieldException; @@ -148,6 +149,9 @@ function field_read_fields($params = array(), $include_additional = array()) { $include_deleted = (isset($include_additional['include_deleted']) && $include_additional['include_deleted']) || (isset($params['deleted']) && $params['deleted']); if ($include_deleted) { $deleted_fields = state()->get('field.field.deleted') ?: array(); + foreach ($deleted_fields as $id => $config) { + $deleted_fields[$id] = new Field($config, 'field_entity'); + } } // Add active and storage active parameters. @@ -331,6 +335,9 @@ function field_read_instances($params = array(), $include_additional = array()) if ($include_deleted) { $deleted_instances = state()->get('field.instance.deleted') ?: array(); + foreach ($deleted_instances as $id => $instance) { + $deleted_instances[$id] = new FieldInstance($instance, 'field_instance'); + } } // Get configuration instances. @@ -349,7 +356,7 @@ function field_read_instances($params = array(), $include_additional = array()) $field = entity_load('field_entity', $instance['field_name']); if ($include_deleted) { if (empty($field) && isset($deleted_fields[$instance['field_id']])) { - $field = $deleted_fields[$instance['field_id']]; + $field = new Field($deleted_fields[$instance['field_id']], 'field_entity'); } } if (empty($field)) { @@ -553,6 +560,7 @@ function field_purge_batch($batch_size) { // Retrieve all deleted fields. Any that have no instances can be purged. $deleted_fields = state()->get('field.field.deleted') ?: array(); foreach ($deleted_fields as $field) { + $field = new Field($field, 'field_entity'); $instances = field_read_instances(array('field_id' => $field['uuid']), array('include_deleted' => 1)); if (empty($instances)) { field_purge_field($field); diff --git a/core/modules/field/field.module b/core/modules/field/field.module index 0f187d7..c8f7c75 100644 --- a/core/modules/field/field.module +++ b/core/modules/field/field.module @@ -588,7 +588,9 @@ function field_sync_field_status() { $deleted_fields = state()->get('field.field.deleted') ?: array(); foreach ($changed as $id => $field) { if ($field['deleted']) { - $deleted_fields[$id] = $field; + $raw_config = config('field.field.' . $field['id'])->get(); + $raw_config['deleted'] = TRUE; + $deleted_fields[$id] = $raw_config; } else { config('field.field.' . $field['field_name']) diff --git a/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/Field.php b/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/Field.php index 7050d3d..23068e6 100644 --- a/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/Field.php +++ b/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/Field.php @@ -339,9 +339,9 @@ public function delete() { // This makes sure a new field can be created immediately with the same // name. $deleted_fields = state()->get('field.field.deleted') ?: array(); - $this->deleted = TRUE; - // @todo we should save the raw CMI data, not the entity. - $deleted_fields[$this->uuid] = $this; + $raw_config = config('field.field.' . $this->id)->get(); + $raw_config['deleted'] = TRUE; + $deleted_fields[$this->uuid] = $raw_config; state()->set('field.field.deleted', $deleted_fields); parent::delete(); diff --git a/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/FieldInstance.php b/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/FieldInstance.php index 9cf30c0..9bc2cca 100644 --- a/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/FieldInstance.php +++ b/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/FieldInstance.php @@ -293,8 +293,9 @@ public function delete($field_cleanup = TRUE) { // in the key_value table so we can use it later during // field_purge_batch(). $deleted_instances = state()->get('field.instance.deleted') ?: array(); - $this->deleted = TRUE; - $deleted_instances[$this->uuid] = $this; + $raw_config = config('field.instance.' . $this->id)->get(); + $raw_config['deleted'] = TRUE; + $deleted_instances[$this->uuid] = $raw_config; state()->set('field.instance.deleted', $deleted_instances); parent::delete();