bp_groups_user_can_filter( bool $retval, int $user_id, string $capability, int $site_id, array $args )
Filter the bp_user_can value to determine what the user can do with regards to a specific group.
Description
Parameters
- $retval
-
(Required) Whether or not the current user has the capability.
- $user_id
-
(Required)
- $capability
-
(Required) The capability being checked for.
- $site_id
-
(Required) Site ID. Defaults to the BP root blog.
- $args
-
(Required) Array of extra arguments passed.
Return
(bool)
Source
File: bp-groups/bp-groups-filters.php
function bp_groups_user_can_filter( $retval, $user_id, $capability, $site_id, $args ) {
if ( empty( $args['group_id'] ) ) {
$group_id = bp_get_current_group_id();
} else {
$group_id = (int) $args['group_id'];
}
switch ( $capability ) {
case 'groups_join_group':
// Return early if the user isn't logged in or the group ID is unknown.
if ( ! $user_id || ! $group_id ) {
break;
}
// Set to false to begin with.
$retval = false;
// The group must allow joining, and the user should not currently be a member.
$group = groups_get_group( $group_id );
if ( ( 'public' === bp_get_group_status( $group )
&& ! groups_is_user_member( $user_id, $group->id )
&& ! groups_is_user_banned( $user_id, $group->id ) )
// Site admins can join any group they are not a member of.
|| ( bp_user_can( $user_id, 'bp_moderate' )
&& ! groups_is_user_member( $user_id, $group->id ) )
) {
$retval = true;
}
break;
case 'groups_request_membership':
// Return early if the user isn't logged in or the group ID is unknown.
if ( ! $user_id || ! $group_id ) {
break;
}
// Set to false to begin with.
$retval = false;
/*
* The group must accept membership requests, and the user should not
* currently be a member or be banned.
*/
$group = groups_get_group( $group_id );
if ( 'private' === bp_get_group_status( $group )
&& ! groups_is_user_member( $user_id, $group->id )
&& ! groups_check_for_membership_request( $user_id, $group->id )
&& ! groups_is_user_banned( $user_id, $group->id )
) {
$retval = true;
}
break;
case 'groups_send_invitation':
// Return early if the user isn't logged in or the group ID is unknown.
if ( ! $user_id || ! $group_id ) {
break;
}
/*
* The group must allow invitations, and the user should not
* currently be a member or be banned from the group.
*/
// Users with the 'bp_moderate' cap can always send invitations.
if ( bp_user_can( $user_id, 'bp_moderate' ) ) {
$retval = 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 ) ) {
$retval = true;
}
break;
case 'mods' :
if ( groups_is_user_mod( $user_id, $group_id ) || groups_is_user_admin( $user_id, $group_id ) ) {
$retval = true;
}
break;
case 'members' :
if ( groups_is_user_member( $user_id, $group_id ) ) {
$retval = true;
}
break;
}
}
break;
case 'groups_receive_invitation':
// Return early if the user isn't logged in or the group ID is unknown.
if ( ! $user_id || ! $group_id ) {
break;
}
// Set to false to begin with.
$retval = false;
/*
* The group must allow invitations, and the user should not
* currently be a member or be banned from the group.
*/
$group = groups_get_group( $group_id );
if ( in_array( bp_get_group_status( $group ), array( 'private', 'hidden' ), true )
&& ! groups_is_user_member( $user_id, $group->id )
&& ! groups_is_user_banned( $user_id, $group->id )
) {
$retval = true;
}
break;
case 'groups_access_group':
// Return early if the group ID is unknown.
if ( ! $group_id ) {
break;
}
$group = groups_get_group( $group_id );
// If the check is for the logged-in user, use the BP_Groups_Group property.
if ( $user_id === bp_loggedin_user_id() ) {
$retval = $group->user_has_access;
/*
* If the check is for a specified user who is not the logged-in user
* run the check manually.
*/
} elseif ( 'public' === bp_get_group_status( $group ) || groups_is_user_member( $user_id, $group->id ) ) {
$retval = true;
}
break;
case 'groups_see_group':
// Return early if the group ID is unknown.
if ( ! $group_id ) {
break;
}
$group = groups_get_group( $group_id );
// If the check is for the logged-in user, use the BP_Groups_Group property.
if ( $user_id === bp_loggedin_user_id() ) {
$retval = $group->is_visible;
/*
* If the check is for a specified user who is not the logged-in user
* run the check manually.
*/
} elseif ( 'hidden' !== bp_get_group_status( $group ) || groups_is_user_member( $user_id, $group->id ) ) {
$retval = true;
}
break;
}
return $retval;
}
Changelog
| Version | Description |
|---|---|
| BuddyPress 3.0.0 | Introduced. |
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.