Skip to:
Content

BuddyPress.org

Changeset 12432


Ignore:
Timestamp:
08/12/2019 08:43:44 PM (6 years ago)
Author:
dcavins
Message:

Update BP_Group_Member_Query for Invitation API compatibility.

  • Update logic in BP_Group_Member_Query to account for the migration of unconfirmed members to the bp_invitations table.

See #6210.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-groups/classes/class-bp-group-member-query.php

    r11805 r12432  
    232232        $sql['order']   = 'first_joined' === $this->query_vars['type'] ? 'ASC' : 'DESC';
    233233
    234         $this->group_member_ids = $wpdb->get_col( "{$sql['select']} {$sql['where']} {$sql['orderby']} {$sql['order']}" );
     234        $group_member_ids = $wpdb->get_col( "{$sql['select']} {$sql['where']} {$sql['orderby']} {$sql['order']}" );
     235
     236        $invited_member_ids = array();
     237
     238        // If appropriate, fetch invitations and add them to the results.
     239        if ( ! $is_confirmed || ! is_null( $this->query_vars['invite_sent'] ) || ! is_null( $this->query_vars['inviter_id'] ) ) {
     240            $invite_args = array(
     241                'item_id' => $this->query_vars['group_id'],
     242                'fields'  => 'user_ids',
     243                'type'    => 'all',
     244            );
     245
     246            if ( ! is_null( $this->query_vars['invite_sent'] ) ) {
     247                $invite_args['invite_sent'] = ! empty( $this->query_vars['invite_sent'] ) ? 'sent' : 'draft';
     248            }
     249
     250            // If inviter_id.
     251            if ( ! is_null( $this->query_vars['inviter_id'] ) ) {
     252                $inviter_id = $this->query_vars['inviter_id'];
     253
     254                // Empty: inviter_id = 0. (pass false, 0, or empty array).
     255                if ( empty( $inviter_id ) ) {
     256                    $invite_args['type'] = 'request';
     257
     258                /*
     259                * The string 'any' matches any non-zero value (inviter_id != 0).
     260                * These are invitations, not requests.
     261                */
     262                } elseif ( 'any' === $inviter_id ) {
     263                    $invite_args['type'] = 'invite';
     264
     265                // Assume that a list of inviter IDs has been passed.
     266                } else {
     267                    $invite_args['type'] = 'invite';
     268                    // Parse and sanitize.
     269                    $inviter_ids = wp_parse_id_list( $inviter_id );
     270                    if ( ! empty( $inviter_ids ) ) {
     271                        $invite_args['inviter_id'] = $inviter_ids;
     272                    }
     273                }
     274            }
     275
     276            /*
     277             * If first_joined is the "type" of query, sort the oldest
     278             * requests and invitations to the top.
     279             */
     280            if ( 'first_joined' === $this->query_vars['type'] ) {
     281                $invite_args['order_by']   = 'date_modified';
     282                $invite_args['sort_order'] = 'ASC';
     283            }
     284
     285            $invited_member_ids = groups_get_invites( $invite_args );
     286        }
     287
     288        $this->group_member_ids = array_merge( $group_member_ids, $invited_member_ids );
    235289
    236290        /**
     
    331385        }
    332386
     387        // Add accurate invitation info from the invitations table.
     388        $invites = groups_get_invites( array(
     389            'user_id' => $user_ids_sql,
     390            'item_id' => $this->query_vars['group_id'],
     391            'type'    => 'all',
     392        ) );
     393        foreach ( $invites as $invite ) {
     394            if ( isset( $this->results[ $invite->user_id ] ) ) {
     395                $this->results[ $invite->user_id ]->comments      = $invite->content;
     396                $this->results[ $invite->user_id ]->is_confirmed  = 0;
     397                $this->results[ $invite->user_id ]->invitation_id = $invite->id;
     398                $this->results[ $invite->user_id ]->invite_sent   = (int) $invite->invite_sent;
     399                $this->results[ $invite->user_id ]->inviter_id    = $invite->inviter_id;
     400
     401                // Backfill properties that are not being set above.
     402                if ( ! isset( $this->results[ $invite->user_id ]->user_id ) ) {
     403                    $this->results[ $invite->user_id ]->user_id = $invite->user_id;
     404                }
     405                if ( ! isset( $this->results[ $invite->user_id ]->is_admin ) ) {
     406                    $this->results[ $invite->user_id ]->is_admin = 0;
     407                }
     408                if ( ! isset( $this->results[ $invite->user_id ]->is_mod ) ) {
     409                    $this->results[ $invite->user_id ]->is_mod = 0;
     410                }
     411                if ( ! isset( $this->results[ $invite->user_id ]->is_banned ) ) {
     412                    $this->results[ $invite->user_id ]->is_banned = 0;
     413                }
     414                if ( ! isset( $this->results[ $invite->user_id ]->date_modified ) ) {
     415                    $this->results[ $invite->user_id ]->date_modified = $invite->date_modified;
     416                }
     417                if ( ! isset( $this->results[ $invite->user_id ]->user_title ) ) {
     418                    $this->results[ $invite->user_id ]->user_title = '';
     419                }
     420                if ( ! isset( $this->results[ $invite->user_id ]->membership_id ) ) {
     421                    $this->results[ $invite->user_id ]->membership_id = 0;
     422                }
     423            }
     424        }
     425
    333426        // Don't filter other BP_User_Query objects on the same page.
    334427        remove_action( 'bp_user_query_populate_extras', array( $this, 'populate_group_member_extras' ), 10 );
  • trunk/tests/phpunit/testcases/groups/class-bp-group-member-query.php

    r11737 r12432  
    313313
    314314    public function test_confirmed_members() {
    315         $g = self::factory()->group->create();
    316         $u1 = self::factory()->user->create();
    317         $u2 = self::factory()->user->create();
    318         $time = time();
    319 
    320         $this->add_user_to_group( $u1, $g, array(
    321             'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 100 ),
    322             'is_confirmed' => 0,
    323         ) );
    324 
    325         $this->add_user_to_group( $u2, $g, array(
     315        $u = self::factory()->user->create();
     316        $g = self::factory()->group->create( array( 'status' => 'private', 'creator_id' => $u )  );
     317        $u1 = self::factory()->user->create();
     318        $u2 = self::factory()->user->create();
     319        $u3 = self::factory()->user->create();
     320        $time = time();
     321
     322        groups_send_membership_request( array(
     323            'user_id' => $u1,
     324            'group_id' => $g
     325        ) );
     326
     327        groups_invite_user( array(
     328            'user_id'    => $u2,
     329            'group_id'   => $g,
     330            'inviter_id' => $u,
     331            'send_invite' => 1
     332        ) );
     333
     334        $this->add_user_to_group( $u3, $g, array(
    326335            'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 100 ),
    327336            'is_confirmed' => 1,
     
    333342
    334343        $ids = wp_parse_id_list( array_keys( $query_members->results ) );
    335         $this->assertEquals( array( $u2 ), $ids );
     344        $this->assertEquals( array( $u3 ), $ids );
    336345    }
    337346
     
    595604     */
    596605    public function test_with_invite_sent_true() {
    597         $g = self::factory()->group->create();
    598         $u1 = self::factory()->user->create();
    599         $u2 = self::factory()->user->create();
    600         $time = time();
    601 
    602         $this->add_user_to_group( $u1, $g, array(
    603             'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 100 ),
    604             'is_confirmed' => 0,
    605             'invite_sent' => 0,
    606         ) );
    607 
    608         $this->add_user_to_group( $u2, $g, array(
    609             'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 100 ),
    610             'is_confirmed' => 0,
    611             'invite_sent' => 1,
     606        $u = self::factory()->user->create();
     607        $g = self::factory()->group->create( array( 'status' => 'private', 'creator_id' => $u )  );
     608        $u1 = self::factory()->user->create();
     609        $u2 = self::factory()->user->create();
     610
     611        groups_invite_user( array(
     612            'user_id'    => $u1,
     613            'group_id'   => $g,
     614            'inviter_id' => $u,
     615            'send_invite' => 0
     616        ) );
     617
     618        groups_invite_user( array(
     619            'user_id'    => $u2,
     620            'group_id'   => $g,
     621            'inviter_id' => $u,
     622            'send_invite' => 1
    612623        ) );
    613624
     
    626637     */
    627638    public function test_with_invite_sent_false() {
    628         $g = self::factory()->group->create();
    629         $u1 = self::factory()->user->create();
    630         $u2 = self::factory()->user->create();
    631         $time = time();
    632 
    633         $this->add_user_to_group( $u1, $g, array(
    634             'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 100 ),
    635             'is_confirmed' => 0,
    636             'invite_sent' => 0,
    637         ) );
    638 
    639         $this->add_user_to_group( $u2, $g, array(
    640             'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 100 ),
    641             'is_confirmed' => 0,
    642             'invite_sent' => 1,
     639        $u = self::factory()->user->create();
     640        $g = self::factory()->group->create( array( 'status' => 'private', 'creator_id' => $u )  );
     641        $u1 = self::factory()->user->create();
     642        $u2 = self::factory()->user->create();
     643
     644        groups_invite_user( array(
     645            'user_id'    => $u1,
     646            'group_id'   => $g,
     647            'inviter_id' => $u,
     648            'send_invite' => 0
     649        ) );
     650
     651        groups_invite_user( array(
     652            'user_id'    => $u2,
     653            'group_id'   => $g,
     654            'inviter_id' => $u,
     655            'send_invite' => 1
    643656        ) );
    644657
     
    657670     */
    658671    public function test_with_inviter_id_false() {
    659         $g = self::factory()->group->create();
    660         $u1 = self::factory()->user->create();
    661         $u2 = self::factory()->user->create();
    662         $time = time();
    663 
    664         $this->add_user_to_group( $u1, $g, array(
    665             'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 100 ),
    666             'inviter_id' => 0,
    667         ) );
    668 
    669         $this->add_user_to_group( $u2, $g, array(
    670             'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 100 ),
    671             'inviter_id' => 1,
     672        $u = self::factory()->user->create();
     673        $g = self::factory()->group->create( array( 'status' => 'private', 'creator_id' => $u )  );
     674        $u1 = self::factory()->user->create();
     675        $u2 = self::factory()->user->create();
     676
     677        groups_send_membership_request( array(
     678            'user_id' => $u1,
     679            'group_id' => $g
     680        ) );
     681
     682        groups_invite_user( array(
     683            'user_id'    => $u2,
     684            'group_id'   => $g,
     685            'inviter_id' => $u,
     686            'send_invite' => 1
    672687        ) );
    673688
     
    685700     */
    686701    public function test_with_inviter_id_specific() {
    687         $g = self::factory()->group->create();
     702        $a1 = self::factory()->user->create();
     703        $a2 = self::factory()->user->create();
     704        $a3 = self::factory()->user->create();
     705        $g = self::factory()->group->create( array( 'status' => 'private', 'creator_id' => $a1 )  );
     706        $this->add_user_to_group( $a2, $g, array( 'is_admin' => 1 ) );
     707        $this->add_user_to_group( $a3, $g, array( 'is_admin' => 1 ) );
     708
    688709        $u1 = self::factory()->user->create();
    689710        $u2 = self::factory()->user->create();
    690711        $u3 = self::factory()->user->create();
    691712        $u4 = self::factory()->user->create();
    692         $time = time();
    693 
    694         $this->add_user_to_group( $u1, $g, array(
    695             'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 100 ),
    696             'inviter_id' => 0,
    697         ) );
    698 
    699         $this->add_user_to_group( $u2, $g, array(
    700             'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 200 ),
    701             'inviter_id' => 1,
    702         ) );
    703 
    704         $this->add_user_to_group( $u3, $g, array(
    705             'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 300 ),
    706             'inviter_id' => 6,
    707         ) );
    708 
    709         $this->add_user_to_group( $u4, $g, array(
    710             'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 400 ),
    711             'inviter_id' => 2,
    712         ) );
    713 
    714         $query_members = new BP_Group_Member_Query( array(
    715             'group_id' => $g,
    716             'inviter_id' => array( 2, 6 ),
    717         ) );
    718 
    719         $ids = wp_parse_id_list( array_keys( $query_members->results ) );
    720         $this->assertEquals( array( $u3, $u4 ), $ids );
     713
     714        groups_send_membership_request( array(
     715            'user_id' => $u1,
     716            'group_id' => $g
     717        ) );
     718
     719        groups_invite_user( array(
     720            'user_id'    => $u2,
     721            'group_id'   => $g,
     722            'inviter_id' => $a1,
     723            'send_invite' => 1
     724        ) );
     725        groups_invite_user( array(
     726            'user_id'    => $u3,
     727            'group_id'   => $g,
     728            'inviter_id' => $a2,
     729            'send_invite' => 1
     730        ) );
     731        groups_invite_user( array(
     732            'user_id'    => $u4,
     733            'group_id'   => $g,
     734            'inviter_id' => $a3,
     735            'send_invite' => 1
     736        ) );
     737
     738        $query_members = new BP_Group_Member_Query( array(
     739            'group_id' => $g,
     740            'inviter_id' => array( $a1, $a3 ),
     741        ) );
     742
     743        $ids = wp_parse_id_list( array_keys( $query_members->results ) );
     744        $this->assertEquals( array( $u2, $u4 ), $ids );
    721745    }
    722746
     
    725749     */
    726750    public function test_with_inviter_id_any() {
    727         $g = self::factory()->group->create();
     751        $a1 = self::factory()->user->create();
     752        $a2 = self::factory()->user->create();
     753        $a3 = self::factory()->user->create();
     754        $g = self::factory()->group->create( array( 'status' => 'private', 'creator_id' => $a1 )  );
     755        $this->add_user_to_group( $a2, $g, array( 'is_admin' => 1 ) );
     756        $this->add_user_to_group( $a3, $g, array( 'is_admin' => 1 ) );
     757
    728758        $u1 = self::factory()->user->create();
    729759        $u2 = self::factory()->user->create();
    730760        $u3 = self::factory()->user->create();
    731761        $u4 = self::factory()->user->create();
    732         $time = time();
    733 
    734         $this->add_user_to_group( $u1, $g, array(
    735             'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 100 ),
    736             'inviter_id' => 0,
    737         ) );
    738 
    739         $this->add_user_to_group( $u2, $g, array(
    740             'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 200 ),
    741             'inviter_id' => 1,
    742         ) );
    743 
    744         $this->add_user_to_group( $u3, $g, array(
    745             'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 300 ),
    746             'inviter_id' => 6,
    747         ) );
    748 
    749         $this->add_user_to_group( $u4, $g, array(
    750             'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 400 ),
    751             'inviter_id' => 2,
     762
     763        groups_send_membership_request( array(
     764            'user_id' => $u1,
     765            'group_id' => $g
     766        ) );
     767
     768        groups_invite_user( array(
     769            'user_id'    => $u2,
     770            'group_id'   => $g,
     771            'inviter_id' => $a1,
     772            'send_invite' => 1
     773        ) );
     774        groups_invite_user( array(
     775            'user_id'    => $u3,
     776            'group_id'   => $g,
     777            'inviter_id' => $a2,
     778            'send_invite' => 1
     779        ) );
     780        groups_invite_user( array(
     781            'user_id'    => $u4,
     782            'group_id'   => $g,
     783            'inviter_id' => $a3,
     784            'send_invite' => 1
    752785        ) );
    753786
Note: See TracChangeset for help on using the changeset viewer.