Skip to:
Content

BuddyPress.org


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.

File:
1 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 );
Note: See TracChangeset for help on using the changeset viewer.