bp_nouveau_ajax_joinleave_group()
Join or leave a group when clicking the “join/leave” button via a POST request.
Description
Return
(string) HTML
Source
File: bp-templates/bp-nouveau/includes/groups/ajax.php
function bp_nouveau_ajax_joinleave_group() {
$response = array(
'feedback' => sprintf(
'<div class="bp-feedback error"><span class="bp-icon" aria-hidden="true"></span><p>%s</p></div>',
esc_html__( 'There was a problem performing this action. Please try again.', 'buddyboss' )
),
);
// Bail if not a POST action.
if ( ! bp_is_post_request() || empty( $_POST['action'] ) ) {
wp_send_json_error( $response );
}
if ( empty( $_POST['nonce'] ) || empty( $_POST['item_id'] ) || ! bp_is_active( 'groups' ) ) {
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 );
}
// Cast gid as integer.
$group_id = (int) $_POST['item_id'];
$errors = array(
'cannot' => sprintf( '<div class="bp-feedback error"><span class="bp-icon" aria-hidden="true"></span><p>%s</p></div>', esc_html__( 'You cannot join this group.', 'buddyboss' ) ),
'member' => sprintf( '<div class="bp-feedback error"><span class="bp-icon" aria-hidden="true"></span><p>%s</p></div>', esc_html__( 'You are already a member of the group.', 'buddyboss' ) ),
);
if ( groups_is_user_banned( bp_loggedin_user_id(), $group_id ) ) {
$response['feedback'] = $errors['cannot'];
wp_send_json_error( $response );
}
// Validate and get the group
$group = groups_get_group( array( 'group_id' => $group_id ) );
if ( empty( $group->id ) ) {
wp_send_json_error( $response );
}
// Manage all button's possible actions here.
switch ( $_POST['action'] ) {
case 'groups_accept_invite':
if ( ! groups_accept_invite( bp_loggedin_user_id(), $group_id ) ) {
$response = array(
'feedback' => sprintf(
'<div class="bp-feedback error"><span class="bp-icon" aria-hidden="true"></span><p>%s</p></div>',
esc_html__( 'Group invitation could not be accepted.', 'buddyboss' )
),
'type' => 'error',
);
} else {
if ( bp_is_active( 'activity' ) ) {
groups_record_activity(
array(
'type' => 'joined_group',
'item_id' => $group->id,
)
);
}
// User is now a member of the group
$group->is_member = '1';
$response = array(
'feedback' => sprintf(
'<div class="bp-feedback success"><span class="bp-icon" aria-hidden="true"></span><p>%s</p></div>',
esc_html__( 'Group invite accepted.', 'buddyboss' )
),
'type' => 'success',
'is_user' => bp_is_user(),
'contents' => bp_get_group_join_button( $group ),
'is_group' => bp_is_group(),
);
}
break;
case 'groups_reject_invite':
if ( ! groups_reject_invite( bp_loggedin_user_id(), $group_id ) ) {
$response = array(
'feedback' => sprintf(
'<div class="bp-feedback error"><span class="bp-icon" aria-hidden="true"></span><p>%s</p></div>',
esc_html__( 'Group invite could not be rejected', 'buddyboss' )
),
'type' => 'error',
);
} else {
$response = array(
'feedback' => sprintf(
'<div class="bp-feedback success"><span class="bp-icon" aria-hidden="true"></span><p>%s</p></div>',
esc_html__( 'Group invite rejected', 'buddyboss' )
),
'type' => 'success',
'is_user' => bp_is_user(),
);
}
break;
case 'groups_join_group':
if ( groups_is_user_member( bp_loggedin_user_id(), $group->id ) ) {
$response = array(
'feedback' => $errors['member'],
'type' => 'error',
);
} elseif ( 'public' !== $group->status ) {
$response = array(
'feedback' => $errors['cannot'],
'type' => 'error',
);
} elseif ( ! groups_join_group( $group->id ) ) {
$response = array(
'feedback' => sprintf(
'<div class="bp-feedback error"><span class="bp-icon" aria-hidden="true"></span><p>%s</p></div>',
esc_html__( 'Error joining this group.', 'buddyboss' )
),
'type' => 'error',
);
} else {
// User is now a member of the group
$group->is_member = '1';
$response = array(
'contents' => bp_get_group_join_button( $group ),
'is_group' => bp_is_group(),
'type' => 'success',
);
}
break;
case 'groups_request_membership' :
if ( ! groups_send_membership_request( bp_loggedin_user_id(), $group->id ) ) {
$response = array(
'feedback' => sprintf(
'<div class="bp-feedback error"><span class="bp-icon" aria-hidden="true"></span><p>%s</p></div>',
esc_html__( 'Error requesting membership.', 'buddyboss' )
),
'type' => 'error',
);
} else {
// Request is pending
$group->is_pending = '1';
$response = array(
'contents' => bp_get_group_join_button( $group ),
'is_group' => bp_is_group(),
'type' => 'success',
);
}
break;
case 'groups_leave_group' :
if ( ! groups_leave_group( $group->id ) ) {
$response = array(
'feedback' => sprintf(
'<div class="bp-feedback error"><span class="bp-icon" aria-hidden="true"></span><p>%s</p></div>',
esc_html__( 'Error leaving group.', 'buddyboss' )
),
'type' => 'error',
);
} else {
// User is no more a member of the group
$group->is_member = '0';
$bp = buddypress();
/**
* When inside the group or in the loggedin user's group memberships screen
* we need to reload the page.
*/
$bp_is_group = bp_is_group() || ( bp_is_user_groups() && bp_is_my_profile() );
$response = array(
'contents' => bp_get_group_join_button( $group ),
'is_group' => $bp_is_group,
'type' => 'success',
);
// Reset the message if not in a Group or in a loggedin user's group memberships one!
if ( ! $bp_is_group && isset( $bp->template_message ) && isset( $bp->template_message_type ) ) {
unset( $bp->template_message, $bp->template_message_type );
@setcookie( 'bp-message', false, time() - 1000, COOKIEPATH, COOKIE_DOMAIN, is_ssl() );
@setcookie( 'bp-message-type', false, time() - 1000, COOKIEPATH, COOKIE_DOMAIN, is_ssl() );
}
}
break;
}
if ( 'error' === $response['type'] ) {
wp_send_json_error( $response );
}
wp_send_json_success( $response );
}
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.