bp_nouveau_ajax_get_users_to_invite()
AJAX get list of members to invite to group.
Description
Source
File: bp-templates/bp-nouveau/includes/groups/ajax.php
function bp_nouveau_ajax_get_users_to_invite() {
$bp = buddypress();
$response = array(
'feedback' => __( 'There was a problem performing this action. Please try again.', 'buddyboss' ),
'type' => 'error',
);
if ( empty( $_POST['nonce'] ) ) {
wp_send_json_error( $response );
}
// Use default nonce
$nonce = $_POST['nonce'];
$check = 'bp_nouveau_groups';
// Use a specific one for actions needed it
if ( ! empty( $_POST['_wpnonce'] ) && ! empty( $_POST['action'] ) ) {
$nonce = $_POST['_wpnonce'];
$check = $_POST['action'];
}
// Nonce check!
if ( empty( $nonce ) || ! wp_verify_nonce( $nonce, $check ) ) {
wp_send_json_error( $response );
}
$request = wp_parse_args( $_POST, array(
'scope' => 'members',
) );
if ( 'groups_get_group_potential_invites' === $request['action'] ) {
// check if subgroup.
$parent_group_id = bp_get_parent_group_id( $request['group_id'] );
if ( isset( $parent_group_id ) && $parent_group_id > 0 ) {
$check_admin = groups_is_user_admin( bp_loggedin_user_id(), $parent_group_id );
$check_moder = groups_is_user_mod( bp_loggedin_user_id(), $parent_group_id );
// Check role of current logged in user for this group.
if ( false === $check_admin && false === $check_moder ) {
wp_send_json_error( array(
'feedback' => __( 'You are not authorized to send invites to other users.', 'buddyboss' ),
'type' => 'info',
) );
}
}
$group_type = bp_groups_get_group_type( $request['group_id'] );
// Include profile type if in Group Types > E.g Team > Group Invites ( Meta Box ) specific profile type selected.
if ( false !== $group_type ) {
$group_type_id = bp_get_group_type_post_id( $group_type );
$get_selected_member_types = get_post_meta( $group_type_id, '_bp_group_type_enabled_member_type_group_invites', true );
if ( isset( $get_selected_member_types ) && ! empty( $get_selected_member_types ) ) {
$request['member_type'] = implode( ',', $get_selected_member_types );
}
}
// Include users ( Restrict group invites to only members of who already exists in parent group ) in BuddyBoss > Settings > Social Groups > Group Hierarchies
if ( false !== $group_type ) {
if ( true === bp_enable_group_hierarchies() ) {
if ( true === bp_enable_group_restrict_invites() ) {
$parent_group_id = bp_get_parent_group_id( $request['group_id'] );
if ( $parent_group_id > 0 ) {
$members_query = groups_get_group_members( array(
'group_id' => $parent_group_id,
) );
$members = wp_list_pluck( $members_query['members'], 'ID' );
$request['include'] = implode( ',', $members );
}
}
}
}
// Exclude users if ( Restrict invites if user already in other same group type ) is checked
if ( false !== $group_type ) {
$group_type_id = bp_get_group_type_post_id( $group_type );
$meta = get_post_custom( $group_type_id );
$get_restrict_invites_same_group_types = isset( $meta[ '_bp_group_type_restrict_invites_user_same_group_type' ] ) ? intval( $meta[ '_bp_group_type_restrict_invites_user_same_group_type' ][ 0 ] ) : 0;
if ( 1 === $get_restrict_invites_same_group_types ) {
$group_arr = bp_get_group_ids_by_group_types( $group_type );
if ( isset( $group_arr ) && !empty( $group_arr ) ) {
$group_arr = wp_list_pluck( $group_arr, 'id' );
if (($key = array_search( $request['group_id'], $group_arr ) ) !== false) {
unset( $group_arr[$key] );
}
$member_arr = array();
foreach ( $group_arr as $group_id ) {
$members_query = groups_get_group_members( array(
'group_id' => $group_id,
) );
$members_list = wp_list_pluck( $members_query['members'], 'ID' );
foreach ( $members_list as $id ) {
$member_arr[] = $id;
}
}
$member_arr = array_unique( $member_arr );
if ( isset( $members ) && ! empty( $members ) ) {
$members = array_diff( $members, $member_arr );
$request['include'] = implode( ',', $members );
}
$request['exclude'] = implode( ',', $member_arr );
}
}
}
}
$bp->groups->invites_scope = 'members';
$message = __( 'Select members to invite by clicking the + button next to each member. Once you\'ve made a selection, use the "Send Invites" navigation item to customize the invite.', 'buddyboss' );
if ( 'friends' === $request['scope'] ) {
$request['user_id'] = bp_loggedin_user_id();
$bp->groups->invites_scope = 'friends';
$message = __( 'Select which connections to invite by clicking the + button next to each member. Once you\'ve made a selection, use the "Send Invites" navigation item to customize the invite.', 'buddyboss' );
}
if ( 'invited' === $request['scope'] ) {
if ( ! bp_group_has_invites( array( 'user_id' => 'any', 'group_id' => $request['group_id'] ) ) ) {
wp_send_json_error( array(
'feedback' => __( 'No pending group invitations found.', 'buddyboss' ),
'type' => 'info',
) );
}
$request['is_confirmed'] = false;
$bp->groups->invites_scope = 'invited';
$message = __( 'You can view the group\'s pending invitations from this screen.', 'buddyboss' );
}
$potential_invites = bp_nouveau_get_group_potential_invites( $request );
if ( empty( $potential_invites->users ) ) {
$error = array(
'feedback' => __( 'No members were found. Try another filter.', 'buddyboss' ),
'type' => 'info',
);
if ( 'friends' === $bp->groups->invites_scope ) {
$error = array(
'feedback' => __( 'All your connections are already members of this group or have already received an invite to join this group or have requested to join it.', 'buddyboss' ),
'type' => 'info',
);
if ( 0 === (int) bp_get_total_friend_count( bp_loggedin_user_id() ) ) {
$error = array(
'feedback' => __( 'You have no connections.', 'buddyboss' ),
'type' => 'info',
);
}
}
unset( $bp->groups->invites_scope );
wp_send_json_error( $error );
}
$potential_invites->users = array_map( 'bp_nouveau_prepare_group_potential_invites_for_js', array_values( $potential_invites->users ) );
$potential_invites->users = array_filter( $potential_invites->users );
// Set a message to explain use of the current scope
$potential_invites->feedback = $message;
unset( $bp->groups->invites_scope );
wp_send_json_success( $potential_invites );
}
Changelog
| Version | Description |
|---|---|
| BuddyPress 3.0.0 | Introduced. |
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.