Changeset 34535
- Timestamp:
- 09/25/2015 05:10:40 AM (9 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/comment-functions.php
r34534 r34535 822 822 * 823 823 * @global wpdb $wpdb 824 * 825 * @param int $comment_ID Comment ID. 826 * @param array $args Optional args. 824 * @param int $comment_ID Comment ID. 825 * @param array $args { 826 * Array of optional arguments. 827 * @type string $type Limit paginated comments to those matching a given type. Accepts 'comment', 828 * 'trackback', 'pingback', 'pings' (trackbacks and pingbacks), or 'all'. 829 * Default is 'all'. 830 * @type int $per_page Per-page count to use when calculating pagination. Defaults to the value of the 831 * 'comments_per_page' option. 832 * @type int|string $max_depth If greater than 1, comment page will be determined for the top-level parent of 833 * `$comment_ID`. Defaults to the value of the 'thread_comments_depth' option. 834 * } * 827 835 * @return int|null Comment page number or null on error. 828 836 */ … … 856 864 return get_page_of_comment( $comment->comment_parent, $args ); 857 865 858 $allowedtypes = array( 859 'comment' => '', 860 'pingback' => 'pingback', 861 'trackback' => 'trackback', 866 $comment_args = array( 867 'type' => $args['type'], 868 'post_ID' => $comment->comment_post_ID, 869 'fields' => 'ids', 870 'status' => 'approve', 871 'date_query' => array( 872 array( 873 'column' => "$wpdb->comments.comment_date_gmt", 874 'before' => $comment->comment_date_gmt, 875 ) 876 ), 862 877 ); 863 878 864 $comtypewhere = ( 'all' != $args['type'] && isset($allowedtypes[$args['type']]) ) ? " AND comment_type = '" . $allowedtypes[$args['type']] . "'" : ''; 865 866 // Count comments older than this one 867 $oldercoms = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_parent = 0 AND comment_approved = '1' AND comment_date_gmt < '%s'" . $comtypewhere, $comment->comment_post_ID, $comment->comment_date_gmt ) ); 879 $older_comment_ids = get_comments( $comment_args ); 880 $older_comment_count = count( $older_comment_ids ); 868 881 869 882 // No older comments? Then it's page #1. 870 if ( 0 == $older coms)883 if ( 0 == $older_comment_count ) 871 884 return 1; 872 885 873 886 // Divide comments older than this one by comments per page to get this comment's page number 874 return ceil( ( $older coms+ 1 ) / $args['per_page'] );887 return ceil( ( $older_comment_count + 1 ) / $args['per_page'] ); 875 888 } 876 889 -
trunk/tests/phpunit/tests/comment/getPageOfComment.php
r31289 r34535 6 6 */ 7 7 class Tests_Comment_GetPageOfComment extends WP_UnitTestCase { 8 9 public function setUp() {10 parent::setUp();11 }12 8 13 9 public function test_last_comment() { … … 39 35 $this->assertEquals( 1, get_page_of_comment( $comment_first[0], array( 'per_page' => 10 ) ) ); 40 36 } 37 38 public function test_type_pings() { 39 $p = $this->factory->post->create(); 40 $now = time(); 41 42 $trackbacks = array(); 43 for ( $i = 0; $i <= 3; $i++ ) { 44 $trackbacks[ $i ] = $this->factory->comment->create( array( 'comment_post_ID' => $p, 'comment_type' => 'trackback', 'comment_date_gmt' => date( 'Y-m-d H:i:s', $now ) ) ); 45 $now -= 10 * $i; 46 } 47 48 $pingbacks = array(); 49 for ( $i = 0; $i <= 6; $i++ ) { 50 $pingbacks[ $i ] = $this->factory->comment->create( array( 'comment_post_ID' => $p, 'comment_type' => 'pingback', 'comment_date_gmt' => date( 'Y-m-d H:i:s', $now ) ) ); 51 $now -= 10 * $i; 52 } 53 54 $this->assertEquals( 2, get_page_of_comment( $trackbacks[0], array( 'per_page' => 2, 'type' => 'trackback' ) ) ); 55 $this->assertEquals( 3, get_page_of_comment( $pingbacks[0], array( 'per_page' => 2, 'type' => 'pingback' ) ) ); 56 $this->assertEquals( 5, get_page_of_comment( $trackbacks[0], array( 'per_page' => 2, 'type' => 'pings' ) ) ); 57 } 58 59 /** 60 * @ticket 11334 61 */ 62 public function test_subsequent_calls_should_hit_cache() { 63 global $wpdb; 64 65 $p = $this->factory->post->create(); 66 $c = $this->factory->comment->create( array( 'comment_post_ID' => $p ) ); 67 68 // Prime cache. 69 $page_1 = get_page_of_comment( $c, array( 'per_page' => 3 ) ); 70 71 $num_queries = $wpdb->num_queries; 72 $page_2 = get_page_of_comment( $c, array( 'per_page' => 3 ) ); 73 74 $this->assertSame( $page_1, $page_2 ); 75 $this->assertSame( $num_queries, $wpdb->num_queries ); 76 } 77 78 /** 79 * @ticket 11334 80 */ 81 public function test_cache_hits_should_be_sensitive_to_comment_type() { 82 global $wpdb; 83 84 $p = $this->factory->post->create(); 85 $comment = $this->factory->comment->create( array( 'comment_post_ID' => $p, 'comment_type' => 'comment' ) ); 86 87 $now = time(); 88 $trackbacks = array(); 89 for ( $i = 0; $i <= 5; $i++ ) { 90 $trackbacks[ $i ] = $this->factory->comment->create( array( 'comment_post_ID' => $p, 'comment_type' => 'trackback', 'comment_date_gmt' => date( 'Y-m-d H:i:s', $now - ( 10 * $i ) ) ) ); 91 } 92 93 // Prime cache for trackbacks. 94 $page_trackbacks = get_page_of_comment( $trackbacks[1], array( 'per_page' => 3, 'type' => 'trackback' ) ); 95 $this->assertEquals( 2, $page_trackbacks ); 96 97 $num_queries = $wpdb->num_queries; 98 $page_comments = get_page_of_comment( $comment, array( 'per_page' => 3, 'type' => 'comment' ) ); 99 $this->assertEquals( 1, $page_comments ); 100 101 $this->assertNotEquals( $num_queries, $wpdb->num_queries ); 102 } 103 104 /** 105 * @ticket 11334 106 */ 107 public function test_cache_should_be_invalidated_when_comment_is_approved() { 108 $p = $this->factory->post->create(); 109 $c = $this->factory->comment->create( array( 'comment_post_ID' => $p, 'comment_approved' => 0 ) ); 110 111 // Prime cache. 112 $page_1 = get_page_of_comment( $c, array( 'per_page' => 3 ) ); 113 114 // Approve comment. 115 wp_set_comment_status( $c, 'approve' ); 116 117 $this->assertFalse( wp_cache_get( $c, 'comment_pages' ) ); 118 } 119 120 /** 121 * @ticket 11334 122 */ 123 public function test_cache_should_be_invalidated_when_comment_is_deleted() { 124 $p = $this->factory->post->create(); 125 $c = $this->factory->comment->create( array( 'comment_post_ID' => $p ) ); 126 127 // Prime cache. 128 $page_1 = get_page_of_comment( $c, array( 'per_page' => 3 ) ); 129 130 // Trash comment. 131 wp_trash_comment( $c ); 132 133 $this->assertFalse( wp_cache_get( $c, 'comment_pages' ) ); 134 } 135 136 /** 137 * @ticket 11334 138 */ 139 public function test_cache_should_be_invalidated_when_comment_is_spammed() { 140 $p = $this->factory->post->create(); 141 $c = $this->factory->comment->create( array( 'comment_post_ID' => $p ) ); 142 143 // Prime cache. 144 $page_1 = get_page_of_comment( $c, array( 'per_page' => 3 ) ); 145 146 // Spam comment. 147 wp_spam_comment( $c ); 148 149 $this->assertFalse( wp_cache_get( $c, 'comment_pages' ) ); 150 } 151 152 /** 153 * @ticket 11334 154 */ 155 public function test_cache_should_be_invalidated_when_older_comment_is_published() { 156 $now = time(); 157 158 $p = $this->factory->post->create(); 159 $c1 = $this->factory->comment->create( array( 'comment_post_ID' => $p, 'comment_date_gmt' => date( 'Y-m-d H:i:s', $now ) ) ); 160 $c2 = $this->factory->comment->create( array( 'comment_post_ID' => $p, 'comment_date_gmt' => date( 'Y-m-d H:i:s', $now - 20 ) ) ); 161 $c3 = $this->factory->comment->create( array( 'comment_post_ID' => $p, 'comment_approved' => 0, 'comment_date_gmt' => date( 'Y-m-d H:i:s', $now - 30 ) ) ); 162 163 $this->assertEquals( 1, get_page_of_comment( $c1, array( 'per_page' => 2 ) ) ); 164 165 wp_set_comment_status( $c3, '1' ); 166 167 $this->assertEquals( 2, get_page_of_comment( $c1, array( 'per_page' => 2 ) ) ); 168 } 41 169 }
Note: See TracChangeset
for help on using the changeset viewer.