diff --git a/core/modules/comment/src/Plugin/Field/FieldWidget/CommentWidget.php b/core/modules/comment/src/Plugin/Field/FieldWidget/CommentWidget.php index 7ea8eb0682ff63209392dbede68653a2c9e7e102..e7b3898dfb04b44d00282a94a5d38be5f5685c2e 100644 --- a/core/modules/comment/src/Plugin/Field/FieldWidget/CommentWidget.php +++ b/core/modules/comment/src/Plugin/Field/FieldWidget/CommentWidget.php @@ -32,7 +32,6 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen '#title' => $this->t('Comments'), '#title_display' => 'invisible', '#default_value' => $items->status, - '#required' => TRUE, '#options' => [ CommentItemInterface::OPEN => $this->t('Open'), CommentItemInterface::CLOSED => $this->t('Closed'), @@ -48,6 +47,12 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen '#description' => $this->t('Comments are hidden from view.'), ], ]; + + // Setting a value in the default value widget is required. + if ($this->isDefaultValueWidget($form_state)) { + $element['status']['#required'] = TRUE; + } + // If the entity doesn't have any comments, the "hidden" option makes no // sense, so don't even bother presenting it to the user unless this is the // default value widget on the field settings form. diff --git a/core/modules/comment/tests/src/Functional/CommentNonNodeTest.php b/core/modules/comment/tests/src/Functional/CommentNonNodeTest.php index 9b24d387e5b7f852cd2087b2a00cf369a73fe979..07e10871ea580d0e95df4b8cac5b8282b127e030 100644 --- a/core/modules/comment/tests/src/Functional/CommentNonNodeTest.php +++ b/core/modules/comment/tests/src/Functional/CommentNonNodeTest.php @@ -523,4 +523,32 @@ public function testsNonIntegerIdEntities() { $this->assertSession()->elementExists('css', "[name='new_storage_type'][value='boolean']"); } + /** + * Ensures that comment settings are not required. + */ + public function testCommentSettingsNotRequired() { + $limited_user = $this->drupalCreateUser([ + 'administer entity_test fields', + ]); + $this->drupalLogin($limited_user); + $this->drupalGet('entity_test/structure/entity_test/fields/entity_test.entity_test.comment'); + + // Change the comments to be displayed as hidden by default. + $edit = [ + 'default_value_input[comment][0][status]' => CommentItemInterface::HIDDEN, + 'settings[anonymous]' => CommentInterface::ANONYMOUS_MAY_CONTACT, + ]; + $this->submitForm($edit, 'Save settings'); + + // Ensure that the comment settings field is not required and can be saved + // with the default value. + $this->drupalLogin($this->adminUser); + $this->drupalGet('/entity_test/add'); + $edit = [ + "name[0][value]" => 'Comment test', + ]; + $this->submitForm($edit, 'Save'); + $this->assertSession()->pageTextContains('entity_test 2 has been created.'); + } + }