/**
 * Can the logged-in user send invitations in the specified group?
 *
 * @package BuddyPress
 * @subpackage Groups Template
 * @since BuddyPress (1.5)
 *
 * @param int $group_id (optional) The id of the group whose status you want to check
 * @return bool $can_send_invites
 */
function bp_groups_user_can_send_invites($group_id = false)
{
    global $bp;
    $can_send_invites = false;
    $invite_status = false;
    if (is_user_logged_in()) {
        if (bp_current_user_can('bp_moderate')) {
            // Super admins can always send invitations
            $can_send_invites = true;
        } else {
            // If no $group_id is provided, default to the current group id
            if (!$group_id) {
                $group_id = isset($bp->groups->current_group->id) ? $bp->groups->current_group->id : 0;
            }
            // If no group has been found, bail
            if (!$group_id) {
                return false;
            }
            $invite_status = bp_group_get_invite_status($group_id);
            if (!$invite_status) {
                return false;
            }
            switch ($invite_status) {
                case 'admins':
                    if (groups_is_user_admin(bp_loggedin_user_id(), $group_id)) {
                        $can_send_invites = true;
                    }
                    break;
                case 'mods':
                    if (groups_is_user_mod(bp_loggedin_user_id(), $group_id) || groups_is_user_admin(bp_loggedin_user_id(), $group_id)) {
                        $can_send_invites = true;
                    }
                    break;
                case 'members':
                    if (groups_is_user_member(bp_loggedin_user_id(), $group_id)) {
                        $can_send_invites = true;
                    }
                    break;
            }
        }
    }
    return apply_filters('bp_groups_user_can_send_invites', $can_send_invites, $group_id, $invite_status);
}
/**
 * Can a user send invitations in the specified group?
 *
 * @since 1.5.0
 * @since 2.2.0 Added the $user_id parameter.
 *
 * @param int $group_id The group ID to check.
 * @param int $user_id  The user ID to check.
 * @return bool
 */
function bp_groups_user_can_send_invites($group_id = 0, $user_id = 0)
{
    $can_send_invites = false;
    $invite_status = false;
    // If $user_id isn't specified, we check against the logged-in user.
    if (!$user_id) {
        $user_id = bp_loggedin_user_id();
    }
    // If $group_id isn't specified, use existing one if available.
    if (!$group_id) {
        $group_id = bp_get_current_group_id();
    }
    if ($user_id) {
        // Users with the 'bp_moderate' cap can always send invitations.
        if (user_can($user_id, 'bp_moderate')) {
            $can_send_invites = true;
        } else {
            $invite_status = bp_group_get_invite_status($group_id);
            switch ($invite_status) {
                case 'admins':
                    if (groups_is_user_admin($user_id, $group_id)) {
                        $can_send_invites = true;
                    }
                    break;
                case 'mods':
                    if (groups_is_user_mod($user_id, $group_id) || groups_is_user_admin($user_id, $group_id)) {
                        $can_send_invites = true;
                    }
                    break;
                case 'members':
                    if (groups_is_user_member($user_id, $group_id)) {
                        $can_send_invites = true;
                    }
                    break;
            }
        }
    }
    /**
     * Filters whether a user can send invites in a group.
     *
     * @since 1.5.0
     * @since 2.2.0 Added the $user_id parameter.
     *
     * @param bool $can_send_invites Whether the user can send invites
     * @param int  $group_id         The group ID being checked
     * @param bool $invite_status    The group's current invite status
     * @param int  $user_id          The user ID being checked
     */
    return apply_filters('bp_groups_user_can_send_invites', $can_send_invites, $group_id, $invite_status, $user_id);
}