Making WordPress.org


Ignore:
Timestamp:
06/18/2016 03:07:08 PM (10 years ago)
Author:
obenland
Message:

Plugin Directory: Consolidate review queries.

See #1719, #1579.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-tools.php

    r3427 r3439  
    3030
    3131        /**
    32          * Returns the two latest reviews of a specific plugin.
     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.
    3335         *
    3436         * @global \wpdb $wpdb WordPress database abstraction object.
    3537         *
    36          * @todo Populate with review title/content.
     38         * @param string $plugin_slug The slug of the plugin.
     39         * @param array  $args        {
     40         *     Optional. Query arguments.
    3741         *
    38          * @param string $plugin_slug The plugin slug.
    39          * @return array|false
     42         *     @type int $number The amount of reviews to return. Default: 10.
     43         * }
     44         * @return array An array of reviews.
    4045         */
    41         public static function get_plugin_reviews( $plugin_slug ) {
    42                 if ( false === ( $reviews = wp_cache_get( "{$plugin_slug}_reviews", 'wporg-plugins' ) ) ) {
     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' ) ) ) {
    4354                        global $wpdb;
    4455
     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
    4564                        $reviews = $wpdb->get_results( $wpdb->prepare( "
    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 );
     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' );
    5684                }
    5785
Note: See TracChangeset for help on using the changeset viewer.