示例#1
0
/**
 * 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'));
}
示例#7
0
 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));
 }
示例#9
0
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' ) );
}
示例#10
0
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);
 }
示例#13
0
 /**
  * @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));
 }
示例#14
0
 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);
     }
 }