bp_legacy_theme_ajax_joinleave_group()

Join or leave a group when clicking the “join/leave” button via a POST request.


Return Return

(string|null) HTML


Source Source

File: bp-templates/bp-legacy/buddypress-functions.php

function bp_legacy_theme_ajax_joinleave_group() {
	if ( ! bp_is_post_request() ) {
		return;
	}

	// Cast gid as integer.
	$group_id = (int) $_POST['gid'];

	if ( groups_is_user_banned( bp_loggedin_user_id(), $group_id ) )
		return;

	if ( ! $group = groups_get_group( $group_id ) )
		return;

	// Client doesn't distinguish between different request types, so we infer from user status.
	if ( groups_is_user_member( bp_loggedin_user_id(), $group->id ) ) {
		$request_type = 'leave_group';
	} elseif ( groups_check_user_has_invite( bp_loggedin_user_id(), $group->id ) ) {
		$request_type = 'accept_invite';
	} elseif ( 'private' === $group->status ) {
		$request_type = 'request_membership';
	} else {
		$request_type = 'join_group';
	}

	switch ( $request_type ) {
		case 'join_group' :
			if ( ! bp_current_user_can( 'groups_join_group', array( 'group_id' => $group->id ) ) ) {
				esc_html_e( 'Error joining group', 'buddypress' );
			}

			check_ajax_referer( 'groups_join_group' );

			if ( ! groups_join_group( $group->id ) ) {
				_e( 'Error joining group', 'buddypress' );
			} else {
				echo '<a id="group-' . esc_attr( $group->id ) . '" class="group-button leave-group" rel="leave" href="' . wp_nonce_url( bp_get_group_permalink( $group ) . 'leave-group', 'groups_leave_group' ) . '">' . __( 'Leave Group', 'buddypress' ) . '</a>';
			}
		break;

		case 'accept_invite' :
			if ( ! bp_current_user_can( 'groups_request_membership', array( 'group_id' => $group->id ) ) ) {
				esc_html_e( 'Error accepting invitation', 'buddypress' );
			}

			check_ajax_referer( 'groups_accept_invite' );

			if ( ! groups_accept_invite( bp_loggedin_user_id(), $group->id ) ) {
				_e( 'Error requesting membership', 'buddypress' );
			} else {
				echo '<a id="group-' . esc_attr( $group->id ) . '" class="group-button leave-group" rel="leave" href="' . wp_nonce_url( bp_get_group_permalink( $group ) . 'leave-group', 'groups_leave_group' ) . '">' . __( 'Leave Group', 'buddypress' ) . '</a>';
			}
		break;

		case 'request_membership' :
			check_ajax_referer( 'groups_request_membership' );

			if ( ! groups_send_membership_request( [ 'user_id' => bp_loggedin_user_id(), 'group_id' => $group->id ] ) ) {
				_e( 'Error requesting membership', 'buddypress' );
			} else {
				echo '<a id="group-' . esc_attr( $group->id ) . '" class="group-button disabled pending membership-requested" rel="membership-requested" href="' . bp_get_group_permalink( $group ) . '">' . __( 'Request Sent', 'buddypress' ) . '</a>';
			}
		break;

		case 'leave_group' :
			check_ajax_referer( 'groups_leave_group' );

			if ( ! groups_leave_group( $group->id ) ) {
				_e( 'Error leaving group', 'buddypress' );
			} elseif ( 'public' === $group->status ) {
				echo '<a id="group-' . esc_attr( $group->id ) . '" class="group-button join-group" rel="join" href="' . wp_nonce_url( bp_get_group_permalink( $group ) . 'join', 'groups_join_group' ) . '">' . __( 'Join Group', 'buddypress' ) . '</a>';
			} else {
				echo '<a id="group-' . esc_attr( $group->id ) . '" class="group-button request-membership" rel="join" href="' . wp_nonce_url( bp_get_group_permalink( $group ) . 'request-membership', 'groups_request_membership' ) . '">' . __( 'Request Membership', 'buddypress' ) . '</a>';
			}
		break;
	}

	exit;
}


Top ↑

Changelog Changelog

Changelog
Version Description
1.2.0 Introduced.

Top ↑

User Contributed Notes User Contributed Notes

You must log in before being able to contribute a note or feedback.