diff --git a/core/modules/comment/comment.install b/core/modules/comment/comment.install index 04e1291..780b4d2 100644 --- a/core/modules/comment/comment.install +++ b/core/modules/comment/comment.install @@ -10,7 +10,6 @@ */ function comment_uninstall() { // Remove variables. - variable_del('comment_block_count'); $node_types = array_keys(node_type_get_types()); Drupal::entityManager()->addNamespaces(new ArrayIterator(array( 'Drupal\comment' => DRUPAL_ROOT . '/core/modules/comment/lib', @@ -392,6 +391,13 @@ function comment_update_8004() { } /** + * Remove the comment_block_count variable. + */ +function comment_update_8005() { + variable_del('comment_block_count'); +} + +/** * @} End of "addtogroup updates-7.x-to-8.x". * The next series of updates should start at 9000. */ diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module index 973bccb..f89b0d1 100644 --- a/core/modules/comment/comment.module +++ b/core/modules/comment/comment.module @@ -158,9 +158,6 @@ function comment_field_extra_fields() { */ function comment_theme() { return array( - 'comment_block' => array( - 'variables' => array('number' => NULL), - ), 'comment_preview' => array( 'variables' => array('comment' => NULL), ), @@ -483,30 +480,6 @@ function comment_new_page_count($num_comments, $new_replies, EntityInterface $no } /** - * Returns HTML for a list of recent comments. - * - * @ingroup themeable - */ -function theme_comment_block($variables) { - $items = array(); - $number = $variables['number']; - foreach (comment_get_recent($number) as $comment) { - $items[] = l($comment->subject, 'comment/' . $comment->cid, array('fragment' => 'comment-' . $comment->cid)) . ' ' . t('@time ago', array('@time' => format_interval(REQUEST_TIME - $comment->changed))) . ''; - } - - if ($items) { - $item_list = array( - '#theme' => 'item_list', - '#items' => $items, - ); - return drupal_render($item_list); - } - else { - return t('No comments available.'); - } -} - -/** * Implements hook_node_view(). */ function comment_node_view(EntityInterface $node, EntityDisplay $display, $view_mode) { diff --git a/core/modules/comment/config/views.view.comments_recent.yml b/core/modules/comment/config/views.view.comments_recent.yml new file mode 100644 index 0000000..0fbd95c --- /dev/null +++ b/core/modules/comment/config/views.view.comments_recent.yml @@ -0,0 +1,216 @@ +base_field: cid +base_table: comment +core: 8.x +description: '' +status: '1' +display: + block_1: + display_plugin: block + id: block_1 + display_title: Block + position: '' + display_options: + block_description: 'Recent comments' + default: + display_plugin: default + id: default + display_title: Master + position: '' + display_options: + access: + type: perm + options: + perm: 'access comments' + cache: + type: none + query: + type: views_query + exposed_form: + type: basic + pager: + type: some + options: + items_per_page: '10' + offset: '0' + style: + type: html_list + options: + grouping: { } + row_class: '' + default_row_class: '1' + row_class_special: '1' + type: ul + wrapper_class: item-list + class: '' + row: + type: fields + options: + default_field_elements: '1' + inline: + subject: subject + changed: changed + separator: ' ' + hide_empty: '0' + relationships: + nid: + id: nid + table: comment + field: nid + required: '1' + plugin_id: standard + fields: + subject: + id: subject + table: comment + field: subject + relationship: none + plugin_id: comment + group_type: group + admin_label: '' + label: '' + exclude: '0' + alter: + alter_text: '0' + text: '' + make_link: '0' + path: '' + absolute: '0' + external: '0' + replace_spaces: '0' + path_case: none + trim_whitespace: '0' + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: '0' + max_length: '' + word_boundary: '0' + ellipsis: '0' + more_link: '0' + more_link_text: '' + more_link_path: '' + strip_tags: '0' + trim: '0' + preserve_tags: '' + html: '0' + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: '0' + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: '1' + empty: '' + hide_empty: '0' + empty_zero: '0' + hide_alter_empty: '1' + link_to_comment: '1' + link_to_node: '0' + changed: + id: changed + table: comment + field: changed + relationship: none + plugin_id: date + group_type: group + admin_label: '' + label: '' + exclude: '0' + alter: + alter_text: '0' + text: '' + make_link: '0' + path: '' + absolute: '0' + external: '0' + replace_spaces: '0' + path_case: none + trim_whitespace: '0' + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: '0' + max_length: '' + word_boundary: '1' + ellipsis: '1' + more_link: '0' + more_link_text: '' + more_link_path: '' + strip_tags: '0' + trim: '0' + preserve_tags: '' + html: '0' + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: '0' + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: '1' + empty: '' + hide_empty: '0' + empty_zero: '0' + hide_alter_empty: '1' + date_format: 'time ago' + custom_date_format: '' + timezone: '' + filters: + status: + value: '1' + table: comment + field: status + id: status + plugin_id: boolean + expose: + operator: '0' + group: '1' + status_node: + value: '1' + table: node_field_data + field: status + relationship: nid + id: status_node + plugin_id: boolean + expose: + operator: '0' + group: '1' + sorts: + cid: + id: cid + table: comment + field: cid + relationship: none + group_type: group + admin_label: '' + order: DESC + exposed: '0' + expose: + label: '' + plugin_id: standard + title: 'Recent comments' + empty: + area_text_custom: + id: area_text_custom + table: views + field: area_text_custom + relationship: none + group_type: group + admin_label: '' + label: '' + empty: '1' + content: 'No comments available.' + tokenize: '0' + plugin_id: text_custom +label: 'Recent comments' +module: views +id: comments_recent +tag: 'default' +langcode: en diff --git a/core/modules/comment/lib/Drupal/comment/Plugin/Block/RecentCommentsBlock.php b/core/modules/comment/lib/Drupal/comment/Plugin/Block/RecentCommentsBlock.php deleted file mode 100644 index d133434..0000000 --- a/core/modules/comment/lib/Drupal/comment/Plugin/Block/RecentCommentsBlock.php +++ /dev/null @@ -1,70 +0,0 @@ - 10, - ); - } - - /** - * Overrides \Drupal\block\BlockBase::access(). - */ - public function access() { - return user_access('access comments'); - } - - /** - * Overrides \Drupal\block\BlockBase::blockForm(). - */ - public function blockForm($form, &$form_state) { - $form['block_count'] = array( - '#type' => 'select', - '#title' => t('Number of recent comments'), - '#default_value' => $this->configuration['block_count'], - '#options' => drupal_map_assoc(array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 30)), - ); - return $form; - } - - /** - * Overrides \Drupal\block\BlockBase::blockSubmit(). - */ - public function blockSubmit($form, &$form_state) { - $this->configuration['block_count'] = $form_state['values']['block_count']; - } - - /** - * {@inheritdoc} - */ - public function build() { - return array( - '#theme' => 'comment_block', - '#number' => $this->configuration['block_count'], - ); - } - -} diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentBlockTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentBlockTest.php index 61ce22b..c60e153 100644 --- a/core/modules/comment/lib/Drupal/comment/Tests/CommentBlockTest.php +++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentBlockTest.php @@ -17,7 +17,7 @@ class CommentBlockTest extends CommentTestBase { * * @var array */ - public static $modules = array('block'); + public static $modules = array('block', 'views'); function setUp() { parent::setUp(); @@ -46,12 +46,15 @@ public static function getInfo() { */ function testRecentCommentBlock() { $this->drupalLogin($this->admin_user); - $block = $this->drupalPlaceBlock('recent_comments', array('block_count' => 2)); + $block = $this->drupalPlaceBlock('views_block:comments_recent-block_1'); - // Add some test comments, one without a subject. - $comment1 = $this->postComment($this->node, $this->randomName(), $this->randomName()); - $comment2 = $this->postComment($this->node, $this->randomName(), $this->randomName()); - $comment3 = $this->postComment($this->node, $this->randomName()); + // Add some test comments, with and without subjects. Because the 10 newest + // comments should be shown by the block, we create 11 to test that behavior + // below. + for ($i = 0; $i < 11; ++$i) { + $subject = ($i % 2) ? $this->randomName() : ''; + $comments[$i] = $this->postComment($this->node, $this->randomName(), $subject); + } // Test that a user without the 'access comments' permission cannot see the // block. @@ -61,48 +64,35 @@ function testRecentCommentBlock() { // posting a node from a node form. cache_invalidate_tags(array('content' => TRUE)); $this->drupalGet(''); - $label = $block->label(); - $this->assertNoText($label, 'Block was not found.'); + $this->assertNoText(t('Recent comments')); user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access comments')); // Test that a user with the 'access comments' permission can see the // block. $this->drupalLogin($this->web_user); $this->drupalGet(''); - $this->assertText($label, 'Block was found.'); + $this->assertText(t('Recent comments')); - // Test the only the 2 latest comments are shown and in the proper order. - $this->assertNoText($comment1->subject->value, 'Comment not found in block.'); - $this->assertText($comment2->subject->value, 'Comment found in block.'); - $this->assertText($comment3->comment_body->value, 'Comment found in block.'); - $this->assertTrue(strpos($this->drupalGetContent(), $comment3->comment_body->value) < strpos($this->drupalGetContent(), $comment2->subject->value), 'Comments were ordered correctly in block.'); - - // Set the number of recent comments to show to 10. - $block->getPlugin()->setConfigurationValue('block_count', 10); - $block->save(); - - // Post an additional comment. - $comment4 = $this->postComment($this->node, $this->randomName(), $this->randomName()); - - // Test that all four comments are shown. - $this->assertText($comment1->subject->value, 'Comment found in block.'); - $this->assertText($comment2->subject->value, 'Comment found in block.'); - $this->assertText($comment3->comment_body->value, 'Comment found in block.'); - $this->assertText($comment4->subject->value, 'Comment found in block.'); + // Test the only the 10 latest comments are shown and in the proper order. + $this->assertNoText($comments[0]->subject->value, 'Comment 11 not found in block.'); + for ($i = 1; $i < 11; $i++) { + $this->assertText($comments[$i]->subject->value, format_string('Comment @number found in block.', array('@number' => 11 - $i))); + if ($i > 1) { + $previous_position = $position; + $position = strpos($this->drupalGetContent(), $comments[$i]->subject->value); + $this->assertTrue($position < $previous_position, format_string('Comment @a appears before comment @b', array('@a' => 11 - $i, '@b' => 12 - $i))); + } + $position = strpos($this->drupalGetContent(), $comments[$i]->subject->value); + } // Test that links to comments work when comments are across pages. $this->setCommentsPerPage(1); - $this->drupalGet(''); - $this->clickLink($comment1->subject->value); - $this->assertText($comment1->subject->value, 'Comment link goes to correct page.'); - $this->drupalGet(''); - $this->clickLink($comment2->subject->value); - $this->assertText($comment2->subject->value, 'Comment link goes to correct page.'); - $this->clickLink($comment4->subject->value); - $this->assertText($comment4->subject->value, 'Comment link goes to correct page.'); - // Check that when viewing a comment page from a link to the comment, that - // rel="canonical" is added to the head of the document. - $this->assertRaw('clickLink($comments[$i]->subject->value); + $this->assertText($comments[$i]->subject->value, 'Comment link goes to correct page.'); + $this->assertRaw(' 'Default View - Recent Comments', - 'description' => 'Test results for the Recent Comments view shipped with the module', - 'group' => 'Views Config', - ); - } - - public function setUp() { - parent::setUp(); - - // Create a new content type - $content_type = $this->drupalCreateContentType(); - - // Add a node of the new content type. - $node_data = array( - 'type' => $content_type->type, - ); - - $this->node = $this->drupalCreateNode($node_data); - - // Create some comments and attach them to the created node. - for ($i = 0; $i < $this->masterDisplayResults; $i++) { - $comment = entity_create('comment', array('node_type' => 'comment_node_' . $this->node->getType())); - $comment->uid->target_id = 0; - $comment->nid->target_id = $this->node->id(); - $comment->subject->value = 'Test comment ' . $i; - $comment->comment_body->value = 'Test body ' . $i; - $comment->comment_body->format = 'full_html'; - - // Ensure comments are sorted in ascending order. - $time = REQUEST_TIME + ($this->masterDisplayResults - $i); - $comment->created->value = $time; - $comment->changed->value = $time; - - $comment->save(); - } - - // Store all the nodes just created to access their properties on the tests. - $this->commentsCreated = entity_load_multiple('comment'); - - // Sort created comments in ascending order. - ksort($this->commentsCreated, SORT_NUMERIC); - } - - /** - * Tests the block defined by the comments_recent view. - */ - public function testBlockDisplay() { - $view = views_get_view('comments_recent'); - $view->setDisplay('block_1'); - $this->executeView($view); - - $map = array( - 'comment_nid' => 'nid', - 'comment_subject' => 'subject', - 'cid' => 'cid', - 'comment_changed' => 'changed' - ); - $expected_result = array(); - foreach (array_values($this->commentsCreated) as $key => $comment) { - $expected_result[$key]['nid'] = $comment->nid->target_id; - $expected_result[$key]['subject'] = $comment->subject->value; - $expected_result[$key]['cid'] = $comment->id(); - $expected_result[$key]['changed'] = $comment->changed->value; - } - $this->assertIdenticalResultset($view, $expected_result, $map); - - // Check the number of results given by the display is the expected. - $this->assertEqual(sizeof($view->result), $this->blockDisplayResults, - format_string('There are exactly @results comments. Expected @expected', - array('@results' => count($view->result), '@expected' => $this->blockDisplayResults) - ) - ); - } - - /** - * Tests the page defined by the comments_recent view. - */ - public function testPageDisplay() { - $view = views_get_view('comments_recent'); - $view->setDisplay('page_1'); - $this->executeView($view); - - $map = array( - 'comment_nid' => 'nid', - 'comment_subject' => 'subject', - 'comment_changed' => 'changed', - 'comment_changed' => 'created', - 'cid' => 'cid' - ); - $expected_result = array(); - foreach (array_values($this->commentsCreated) as $key => $comment) { - $expected_result[$key]['nid'] = $comment->nid->target_id; - $expected_result[$key]['subject'] = $comment->subject->value; - $expected_result[$key]['changed'] = $comment->changed->value; - $expected_result[$key]['created'] = $comment->created->value; - $expected_result[$key]['cid'] = $comment->id(); - } - $this->assertIdenticalResultset($view, $expected_result, $map); - - // Check the number of results given by the display is the expected. - $this->assertEqual(count($view->result), $this->pageDisplayResults, - format_string('There are exactly @results comments. Expected @expected', - array('@results' => count($view->result), '@expected' => $this->pageDisplayResults) - ) - ); - } -} diff --git a/core/modules/views/config/views.view.comments_recent.yml b/core/modules/views/config/views.view.comments_recent.yml deleted file mode 100644 index 9b9db7d..0000000 --- a/core/modules/views/config/views.view.comments_recent.yml +++ /dev/null @@ -1,465 +0,0 @@ -base_field: cid -base_table: comment -core: '8' -description: 'A block and a page with recent comments.' -status: '0' -display: - default: - id: default - display_title: Master - display_plugin: default - position: '1' - display_options: - query: - type: views_query - options: - query_comment: '0' - disable_sql_rewrite: '0' - distinct: '0' - slave: '0' - query_tags: { } - title: 'Recent comments' - use_more: '1' - access: - type: none - options: { } - cache: - type: none - options: { } - exposed_form: - type: basic - options: - submit_button: Apply - reset_button: '0' - reset_button_label: Reset - exposed_sorts_label: 'Sort by' - expose_sort_order: '1' - sort_asc_label: Asc - sort_desc_label: Desc - pager: - type: some - options: - items_per_page: '5' - offset: '0' - relationships: - nid: - id: nid - table: comment - field: nid - plugin_id: standard - relationship: none - group_type: group - admin_label: Content - required: '0' - provider: views - fields: - subject: - id: subject - table: comment - field: subject - label: '' - link_to_comment: '1' - plugin_id: comment - relationship: none - group_type: group - admin_label: '' - exclude: '0' - alter: - alter_text: '0' - text: '' - make_link: '0' - path: '' - absolute: '0' - external: '0' - replace_spaces: '0' - path_case: none - trim_whitespace: '0' - alt: '' - rel: '' - link_class: '' - prefix: '' - suffix: '' - target: '' - nl2br: '0' - max_length: '' - word_boundary: '1' - ellipsis: '1' - more_link: '0' - more_link_text: '' - more_link_path: '' - strip_tags: '0' - trim: '0' - preserve_tags: '' - html: '0' - element_type: '' - element_class: '' - element_label_type: '' - element_label_class: '' - element_label_colon: '1' - element_wrapper_type: '' - element_wrapper_class: '' - element_default_classes: '1' - empty: '' - hide_empty: '0' - empty_zero: '0' - hide_alter_empty: '1' - link_to_node: '0' - provider: comment - timestamp: - id: timestamp - table: comment - field: changed - label: '' - date_format: 'time ago' - plugin_id: date - relationship: none - group_type: group - admin_label: '' - exclude: '0' - alter: - alter_text: '0' - text: '' - make_link: '0' - path: '' - absolute: '0' - external: '0' - replace_spaces: '0' - path_case: none - trim_whitespace: '0' - alt: '' - rel: '' - link_class: '' - prefix: '' - suffix: '' - target: '' - nl2br: '0' - max_length: '' - word_boundary: '1' - ellipsis: '1' - more_link: '0' - more_link_text: '' - more_link_path: '' - strip_tags: '0' - trim: '0' - preserve_tags: '' - html: '0' - element_type: '' - element_class: '' - element_label_type: '' - element_label_class: '' - element_label_colon: '1' - element_wrapper_type: '' - element_wrapper_class: '' - element_default_classes: '1' - empty: '' - hide_empty: '0' - empty_zero: '0' - hide_alter_empty: '1' - custom_date_format: '' - timezone: '' - provider: views - sorts: - changed: - id: changed - table: comment - field: changed - order: DESC - plugin_id: date - relationship: none - group_type: group - admin_label: '' - exposed: '0' - expose: - label: '' - granularity: second - provider: views - filters: - status_extra: - id: status_extra - table: node_field_data - field: status_extra - relationship: nid - group: '0' - plugin_id: node_status - provider: node - style: - type: html_list - options: - grouping: { } - row_class: '' - default_row_class: '1' - row_class_special: '1' - uses_fields: '0' - type: ul - class: '' - wrapper_class: item-list - row: - type: fields - options: - inline: { } - separator: '' - hide_empty: '0' - default_field_elements: '1' - header: { } - footer: { } - empty: { } - arguments: { } - page_1: - id: page_1 - display_title: Page - display_plugin: page - position: '2' - display_options: - query: - type: views_query - options: { } - defaults: - style_plugin: '0' - style_options: '0' - row_plugin: '0' - row_options: '0' - fields: '0' - fields: - title: - id: title - table: node_field_data - field: title - relationship: nid - label: 'Reply to' - link_to_node: '1' - plugin_id: node - group_type: group - admin_label: '' - exclude: '0' - alter: - alter_text: '0' - text: '' - make_link: '0' - path: '' - absolute: '0' - external: '0' - replace_spaces: '0' - path_case: none - trim_whitespace: '0' - alt: '' - rel: '' - link_class: '' - prefix: '' - suffix: '' - target: '' - nl2br: '0' - max_length: '' - word_boundary: '1' - ellipsis: '1' - more_link: '0' - more_link_text: '' - more_link_path: '' - strip_tags: '0' - trim: '0' - preserve_tags: '' - html: '0' - element_type: '' - element_class: '' - element_label_type: '' - element_label_class: '' - element_label_colon: '1' - element_wrapper_type: '' - element_wrapper_class: '' - element_default_classes: '1' - empty: '' - hide_empty: '0' - empty_zero: '0' - hide_alter_empty: '1' - provider: node - timestamp: - id: timestamp - table: comment - field: changed - label: '' - date_format: 'time ago' - plugin_id: date - relationship: none - group_type: group - admin_label: '' - exclude: '0' - alter: - alter_text: '0' - text: '' - make_link: '0' - path: '' - absolute: '0' - external: '0' - replace_spaces: '0' - path_case: none - trim_whitespace: '0' - alt: '' - rel: '' - link_class: '' - prefix: '' - suffix: '' - target: '' - nl2br: '0' - max_length: '' - word_boundary: '1' - ellipsis: '1' - more_link: '0' - more_link_text: '' - more_link_path: '' - strip_tags: '0' - trim: '0' - preserve_tags: '' - html: '0' - element_type: '' - element_class: '' - element_label_type: '' - element_label_class: '' - element_label_colon: '1' - element_wrapper_type: '' - element_wrapper_class: '' - element_default_classes: '1' - empty: '' - hide_empty: '0' - empty_zero: '0' - hide_alter_empty: '1' - custom_date_format: '' - timezone: '' - provider: views - subject: - id: subject - table: comment - field: subject - label: '' - link_to_comment: '1' - plugin_id: comment - relationship: none - group_type: group - admin_label: '' - exclude: '0' - alter: - alter_text: '0' - text: '' - make_link: '0' - path: '' - absolute: '0' - external: '0' - replace_spaces: '0' - path_case: none - trim_whitespace: '0' - alt: '' - rel: '' - link_class: '' - prefix: '' - suffix: '' - target: '' - nl2br: '0' - max_length: '' - word_boundary: '1' - ellipsis: '1' - more_link: '0' - more_link_text: '' - more_link_path: '' - strip_tags: '0' - trim: '0' - preserve_tags: '' - html: '0' - element_type: '' - element_class: '' - element_label_type: '' - element_label_class: '' - element_label_colon: '1' - element_wrapper_type: '' - element_wrapper_class: '' - element_default_classes: '1' - empty: '' - hide_empty: '0' - empty_zero: '0' - hide_alter_empty: '1' - link_to_node: '0' - provider: comment - comment: - id: comment - table: comment__comment_body - field: comment_body - label: '' - plugin_id: field - relationship: none - group_type: group - admin_label: '' - exclude: '0' - alter: - alter_text: '0' - text: '' - make_link: '0' - path: '' - absolute: '0' - external: '0' - replace_spaces: '0' - path_case: none - trim_whitespace: '0' - alt: '' - rel: '' - link_class: '' - prefix: '' - suffix: '' - target: '' - nl2br: '0' - max_length: '' - word_boundary: '1' - ellipsis: '1' - more_link: '0' - more_link_text: '' - more_link_path: '' - strip_tags: '0' - trim: '0' - preserve_tags: '' - html: '0' - element_type: '' - element_class: '' - element_label_type: '' - element_label_class: '' - element_label_colon: '1' - element_wrapper_type: '' - element_wrapper_class: '' - element_default_classes: '1' - empty: '' - hide_empty: '0' - empty_zero: '0' - hide_alter_empty: '1' - click_sort_column: value - type: text_default - settings: { } - group_column: value - group_columns: { } - group_rows: '1' - delta_limit: all - delta_offset: '0' - delta_reversed: '0' - delta_first_last: '0' - multi_type: separator - separator: ', ' - field_api_classes: '0' - provider: field - path: comments/recent - style: - type: html_list - row: - type: fields - options: - inline: - title: title - timestamp: timestamp - separator: ' ' - block_1: - id: block_1 - display_title: Block - display_plugin: block - position: '3' - display_options: - query: - type: views_query - options: { } -label: 'Recent comments' -module: comment -id: comments_recent -tag: default -langcode: en