diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module index 0756a53..3c8aa1f 100644 --- a/core/modules/comment/comment.module +++ b/core/modules/comment/comment.module @@ -179,6 +179,12 @@ function comment_field_storage_config_insert(FieldStorageConfigInterface $field_ if (!_comment_entity_uses_integer_id($entity_type_id)) { throw new \UnexpectedValueException('You cannot attach a comment field to an entity with a non-integer ID field'); } + if ($entity_type_id === 'user') { + // Make sure that we don't enable the comment field formatter by default + // on the compact view mode, as this can lead to recursion. + $display = entity_get_display('user', 'user', 'compact'); + $display->removeComponent($field_storage->getName())->save(); + } } } diff --git a/core/modules/comment/tests/modules/comment_user_picture_test/comment_user_picture_test.info.yml b/core/modules/comment/tests/modules/comment_user_picture_test/comment_user_picture_test.info.yml new file mode 100644 index 0000000..0582790 --- /dev/null +++ b/core/modules/comment/tests/modules/comment_user_picture_test/comment_user_picture_test.info.yml @@ -0,0 +1,11 @@ +name: 'Comment test user picture' +type: module +description: 'Provides default config for testing user pictures in comments.' +package: Testing +version: VERSION +core: 8.x +dependencies: + - comment + - views + - image + - user diff --git a/core/modules/comment/tests/modules/comment_user_picture_test/config/install/comment.type.comment.yml b/core/modules/comment/tests/modules/comment_user_picture_test/config/install/comment.type.comment.yml new file mode 100644 index 0000000..ed375e4 --- /dev/null +++ b/core/modules/comment/tests/modules/comment_user_picture_test/config/install/comment.type.comment.yml @@ -0,0 +1,6 @@ +id: comment +label: 'Default comments' +description: 'Allows commenting on users' +target_entity_type_id: user +status: true +langcode: en diff --git a/core/modules/comment/tests/modules/comment_user_picture_test/config/install/core.entity_form_display.user.user.default.yml b/core/modules/comment/tests/modules/comment_user_picture_test/config/install/core.entity_form_display.user.user.default.yml new file mode 100644 index 0000000..d93cb2c --- /dev/null +++ b/core/modules/comment/tests/modules/comment_user_picture_test/config/install/core.entity_form_display.user.user.default.yml @@ -0,0 +1,17 @@ +id: user.user.default +targetEntityType: user +bundle: user +mode: default +content: + user_picture: + type: image_image + settings: + progress_indicator: throbber + preview_image_style: thumbnail + third_party_settings: { } + weight: -1 +status: true +dependencies: + module: + - image + - user diff --git a/core/modules/comment/tests/modules/comment_user_picture_test/config/install/field.field.user.user.user_picture.yml b/core/modules/comment/tests/modules/comment_user_picture_test/config/install/field.field.user.user.user_picture.yml new file mode 100644 index 0000000..e1d8b64 --- /dev/null +++ b/core/modules/comment/tests/modules/comment_user_picture_test/config/install/field.field.user.user.user_picture.yml @@ -0,0 +1,31 @@ +id: user.user.user_picture +status: true +langcode: en +entity_type: user +bundle: user +field_name: user_picture +label: Picture +description: 'Your virtual face or picture.' +required: false +default_value: { } +default_value_callback: '' +settings: + file_extensions: 'png gif jpg jpeg' + file_directory: pictures + max_filesize: '30 KB' + alt_field: false + title_field: false + max_resolution: 85x85 + min_resolution: '' + default_image: + uuid: null + alt: '' + title: '' + width: null + height: null + alt_field_required: false + title_field_required: false +field_type: image +dependencies: + config: + - field.storage.user.user_picture diff --git a/core/modules/comment/tests/modules/comment_user_picture_test/config/install/field.storage.user.user_picture.yml b/core/modules/comment/tests/modules/comment_user_picture_test/config/install/field.storage.user.user_picture.yml new file mode 100644 index 0000000..b7e3141 --- /dev/null +++ b/core/modules/comment/tests/modules/comment_user_picture_test/config/install/field.storage.user.user_picture.yml @@ -0,0 +1,25 @@ +id: user.user_picture +status: true +langcode: en +field_name: user_picture +entity_type: user +type: image +settings: + uri_scheme: public + default_image: + uuid: null + alt: '' + title: '' + width: null + height: null +module: image +locked: false +cardinality: 1 +indexes: + target_id: + - target_id +dependencies: + module: + - image + - user +persist_with_no_fields: false diff --git a/core/modules/comment/tests/src/Functional/CommentUserTest.php b/core/modules/comment/tests/src/Functional/CommentUserTest.php new file mode 100644 index 0000000..216ebdf --- /dev/null +++ b/core/modules/comment/tests/src/Functional/CommentUserTest.php @@ -0,0 +1,108 @@ +container->get('theme_handler')->install(array('bartik', 'seven')); + $this->container->get('config.factory')->getEditable('system.theme') + ->set('default', 'bartik') + ->set('admin', 'seven') + ->save(); + + // Create test user. + $this->adminUser = $this->drupalCreateUser([ + 'administer comments', + 'skip comment approval', + 'post comments', + 'access comments', + 'administer user fields', + 'access user profiles', + ]); + + $this->drupalLogin($this->adminUser); + + $initial_edit = array( + 'new_storage_type' => 'comment', + 'label' => 'Comments', + 'field_name' => 'comments', + ); + + $bundle_path = 'admin/config/people/accounts/fields/add-field'; + + // First step: 'Add field' page. + $this->drupalGet($bundle_path); + $this->submitForm($initial_edit, t('Save and continue')); + $this->assertSession()->responseContains(t('These settings apply to the %label field everywhere it is used.', array('%label' => 'Comments'))); + + // Second step: 'Storage settings' form. + $this->submitForm([ + 'settings[comment_type]' => 'comment', + ], t('Save field settings')); + $this->assertSession()->responseContains(t('Updated field %label field settings.', array('%label' => 'Comments'))); + + // Third step: 'Field settings' form. + $this->submitForm([], t('Save settings')); + $this->assertSession()->responseContains(t('Saved %label configuration.', array('%label' => 'Comments'))); + + // Check that the field appears in the overview form. + $this->assertSession()->pageTextContains('Comment'); + } + + /** + * Tests anonymous commenting on a user. + */ + public function testUserCommenting() { + // Navigate to user page. + $this->drupalGet('user/' . $this->adminUser->id()); + // Comment on the user. + $edit = []; + $edit['subject[0][value]'] = 'I can comment on a user?'; + $this->submitForm($edit, t('Save')); + $this->assertSession()->addressEquals('/user/' . $this->adminUser->id() . '#comment-1'); + $this->assertSession()->pageTextContains('Your comment has been posted'); + $this->assertSession()->statusCodeEquals(200); + $this->assertSession()->pageTextContains('I can comment on a user'); + } + +}