Skip to:
Content

BuddyPress.org

Changeset 12635


Ignore:
Timestamp:
04/26/2020 03:58:20 AM (4 years ago)
Author:
imath
Message:

BP Signup: add a whitelist of available orderby arguments

The BP Signup::get() method orderby argument's possible values are : signup_id, login, email, registered and activated. The Default value remains signup_id.

Fixes #8284

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-members/classes/class-bp-signup.php

    r12503 r12635  
    122122     *
    123123     * @since 2.0.0
     124     * @since 6.0.0 Adds a whitelist of allowed orderby parameters.
    124125     *
    125126     * @param array $args {
     
    128129     *     @type int         $number         How many to fetch. Default 1.
    129130     *     @type bool|string $usersearch     Whether or not to search for a username. Default false.
    130      *     @type string      $orderby        Order By parameter. Default 'signup_id'.
     131     *     @type string      $orderby        Order By parameter. Possible values are `signup_id`, `login`, `email`,
     132     *                                       `registered`, `activated`. Default `signup_id`.
    131133     *     @type string      $order          Order direction. Default 'DESC'.
    132134     *     @type bool        $include        Whether or not to include more specific query params.
     
    159161        );
    160162
    161         // @todo whitelist sanitization
    162         if ( $r['orderby'] !== 'signup_id' ) {
     163        // Whitelist sanitization.
     164        if ( ! in_array( $r['orderby'], array( 'login', 'email', 'registered', 'activated' ), true ) ) {
     165            $r['orderby'] = 'signup_id';
     166        }
     167
     168        if ( 'login' === $r['orderby'] || 'email' === $r['orderby'] ) {
    163169            $r['orderby'] = 'user_' . $r['orderby'];
    164170        }
  • trunk/tests/phpunit/testcases/members/class-bp-signup.php

    r12516 r12635  
    199199     * @group get
    200200     */
     201    public function test_get_with_orderby_login_asc() {
     202        $s1 = self::factory()->signup->create( array(
     203            'user_login' => 'fghij',
     204        ) );
     205        $s2 = self::factory()->signup->create( array(
     206            'user_login' => 'abcde',
     207        ) );
     208        $s3 = self::factory()->signup->create( array(
     209            'user_login' => 'zzzzz',
     210        ) );
     211
     212        $ss = BP_Signup::get( array(
     213            'orderby' => 'login',
     214            'number' => 3,
     215            'order' => 'ASC',
     216            'fields' => 'ids',
     217        ) );
     218
     219        $this->assertEquals( array( $s2, $s1, $s3 ), $ss['signups'] );
     220    }
     221
     222    /**
     223     * @group get
     224     */
     225    public function test_get_with_orderby_registered_asc() {
     226        $now = time();
     227
     228        $s1 = self::factory()->signup->create( array(
     229            'registered' => date( 'Y-m-d H:i:s', $now - 50 ),
     230        ) );
     231        $s2 = self::factory()->signup->create( array(
     232            'registered' => date( 'Y-m-d H:i:s', $now - 100 ),
     233        ) );
     234        $s3 = self::factory()->signup->create( array(
     235            'registered' => date( 'Y-m-d H:i:s', $now - 10 ),
     236        ) );
     237
     238        $ss = BP_Signup::get( array(
     239            'orderby' => 'registered',
     240            'number' => 3,
     241            'order' => 'ASC',
     242            'fields' => 'ids',
     243        ) );
     244
     245        $this->assertEquals( array( $s2, $s1, $s3 ), $ss['signups'] );
     246    }
     247
     248    /**
     249     * @group get
     250     */
    201251    public function test_get_with_include() {
    202252        $s1 = self::factory()->signup->create();
Note: See TracChangeset for help on using the changeset viewer.