BP_Nouveau_Group_Invite_Query
Query to get members that are not already members of the group
Description Description
Source Source
File: bp-templates/bp-nouveau/includes/groups/classes.php
class BP_Nouveau_Group_Invite_Query extends BP_User_Query { /** * Array of group member ids, cached to prevent redundant lookups * * @var null|array Null if not yet defined, otherwise an array of ints * @since 3.0.0 */ protected $group_member_ids; /** * Set up action hooks * * @since 3.0.0 */ public function setup_hooks() { add_action( 'bp_pre_user_query_construct', array( $this, 'build_exclude_args' ) ); add_action( 'bp_pre_user_query', array( $this, 'build_meta_query' ) ); } /** * Exclude group members from the user query as it's not needed to invite members to join the group. * * @since 3.0.0 */ public function build_exclude_args() { $this->query_vars = bp_parse_args( $this->query_vars, array( 'group_id' => 0, 'is_confirmed' => true, ), 'nouveau_group_invite_query_exlude_args' ); $group_member_ids = $this->get_group_member_ids(); /** * We want to exclude users who are already members or who have been * invited by **any** of the group members to join it. */ $type = 'exclude'; // We want to get the invited users who did not confirmed yet. if ( false === $this->query_vars['is_confirmed'] ) { $type = 'include'; } if ( ! empty( $group_member_ids ) ) { $this->query_vars[ $type ] = $group_member_ids; } } /** * Get the members of the queried group * * @since 3.0.0 * * @return array $ids User IDs of relevant group member ids */ protected function get_group_member_ids() { global $wpdb; if ( is_array( $this->group_member_ids ) ) { return $this->group_member_ids; } // Fetch **all** invited users. $pending_invites = groups_get_invites( array( 'item_id' => $this->query_vars['group_id'], 'invite_sent' => 'sent', 'fields' => 'user_ids' ) ); // This is a clue that we only want the invitations. if ( false === $this->query_vars['is_confirmed'] ) { return $pending_invites; } /** * Otherwise, we want group members _and_ users with outstanding invitations, * because we're doing an "exclude" query. */ $bp = buddypress(); $sql = array( 'select' => "SELECT user_id FROM {$bp->groups->table_name_members}", 'where' => array(), 'orderby' => '', 'order' => '', 'limit' => '', ); /** WHERE clauses *****************************************************/ // Group id $sql['where'][] = $wpdb->prepare( 'group_id = %d', $this->query_vars['group_id'] ); // Join the query part $sql['where'] = ! empty( $sql['where'] ) ? 'WHERE ' . implode( ' AND ', $sql['where'] ) : ''; /** ORDER BY clause ***************************************************/ $sql['orderby'] = 'ORDER BY date_modified'; $sql['order'] = 'DESC'; /** LIMIT clause ******************************************************/ $this->group_member_ids = $wpdb->get_col( "{$sql['select']} {$sql['where']} {$sql['orderby']} {$sql['order']} {$sql['limit']}" ); return array_merge( $this->group_member_ids, $pending_invites ); } /** * @since 3.0.0 */ public function build_meta_query( BP_User_Query $bp_user_query ) { if ( isset( $this->query_vars['scope'] ) && 'members' === $this->query_vars['scope'] && isset( $this->query_vars['meta_query'] ) ) { $invites_meta_query = new WP_Meta_Query( $this->query_vars['meta_query'] ); $meta_sql = $invites_meta_query->get_sql( 'user', 'u', 'ID' ); if ( empty( $meta_sql['join'] ) || empty( $meta_sql['where'] ) ) { return; } $bp_user_query->uid_clauses['select'] .= ' ' . $meta_sql['join']; $bp_user_query->uid_clauses['where'] .= ' ' . $meta_sql['where']; } } /** * @since 3.0.0 */ public static function get_inviter_ids( $user_id = 0, $group_id = 0 ) { global $wpdb; if ( empty( $group_id ) || empty( $user_id ) ) { return array(); } return groups_get_invites( array( 'user_id' => $user_id, 'item_id' => $group_id, 'invite_sent' => 'sent', 'fields' => 'inviter_ids' ) ); } }
Changelog Changelog
Version | Description |
---|---|
3.0.0 | Introduced. |
Methods Methods
- build_exclude_args — Exclude group members from the user query as it's not needed to invite members to join the group.
- build_meta_query
- get_group_member_ids — Get the members of the queried group
- get_inviter_ids
- setup_hooks — Set up action hooks