diff --git a/core/modules/field/lib/Drupal/field/Entity/FieldInstance.php b/core/modules/field/lib/Drupal/field/Entity/FieldInstance.php index cc9e1b6..1309a02 100644 --- a/core/modules/field/lib/Drupal/field/Entity/FieldInstance.php +++ b/core/modules/field/lib/Drupal/field/Entity/FieldInstance.php @@ -420,7 +420,7 @@ public static function postDelete(EntityStorageControllerInterface $storage_cont $fields_to_delete = array(); foreach ($instances as $instance) { $field = $instance->getField(); - if (!$instance->deleted && empty($instance->noFieldDelete) && count($field->getBundles()) == 0) { + if (!$instance->deleted && empty($instance->noFieldDelete) && !$instance->isUninstalling() && count($field->getBundles()) == 0) { // Key by field UUID to avoid deleting the same field twice. $fields_to_delete[$instance->field_uuid] = $field; } diff --git a/core/modules/field/lib/Drupal/field/Tests/reEnableModuleFieldTest.php b/core/modules/field/lib/Drupal/field/Tests/reEnableModuleFieldTest.php index 87e2347..1367c9d 100644 --- a/core/modules/field/lib/Drupal/field/Tests/reEnableModuleFieldTest.php +++ b/core/modules/field/lib/Drupal/field/Tests/reEnableModuleFieldTest.php @@ -91,19 +91,22 @@ function testReEnabledField() { $this->drupalPostForm(NULL, $edit, t('Save')); $this->assertRaw(''); - // Test that the module can't be uninstalled from the UI while there is data - // for it's fields. + // Test that the module can be uninstalled from the UI while there is data + // for the telephone field. After uninstalling, the field and its table + // will be gone, because $admin_user = $this->drupalCreateUser(array('access administration pages', 'administer modules')); $this->drupalLogin($admin_user); - $this->drupalGet('admin/modules'); - $this->assertText('Fields type(s) in use'); - $field->delete(); - $this->drupalGet('admin/modules'); - $this->assertText('Fields pending deletion'); - $this->cronRun(); - $this->assertNoText('Fields type(s) in use'); - $this->assertNoText('Fields pending deletion'); + $this->drupalGet('admin/modules/uninstall'); + $checkbox = $this->xpath('//input[@type="checkbox" and @name="uninstall[telephone]"]'); + $this->assert(count($checkbox) == 1, 'The telephone module can be uninstalled.'); + $edit = array('uninstall[telephone]' => 'telephone'); + $this->drupalPostForm('admin/modules/uninstall', $edit, t('Uninstall')); + $this->assertRaw('node.field_telephone'); + $this->drupalPostForm(NULL, NULL, t('Uninstall')); + $this->assertText(t('The selected modules have been uninstalled.'), 'Modules status has been updated.'); + $fields_deleted = \Drupal::state()->get('field.field.deleted'); + $this->assertTrue(isset($fields_deleted[$field->uuid()])); } }