Making WordPress.org


Ignore:
Timestamp:
10/23/2016 06:12:42 PM (8 years ago)
Author:
jmdodd
Message:

Support Forums: Use the user object for view queries.

Allows empty forums for non-contributing users, and 404s for non-existent users.

Abstracts some logic to make adding a plugin-contributors view easier.

See #2071.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/support-forums/inc/class-support-compat.php

    r4234 r4289  
    1010    var $loaded     = false;
    1111    var $query      = null;
    12     var $user_login = null;
     12    var $user      = null;
    1313
    1414    public function __construct() {
     
    3838    }
    3939
     40    /**
     41     * Check the request for the `wporg_user_login`, and then add filters to
     42     * handle either the feed request or the custom view if a user is found.
     43     *
     44     * @param array $query_vars The query vars
     45     * @return array The query vars
     46     */
    4047    public function request( $query_vars ) {
    41         if ( isset( $query_vars['feed'] ) && isset( $query_vars['wporg_user_login'] ) ) {
    42             if ( isset( $query_vars['bbp_view'] ) && in_array( $query_vars['bbp_view'], array( 'plugin-committer' ) ) ) {
    43                 $this->query = $query_vars;
    44                 add_filter( 'bbp_get_view_query_args', array( $this, 'get_view_query_args_for_feed' ), 10, 2 );
    45 
    46                 // Override bbPress topic pubDate handling to show topic time and not last active time
    47                 add_filter( 'get_post_metadata', array( $this, 'topic_pubdate_correction_for_feed' ), 10, 4 );
     48        if ( isset( $query_vars['wporg_user_login'] ) && ! empty( $query_vars['wporg_user_login'] ) && ! $this->user ) {
     49            $user = get_user_by( 'slug', $query_vars['wporg_user_login'] );
     50            if ( $user ) {
     51                // Set the user if available for custom views.
     52                $this->user = $user;
     53
     54                // If this is a feed, add filters to handle the custom view.
     55                if ( isset( $query_vars['feed'] ) && isset( $query_vars['bbp_view'] ) && in_array( $query_vars['bbp_view'], array( 'plugin-committer' ) ) ) {
     56                    $this->query = $query_vars;
     57                    add_filter( 'bbp_get_view_query_args', array( $this, 'get_view_query_args_for_feed' ), 10, 2 );
     58
     59                    // Override bbPress topic pubDate handling to show topic time and not last active time.
     60                    add_filter( 'get_post_metadata', array( $this, 'topic_pubdate_correction_for_feed' ), 10, 4 );
     61                }
    4862            }
    4963        }
     
    6882                        'taxonomy'    => 'topic-plugin',
    6983                        'field'       => 'slug',
    70                         'terms'       => $this->get_plugin_slugs_by_committer( $this->query['wporg_user_login'] ),
     84                        'terms'       => self::get_plugin_slugs_by_committer( $this->user->user_login ),
    7185                    ) ),
    7286                    'show_stickies'   => false,
     
    7791    }
    7892
    79     public function parse_query() {
    80         $user_login = get_query_var( 'wporg_user_login' );
     93    /**
     94     * Determine if a custom view needs to be loaded for this query and register
     95     * the view if needed.
     96     *
     97     * @param array $query_vars The query vars
     98     */
     99    public function parse_query( $query_vars ) {
    81100        $view = get_query_var( 'bbp_view' );
    82         if ( ! $user_login || ! $view ) {
     101        if ( ! $view || ! $this->user ) {
    83102            return;
    84103        }
    85104
    86         // Basic setup.
    87         $this->user_login = $user_login;
    88 
    89105        if ( $view == 'plugin-committer' ) {
    90106
    91             $slugs = $this->get_plugin_slugs_by_committer( $user_login );
     107            $slugs = self::get_plugin_slugs_by_committer( $this->user->user_login );
    92108
    93109            // Add plugin-committer view.
    94110            bbp_register_view(
    95111                'plugin-committer',
    96                 sprintf( __( 'Plugin Committer » %s', 'wporg-forums' ), esc_html( $user_login ) ),
     112                sprintf( __( 'Plugin Committer » %s', 'wporg-forums' ), esc_html( $this->user->user_login ) ),
    97113                array(
    98114                    'post_parent__in' => array( Plugin::PLUGINS_FORUM_ID, Plugin::REVIEWS_FORUM_ID ),
     
    152168        // Pretty permalinks.
    153169        if ( $wp_rewrite->using_permalinks() ) {
    154             $url = $wp_rewrite->root . 'view/plugin-committer/' . $this->user_login;
     170            $url = $wp_rewrite->root . "view/{$view}/" . $this->user->user_login;
    155171            $url = home_url( user_trailingslashit( $url ) );
    156172
     
    159175            $url = add_query_arg( array(
    160176                bbp_get_view_rewrite_id() => $view,
    161                 'wporg_user_login'        => $this->user_login,
     177                'wporg_user_login'        => $this->user->user_login,
    162178            ) );
    163179        }
     
    272288        global $wpdb;
    273289        $slugs = (array) $wpdb->get_col( $wpdb->prepare( "SELECT `path` FROM `" . PLUGINS_TABLE_PREFIX . "svn_access` WHERE `user` = %s AND `access` = 'rw'", $user_login ) );
    274         return $slugs;
     290        return self::clean_slugs( $slugs );
     291    }
     292
     293    public static function clean_slugs( $slugs ) {
     294        $cleanslugs = array();
     295        foreach ( $slugs as $slug ) {
     296            $slug = trim( $slug, '/' );
     297            if ( ! empty( $slug ) ) {
     298                $cleanslugs[] = $slug;
     299            }
     300        }
     301        return $cleanslugs;
    275302    }
    276303}
Note: See TracChangeset for help on using the changeset viewer.