Skip to:
Content

BuddyPress.org

Changeset 12635


Ignore:
Timestamp:
04/26/2020 03:58:20 AM (6 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.