diff --git a/core/modules/field_ui/src/Form/FieldConfigEditForm.php b/core/modules/field_ui/src/Form/FieldConfigEditForm.php index 8dc960f87557fb1b09b734f38a1fc2dda38fcc99..b8a004eaaf483bd2f37ca021347cf02e948f1558 100644 --- a/core/modules/field_ui/src/Form/FieldConfigEditForm.php +++ b/core/modules/field_ui/src/Form/FieldConfigEditForm.php @@ -136,7 +136,7 @@ public function form(array $form, FormStateInterface $form_state) { ]); if (!$has_required) { - $has_default_value = $this->hasAnyElementDefaultValue($element); + $has_default_value = count($this->entity->getDefaultValue($form['#entity'])) > 0; $element['#states'] = [ 'invisible' => [ ':input[name="set_default_value"]' => ['checked' => FALSE], @@ -180,29 +180,6 @@ private function hasAnyRequired(array $element) { return $has_required; } - /** - * A function to check if element contains elements with #default_value. - * - * @param array $element - * An element to check. - * - * @return bool - */ - private function hasAnyElementDefaultValue(array $element) { - $has_default_value = FALSE; - foreach (Element::children($element) as $child) { - if (isset($element[$child]['#default_value']) && $element[$child]['#default_value']) { - $has_default_value = TRUE; - break; - } - if (Element::children($element[$child])) { - return $this->hasAnyElementDefaultValue($element[$child]); - } - } - - return $has_default_value; - } - /** * {@inheritdoc} */ diff --git a/core/modules/field_ui/tests/src/Unit/FieldConfigEditFormTest.php b/core/modules/field_ui/tests/src/Unit/FieldConfigEditFormTest.php index e5b0dbaa3c9cb237760ddf78db07d9ccf6bf5be7..5478d9826fca389388533b2547d548b6447c0929 100644 --- a/core/modules/field_ui/tests/src/Unit/FieldConfigEditFormTest.php +++ b/core/modules/field_ui/tests/src/Unit/FieldConfigEditFormTest.php @@ -71,38 +71,4 @@ public function providerRequired(): \Generator { ]; } - /** - * @covers ::hasAnyElementDefaultValue - * - * @dataProvider providerDefaultValue - */ - public function testHasAnyElementDefaultValueRecursive(array $element, bool $result) { - $reflection = new \ReflectionClass('\Drupal\field_ui\Form\FieldConfigEditForm'); - $method = $reflection->getMethod('hasAnyElementDefaultValue'); - $method->setAccessible(TRUE); - $this->assertEquals($result, $method->invoke($this->fieldConfigEditForm, $element)); - } - - /** - * Provides test cases for detecting default values in a render array. - */ - public function providerDefaultValue(): \Generator { - yield 'includes default value' => [ - [['#default_value' => '🐈']], - TRUE, - ]; - yield 'no default value' => [ - [[]], - FALSE, - ]; - yield 'includes default value deep' => [ - [[[['#default_value' => '🐈']]]], - TRUE, - ]; - yield 'includes default value and no default value' => [ - [['#default_value' => '🐈'], []], - TRUE, - ]; - } - } diff --git a/core/modules/media_library/tests/src/FunctionalJavascript/FieldUiIntegrationTest.php b/core/modules/media_library/tests/src/FunctionalJavascript/FieldUiIntegrationTest.php index fd99d3c2f29183ff60ca2dc3306018796251b01c..c0f5a9cec7e91334761253bea79bcffbc40ba608 100644 --- a/core/modules/media_library/tests/src/FunctionalJavascript/FieldUiIntegrationTest.php +++ b/core/modules/media_library/tests/src/FunctionalJavascript/FieldUiIntegrationTest.php @@ -9,6 +9,11 @@ */ class FieldUiIntegrationTest extends MediaLibraryTestBase { + /** + * {@inheritdoc} + */ + protected $strictConfigSchema = FALSE; + /** * {@inheritdoc} */ @@ -35,6 +40,14 @@ protected function setUp(): void { $this->drupalLogin($user); $this->drupalCreateContentType(['type' => 'article']); $this->drupalCreateContentType(['type' => 'page']); + $this->createMediaItems([ + 'type_one' => [ + 'Horse', + 'Bear', + 'Cat', + 'Dog', + ], + ]); } /** @@ -47,6 +60,8 @@ public function testFieldUiIntegration() { 'access administration pages', 'administer node fields', 'administer node form display', + 'view media', + 'bypass node access', ]); $this->drupalLogin($user); @@ -67,6 +82,21 @@ public function testFieldUiIntegration() { $page->pressButton('Save settings'); $assert_session->pageTextContains('Saved Shatner configuration.'); + $this->drupalGet('/admin/structure/types/manage/article/fields/node.article.field_shatner'); + $assert_session->checkboxNotChecked('set_default_value'); + $page->checkField('set_default_value'); + $this->assertElementExistsAfterWait('css', "#field_shatner-media-library-wrapper-default_value_input") + ->pressButton('Add media'); + $this->waitForText('Add or select media'); + $this->selectMediaItem(0); + $this->pressInsertSelected(); + + $page->pressButton('Save settings'); + $assert_session->pageTextContains('Saved Shatner configuration.'); + + $this->drupalGet('/admin/structure/types/manage/article/fields/node.article.field_shatner'); + $assert_session->checkboxChecked('set_default_value'); + // Create a new instance of an existing field storage and assert that it // automatically uses the media library. $this->drupalGet('/admin/structure/types/manage/page/fields/reuse');