Make WordPress Core

Ticket #43857: 43857.8.diff

File 43857.8.diff, 7.3 KB (added by imath, 5 years ago)
  • src/wp-comments-post.php

    diff --git src/wp-comments-post.php src/wp-comments-post.php
    index 5c33e87fd3..f5af7a1a90 100644
    do_action( 'set_comment_cookies', $comment, $user, $cookies_consent ); 
    5656
    5757$location = empty( $_POST['redirect_to'] ) ? get_comment_link( $comment ) : $_POST['redirect_to'] . '#comment-' . $comment->comment_ID;
    5858
     59/**
     60 * Add specific query arguments to display the awaiting moderation message
     61 * to users who refused to use comment cookies.
     62 */
     63if ( ! $cookies_consent && 'unapproved' === wp_get_comment_status( $comment ) ) {
     64        $location = add_query_arg(
     65                array(
     66                        'unapproved'      => $comment->comment_ID,
     67                        'moderation-hash' => wp_hash( $comment->comment_date_gmt ),
     68                ),
     69                $location
     70        );
     71}
     72
    5973/**
    6074 * Filters the location URI to send the commenter after posting.
    6175 *
  • src/wp-includes/class-walker-comment.php

    diff --git src/wp-includes/class-walker-comment.php src/wp-includes/class-walker-comment.php
    index 5bfcac0ed3..096194bcee 100644
    class Walker_Comment extends Walker { 
    263263                        $tag       = 'li';
    264264                        $add_below = 'div-comment';
    265265                }
     266
     267                $current_commenter = wp_get_current_commenter();
    266268                ?>
    267269                <<?php echo $tag; ?> <?php comment_class( $this->has_children ? 'parent' : '', $comment ); ?> id="comment-<?php comment_ID(); ?>">
    268270                <?php if ( 'div' != $args['style'] ) : ?>
    class Walker_Comment extends Walker { 
    282284                        ?>
    283285                </div>
    284286                <?php if ( '0' == $comment->comment_approved ) : ?>
    285                 <em class="comment-awaiting-moderation"><?php _e( 'Your comment is awaiting moderation.' ); ?></em>
    286                 <br />
     287                        <em class="comment-awaiting-moderation">
     288                                <?php
     289                                esc_html_e( 'Your comment is awaiting moderation.' );
     290
     291                                if ( ! $current_commenter['comment_author_email'] ) {
     292                                        echo ' ';
     293                                        esc_html_e( 'This message is only shown when a new comment was posted.' );
     294                                }
     295                                ?>
     296                        </em>
     297                        <br />
    287298                <?php endif; ?>
    288299
    289300                <div class="comment-meta commentmetadata"><a href="<?php echo esc_url( get_comment_link( $comment, $args ) ); ?>">
    class Walker_Comment extends Walker { 
    344355         * @param array      $args    An array of arguments.
    345356         */
    346357        protected function html5_comment( $comment, $depth, $args ) {
    347                 $tag = ( 'div' === $args['style'] ) ? 'div' : 'li';
     358                $tag               = ( 'div' === $args['style'] ) ? 'div' : 'li';
     359                $current_commenter = wp_get_current_commenter();
    348360                ?>
    349361                <<?php echo $tag; ?> id="comment-<?php comment_ID(); ?>" <?php comment_class( $this->has_children ? 'parent' : '', $comment ); ?>>
    350362                        <article id="div-comment-<?php comment_ID(); ?>" class="comment-body">
    class Walker_Comment extends Walker { 
    376388                                        </div><!-- .comment-metadata -->
    377389
    378390                                        <?php if ( '0' == $comment->comment_approved ) : ?>
    379                                         <p class="comment-awaiting-moderation"><?php _e( 'Your comment is awaiting moderation.' ); ?></p>
     391                                                <p class="comment-awaiting-moderation">
     392                                                <?php
     393                                                esc_html_e( 'Your comment is awaiting moderation.' );
     394
     395                                                if ( ! $current_commenter['comment_author_email'] ) {
     396                                                        echo ' ';
     397                                                        esc_html_e( 'This message is only shown when a new comment was posted.' );
     398                                                }
     399                                                ?>
     400                                                </p>
    380401                                        <?php endif; ?>
    381402                                </footer><!-- .comment-meta -->
    382403
  • src/wp-includes/comment-template.php

    diff --git src/wp-includes/comment-template.php src/wp-includes/comment-template.php
    index 918238f7fa..59c1cfc19f 100644
    function comments_template( $file = '/comments.php', $separate_comments = false 
    13501350         */
    13511351        $comment_author_email = $commenter['comment_author_email'];
    13521352
     1353        /**
     1354         * Set the comment's author email for unapproved commenters who refused
     1355         * to use comment cookies.
     1356         */
     1357        if ( ! $comment_author_email ) {
     1358                $comment_author_email = wp_get_unapproved_commenter_email();
     1359        }
     1360
    13531361        /*
    13541362         * The url of the current comment author escaped for use in attributes.
    13551363         */
    function get_comment_reply_link( $args = array(), $comment = null, $post = null 
    16901698
    16911699                $link = sprintf(
    16921700                        "<a rel='nofollow' class='comment-reply-link' href='%s' %s aria-label='%s'>%s</a>",
    1693                         esc_url( add_query_arg( 'replytocom', $comment->comment_ID ) ) . '#' . $args['respond_id'],
     1701                        esc_url(
     1702                                add_query_arg(
     1703                                        array(
     1704                                                'replytocom'      => $comment->comment_ID,
     1705                                                'unapproved'      => false,
     1706                                                'moderation-hash' => false,
     1707                                        )
     1708                                )
     1709                        ) . '#' . $args['respond_id'],
    16941710                        $data_attribute_string,
    16951711                        esc_attr( sprintf( $args['reply_to_text'], $comment->comment_author ) ),
    16961712                        $args['reply_text']
    function wp_list_comments( $args = array(), $comments = null ) { 
    20582074                                        $commenter = wp_get_current_commenter();
    20592075                                        if ( $commenter['comment_author_email'] ) {
    20602076                                                $comment_args['include_unapproved'] = $commenter['comment_author_email'];
     2077                                        } else {
     2078                                                $comment_author_email = wp_get_unapproved_commenter_email();
     2079
     2080                                                if ( $comment_author_email ) {
     2081                                                        $comment_args['include_unapproved'] = $comment_author_email;
     2082                                                }
    20612083                                        }
    20622084                                }
    20632085
  • src/wp-includes/comment.php

    diff --git src/wp-includes/comment.php src/wp-includes/comment.php
    index e95d395cce..d54de99951 100644
    function wp_get_current_commenter() { 
    17681768        return apply_filters( 'wp_get_current_commenter', compact( 'comment_author', 'comment_author_email', 'comment_author_url' ) );
    17691769}
    17701770
     1771/**
     1772 * Get unapproved commenter's email.
     1773 *
     1774 * Used when a commenter did not consent to use comment cookies.
     1775 *
     1776 * @since 5.1.0
     1777 *
     1778 * @return string The unapproved commenter's email.
     1779 */
     1780function wp_get_unapproved_commenter_email() {
     1781        $commenter_email = '';
     1782
     1783        if ( isset( $_GET['unapproved'] ) && isset( $_GET['moderation-hash'] ) ) {
     1784                $comment = get_comment( $_GET['unapproved'] );
     1785
     1786                if ( hash_equals( $_GET['moderation-hash'], wp_hash( $comment->comment_date_gmt ) ) ) {
     1787                        $commenter_email = $comment->comment_author_email;
     1788                }
     1789        }
     1790
     1791        return $commenter_email;
     1792}
     1793
    17711794/**
    17721795 * Inserts a comment into the database.
    17731796 *
  • tests/phpunit/tests/comment/commentsTemplate.php

    diff --git tests/phpunit/tests/comment/commentsTemplate.php tests/phpunit/tests/comment/commentsTemplate.php
    index 2b22d2d268..a81d732510 100644
    class Tests_Comment_CommentsTemplate extends WP_UnitTestCase { 
    831831                return $commenter;
    832832        }
    833833
     834        /**
     835         * @ticket 43857
     836         */
     837        public function test_comments_list_should_include_just_posted_unapproved_comment() {
     838                $now = time();
     839                $p   = self::factory()->post->create();
     840                $c   = self::factory()->comment->create(
     841                        array(
     842                                'comment_post_ID'  => $p,
     843                                'comment_content'  => '1',
     844                                'comment_approved' => '0',
     845                                'comment_date_gmt' => date( 'Y-m-d H:i:s', $now ),
     846                                'comment_author_email' => 'foo@bar.mail',
     847                        )
     848                );
     849                $comment = get_comment( $c );
     850
     851                $this->go_to( add_query_arg(
     852                        array(
     853                                'unapproved'      => $comment->comment_ID,
     854                                'moderation-hash' => wp_hash( $comment->comment_date_gmt ),
     855                        ),
     856                        get_comment_link( $comment )
     857                ) );
     858
     859                $found = get_echo( 'comments_template' );
     860
     861                // Find the found comment in the markup.
     862                preg_match( '|id="comment-([0-9]+)|', $found, $matches );
     863
     864                $found_cid = (int) $matches[1];
     865                $this->assertSame( $c, $found_cid );
     866        }
     867
    834868        /**
    835869         * @ticket 35378
    836870         */