From 7550e873e0e0739529c6723beaeab962999fe8c0 Mon Sep 17 00:00:00 2001 From: Boone B Gorges Date: Mon, 18 Nov 2024 14:25:56 -0600 Subject: [PATCH] Restructure args array passed when checking 'view_private_members_of_group' cap. This is necessary because of the way that `bp_current_user_can()` interprets an integer `$args` param as a site ID. See cuny-academic-commons/commons-in-a-box#458. --- includes/portfolios.php | 2 +- includes/private-group-membership.php | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/includes/portfolios.php b/includes/portfolios.php index 9892aec..465cf11 100644 --- a/includes/portfolios.php +++ b/includes/portfolios.php @@ -491,7 +491,7 @@ function openlab_portfolio_list_group_display() { $portfolio_data = openlab_get_group_member_portfolios(); // Hide private-member portfolios from non-members. - if ( current_user_can( 'view_private_members_of_group', $group->id ) ) { + if ( current_user_can( 'view_private_members_of_group', [ 'group_id' => $group->id ] ) ) { $group_private_members = []; } else { $group_private_members = openlab_get_private_members_of_group( $group->id ); diff --git a/includes/private-group-membership.php b/includes/private-group-membership.php index a84ce1d..62f93f9 100644 --- a/includes/private-group-membership.php +++ b/includes/private-group-membership.php @@ -331,7 +331,7 @@ function openlab_filter_docs_query_to_exclude_private_group_members( $args, $doc $group_id = $docs_query->query_args['group_id']; - if ( bp_current_user_can( 'view_private_members_of_group', $group_id ) ) { + if ( bp_current_user_can( 'view_private_members_of_group', [ 'group_id' => $group_id ] ) ) { return $args; } @@ -361,7 +361,15 @@ function openlab_filter_map_meta_cap_for_private_group_members( $caps, $cap, $us return $caps; } - $group_id = isset( $args[0] ) ? intval( $args[0] ) : bp_get_current_group_id(); + // Due to confusing behavior by BuddyPress, $args can be nested in some cases. + if ( isset( $args['group_id'] ) ) { + $group_id = intval( $args['group_id'] ); + } elseif ( isset( $args[0]['group_id'] ) ) { + $group_id = intval( $args[0]['group_id'] ); + } else { + $group_id = bp_get_current_group_id(); + } + if ( ! $group_id ) { return $caps; }