WordPress.org

Make WordPress Core


Ignore:
Timestamp:
06/08/2016 04:00:18 AM (4 years ago)
Author:
boonebgorges
Message:

Comments: In wp_list_comments(), queries with custom pagination params should obey default comment_status logic.

When custom pagination parameters are passed to wp_list_comments(), a
secondary query must be performed to fetch the proper comments. See [36157].
This query should show comments of the same comment_status as the default
query initialized in comments_template(): show only comments that are
approved, or those that are unapproved but belong to the current user.

Props smerriman.
Fixes #37048.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/comment/wpListComments.php

    r36276 r37655  
    147147        $this->assertSame( array( $comments[3] ), array_map( 'intval', $matches[1] ) );
    148148    }
     149
     150    /**
     151     * @ticket 37048
     152     */
     153    public function test_custom_pagination_should_not_result_in_unapproved_comments_being_shown() {
     154        $p = self::factory()->post->create();
     155
     156        $comments = array();
     157        $now = time();
     158        for ( $i = 0; $i <= 5; $i++ ) {
     159            $comments[] = self::factory()->comment->create( array(
     160                'comment_post_ID' => $p,
     161                'comment_date_gmt' => date( 'Y-m-d H:i:s', $now - $i ),
     162                'comment_author' => 'Commenter ' . $i,
     163            ) );
     164        }
     165
     166        // Only 2 and 5 are approved.
     167        wp_set_comment_status( $comments[0], '0' );
     168        wp_set_comment_status( $comments[1], '0' );
     169        wp_set_comment_status( $comments[3], '0' );
     170        wp_set_comment_status( $comments[4], '0' );
     171
     172        update_option( 'page_comments', true );
     173        update_option( 'comments_per_page', 2 );
     174
     175        $this->go_to( get_permalink( $p ) );
     176
     177        // comments_template() populates $wp_query->comments
     178        get_echo( 'comments_template' );
     179
     180        $found = wp_list_comments( array(
     181            'echo' => false,
     182            'per_page' => 1,
     183            'page' => 2,
     184        ) );
     185
     186        preg_match_all( '|id="comment\-([0-9]+)"|', $found, $matches );
     187        $this->assertSame( array( $comments[2] ), array_map( 'intval', $matches[1] ) );
     188    }
     189
     190    /**
     191     * @ticket 37048
     192     */
     193    public function test_custom_pagination_should_allow_ones_own_unapproved_comments() {
     194        $p = self::factory()->post->create();
     195        $u = self::factory()->user->create();
     196
     197        $comments = array();
     198        $now = time();
     199        for ( $i = 0; $i <= 5; $i++ ) {
     200            $comments[] = self::factory()->comment->create( array(
     201                'comment_post_ID' => $p,
     202                'comment_date_gmt' => date( 'Y-m-d H:i:s', $now - $i ),
     203                'comment_author' => 'Commenter ' . $i,
     204                'user_id' => $u,
     205            ) );
     206        }
     207
     208        // Only 2 and 5 are approved.
     209        wp_set_comment_status( $comments[0], '0' );
     210        wp_set_comment_status( $comments[1], '0' );
     211        wp_set_comment_status( $comments[3], '0' );
     212        wp_set_comment_status( $comments[4], '0' );
     213
     214        update_option( 'page_comments', true );
     215        update_option( 'comments_per_page', 2 );
     216
     217        wp_set_current_user( $u );
     218
     219        $this->go_to( get_permalink( $p ) );
     220
     221        // comments_template() populates $wp_query->comments
     222        get_echo( 'comments_template' );
     223
     224        $found = wp_list_comments( array(
     225            'echo' => false,
     226            'per_page' => 1,
     227            'page' => 2,
     228        ) );
     229
     230        preg_match_all( '|id="comment\-([0-9]+)"|', $found, $matches );
     231        $this->assertSame( array( $comments[4] ), array_map( 'intval', $matches[1] ) );
     232    }
    149233}
Note: See TracChangeset for help on using the changeset viewer.