WordPress.org

Make WordPress Core

Changeset 27185


Ignore:
Timestamp:
02/17/2014 09:40:04 PM (6 years ago)
Author:
wonderboymusic
Message:

Make WP_User_Query::prepare_query() public by allowing it to be passed an array of args. Previously, if the WP_User_Query constructor was not passed args, the object was basically unusable. Adds unit tests, all other tests pass.

Props scribu, for the initial patch.
Fixes #21119.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/user.php

    r26904 r27185  
    432432     */
    433433    function __construct( $query = null ) {
    434         if ( !empty( $query ) ) {
     434        if ( ! empty( $query ) ) {
     435            $this->prepare_query( $query );
     436            $this->query();
     437        }
     438    }
     439
     440    /**
     441     * Prepare the query variables
     442     *
     443     * @since 3.1.0
     444     *
     445     * @param string|array $args The query variables
     446     */
     447    function prepare_query( $query = array() ) {
     448        global $wpdb;
     449
     450        if ( empty( $this->query_vars ) || ! empty( $query ) ) {
     451            $this->query_limit = null;
    435452            $this->query_vars = wp_parse_args( $query, array(
    436453                'blog_id' => $GLOBALS['blog_id'],
     
    451468                'who' => ''
    452469            ) );
    453 
    454             $this->prepare_query();
    455             $this->query();
    456         }
    457     }
    458 
    459     /**
    460      * Prepare the query variables
    461      *
    462      * @since 3.1.0
    463      * @access private
    464      */
    465     function prepare_query() {
    466         global $wpdb;
     470        }
    467471
    468472        $qv =& $this->query_vars;
     
    650654     *
    651655     * @since 3.1.0
    652      * @access private
    653656     */
    654657    function query() {
     
    657660        $qv =& $this->query_vars;
    658661
     662        $query = "SELECT $this->query_fields $this->query_from $this->query_where $this->query_orderby $this->query_limit";
     663
    659664        if ( is_array( $qv['fields'] ) || 'all' == $qv['fields'] ) {
    660             $this->results = $wpdb->get_results("SELECT $this->query_fields $this->query_from $this->query_where $this->query_orderby $this->query_limit");
     665            $this->results = $wpdb->get_results( $query );
    661666        } else {
    662             $this->results = $wpdb->get_col("SELECT $this->query_fields $this->query_from $this->query_where $this->query_orderby $this->query_limit");
     667            $this->results = $wpdb->get_col( $query );
    663668        }
    664669
  • trunk/tests/phpunit/tests/user/query.php

    r25392 r27185  
    4444        $ids = $users->get_results();
    4545        $this->assertEquals( array( $this->user_id ), $ids );
    46 
    4746    }
    4847
     
    102101        $this->assertEquals( $names, $values );
    103102    }
     103
     104    function test_prepare_query() {
     105        $query = new WP_User_Query();
     106        $this->assertEmpty( $query->query_fields );
     107        $this->assertEmpty( $query->query_from );
     108        $this->assertEmpty( $query->query_limit );
     109        $this->assertEmpty( $query->query_orderby );
     110        $this->assertEmpty( $query->query_where );
     111        $this->assertEmpty( $query->query_vars );
     112        $_query_vars = $query->query_vars;
     113
     114        $query->prepare_query();
     115        $this->assertNotEmpty( $query->query_fields );
     116        $this->assertNotEmpty( $query->query_from );
     117        $this->assertEmpty( $query->query_limit );
     118        $this->assertNotEmpty( $query->query_orderby );
     119        $this->assertNotEmpty( $query->query_where );
     120        $this->assertNotEmpty( $query->query_vars );
     121        $this->assertNotEquals( $_query_vars, $query->query_vars );
     122
     123        // All values get reset
     124        $query->prepare_query( array( 'number' => 8 ) );
     125        $this->assertNotEmpty( $query->query_limit );
     126        $this->assertEquals( 'LIMIT 8', $query->query_limit );
     127
     128        // All values get reset
     129        $query->prepare_query( array( 'fields' => 'all' ) );
     130        $this->assertEmpty( $query->query_limit );
     131        $this->assertEquals( '', $query->query_limit );
     132        $_query_vars = $query->query_vars;
     133
     134        $query->prepare_query();
     135        $this->assertEquals( $_query_vars, $query->query_vars );
     136    }
    104137}
Note: See TracChangeset for help on using the changeset viewer.