diff -u b/core/modules/field/field.module b/core/modules/field/field.module --- b/core/modules/field/field.module +++ b/core/modules/field/field.module @@ -417,3 +417,3 @@ $display_rebuilder = \Drupal::service('field.entity_display_rebuilder'); - $display_rebuilder->rebuildAllEntityTypeDisplays(); + $display_rebuilder->rebuildAllEntityTypeDisplays(TRUE); } diff -u b/core/modules/field/src/EntityDisplayRebuilder.php b/core/modules/field/src/EntityDisplayRebuilder.php --- b/core/modules/field/src/EntityDisplayRebuilder.php +++ b/core/modules/field/src/EntityDisplayRebuilder.php @@ -2,11 +2,10 @@ namespace Drupal\field; +use Drupal\Core\Entity\Entity\EntityFormDisplay; +use Drupal\Core\Entity\Entity\EntityViewDisplay; use Drupal\Core\Entity\EntityDisplayRepositoryInterface; -use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; -use Drupal\Core\Entity\Entity\EntityViewDisplay; -use Drupal\Core\Entity\Entity\EntityFormDisplay; /** * Rebuilds displays. @@ -42,13 +41,16 @@ /** * Rebuild displays for all Entity Types. + * + * @param bool $include_default_displays + * Add 'default' displays. Defaults to FALSE. */ - public function rebuildAllEntityTypeDisplays() { + public function rebuildAllEntityTypeDisplays($include_default_displays = FALSE) { // Loop through all entity types. $entity_types = $this->entityTypeManager->getDefinitions(); foreach ($entity_types as $entity_type_id => $entity_type_definition) { - $this->rebuildEntityTypeDisplays($entity_type_id); + $this->rebuildEntityTypeDisplays($entity_type_id, $include_default_displays); } } @@ -57,19 +59,24 @@ * Rebuild displays for single Entity Type. * * @param string $entity_type_id - * The entity type machine name. + * The entity type machine name. + * @param bool $include_default_displays + * Add 'default' displays. Defaults to FALSE. */ - public function rebuildEntityTypeDisplays($entity_type_id) { + public function rebuildEntityTypeDisplays($entity_type_id, $include_default_displays = FALSE) { // Loop through all bundles. - $entity_bundles = entity_get_bundles($entity_type_id); // @todo: inject service here. + $entity_bundles = entity_get_bundles($entity_type_id); foreach ($entity_bundles as $bundle => $bundle_definition) { // Get the displays. $view_modes = $this->entityDisplayRepository->getViewModes($entity_type_id); $form_modes = $this->entityDisplayRepository->getFormModes($entity_type_id); - // Explicitly add the default displays. - $view_modes['default'] = ['status' => TRUE]; - $form_modes['default'] = ['status' => TRUE]; + + // Explicitly add default displays. + if ($include_default_displays) { + $view_modes['default'] = []; + $form_modes['default'] = []; + } // Update view modes displays. foreach ($view_modes as $view_mode_id => $view_mode) { @@ -79,8 +86,8 @@ } // Update form modes displays. foreach ($form_modes as $form_mode_id => $form_mode) { - if ($form_display = EntityFormDisplay::load($entity_type_id . '.' . $bundle . '.' . $form_mode_id)) { - $form_display->save(); + if ($display = EntityFormDisplay::load($entity_type_id . '.' . $bundle . '.' . $form_mode_id)) { + $display->save(); } } diff -u b/core/modules/language/tests/src/Kernel/LanguageDisplayConfigurationAfterUninstallTest.php b/core/modules/language/tests/src/Kernel/LanguageDisplayConfigurationAfterUninstallTest.php --- b/core/modules/language/tests/src/Kernel/LanguageDisplayConfigurationAfterUninstallTest.php +++ b/core/modules/language/tests/src/Kernel/LanguageDisplayConfigurationAfterUninstallTest.php @@ -2,6 +2,8 @@ namespace Drupal\Tests\language\Kernel; +use Drupal\Core\Entity\Entity\EntityFormDisplay; +use Drupal\Core\Entity\Entity\EntityFormMode; use Drupal\KernelTests\KernelTestBase; use Drupal\Core\Entity\Entity\EntityViewDisplay; use Drupal\Core\Entity\Entity\EntityViewMode; @@ -33,9 +35,27 @@ // For uninstall to work. $this->installSchema('user', ['users_data']); - // Create default display. + // Create 'default' view-display. + $display = EntityViewDisplay::create([ + 'targetEntityType' => 'entity_test', + 'bundle' => 'entity_test', + 'mode' => 'default', + 'status' => TRUE, + ]); + $display->save(); + + // Create 'default' form-display. + $display = EntityFormDisplay::create([ + 'targetEntityType' => 'entity_test', + 'bundle' => 'entity_test', + 'mode' => 'default', + 'status' => TRUE, + ]); + $display->save(); + + // Create a view-mode 'manual', create view-display that uses it. EntityViewMode::create([ - 'id' => 'entity_test.default', + 'id' => 'entity_test.manual', 'targetEntityType' => 'entity_test', 'status' => TRUE, 'enabled' => TRUE, @@ -43,7 +63,22 @@ $display = EntityViewDisplay::create([ 'targetEntityType' => 'entity_test', 'bundle' => 'entity_test', - 'mode' => 'default', + 'mode' => 'manual', + 'status' => TRUE, + ]); + $display->save(); + + // Create a new form-mode 'manual', create form-display that uses it. + EntityFormMode::create([ + 'id' => 'entity_test.manual', + 'targetEntityType' => 'entity_test', + 'status' => TRUE, + 'enabled' => TRUE, + ])->save(); + $display = EntityFormDisplay::create([ + 'targetEntityType' => 'entity_test', + 'bundle' => 'entity_test', + 'mode' => 'manual', 'status' => TRUE, ]); $display->save(); @@ -51,19 +86,28 @@ } /** - * Tests the widget with the locked languages. + * Tests display configuration after uninstalling Language module. */ public function testConfigAfterUninstall() { - $default_config_name = 'core.entity_view_display.entity_test.entity_test.default'; + $default_view_display = 'core.entity_view_display.entity_test.entity_test.default'; + $default_form_display = 'core.entity_view_display.entity_test.entity_test.default'; + $manual_view_display = 'core.entity_view_display.entity_test.entity_test.manual'; + $manual_form_display = 'core.entity_view_display.entity_test.entity_test.manual'; // 1. Validate that "langcode" key is there. - $this->assertArrayHasKey('langcode', \Drupal::config($default_config_name)->get('hidden')); + $this->assertArrayHasKey('langcode', \Drupal::config($default_view_display)->get('hidden')); + $this->assertArrayHasKey('langcode', \Drupal::config($default_form_display)->get('hidden')); + $this->assertArrayHasKey('langcode', \Drupal::config($manual_view_display)->get('hidden')); + $this->assertArrayHasKey('langcode', \Drupal::config($manual_form_display)->get('hidden')); // 2. Uninstall language module. \Drupal::service('module_installer')->uninstall(['language']); // 3. Test that "langcode" key is removed from field config. - $this->assertArrayNotHasKey('langcode', \Drupal::config($default_config_name)->get('hidden')); + $this->assertArrayNotHasKey('langcode', \Drupal::config($default_view_display)->get('hidden')); + $this->assertArrayNotHasKey('langcode', \Drupal::config($default_form_display)->get('hidden')); + $this->assertArrayNotHasKey('langcode', \Drupal::config($manual_view_display)->get('hidden')); + $this->assertArrayNotHasKey('langcode', \Drupal::config($manual_form_display)->get('hidden')); }