/** * Join or leave a group when clicking the "join/leave" button via a POST request. * * @return string HTML * @since BuddyPress (1.2) */ function bp_legacy_theme_ajax_joinleave_group() { // Bail if not a POST action if ('POST' !== strtoupper($_SERVER['REQUEST_METHOD'])) { 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(array('group_id' => $group_id)))) { return; } if (!groups_is_user_member(bp_loggedin_user_id(), $group->id)) { if ('public' == $group->status) { 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="leave-group" rel="leave" title="' . __('Leave Group', 'buddypress') . '" href="' . wp_nonce_url(bp_get_group_permalink($group) . 'leave-group', 'groups_leave_group') . '">' . __('Leave Group', 'buddypress') . '</a>'; } } elseif ('private' == $group->status) { // If the user has already been invited, then this is // an Accept Invitation button if (groups_check_user_has_invite(bp_loggedin_user_id(), $group->id)) { 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="leave-group" rel="leave" title="' . __('Leave Group', 'buddypress') . '" href="' . wp_nonce_url(bp_get_group_permalink($group) . 'leave-group', 'groups_leave_group') . '">' . __('Leave Group', 'buddypress') . '</a>'; } // Otherwise, it's a Request Membership button } else { check_ajax_referer('groups_request_membership'); if (!groups_send_membership_request(bp_loggedin_user_id(), $group->id)) { _e('Error requesting membership', 'buddypress'); } else { echo '<a id="group-' . esc_attr($group->id) . '" class="membership-requested" rel="membership-requested" title="' . __('Membership Requested', 'buddypress') . '" href="' . bp_get_group_permalink($group) . '">' . __('Membership Requested', 'buddypress') . '</a>'; } } } } else { 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="join-group" rel="join" title="' . __('Join Group', 'buddypress') . '" href="' . wp_nonce_url(bp_get_group_permalink($group) . 'join', 'groups_join_group') . '">' . __('Join Group', 'buddypress') . '</a>'; } elseif ('private' == $group->status) { echo '<a id="group-' . esc_attr($group->id) . '" class="request-membership" rel="join" title="' . __('Request Membership', 'buddypress') . '" href="' . wp_nonce_url(bp_get_group_permalink($group) . 'request-membership', 'groups_send_membership_request') . '">' . __('Request Membership', 'buddypress') . '</a>'; } } exit; }
function bp_dtheme_ajax_joinleave_group() { global $bp; if (groups_is_user_banned($bp->loggedin_user->id, $_POST['gid'])) { return false; } if (!($group = new BP_Groups_Group($_POST['gid'], false, false))) { return false; } if (!groups_is_user_member($bp->loggedin_user->id, $group->id)) { if ('public' == $group->status) { 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="leave-group" rel="leave" title="' . __('Leave Group', 'buddypress') . '" href="' . wp_nonce_url(bp_get_group_permalink($group) . 'leave-group', 'groups_leave_group') . '">' . __('Leave Group', 'buddypress') . '</a>'; } } else { if ('private' == $group->status) { check_ajax_referer('groups_request_membership'); if (!groups_send_membership_request($bp->loggedin_user->id, $group->id)) { _e('Error requesting membership', 'buddypress'); } else { echo '<a id="group-' . esc_attr($group->id) . '" class="membership-requested" rel="membership-requested" title="' . __('Membership Requested', 'buddypress') . '" href="' . bp_get_group_permalink($group) . '">' . __('Membership Requested', 'buddypress') . '</a>'; } } } } else { check_ajax_referer('groups_leave_group'); if (!groups_leave_group($group->id)) { _e('Error leaving group', 'buddypress'); } else { if ('public' == $group->status) { echo '<a id="group-' . esc_attr($group->id) . '" class="join-group" rel="join" title="' . __('Join Group', 'buddypress') . '" href="' . wp_nonce_url(bp_get_group_permalink($group) . 'join', 'groups_join_group') . '">' . __('Join Group', 'buddypress') . '</a>'; } else { if ('private' == $group->status) { echo '<a id="group-' . esc_attr($group->id) . '" class="request-membership" rel="join" title="' . __('Request Membership', 'buddypress') . '" href="' . wp_nonce_url(bp_get_group_permalink($group) . 'request-membership', 'groups_send_membership_request') . '">' . __('Request Membership', 'buddypress') . '</a>'; } } } } }
/** * Join or leave a group when clicking the "join/leave" button via a POST request. * * @return string HTML * @since BuddyPress (1.2) */ function bp_dtheme_ajax_joinleave_group() { // Bail if not a POST action if ('POST' !== strtoupper($_SERVER['REQUEST_METHOD'])) { return; } if (groups_is_user_banned(bp_loggedin_user_id(), $_POST['gid'])) { return; } if (!($group = groups_get_group(array('group_id' => $_POST['gid'])))) { return; } if (!groups_is_user_member(bp_loggedin_user_id(), $group->id)) { if ('public' == $group->status) { check_ajax_referer('groups_join_group'); if (!groups_join_group($group->id)) { _e('Error joining group', 'logicalboneshug'); } else { echo '<a id="group-' . esc_attr($group->id) . '" class="leave-group" rel="leave" title="' . __('Leave Group', 'logicalboneshug') . '" href="' . wp_nonce_url(bp_get_group_permalink($group) . 'leave-group', 'groups_leave_group') . '">' . __('Leave Group', 'logicalboneshug') . '</a>'; } } elseif ('private' == $group->status) { check_ajax_referer('groups_request_membership'); if (!groups_send_membership_request(bp_loggedin_user_id(), $group->id)) { _e('Error requesting membership', 'logicalboneshug'); } else { echo '<a id="group-' . esc_attr($group->id) . '" class="membership-requested" rel="membership-requested" title="' . __('Membership Requested', 'logicalboneshug') . '" href="' . bp_get_group_permalink($group) . '">' . __('Membership Requested', 'logicalboneshug') . '</a>'; } } } else { check_ajax_referer('groups_leave_group'); if (!groups_leave_group($group->id)) { _e('Error leaving group', 'logicalboneshug'); } elseif ('public' == $group->status) { echo '<a id="group-' . esc_attr($group->id) . '" class="join-group" rel="join" title="' . __('Join Group', 'logicalboneshug') . '" href="' . wp_nonce_url(bp_get_group_permalink($group) . 'join', 'groups_join_group') . '">' . __('Join Group', 'logicalboneshug') . '</a>'; } elseif ('private' == $group->status) { echo '<a id="group-' . esc_attr($group->id) . '" class="request-membership" rel="join" title="' . __('Request Membership', 'logicalboneshug') . '" href="' . wp_nonce_url(bp_get_group_permalink($group) . 'request-membership', 'groups_send_membership_request') . '">' . __('Request Membership', 'logicalboneshug') . '</a>'; } } exit; }
/** * Handle the display of a group's Request Membership page. */ function groups_screen_group_request_membership() { if (!is_user_logged_in()) { return false; } $bp = buddypress(); if ('private' != $bp->groups->current_group->status) { return false; } // If the user is already invited, accept invitation. if (groups_check_user_has_invite(bp_loggedin_user_id(), $bp->groups->current_group->id)) { if (groups_accept_invite(bp_loggedin_user_id(), $bp->groups->current_group->id)) { bp_core_add_message(__('Group invite accepted', 'buddypress')); } else { bp_core_add_message(__('There was an error accepting the group invitation. Please try again.', 'buddypress'), 'error'); } bp_core_redirect(bp_get_group_permalink($bp->groups->current_group)); } // If the user has submitted a request, send it. if (isset($_POST['group-request-send'])) { // Check the nonce. if (!check_admin_referer('groups_request_membership')) { return false; } if (!groups_send_membership_request(bp_loggedin_user_id(), $bp->groups->current_group->id)) { bp_core_add_message(__('There was an error sending your group membership request. Please try again.', 'buddypress'), 'error'); } else { bp_core_add_message(__('Your membership request was sent to the group administrator successfully. You will be notified when the group administrator responds to your request.', 'buddypress')); } bp_core_redirect(bp_get_group_permalink($bp->groups->current_group)); } /** * Fires before the loading of a group's Request Memebership page. * * @since 1.0.0 * * @param int $id ID of the group currently being displayed. */ do_action('groups_screen_group_request_membership', $bp->groups->current_group->id); /** * Filters the template to load for a group's Request Membership page. * * @since 1.0.0 * * @param string $value Path to a group's Request Membership template. */ bp_core_load_template(apply_filters('groups_template_group_request_membership', 'groups/single/home')); }
/** * @group groups_accept_all_pending_membership_requests * @group group_membership_requests * @group group_membership */ public function test_groups_accept_all_pending_membership_requests() { $u1 = $this->factory->user->create(); $u2 = $this->factory->user->create(); $u3 = $this->factory->user->create(); $g1 = $this->factory->group->create(); // Create membership request groups_send_membership_request($u1, $g1); groups_send_membership_request($u2, $g1); groups_send_membership_request($u3, $g1); groups_accept_all_pending_membership_requests($g1); // All users should now be group members. $members = new BP_Group_Member_Query(array('group_id' => $g1)); $this->assertEqualSets(array($u1, $u2, $u3), $members->user_ids); }
/** * Handle the display of a group's Request Membership page. */ function groups_screen_group_request_membership() { global $bp; if (!is_user_logged_in()) { return false; } $bp = buddypress(); if ('private' != $bp->groups->current_group->status) { return false; } // If the user is already invited, accept invitation if (groups_check_user_has_invite(bp_loggedin_user_id(), $bp->groups->current_group->id)) { if (groups_accept_invite(bp_loggedin_user_id(), $bp->groups->current_group->id)) { bp_core_add_message(__('Group invite accepted', 'buddypress')); } else { bp_core_add_message(__('There was an error accepting the group invitation. Please try again.', 'buddypress'), 'error'); } bp_core_redirect(bp_get_group_permalink($bp->groups->current_group)); } // If the user has submitted a request, send it. if (isset($_POST['group-request-send'])) { // Check the nonce if (!check_admin_referer('groups_request_membership')) { return false; } if (!groups_send_membership_request(bp_loggedin_user_id(), $bp->groups->current_group->id)) { bp_core_add_message(__('There was an error sending your group membership request. Please try again.', 'buddypress'), 'error'); } else { bp_core_add_message(__('Your membership request was sent to the group administrator successfully. You will be notified when the group administrator responds to your request.', 'buddypress')); } bp_core_redirect(bp_get_group_permalink($bp->groups->current_group)); } do_action('groups_screen_group_request_membership', $bp->groups->current_group->id); bp_core_load_template(apply_filters('groups_template_group_request_membership', 'groups/single/home')); }
function groups_screen_group_request_membership() { global $bp; if ( !is_user_logged_in() ) return false; if ( 'private' == $bp->groups->current_group->status ) { // If the user has submitted a request, send it. if ( isset( $_POST['group-request-send']) ) { /* Check the nonce first. */ if ( !check_admin_referer( 'groups_request_membership' ) ) return false; if ( !groups_send_membership_request( $bp->loggedin_user->id, $bp->groups->current_group->id ) ) { bp_core_add_message( __( 'There was an error sending your group membership request, please try again.', 'buddypress' ), 'error' ); } else { bp_core_add_message( __( 'Your membership request was sent to the group administrator successfully. You will be notified when the group administrator responds to your request.', 'buddypress' ) ); } bp_core_redirect( bp_get_group_permalink( $bp->groups->current_group ) ); } do_action( 'groups_screen_group_request_membership', $bp->groups->current_group->id ); bp_core_load_template( apply_filters( 'groups_template_group_request_membership', 'groups/single/home' ) ); } }
/** * @group BP6319 */ public function test_group_parameter_should_be_obeyed() { $u = $this->factory->user->create(); $groups = $this->factory->group->create_many(2, array('status' => 'private')); $this->set_current_user($u); // Fake the current group. $GLOBALS['groups_template'] = new stdClass(); $GLOBALS['groups_template']->group = groups_get_group($groups[0]); groups_send_membership_request($u, $groups[1]); $group1 = groups_get_group(array('group_id' => $groups[1], 'populate_extras' => true)); $found = get_echo('bp_group_status_message', array($group1)); $expected = __('This is a private group. Your membership request is awaiting approval from the group administrator.', 'buddypress'); $this->assertSame($expected, $found); }
/** * @group BP7375 */ public function test_membership_request_notifications_should_be_cleared_when_request_is_accepted() { $users = $this->factory->user->create_many(3); $this->add_user_to_group($users[0], $this->group, array('is_admin' => 1)); $this->add_user_to_group($users[1], $this->group, array('is_admin' => 1)); groups_send_membership_request($users[2], $this->group); // Both admins should get a notification. $get_args = array('user_id' => $users[0], 'item_id' => $this->group, 'secondary_item_id' => $users[2], 'component_action' => 'new_membership_request', 'is_new' => true); $u0_notifications = BP_Notifications_Notification::get($get_args); $u1_notifications = BP_Notifications_Notification::get($get_args); $this->assertNotEmpty($u0_notifications); $this->assertNotEmpty($u1_notifications); $this->assertTrue(groups_invite_user(array('user_id' => $users[2], 'group_id' => $this->group))); $u0_notifications = BP_Notifications_Notification::get($get_args); $u1_notifications = BP_Notifications_Notification::get($get_args); $this->assertEmpty($u0_notifications); $this->assertEmpty($u1_notifications); }
/** * @group cache */ public function test_cache_should_be_invalidated_on_group_request_acceptance() { // For `wp_mail()`. $server_name = isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : null; $_SERVER['SERVER_NAME'] = ''; groups_send_membership_request(self::$user, self::$groups[2]); // Populate cache. $g1 = bp_get_user_groups(self::$user); $m = new BP_Groups_Member(self::$user, self::$groups[2]); groups_accept_membership_request($m->id, self::$user, self::$groups[2]); // For `wp_mail()`. if (is_null($server_name)) { unset($_SERVER['SERVER_NAME']); } else { $_SERVER['SERVER_NAME'] = $server_name; } $expected = array(self::$groups[0], self::$groups[1], self::$groups[2]); $found = bp_get_user_groups(self::$user); $this->assertEqualSets($expected, array_keys($found)); }
/** * @group total_member_count * @group groups_accept_membership_request */ public function test_total_member_count_groups_accept_membership_request() { $u1 = $this->factory->user->create(); $u2 = $this->factory->user->create(); $g = $this->factory->group->create(array('creator_id' => $u1)); groups_send_membership_request($u2, $g); groups_accept_membership_request(0, $u2, $g); $this->assertEquals(2, groups_get_groupmeta($g, 'total_member_count')); }