/** * Automatically adds members to group 7 when they are registered */ function automatic_group_membership($user_id) { if (!$user_id) { return false; } groups_accept_invite($user_id, 7); }
function groups_screen_group_invites() { $group_id = (int) bp_action_variable(1); if (bp_is_action_variable('accept') && is_numeric($group_id)) { // Check the nonce if (!check_admin_referer('groups_accept_invite')) { return false; } if (!groups_accept_invite(bp_loggedin_user_id(), $group_id)) { bp_core_add_message(__('Group invite could not be accepted', 'buddypress'), 'error'); } else { bp_core_add_message(__('Group invite accepted', 'buddypress')); // Record this in activity streams $group = new BP_Groups_Group($group_id); groups_record_activity(array('action' => apply_filters_ref_array('groups_activity_accepted_invite_action', array(sprintf(__('%1$s joined the group %2$s', 'buddypress'), bp_core_get_userlink(bp_loggedin_user_id()), '<a href="' . bp_get_group_permalink($group) . '">' . esc_attr($group->name) . '</a>'), bp_loggedin_user_id(), &$group)), 'type' => 'joined_group', 'item_id' => $group->id)); } bp_core_redirect(bp_loggedin_user_domain() . bp_get_groups_slug() . '/' . bp_current_action()); } else { if (bp_is_action_variable('reject') && is_numeric($group_id)) { // Check the nonce if (!check_admin_referer('groups_reject_invite')) { return false; } if (!groups_reject_invite(bp_loggedin_user_id(), $group_id)) { bp_core_add_message(__('Group invite could not be rejected', 'buddypress'), 'error'); } else { bp_core_add_message(__('Group invite rejected', 'buddypress')); } bp_core_redirect(bp_loggedin_user_domain() . bp_get_groups_slug() . '/' . bp_current_action()); } } // Remove notifications bp_core_delete_notifications_by_type(bp_loggedin_user_id(), 'groups', 'group_invite'); do_action('groups_screen_group_invites', $group_id); bp_core_load_template(apply_filters('groups_template_group_invites', 'members/single/home')); }
/** * Create a group membership request. * * @param int $requesting_user_id ID of the user requesting membership. * @param int $group_id ID of the group. * * @return bool True on success, false on failure. */ function groups_send_membership_request($requesting_user_id, $group_id) { // Prevent duplicate requests if (groups_check_for_membership_request($requesting_user_id, $group_id)) { return false; } // Check if the user is already a member or is banned if (groups_is_user_member($requesting_user_id, $group_id) || groups_is_user_banned($requesting_user_id, $group_id)) { return false; } // Check if the user is already invited - if so, simply accept invite if (groups_check_user_has_invite($requesting_user_id, $group_id)) { groups_accept_invite($requesting_user_id, $group_id); return true; } $requesting_user = new BP_Groups_Member(); $requesting_user->group_id = $group_id; $requesting_user->user_id = $requesting_user_id; $requesting_user->inviter_id = 0; $requesting_user->is_admin = 0; $requesting_user->user_title = ''; $requesting_user->date_modified = bp_core_current_time(); $requesting_user->is_confirmed = 0; $requesting_user->comments = isset($_POST['group-request-membership-comments']) ? $_POST['group-request-membership-comments'] : ''; if ($requesting_user->save()) { $admins = groups_get_group_admins($group_id); // Saved okay, now send the email notification for ($i = 0, $count = count($admins); $i < $count; ++$i) { groups_notification_new_membership_request($requesting_user_id, $admins[$i]->user_id, $group_id, $requesting_user->id); } /** * Fires after the creation of a new membership request. * * @since 1.0.0 * * @param int $requesting_user_id ID of the user requesting membership. * @param array $admins Array of group admins. * @param int $group_id ID of the group being requested to. * @param int $requesting_user->id ID of the user requesting membership. */ do_action('groups_membership_requested', $requesting_user_id, $admins, $group_id, $requesting_user->id); return true; } return false; }
/** * 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; }
/** * 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')); }
/** * 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 automatic_group_membership($user_id) { echo absint($user_id); if (!$user_id) { return false; } groups_accept_invite(3, 2); }
/** * @group groups_accept_invite * @group group_invitations * @group group_membership */ public function test_groups_accept_invite_removes_membership_requests() { $u1 = $this->factory->user->create(); $u2 = $this->factory->user->create(); $g1 = $this->factory->group->create(array('creator_id' => $u1)); // Create draft invitation groups_invite_user(array('user_id' => $u2, 'group_id' => $g1, 'inviter_id' => $u1, 'date_modified' => bp_core_current_time(), 'is_confirmed' => 0)); // Create membership request groups_send_membership_request($u2, $g1); $request = groups_check_for_membership_request($u2, $g1); $this->assertTrue(is_numeric($request) && $request > 0); // Send the invitation groups_send_invites($u1, $g1); // Accept the invitation groups_accept_invite($u2, $g1); // Check that the membership request has been removed. $this->assertTrue(0 == groups_check_for_membership_request($u2, $g1)); }
function groups_screen_group_invites() { global $bp; $group_id = $bp->action_variables[1]; if ( isset($bp->action_variables) && in_array( 'accept', (array)$bp->action_variables ) && is_numeric($group_id) ) { /* Check the nonce */ if ( !check_admin_referer( 'groups_accept_invite' ) ) return false; if ( !groups_accept_invite( $bp->loggedin_user->id, $group_id ) ) { bp_core_add_message( __('Group invite could not be accepted', 'buddypress'), 'error' ); } else { bp_core_add_message( __('Group invite accepted', 'buddypress') ); /* Record this in activity streams */ $group = new BP_Groups_Group( $group_id ); groups_record_activity( array( 'action' => apply_filters( 'groups_activity_accepted_invite_action', sprintf( __( '%s joined the group %s', 'buddypress'), bp_core_get_userlink( $bp->loggedin_user->id ), '<a href="' . bp_get_group_permalink( $group ) . '">' . esc_attr( $group->name ) . '</a>' ), $bp->loggedin_user->id, &$group ), 'type' => 'joined_group', 'item_id' => $group->id ) ); } bp_core_redirect( $bp->loggedin_user->domain . $bp->current_component . '/' . $bp->current_action ); } else if ( isset($bp->action_variables) && in_array( 'reject', (array)$bp->action_variables ) && is_numeric($group_id) ) { /* Check the nonce */ if ( !check_admin_referer( 'groups_reject_invite' ) ) return false; if ( !groups_reject_invite( $bp->loggedin_user->id, $group_id ) ) { bp_core_add_message( __('Group invite could not be rejected', 'buddypress'), 'error' ); } else { bp_core_add_message( __('Group invite rejected', 'buddypress') ); } bp_core_redirect( $bp->loggedin_user->domain . $bp->current_component . '/' . $bp->current_action ); } // Remove notifications bp_core_delete_notifications_for_user_by_type( $bp->loggedin_user->id, $bp->groups->id, 'group_invite' ); do_action( 'groups_screen_group_invites', $group_id ); bp_core_load_template( apply_filters( 'groups_template_group_invites', 'members/single/home' ) ); }
function groups_screen_group_invites() { global $bp; $group_id = $bp->action_variables[1]; if (isset($bp->action_variables) && in_array('accept', $bp->action_variables) && is_numeric($group_id)) { if (!groups_accept_invite($bp->loggedin_user->id, $group_id)) { bp_core_add_message(__('Group invite could not be accepted', 'buddypress'), 'error'); } else { bp_core_add_message(__('Group invite accepted', 'buddypress')); /* Record this in activity streams */ groups_record_activity(array('item_id' => $group_id, 'component_name' => $bp->groups->slug, 'component_action' => 'joined_group', 'is_private' => 0)); } bp_core_redirect($bp->loggedin_user->domain . $bp->current_component . '/' . $bp->current_action); } else { if (isset($bp->action_variables) && in_array('reject', $bp->action_variables) && is_numeric($group_id)) { if (!groups_reject_invite($bp->loggedin_user->id, $group_id)) { bp_core_add_message(__('Group invite could not be rejected', 'buddypress'), 'error'); } else { bp_core_add_message(__('Group invite rejected', 'buddypress')); } bp_core_redirect($bp->loggedin_user->domain . $bp->current_component . '/' . $bp->current_action); } } // Remove notifications bp_core_delete_notifications_for_user_by_type($bp->loggedin_user->id, $bp->groups->slug, 'group_invite'); do_action('groups_screen_group_invites', $group_id); bp_core_load_template(apply_filters('groups_template_group_invites', 'groups/list-invites')); }
/** * @group cache */ public function test_cache_should_be_invalidated_on_group_invite_acceptance() { groups_invite_user(array('user_id' => self::$user, 'group_id' => self::$groups[2], 'inviter_id' => self::$admin_user)); // Populate cache. $g1 = bp_get_user_groups(self::$user); groups_accept_invite(self::$user, self::$groups[2]); $expected = array(self::$groups[0], self::$groups[1], self::$groups[2]); $found = bp_get_user_groups(self::$user); $this->assertEqualSets($expected, array_keys($found)); }
function auto_join_group($event_id, $user_id) { if (!function_exists('groups_get_groups')) { return false; } if (!$this->_data->get_option('bp-group_event-auto_join_groups')) { return false; } $group_id = (int) get_post_meta($event_id, 'eab_event-bp-group_event', true); if (!$group_id) { return false; } groups_accept_invite($user_id, $group_id); }
/** * @group counts */ public function test_get_invite_count_for_user() { $u1 = $this->factory->user->create(); $u2 = $this->factory->user->create(); $g = $this->factory->group->create(array('creator_id' => $u1)); // create invitation groups_invite_user(array('user_id' => $u2, 'group_id' => $g, 'inviter_id' => $u1)); // send the invite // this function is imperative to set the 'invite_sent' flag in the DB // why is this separated from groups_invite_user()? // @see groups_screen_group_invite() groups_send_invites($u1, $g); // assert invite count $this->assertEquals(1, groups_get_invite_count_for_user($u2)); // accept the invite and reassert groups_accept_invite($u2, $g); $this->assertEquals(0, groups_get_invite_count_for_user($u2)); }
function settings_screen_save($group_id = NULL) { global $bp; // Make sure we have the group ID $group_id = $_POST['group_id']; if (!$group_id) { $group_id = $bp->groups->current_group->id; } // Set error redirect based on save method $redirect_url = $bp->root_domain . '/' . $bp->groups->slug . '/create/step/' . $this->slug; // Email cannot be empty if (empty($_POST['editable-guild-leader'])) { bp_core_add_message('You must enter a valid email address.', 'error'); bp_core_redirect($redirect_url); exit; } // Make sure the nonce checks check_admin_referer('groups_create_save_' . $this->slug); // Get the leader by email $leader_email = sanitize_email($_POST['editable-guild-leader']); $leader = get_user_by('email', $leader_email); // If we don't recognize the email, bail out if (empty($leader)) { bp_core_add_message('This email address is not recognized.', 'error'); bp_core_redirect($redirect_url); exit; } // Otherwise, set the group leader, and remove the creator $leader_id = $leader->ID; if ($leader_id != get_current_user_id()) { groups_accept_invite($leader_id, $group_id); $member = new BP_Groups_Member($leader_id, $group_id); $member->promote('admin'); groups_leave_group($group_id, $creator_id); } }