Changeset 3440
- Timestamp:
- 06/18/2016 03:25:56 PM (8 years ago)
- Location:
- sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/api/routes/class-plugin.php
r3439 r3440 3 3 use WordPressdotorg\Plugin_Directory\Plugin_Directory; 4 4 use WordPressdotorg\Plugin_Directory\Template; 5 use WordPressdotorg\Plugin_Directory\Tools;6 5 use WordPressdotorg\Plugin_Directory\API\Base; 7 6 use WP_REST_Server; … … 188 187 protected function get_plugin_reviews_markup( $plugin_slug ) { 189 188 $output = ''; 190 foreach ( Tools::get_plugin_reviews( $plugin_slug ) as $review ) {189 foreach ( $this->get_plugin_reviews_data( $plugin_slug ) as $review ) { 191 190 $output .= $this->get_plugin_reviews_markup_singular( $review ); 192 191 } … … 246 245 247 246 } 247 248 /** 249 * Fetch the latest 10 reviews for a given plugin from the database. 250 * 251 * This uses raw SQL to query the bbPress tables to fetch reviews. 252 * 253 * @param string $plugin_slug The slug of the plugin. 254 * @return array An array of review details. 255 */ 256 protected function get_plugin_reviews_data( $plugin_slug ) { 257 global $wpdb; 258 if ( ! defined( 'WPORGPATH' ) || ! defined( 'CUSTOM_USER_TABLE' ) ) { 259 // Reviews are stored in the main supoport forum, which isn't open source yet. 260 return array(); 261 } 262 263 if ( $reviews = wp_cache_get( $plugin_slug, 'reviews' ) ) { 264 return $reviews; 265 } 266 267 // The forums are the source for users, and also where reviews live. 268 $table_prefix = str_replace( 'users', '', CUSTOM_USER_TABLE ); 269 $forum_id = 18; // The Review Forums ID 270 271 $reviews = $wpdb->get_results( $wpdb->prepare( " 272 SELECT 273 t.topic_id, t.topic_title, t.topic_poster, t.topic_start_time, 274 p.post_text, 275 tm_wp.meta_value as wp_version 276 FROM {$table_prefix}topics AS t 277 JOIN {$table_prefix}meta AS tm ON ( tm.object_type = 'bb_topic' AND t.topic_id = tm.object_id AND tm.meta_key = 'is_plugin' ) 278 JOIN {$table_prefix}posts as p ON ( t.topic_id = p.topic_id AND post_status = 0 AND post_position = 1 ) 279 LEFT JOIN {$table_prefix}meta AS tm_wp ON ( tm_wp.object_type = 'bb_topic' AND t.topic_id = tm_wp.object_id AND tm_wp.meta_key = 'wp_version' ) 280 WHERE t.forum_id = %d AND t.topic_status = 0 AND t.topic_sticky = 0 AND tm.meta_value = %s 281 ORDER BY t.topic_start_time DESC 282 LIMIT 10", 283 $forum_id, 284 $plugin_slug 285 ) ); 286 287 wp_cache_set( $plugin_slug, $reviews, 'reviews' ); 288 return $reviews; 289 } 248 290 } 249 291 -
sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-tools.php
r3439 r3440 30 30 31 31 /** 32 * Fetch the latest 10 reviews for a given plugin from the database. 33 * 34 * This uses raw SQL to query the bbPress tables to fetch reviews. 32 * Returns the two latest reviews of a specific plugin. 35 33 * 36 34 * @global \wpdb $wpdb WordPress database abstraction object. 37 35 * 38 * @param string $plugin_slug The slug of the plugin. 39 * @param array $args { 40 * Optional. Query arguments. 36 * @todo Populate with review title/content. 41 37 * 42 * @type int $number The amount of reviews to return. Default: 10. 43 * } 44 * @return array An array of reviews. 38 * @param string $plugin_slug The plugin slug. 39 * @return array|false 45 40 */ 46 public static function get_plugin_reviews( $plugin_slug, $args = array() ) { 47 48 // Reviews are stored in the main support forum, which isn't open sourced yet. 49 if ( ! defined( 'WPORGPATH' ) || ! defined( 'CUSTOM_USER_TABLE' ) ) { 50 return array(); 51 } 52 53 if ( false === ( $reviews = wp_cache_get( $plugin_slug, 'reviews' ) ) ) { 41 public static function get_plugin_reviews( $plugin_slug ) { 42 if ( false === ( $reviews = wp_cache_get( "{$plugin_slug}_reviews", 'wporg-plugins' ) ) ) { 54 43 global $wpdb; 55 44 56 $args = wp_parse_args( $args, array(57 'number' => 10,58 ) );59 60 // The forums are the source for users, and also where reviews live.61 $table_prefix = str_replace( 'users', '', CUSTOM_USER_TABLE );62 $forum_id = 18; // The Review Forums ID.63 64 45 $reviews = $wpdb->get_results( $wpdb->prepare( " 65 SELECT 66 t.topic_id, t.topic_title, t.topic_poster, t.topic_start_time, 67 p.post_text, 68 ratings.rating, 69 tm_wp.meta_value as wp_version 70 FROM {$table_prefix}topics AS t 71 JOIN {$table_prefix}meta AS tm ON ( tm.object_type = 'bb_topic' AND t.topic_id = tm.object_id AND tm.meta_key = 'is_plugin' ) 72 JOIN {$table_prefix}posts as p ON ( t.topic_id = p.topic_id AND post_status = 0 AND post_position = 1 ) 73 JOIN ratings ON (t.topic_id = ratings.review_id ) 74 LEFT JOIN {$table_prefix}meta AS tm_wp ON ( tm_wp.object_type = 'bb_topic' AND t.topic_id = tm_wp.object_id AND tm_wp.meta_key = 'wp_version' ) 75 WHERE t.forum_id = %d AND t.topic_status = 0 AND t.topic_sticky = 0 AND tm.meta_value = %s 76 ORDER BY t.topic_start_time DESC 77 LIMIT %d", 78 $forum_id, 79 $plugin_slug, 80 absint( $args['number'] ) 81 ) ); 82 83 wp_cache_set( $plugin_slug, $reviews, 'reviews' ); 46 SELECT posts.post_text AS post_content, topics.topic_title AS post_title, ratings.rating AS post_rating, ratings.user_id AS post_author 47 FROM ratings 48 INNER JOIN minibb_topics AS topics ON ( ratings.review_id = topics.topic_id ) 49 INNER JOIN minibb_posts AS posts ON ( ratings.review_id = posts.topic_id ) 50 WHERE 51 ratings.object_type = 'plugin' AND 52 ratings.object_slug = %s AND 53 posts.post_position = 1 54 ORDER BY ratings.review_id DESC LIMIT 2", $plugin_slug ) ); 55 wp_cache_set( "{$plugin_slug}_reviews", $reviews, 'wporg-plugins', HOUR_IN_SECONDS ); 84 56 } 85 57 -
sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/shortcodes/class-reviews.php
r3439 r3440 15 15 */ 16 16 static function display() { 17 $reviews = Tools::get_plugin_reviews( get_post()->post_name, array( 18 'number' => 2, 19 ) ); 17 $reviews = Tools::get_plugin_reviews( get_post()->post_name ); 20 18 21 19 if ( empty( $reviews ) ) { … … 29 27 <?php 30 28 foreach ( $reviews as $review ) : 31 $reviewer = get_user_by( 'id', $review-> topic_poster );29 $reviewer = get_user_by( 'id', $review->post_author ); 32 30 if ( ! $reviewer ) : 33 31 continue; … … 39 37 </div><div class="review"> 40 38 <header> 41 <h3 class="review-title"><?php echo $review-> topic_title; ?></h3>42 <?php echo Template::dashicons_stars( $review-> rating ); ?>43 <span class="review-author author vcard"><a class="url fn n" href="<?php esc_url( 'https://profile.wordpress.org/' . $reviewer->user_nicename . '/'); ?>"><?php echo Template::encode( $reviewer->display_name ); ?></a></span>39 <h3 class="review-title"><?php echo $review->post_title; ?></h3> 40 <?php echo Template::dashicons_stars( $review->post_rating ); ?> 41 <span class="review-author author vcard"><a class="url fn n" href="<?php esc_url( get_author_posts_url( $reviewer->ID ) ); ?>"><?php echo Template::encode( $reviewer->display_name ); ?></a></span> 44 42 </header> 45 <p class="review-content"><?php echo $review->post_ text; ?></p>43 <p class="review-content"><?php echo $review->post_content; ?></p> 46 44 </div> 47 45 </article>
Note: See TracChangeset
for help on using the changeset viewer.