Skip to:
Content

BuddyPress.org

Changeset 13073


Ignore:
Timestamp:
08/17/2021 10:52:34 PM (4 years ago)
Author:
dcavins
Message:

Limit orderby values in BP_Invitation.

Ensure that passed orderby value matches a
verified database column name.

Location:
branches/7.0
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/7.0/src/bp-core/classes/class-bp-invitation.php

    r12547 r13073  
    131131     */
    132132    public $accepted;
     133
     134    /**
     135     * Columns in the invitations table.
     136     *
     137     * @since 9.0.0
     138     * @access public
     139     * @var array
     140     */
     141    public static $columns = array(
     142        'id',
     143        'user_id',
     144        'inviter_id',
     145        'invitee_email',
     146        'class',
     147        'item_id',
     148        'secondary_item_id',
     149        'type',
     150        'content',
     151        'date_modified',
     152        'invite_sent',
     153        'accepted'
     154    );
    133155
    134156    /** Public Methods ****************************************************/
     
    474496        // Order by.
    475497        if ( ! empty( $args['order_by'] ) ) {
    476             $order_by               = implode( ', ', (array) $args['order_by'] );
    477             $conditions['order_by'] = "{$order_by}";
     498            $order_by_clean = array();
     499            foreach ( (array) $args['order_by'] as $key => $value ) {
     500                if ( in_array( $value, self::$columns, true ) ) {
     501                    $order_by_clean[] = $value;
     502                }
     503            }
     504            if ( ! empty( $order_by_clean ) ) {
     505                $order_by               = implode( ', ', $order_by_clean );
     506                $conditions['order_by'] = "{$order_by}";
     507            }
    478508        }
    479509
  • branches/7.0/tests/phpunit/testcases/core/invitations.php

    r12428 r13073  
    174174        $this->set_current_user( $old_current_user );
    175175    }
    176    
     176
    177177    public function test_bp_invitations_add_request_vanilla() {
    178178        $old_current_user = get_current_user_id();
     
    288288    }
    289289
     290    public function test_bp_invitations_orderby_item_id() {
     291        $old_current_user = get_current_user_id();
     292
     293        $u1 = $this->factory->user->create();
     294        $u2 = $this->factory->user->create();
     295        $u3 = $this->factory->user->create();
     296        $this->set_current_user( $u1 );
     297
     298        $invites_class = new BPTest_Invitation_Manager_Extension();
     299
     300        // Create an invitation.
     301        $i1_args = array(
     302            'user_id'    => $u2,
     303            'inviter_id' => $u1,
     304            'item_id'    => 6,
     305        );
     306        $i1 = $invites_class->add_invitation( $i1_args );
     307        $invites_class->send_invitation_by_id( $i1 );
     308
     309        $i2_args = array(
     310            'user_id'    => $u3,
     311            'inviter_id' => $u1,
     312            'item_id'    => 4,
     313        );
     314        $i2 = $invites_class->add_invitation( $i2_args );
     315        $invites_class->send_invitation_by_id( $i2 );
     316
     317        $i3_args = array(
     318            'user_id'    => $u2,
     319            'inviter_id' => $u1,
     320            'item_id'    => 8,
     321        );
     322        $i3 = $invites_class->add_invitation( $i3_args );
     323        $invites_class->send_invitation_by_id( $i3 );
     324
     325        $get_invites = array(
     326            'order_by'   => 'item_id',
     327            'sort_order' => 'ASC',
     328            'fields'     => 'ids',
     329        );
     330        $invites = $invites_class->get_invitations( $get_invites );
     331        $this->assertEquals( array( $i2, $i1, $i3 ), $invites );
     332
     333        $get_invites['sort_order'] = 'DESC';
     334        $invites = $invites_class->get_invitations( $get_invites );
     335        $this->assertEquals( array( $i3, $i1, $i2 ), $invites );
     336
     337        $this->set_current_user( $old_current_user );
     338    }
    290339}
Note: See TracChangeset for help on using the changeset viewer.