diff --git a/core/modules/field/field.post_update.php b/core/modules/field/field.post_update.php index 4752854..0341bd3 100644 --- a/core/modules/field/field.post_update.php +++ b/core/modules/field/field.post_update.php @@ -58,7 +58,7 @@ function field_post_update_email_widget_size_setting() { foreach (EntityFormDisplay::loadMultiple() as $entity_form_display) { $changed = FALSE; foreach ($entity_form_display->getComponents() as $name => $options) { - if ($options['type'] == 'email_default') { + if (isset($options['type']) && $options['type'] === 'email_default') { $options['settings']['size'] = '60'; $entity_form_display->setComponent($name, $options); $changed = TRUE; diff --git a/core/modules/field/src/Tests/Update/EmailWidgetSizeSettingUpdateTest.php b/core/modules/field/src/Tests/Update/EmailWidgetSizeSettingUpdateTest.php new file mode 100644 index 0000000..0a4a80a --- /dev/null +++ b/core/modules/field/src/Tests/Update/EmailWidgetSizeSettingUpdateTest.php @@ -0,0 +1,53 @@ +databaseDumpFiles = [ + __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz', + __DIR__ . '/../../../tests/fixtures/update/drupal-8.email_widget_size_setting-2578741.php', + ]; + } + + /** + * Tests field_post_update_email_widget_size_setting(). + * + * @see field_post_update_email_widget_size_setting() + */ + public function testFieldPostUpdateEmailWidgetSizeSetting() { + $configFactory = $this->container->get('config.factory'); + + // Load the 'node.article.default' entity form display and check that the + // widget for 'field_email' does not have a 'size' setting. + /** @var \Drupal\Core\Config\Config */ + $config = $configFactory->get('core.entity_form_display.node.article.default'); + $settings = $config->get('content.field_email_2578741.settings'); + $this->assertTrue(!isset($settings['size']), 'The size setting does not exist prior to running the update functions.'); + + // Run updates. + $this->runUpdates(); + + // Reload the config and check that the 'size' setting has been populated. + $config = $configFactory->get('core.entity_form_display.node.article.default'); + $settings = $config->get('content.field_email_2578741.settings'); + $this->assertEqual($settings['size'], 60, 'The size setting exists and it has the correct default value.'); + } + +} diff --git a/core/modules/field/tests/fixtures/update/drupal-8.email_widget_size_setting-2578741.php b/core/modules/field/tests/fixtures/update/drupal-8.email_widget_size_setting-2578741.php new file mode 100644 index 0000000..ca762bc --- /dev/null +++ b/core/modules/field/tests/fixtures/update/drupal-8.email_widget_size_setting-2578741.php @@ -0,0 +1,37 @@ +select('config', 'c') + ->fields('c') + ->condition('collection', '') + ->condition('name', 'core.entity_form_display.node.article.default') + ->execute() + ->fetchAssoc(); + +$data = unserialize($config['data']); + +// Manually add a new component that simulates an email field using the default +// email widget. +$data['content']['field_email_2578741'] = [ + 'weight' => 20, + 'settings' => [ + 'placeholder' => '', + ], + 'third_party_settings' => [], + 'type' => 'email_default', +]; + +$connection->update('config') + ->fields(['data' => serialize($data)]) + ->condition('collection', '') + ->condition('name', 'core.entity_form_display.node.article.default') + ->execute();