diff --git a/core/modules/text/src/Plugin/Field/FieldType/TextItemBase.php b/core/modules/text/src/Plugin/Field/FieldType/TextItemBase.php index 3fdd385d1e..55ad60163d 100644 --- a/core/modules/text/src/Plugin/Field/FieldType/TextItemBase.php +++ b/core/modules/text/src/Plugin/Field/FieldType/TextItemBase.php @@ -21,8 +21,11 @@ public static function propertyDefinitions(FieldStorageDefinitionInterface $fiel ->setLabel(t('Text')) ->setRequired(TRUE); - $properties['format'] = DataDefinition::create('filter_format') - ->setLabel(t('Text format')); + $moduleHandler = \Drupal::service('module_handler'); + if ($moduleHandler->moduleExists('filter')) { + $properties['format'] = DataDefinition::create('filter_format') + ->setLabel(t('Text format')); + } $properties['processed'] = DataDefinition::create('string') ->setLabel(t('Processed text')) @@ -49,7 +52,12 @@ public function applyDefaultValue($notify = TRUE) { */ public function isEmpty() { $value = $this->get('value')->getValue(); - return $value === NULL || $value === ''; + $format = NULL; + $properties = $this->getProperties(); + if (isset($properties['format'])) { + $format = $this->get('format')->getValue(); + } + return ($value === NULL || $value === '') && ($format === NULL || $format === ''); } /** diff --git a/core/modules/text/tests/src/Functional/TextFieldTest.php b/core/modules/text/tests/src/Functional/TextFieldTest.php index 00d687fe61..33694a12d9 100644 --- a/core/modules/text/tests/src/Functional/TextFieldTest.php +++ b/core/modules/text/tests/src/Functional/TextFieldTest.php @@ -21,6 +21,13 @@ class TextFieldTest extends StringFieldTest { getTestFiles as drupalGetTestFiles; } + /** + * Modules to enable for this test. + * + * @var array + */ + protected static $modules = ['field_ui', 'filter', 'filter_test', 'node']; + /** * A user with relevant administrative privileges. * @@ -36,7 +43,9 @@ class TextFieldTest extends StringFieldTest { protected function setUp(): void { parent::setUp(); - $this->adminUser = $this->drupalCreateUser(['administer filters']); + $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']); + $admin_user = $this->drupalCreateUser([], 'AdminTest', TRUE); + $this->drupalLogin($admin_user); } // Test fields. @@ -138,6 +147,50 @@ public function testRequiredLongTextWithFileUpload() { $this->assertSession()->pageTextContains('Long text'); } + /** + * Test default value. + */ + public function testDefaultValue() { + $field_name = 'text_long'; + $field_storage = FieldStorageConfig::create([ + 'field_name' => $field_name, + 'entity_type' => 'node', + 'type' => 'text_with_summary', + ]); + $field_storage->save(); + + $label = $this->randomMachineName() . '_label'; + $field = FieldConfig::create([ + 'field_storage' => $field_storage, + 'bundle' => 'page', + 'label' => $label, + 'required' => TRUE, + ]); + $field->save(); + + /** @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface $display_repository */ + $display_repository = \Drupal::service('entity_display.repository'); + + $display_repository->getFormDisplay('node', 'page') + ->setComponent($field_name) + ->save(); + + $admin_path = 'admin/structure/types/manage/page/fields/' . $field->id(); + $element_format = "default_value_input[{$field_name}][0][format]"; + $edit = [ + $element_format => 'full_html', + ]; + $this->drupalGet($admin_path); + $this->assertSession()->statusCodeEquals(200); + $this->submitForm($edit, 'Save settings'); + + $this->assertSession()->pageTextContains("Saved $label configuration"); + + // Check that the default value shows up in the form + $this->drupalGet($admin_path); + $this->assertSession()->fieldValueEquals($element_format, 'full_html'); + } + /** * Tests widgets. */