Skip to:
Content

BuddyPress.org

Ticket #8794: 8794-bp-moderate.1.diff

File 8794-bp-moderate.1.diff, 64.1 KB (added by dcavins, 5 months ago)

Replace generic calls to bp_user_can( 'bp_moderate' ) with more specific capability checks when possible. We fall back to bp_moderate still, but this allows plugins to handle these cases in more specific ways if desired.

  • src/bp-activity/bp-activity-admin.php

    diff --git src/bp-activity/bp-activity-admin.php src/bp-activity/bp-activity-admin.php
    index 9ddb6274e..1145e7b79 100644
    function bp_activity_admin_reply() { 
    9595        }
    9696
    9797        // @todo: Check if user is allowed to create new activity items
    98         // if ( ! current_user_can( 'bp_new_activity' ) )
    99         if ( ! bp_current_user_can( 'bp_moderate' ) ) {
     98        if ( ! bp_current_user_can( 'bp_activity_manage_activity_items' ) ) {
    10099                die( '-1' );
    101100        }
    102101
    function bp_activity_admin() { 
    626625 */
    627626function bp_activity_admin_delete() {
    628627
    629         if ( ! bp_current_user_can( 'bp_moderate' ) ) {
     628        if ( ! bp_current_user_can( 'bp_activity_manage_activity_items' ) ) {
    630629                die( '-1' );
    631630        }
    632631
  • src/bp-activity/bp-activity-filters.php

    diff --git src/bp-activity/bp-activity-filters.php src/bp-activity/bp-activity-filters.php
    index 9b67b0f21..f347e5089 100644
    function bp_activity_register_personal_data_exporter( $exporters ) { 
    844844
    845845        return $exporters;
    846846}
     847
     848/**
     849 * Filter the bp_user_can value to determine what the user can do
     850 * with regards to the activity component.
     851 *
     852 * @since 15.0.0
     853 *
     854 * @param bool   $retval     Whether or not the current user has the capability.
     855 * @param int    $user_id
     856 * @param string $capability The capability being checked for.
     857 * @param int    $site_id    Site ID. Defaults to the BP root blog.
     858 * @param array  $args       Array of extra arguments passed.
     859 *
     860 * @return bool
     861 */
     862function bp_activity_user_can_filter( $retval, $user_id, $capability, $site_id, $args ) {
     863        switch ( $capability ) {
     864                case 'bp_activity_manage_activity_items':
     865                // @TODO: Improve check for whether user can create a new activity item.
     866                case 'bp_activity_is_item_admin':
     867
     868                        // Fall back to the bp_moderate capability.
     869                        $retval = bp_user_can( $user_id, 'bp_moderate' );
     870
     871                        break;
     872        }
     873
     874        return $retval;
     875}
     876add_filter( 'bp_user_can', 'bp_activity_user_can_filter', 10, 5 );
  • src/bp-activity/bp-activity-template.php

    diff --git src/bp-activity/bp-activity-template.php src/bp-activity/bp-activity-template.php
    index 96d261728..e7628c39b 100644
    function bp_has_activities( $args = '' ) { 
    221221        if ( bp_is_group() ) {
    222222                $object      = $bp->groups->id;
    223223                $primary_id  = bp_get_current_group_id();
    224                 $show_hidden = (bool) ( groups_is_user_member( bp_loggedin_user_id(), $primary_id ) || bp_current_user_can( 'bp_moderate' ) );
     224                $show_hidden = (bool) ( groups_is_user_member( bp_loggedin_user_id(), $primary_id ) || bp_current_user_can( 'bp_groups_view_hidden_groups' ) );
    225225        } else {
    226226                $object      = false;
    227227                $primary_id  = false;
  • src/bp-activity/screens/favorites.php

    diff --git src/bp-activity/screens/favorites.php src/bp-activity/screens/favorites.php
    index d640f22e7..2a5057342 100644
     
    1313 * @since 1.2.0
    1414 */
    1515function bp_activity_screen_favorites() {
    16         bp_update_is_item_admin( bp_current_user_can( 'bp_moderate' ), 'activity' );
     16        bp_update_is_item_admin( bp_current_user_can( 'bp_activity_is_item_admin' ), 'activity' );
    1717
    1818        /**
    1919         * Fires right before the loading of the "Favorites" screen template file.
  • src/bp-activity/screens/friends.php

    diff --git src/bp-activity/screens/friends.php src/bp-activity/screens/friends.php
    index f02dfdc21..dbff0cc34 100644
    function bp_activity_screen_friends() { 
    1717                return;
    1818        }
    1919
    20         bp_update_is_item_admin( bp_current_user_can( 'bp_moderate' ), 'activity' );
     20        bp_update_is_item_admin( bp_current_user_can( 'bp_activity_is_item_admin' ), 'activity' );
    2121
    2222        /**
    2323         * Fires right before the loading of the "My Friends" screen template file.
  • src/bp-activity/screens/groups.php

    diff --git src/bp-activity/screens/groups.php src/bp-activity/screens/groups.php
    index 8fee67334..f2a33ba41 100644
    function bp_activity_screen_groups() { 
    1717                return;
    1818        }
    1919
    20         bp_update_is_item_admin( bp_current_user_can( 'bp_moderate' ), 'activity' );
     20        bp_update_is_item_admin( bp_current_user_can( 'bp_activity_is_item_admin' ), 'activity' );
    2121
    2222        /**
    2323         * Fires right before the loading of the "My Groups" screen template file.
  • src/bp-activity/screens/mentions.php

    diff --git src/bp-activity/screens/mentions.php src/bp-activity/screens/mentions.php
    index 7516e2318..99b9f0908 100644
     
    1313 * @since 1.2.0
    1414 */
    1515function bp_activity_screen_mentions() {
    16         bp_update_is_item_admin( bp_current_user_can( 'bp_moderate' ), 'activity' );
     16        bp_update_is_item_admin( bp_current_user_can( 'bp_activity_is_item_admin' ), 'activity' );
    1717
    1818        /**
    1919         * Fires right before the loading of the "Mentions" screen template file.
  • src/bp-blogs/bp-blogs-filters.php

    diff --git src/bp-blogs/bp-blogs-filters.php src/bp-blogs/bp-blogs-filters.php
    index 1084cd743..1020f355a 100644
    function bp_rest_post_dispatch( $response, $instance, $request ) { 
    290290        return $response;
    291291}
    292292add_filter( 'rest_post_dispatch', 'bp_rest_post_dispatch', 10, 3 );
     293
     294/**
     295 * Filter the bp_user_can value to determine what the user can do
     296 * with regards to the blogs component.
     297 *
     298 * @since 15.0.0
     299 *
     300 * @param bool   $retval     Whether or not the current user has the capability.
     301 * @param int    $user_id
     302 * @param string $capability The capability being checked for.
     303 * @param int    $site_id    Site ID. Defaults to the BP root blog.
     304 * @param array  $args       Array of extra arguments passed.
     305 *
     306 * @return bool
     307 */
     308function bp_blogs_user_can_filter( $retval, $user_id, $capability, $site_id, $args ) {
     309        switch ( $capability ) {
     310                case 'bp_blogs_view_others_hidden_blogs':
     311                        // Fall back to the bp_moderate capability.
     312                        $retval = bp_user_can( $user_id, 'bp_moderate' );
     313                        break;
     314        }
     315
     316        return $retval;
     317}
     318add_filter( 'bp_user_can', 'bp_blogs_user_can_filter', 10, 5 );
     319 No newline at end of file
  • src/bp-blogs/classes/class-bp-blogs-blog.php

    diff --git src/bp-blogs/classes/class-bp-blogs-blog.php src/bp-blogs/classes/class-bp-blogs-blog.php
    index 42cf95ed7..739f64626 100644
    class BP_Blogs_Blog { 
    246246                        )
    247247                );
    248248
    249                 if ( ! is_user_logged_in() || ( ! bp_current_user_can( 'bp_moderate' ) && ( $r['user_id'] != bp_loggedin_user_id() ) ) ) {
     249                if ( ! is_user_logged_in() || ( ! bp_current_user_can( 'bp_blogs_view_others_hidden_blogs' ) && ( $r['user_id'] != bp_loggedin_user_id() ) ) ) {
    250250                        $hidden_sql = 'AND wb.public = 1';
    251251                } else {
    252252                        $hidden_sql = '';
    class BP_Blogs_Blog { 
    513513         * Return a count of associated blogs for a given user.
    514514         *
    515515         * Includes hidden blogs when the logged-in user is the same as the
    516          * $user_id parameter, or when the logged-in user has the bp_moderate
    517          * cap.
     516         * $user_id parameter, or when the logged-in user has the capability to
     517         * views others' hidden blogs.
    518518         *
    519519         * @global wpdb $wpdb WordPress database object.
    520520         *
    class BP_Blogs_Blog { 
    532532                }
    533533
    534534                // If the user is logged in return the blog count including their hidden blogs.
    535                 if ( ( is_user_logged_in() && $user_id === bp_loggedin_user_id() ) || bp_current_user_can( 'bp_moderate' ) ) {
     535                if ( ( is_user_logged_in() && $user_id === bp_loggedin_user_id() ) || bp_current_user_can( 'bp_blogs_view_others_hidden_blogs' ) ) {
    536536                        return $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT b.blog_id) FROM {$bp->blogs->table_name} b LEFT JOIN {$wpdb->base_prefix}blogs wb ON b.blog_id = wb.blog_id WHERE wb.deleted = 0 AND wb.spam = 0 AND wb.mature = 0 AND wb.archived = '0' AND user_id = %d", $user_id ) );
    537537                }
    538538
    class BP_Blogs_Blog { 
    563563                $search_terms_sql  = $wpdb->prepare( 'bm.meta_value LIKE %s', $search_terms_like );
    564564
    565565                $hidden_sql = '';
    566                 if ( ! bp_current_user_can( 'bp_moderate' ) ) {
     566                if ( ! bp_current_user_can( 'bp_blogs_view_others_hidden_blogs' ) ) {
    567567                        $hidden_sql = 'AND wb.public = 1';
    568568                }
    569569
    class BP_Blogs_Blog { 
    592592         * Retrieve a list of all blogs.
    593593         *
    594594         * Query will include hidden blogs if the logged-in user has the
    595          * 'bp_moderate' cap.
     595         * 'bp_blogs_view_others_hidden_blogs' cap.
    596596         *
    597597         * @global wpdb $wpdb WordPress database object.
    598598         *
    class BP_Blogs_Blog { 
    609609
    610610                $bp = buddypress();
    611611
    612                 $hidden_sql = ! bp_current_user_can( 'bp_moderate' ) ? 'AND wb.public = 1' : '';
     612                $hidden_sql = ! bp_current_user_can( 'bp_blogs_view_others_hidden_blogs' ) ? 'AND wb.public = 1' : '';
    613613                $pag_sql    = ( $limit && $page ) ? $wpdb->prepare( ' LIMIT %d, %d', intval( ( $page - 1 ) * $limit ), intval( $limit ) ) : '';
    614614
    615615                $paged_blogs = $wpdb->get_results( "SELECT DISTINCT b.blog_id FROM {$bp->blogs->table_name} b LEFT JOIN {$wpdb->base_prefix}blogs wb ON b.blog_id = wb.blog_id WHERE wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 {$hidden_sql} {$pag_sql}" );
    class BP_Blogs_Blog { 
    630630         * Retrieve a list of blogs whose names start with a given letter.
    631631         *
    632632         * Query will include hidden blogs if the logged-in user has the
    633          * 'bp_moderate' cap.
     633         * 'bp_blogs_view_others_hidden_blogs' cap.
    634634         *
    635635         * @global wpdb $wpdb WordPress database object.
    636636         *
    class BP_Blogs_Blog { 
    652652                $letter_sql  = $wpdb->prepare( 'bm.meta_value LIKE %s', $letter_like );
    653653
    654654                $hidden_sql = '';
    655                 if ( ! bp_current_user_can( 'bp_moderate' ) ) {
     655                if ( ! bp_current_user_can( 'bp_blogs_view_others_hidden_blogs' ) ) {
    656656                        $hidden_sql = 'AND wb.public = 1';
    657657                }
    658658
  • src/bp-core/admin/bp-core-admin-functions.php

    diff --git src/bp-core/admin/bp-core-admin-functions.php src/bp-core/admin/bp-core-admin-functions.php
    index 1ddfdbe61..1428f5302 100644
    function bp_core_admin_backpat_page() { 
    139139function bp_core_print_admin_notices() {
    140140
    141141        // Only the super admin should see messages.
    142         if ( ! bp_current_user_can( 'bp_moderate' ) ) {
     142        if ( ! bp_current_user_can( 'bp_core_view_admin_screens' ) ) {
    143143                return;
    144144        }
    145145
    function bp_core_activation_notice() { 
    228228        global $wpdb;
    229229
    230230        // Only the super admin gets warnings.
    231         if ( ! bp_current_user_can( 'bp_moderate' ) ) {
     231        if ( ! bp_current_user_can( 'bp_core_view_admin_screens' ) ) {
    232232                return;
    233233        }
    234234
    function bp_admin_separator() { 
    10041004        }
    10051005
    10061006        // Prevent duplicate separators when no core menu items exist.
    1007         if ( ! bp_current_user_can( 'bp_moderate' ) ) {
     1007        if ( ! bp_current_user_can( 'bp_core_view_admin_screens' ) ) {
    10081008                $add = false;
    10091009        }
    10101010
    function bp_admin_separator() { 
    10141014        }
    10151015
    10161016        // Force on Site Admin if BuddyPress Core post-types are registered
    1017         if ( is_blog_admin() && bp_current_user_can( 'bp_moderate' ) ) {
     1017        if ( is_blog_admin() && bp_current_user_can( 'bp_core_view_admin_screens' ) ) {
    10181018
    10191019                // See: BP_Core::register_post_types()
    10201020                if ( post_type_exists( bp_get_email_post_type() ) || post_type_exists( 'buddypress' ) ) {
    function bp_admin_separator() { 
    10531053function bp_admin_custom_menu_order( $menu_order = false ) {
    10541054
    10551055        // Bail if user cannot see admin pages.
    1056         if ( ! bp_current_user_can( 'bp_moderate' ) ) {
     1056        if ( ! bp_current_user_can( 'bp_core_view_admin_screens' ) ) {
    10571057                return $menu_order;
    10581058        }
    10591059
    function bp_admin_custom_menu_order( $menu_order = false ) { 
    10711071function bp_admin_menu_order( $menu_order = array() ) {
    10721072
    10731073        // Bail if user cannot see admin pages.
    1074         if ( empty( $menu_order ) || ! bp_current_user_can( 'bp_moderate' ) ) {
     1074        if ( empty( $menu_order ) || ! bp_current_user_can( 'bp_core_view_admin_screens' ) ) {
    10751075                return $menu_order;
    10761076        }
    10771077
  • src/bp-core/bp-core-filters.php

    diff --git src/bp-core/bp-core-filters.php src/bp-core/bp-core-filters.php
    index 4fd716561..ccb97702a 100644
    function bp_get_post_type_link( $link = '', $post = null ) { 
    13911391        return $link;
    13921392}
    13931393add_filter( 'post_type_link', 'bp_get_post_type_link', 10, 2 );
     1394
     1395/**
     1396 * Filter the bp_user_can value to determine what the user can do
     1397 * with regards to the core component.
     1398 *
     1399 * @since 15.0.0
     1400 *
     1401 * @param bool   $retval     Whether or not the current user has the capability.
     1402 * @param int    $user_id
     1403 * @param string $capability The capability being checked for.
     1404 * @param int    $site_id    Site ID. Defaults to the BP root blog.
     1405 * @param array  $args       Array of extra arguments passed.
     1406 *
     1407 * @return bool
     1408 */
     1409function bp_core_user_can_filter( $retval, $user_id, $capability, $site_id, $args ) {
     1410        switch ( $capability ) {
     1411                case 'bp_core_customize_emails':
     1412                case 'bp_core_manage_taxonomies':
     1413                case 'bp_core_view_others_profiles':
     1414                case 'bp_core_view_admin_screens':
     1415                        // Fall back to the bp_moderate capability.
     1416                        $retval = bp_user_can( $user_id, 'bp_moderate' );
     1417                        break;
     1418        }
     1419
     1420        return $retval;
     1421}
     1422add_filter( 'bp_user_can', 'bp_core_user_can_filter', 10, 5 );
  • src/bp-core/bp-core-functions.php

    diff --git src/bp-core/bp-core-functions.php src/bp-core/bp-core-functions.php
    index 5f44307d9..8bef7a6f8 100644
    function bp_get_taxonomy_common_args() { 
    33873387                'rewrite'       => false,
    33883388                'show_in_menu'  => false,
    33893389                'show_tagcloud' => false,
    3390                 'show_ui'       => bp_is_root_blog() && bp_current_user_can( 'bp_moderate' ),
     3390                'show_ui'       => bp_is_root_blog() && bp_current_user_can( 'bp_core_manage_taxonomies' ),
    33913391        );
    33923392}
    33933393
  • src/bp-core/bp-core-template.php

    diff --git src/bp-core/bp-core-template.php src/bp-core/bp-core-template.php
    index ccacf7586..554110faf 100644
    function bp_get_name_from_root_slug( $root_slug = '' ) { 
    14441444 * @return bool
    14451445 */
    14461446function bp_user_has_access() {
    1447         $has_access = bp_current_user_can( 'bp_moderate' ) || bp_is_my_profile();
     1447        $has_access = bp_current_user_can( 'bp_core_view_others_profiles' ) || bp_is_my_profile();
    14481448
    14491449        /**
    14501450         * Filters whether or not a user has access.
  • src/bp-core/classes/class-bp-admin-types.php

    diff --git src/bp-core/classes/class-bp-admin-types.php src/bp-core/classes/class-bp-admin-types.php
    index 58ef8b9c6..170f82173 100644
    class BP_Admin_Types { 
    154154        private function handle_action( $action ) {
    155155                $referer = wp_get_referer();
    156156
    157                 if ( ! bp_current_user_can( 'bp_moderate' ) ) {
     157                if ( ! bp_current_user_can( 'bp_core_manage_taxonomies' ) ) {
    158158                        return;
    159159                }
    160160
  • src/bp-core/classes/class-bp-core.php

    diff --git src/bp-core/classes/class-bp-core.php src/bp-core/classes/class-bp-core.php
    index 9fed8cf1c..1a3ab462d 100644
    class BP_Core extends BP_Component { 
    389389                                                'labels'             => bp_get_email_post_type_labels(),
    390390                                                'menu_icon'          => 'dashicons-email',
    391391                                                'public'             => false,
    392                                                 'publicly_queryable' => bp_current_user_can( 'bp_moderate' ),
     392                                                'publicly_queryable' => bp_current_user_can( 'bp_core_customize_emails' ),
    393393                                                'query_var'          => false,
    394394                                                'rewrite'            => false,
    395395                                                'show_in_admin_bar'  => false,
    396                                                 'show_ui'            => bp_current_user_can( 'bp_moderate' ),
     396                                                'show_ui'            => bp_current_user_can( 'bp_core_customize_emails' ),
    397397                                                'supports'           => bp_get_email_post_type_supports(),
    398398                                        )
    399399                                )
  • src/bp-friends/bp-friends-filters.php

    diff --git src/bp-friends/bp-friends-filters.php src/bp-friends/bp-friends-filters.php
    index 48e263a0e..b5613c08d 100644
    function bp_friends_register_personal_data_exporters( $exporters ) { 
    8080        return $exporters;
    8181}
    8282add_filter( 'wp_privacy_personal_data_exporters', 'bp_friends_register_personal_data_exporters' );
     83
     84/**
     85 * Filter the bp_user_can value to determine what the user can do
     86 * with regards to the friends component.
     87 *
     88 * @since 15.0.0
     89 *
     90 * @param bool   $retval     Whether or not the current user has the capability.
     91 * @param int    $user_id
     92 * @param string $capability The capability being checked for.
     93 * @param int    $site_id    Site ID. Defaults to the BP root blog.
     94 * @param array  $args       Array of extra arguments passed.
     95 *
     96 * @return bool
     97 */
     98function bp_friends_user_can_filter( $retval, $user_id, $capability, $site_id, $args ) {
     99        switch ( $capability ) {
     100                case 'bp_friends_manage_others_friendships':
     101                        // Fall back to the bp_moderate capability.
     102                        $retval = bp_user_can( $user_id, 'bp_moderate' );
     103                        break;
     104        }
     105
     106        return $retval;
     107}
     108add_filter( 'bp_user_can', 'bp_friends_user_can_filter', 10, 5 );
  • src/bp-friends/classes/class-bp-friends-rest-controller.php

    diff --git src/bp-friends/classes/class-bp-friends-rest-controller.php src/bp-friends/classes/class-bp-friends-rest-controller.php
    index 1cdd644de..425f3a902 100644
    class BP_Friends_REST_Controller extends WP_REST_Controller { 
    315315                        );
    316316                }
    317317
    318                 $is_moderator    = bp_current_user_can( 'bp_moderate' );
     318                $is_moderator    = bp_current_user_can( 'bp_friends_manage_others_friendships' );
    319319                $current_user_id = bp_loggedin_user_id();
    320320
    321321                /**
    322                  * - Only admins can create friendship requests for other people.
    323                  * - Admins can't create friendship requests to themselves from other people.
     322                 * - Only privileged users (usually admins) can create friendship requests for other people.
    324323                 * - Users can't create friendship requests to themselves from other people.
    325324                 */
    326325                if (
  • src/bp-groups/bp-groups-activity.php

    diff --git src/bp-groups/bp-groups-activity.php src/bp-groups/bp-groups-activity.php
    index cfc11f66c..44872686c 100644
    function groups_post_update( $args = '' ) { 
    583583        $content          = $r['content'];
    584584        $user_id          = (int) $r['user_id'];
    585585        $is_user_active   = bp_is_user_active( $user_id );
    586         $is_group_allowed = $group_id && ( bp_current_user_can( 'bp_moderate' ) || groups_is_user_member( $user_id, $group_id ) );
     586        $is_group_allowed = $group_id && ( bp_current_user_can( 'bp_groups_post_to_nonmember_group' ) || groups_is_user_member( $user_id, $group_id ) );
    587587
    588588        if ( ! $content || ! strlen( trim( $content ) ) || ! $is_user_active || ! $is_group_allowed ) {
    589589                if ( 'wp_error' === $r['error_type'] ) {
  • src/bp-groups/bp-groups-admin.php

    diff --git src/bp-groups/bp-groups-admin.php src/bp-groups/bp-groups-admin.php
    index 26d1154dc..821808d6b 100644
    function bp_groups_admin() { 
    602602 */
    603603function bp_groups_admin_edit() {
    604604
    605         if ( ! bp_current_user_can( 'bp_moderate' ) ) {
     605        if ( ! bp_current_user_can( 'bp_groups_use_admin_edit_screen' ) ) {
    606606                die( '-1' );
    607607        }
    608608
    function bp_groups_admin_edit() { 
    843843 */
    844844function bp_groups_admin_delete() {
    845845
    846         if ( ! bp_current_user_can( 'bp_moderate' ) ) {
     846        if ( ! bp_current_user_can( 'bp_groups_use_admin_edit_screen' ) ) {
    847847                die( '-1' );
    848848        }
    849849
    function bp_groups_process_group_type_update( $group_id ) { 
    13361336        check_admin_referer( 'bp-group-type-change-' . $group_id, 'bp-group-type-nonce' );
    13371337
    13381338        // Permission check.
    1339         if ( ! bp_current_user_can( 'bp_moderate' ) ) {
     1339        if ( ! bp_current_user_can( 'bp_groups_use_admin_edit_screen' ) ) {
    13401340                return;
    13411341        }
    13421342
    function bp_groups_admin_get_usernames_from_ids( $user_ids = array() ) { 
    14561456function bp_groups_admin_autocomplete_handler() {
    14571457
    14581458        // Bail if user user shouldn't be here, or is a large network.
    1459         if ( ! bp_current_user_can( 'bp_moderate' ) || bp_is_large_install() ) {
     1459        if ( ! bp_current_user_can( 'bp_groups_use_admin_edit_screen' ) || bp_is_large_install() ) {
    14601460                wp_die( -1 );
    14611461        }
    14621462
    function bp_groups_admin_process_group_type_bulk_changes( $doaction ) { 
    15121512        // Bail if nonce check fails.
    15131513        check_admin_referer( 'bp-bulk-groups-change-type-' . bp_loggedin_user_id(), 'bp-bulk-groups-change-type-nonce' );
    15141514
    1515         if ( ! bp_current_user_can( 'bp_moderate' )  ) {
     1515        if ( ! bp_current_user_can( 'bp_groups_use_admin_edit_screen' )  ) {
    15161516                return;
    15171517        }
    15181518
  • src/bp-groups/bp-groups-adminbar.php

    diff --git src/bp-groups/bp-groups-adminbar.php src/bp-groups/bp-groups-adminbar.php
    index d417566b5..47f9cc6d8 100644
    function bp_groups_group_admin_menu() { 
    3434        }
    3535
    3636        // Only show this menu to group admins and super admins.
    37         if ( ! bp_current_user_can( 'bp_moderate' ) && ! bp_group_is_admin() ) {
     37        if ( ! bp_current_user_can( 'bp_groups_manage_groups' ) && ! bp_group_is_admin() ) {
    3838                return false;
    3939        }
    4040
  • src/bp-groups/bp-groups-filters.php

    diff --git src/bp-groups/bp-groups-filters.php src/bp-groups/bp-groups-filters.php
    index c62eceefd..e3e8118da 100644
    function bp_groups_user_can_filter( $retval, $user_id, $capability, $site_id, $a 
    354354                                $retval = true;
    355355                        }
    356356                        break;
     357                case 'bp_groups_view_hidden_groups':
     358                case 'bp_groups_post_to_nonmember_group':
     359                case 'bp_groups_use_admin_edit_screen':
     360                case 'bp_groups_manage_groups':
     361                case 'bp_groups_is_item_admin':
     362                case 'bp_groups_moderate_invitations':
     363                case 'bp_groups_moderate_requests':
     364                        // Fall back to the bp_moderate capability.
     365                        $retval = bp_user_can( $user_id, 'bp_moderate' );
     366                        break;
    357367        }
    358368
    359369        return $retval;
  • src/bp-groups/classes/class-bp-groups-component.php

    diff --git src/bp-groups/classes/class-bp-groups-component.php src/bp-groups/classes/class-bp-groups-component.php
    index 06fedf6ca..3344a49d8 100644
    class BP_Groups_Component extends BP_Component { 
    298298                array_shift( $bp->action_variables );
    299299
    300300                // Using "item" not "group" for generic support in other components.
    301                 if ( bp_current_user_can( 'bp_moderate' ) ) {
     301                if ( bp_current_user_can( 'bp_groups_is_item_admin' ) ) {
    302302                        bp_update_is_item_admin( true, 'groups' );
    303303                } else {
    304304                        bp_update_is_item_admin( groups_is_user_admin( bp_loggedin_user_id(), $current_group->id ), 'groups' );
  • src/bp-groups/classes/class-bp-groups-group.php

    diff --git src/bp-groups/classes/class-bp-groups-group.php src/bp-groups/classes/class-bp-groups-group.php
    index 29be12cb3..c70801c5d 100644
    class BP_Groups_Group { 
    17591759         * Get a total group count for the site.
    17601760         *
    17611761         * Will include hidden groups in the count only if
    1762          * bp_current_user_can( 'bp_moderate' ).
     1762         * bp_current_user_can( 'bp_groups_view_hidden_groups' ).
    17631763         *
    17641764         * @since 1.6.0
    17651765         * @since 10.0.0 Added the `$skip_cache` parameter.
    class BP_Groups_Group { 
    17781778
    17791779                if ( false === $count || true === $skip_cache ) {
    17801780                        $hidden_sql = '';
    1781                         if ( ! bp_current_user_can( 'bp_moderate' ) ) {
     1781                        if ( ! bp_current_user_can( 'bp_groups_view_hidden_groups' ) ) {
    17821782                                $hidden_sql = "WHERE status != 'hidden'";
    17831783                        }
    17841784
  • src/bp-groups/classes/class-bp-groups-invites-rest-controller.php

    diff --git src/bp-groups/classes/class-bp-groups-invites-rest-controller.php src/bp-groups/classes/class-bp-groups-invites-rest-controller.php
    index 04759a546..9e6d75aee 100644
    class BP_Groups_Invites_REST_Controller extends WP_REST_Controller { 
    135135                }
    136136
    137137                // If the query is not restricted by group, user or inviter, limit it to the current user, if not an admin.
    138                 if ( ! $args['item_id'] && ! $args['user_id'] && ! $args['inviter_id'] && ! bp_current_user_can( 'bp_moderate' ) ) {
     138                if ( ! $args['item_id'] && ! $args['user_id'] && ! $args['inviter_id'] && ! bp_current_user_can( 'bp_groups_moderate_invitations' ) ) {
    139139                        $args['user_id'] = bp_loggedin_user_id();
    140140                }
    141141
    class BP_Groups_Invites_REST_Controller extends WP_REST_Controller { 
    239239                                                                'status' => 404,
    240240                                                        )
    241241                                                );
    242                                         } elseif ( bp_current_user_can( 'bp_moderate' ) || $this->can_see( $group->id ) ) {
     242                                        } elseif ( bp_current_user_can( 'bp_groups_moderate_invitations' ) || $this->can_see( $group->id ) ) {
    243243                                                /*
    244244                                                * Users can see invitations if they
    245245                                                * - are a site admin,
    class BP_Groups_Invites_REST_Controller extends WP_REST_Controller { 
    262262                                                        'status' => 404,
    263263                                                )
    264264                                        );
    265                                 } elseif ( bp_current_user_can( 'bp_moderate' ) || $user->ID === $current_user_id ) {
     265                                } elseif ( bp_current_user_can( 'bp_groups_moderate_invitations' ) || $user->ID === $current_user_id ) {
    266266                                        /*
    267267                                        * Users can see invitations if they:
    268268                                        * - are a site admin,
    class BP_Groups_Invites_REST_Controller extends WP_REST_Controller { 
    284284                                                        'status' => 404,
    285285                                                )
    286286                                        );
    287                                 } elseif ( bp_current_user_can( 'bp_moderate' ) || $inviter->ID === $current_user_id ) {
     287                                } elseif ( bp_current_user_can( 'bp_groups_moderate_invitations' ) || $inviter->ID === $current_user_id ) {
    288288                                        /*
    289289                                        * Users can see invitations if they:
    290290                                        * - are a site admin,
    class BP_Groups_Invites_REST_Controller extends WP_REST_Controller { 
    374374                                                        'status' => 404,
    375375                                                )
    376376                                        );
    377                                 } elseif ( bp_current_user_can( 'bp_moderate' ) || $this->can_see( $invite->item_id ) || in_array( $user_id, array( $invite->user_id, $invite->inviter_id ), true ) ) {
     377                                } elseif ( bp_current_user_can( 'bp_groups_moderate_invitations' ) || $this->can_see( $invite->item_id ) || in_array( $user_id, array( $invite->user_id, $invite->inviter_id ), true ) ) {
    378378                                        /*
    379379                                        * Users can see a specific invitation if they
    380380                                        * - are a site admin
    class BP_Groups_Invites_REST_Controller extends WP_REST_Controller { 
    510510                                                        'status' => 404,
    511511                                                )
    512512                                        );
    513                                 } elseif ( bp_current_user_can( 'bp_moderate' ) || bp_loggedin_user_id() === $inviter_id_arg ) {
     513                                } elseif ( bp_current_user_can( 'bp_groups_moderate_invitations' ) || bp_loggedin_user_id() === $inviter_id_arg ) {
    514514                                                $retval = true;
    515515                                } else {
    516516                                        $retval = new WP_Error(
    class BP_Groups_Invites_REST_Controller extends WP_REST_Controller { 
    616616                                                'status' => 404,
    617617                                        )
    618618                                );
    619                         } elseif ( bp_current_user_can( 'bp_moderate' ) || $user_id === $invite->user_id ) {
     619                        } elseif ( bp_current_user_can( 'bp_groups_moderate_invitations' ) || $user_id === $invite->user_id ) {
    620620                                $retval = true;
    621621                        } else {
    622622                                $retval = new WP_Error(
    class BP_Groups_Invites_REST_Controller extends WP_REST_Controller { 
    741741
    742742                // The inviter, the invitee, group admins, and site admins can all delete invites.
    743743                if ( true === $retval
    744                         && ! bp_current_user_can( 'bp_moderate' )
     744                        && ! bp_current_user_can( 'bp_groups_moderate_invitations' )
    745745                        && ! in_array( $user_id, array( $invite->user_id, $invite->inviter_id ), true )
    746746                        && ! groups_is_user_admin( $user_id, $invite->item_id )
    747747                        ) {
  • src/bp-groups/classes/class-bp-groups-member.php

    diff --git src/bp-groups/classes/class-bp-groups-member.php src/bp-groups/classes/class-bp-groups-member.php
    index 4719021b2..c3a1df28b 100644
    class BP_Groups_Member { 
    725725                        $filter_sql        = $wpdb->prepare( " AND ( g.name LIKE %s OR g.description LIKE %s )", $search_terms_like, $search_terms_like );
    726726                }
    727727
    728                 if ( $user_id !== bp_loggedin_user_id() && ! bp_current_user_can( 'bp_moderate' ) ) {
     728                if ( $user_id !== bp_loggedin_user_id() && ! bp_current_user_can( 'bp_groups_view_hidden_groups' ) ) {
    729729                        $hidden_sql = " AND g.status != 'hidden'";
    730730                }
    731731
    class BP_Groups_Member { 
    746746        public static function total_group_count( $user_id = 0 ) {
    747747                global $wpdb;
    748748
    749                 if ( empty( $user_id ) )
     749                if ( empty( $user_id ) ) {
    750750                        $user_id = bp_displayed_user_id();
     751                }
    751752
    752753                $bp = buddypress();
    753754
    754                 if ( $user_id != bp_loggedin_user_id() && !bp_current_user_can( 'bp_moderate' ) ) {
     755                if ( (int) $user_id !== bp_loggedin_user_id() && ! bp_current_user_can( 'bp_groups_view_hidden_groups' ) ) {
    755756                        return (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id AND g.status != 'hidden' AND m.user_id = %d AND m.is_confirmed = 1 AND m.is_banned = 0", $user_id ) );
    756757                } else {
    757758                        return (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id AND m.user_id = %d AND m.is_confirmed = 1 AND m.is_banned = 0", $user_id ) );
  • src/bp-groups/classes/class-bp-groups-membership-request-rest-controller.php

    diff --git src/bp-groups/classes/class-bp-groups-membership-request-rest-controller.php src/bp-groups/classes/class-bp-groups-membership-request-rest-controller.php
    index 9711a6117..038db46ed 100644
    class BP_Groups_Membership_Request_REST_Controller extends WP_REST_Controller { 
    125125                );
    126126
    127127                // If the query is not restricted by group or user, limit it to the current user, if not an admin.
    128                 if ( ! $args['item_id'] && ! $args['user_id'] && ! bp_current_user_can( 'bp_moderate' ) ) {
     128                if ( ! $args['item_id'] && ! $args['user_id'] && ! bp_current_user_can( 'bp_groups_moderate_requests' ) ) {
    129129                        $args['user_id'] = bp_loggedin_user_id();
    130130                }
    131131
    class BP_Groups_Membership_Request_REST_Controller extends WP_REST_Controller { 
    188188                        $group       = $this->groups_endpoint->get_group_object( $request->get_param( 'group_id' ) );
    189189
    190190                        // If the query is not restricted by group or user, limit it to the current user, if not an admin.
    191                         if ( ! $request->get_param( 'group_id' ) && ! $request->get_param( 'user_id' ) && ! bp_current_user_can( 'bp_moderate' ) ) {
     191                        if ( ! $request->get_param( 'group_id' ) && ! $request->get_param( 'user_id' ) && ! bp_current_user_can( 'bp_groups_moderate_requests' ) ) {
    192192                                $user_id_arg = $user_id;
    193193                        }
    194194                        $user = bp_rest_get_user( $user_id_arg );
    class BP_Groups_Membership_Request_REST_Controller extends WP_REST_Controller { 
    218218                                        )
    219219                                );
    220220                        } elseif (
    221                                 bp_current_user_can( 'bp_moderate' )
     221                                bp_current_user_can( 'bp_groups_moderate_requests' )
    222222                                || ( $request->get_param( 'group_id' ) && groups_is_user_admin( $user_id, $request->get_param( 'group_id' ) ) )
    223223                                || $user_id_arg === $user_id
    224224                        ) {
    class BP_Groups_Membership_Request_REST_Controller extends WP_REST_Controller { 
    309309                                                'status' => 404,
    310310                                        )
    311311                                );
    312                         } elseif ( bp_current_user_can( 'bp_moderate' ) || $user_id === $group_request->user_id || groups_is_user_admin( $user_id, $group_request->item_id ) ) {
     312                        } elseif ( bp_current_user_can( 'bp_groups_moderate_requests' ) || $user_id === $group_request->user_id || groups_is_user_admin( $user_id, $group_request->item_id ) ) {
    313313                                $retval = true;
    314314                        } else {
    315315                                $retval = new WP_Error(
    class BP_Groups_Membership_Request_REST_Controller extends WP_REST_Controller { 
    435435                                __( 'Invalid group ID.', 'buddypress' ),
    436436                                array( 'status' => 404 )
    437437                        );
    438                 } elseif ( bp_current_user_can( 'bp_moderate' ) || $user_id === $user_id_arg ) {
     438                } elseif ( bp_current_user_can( 'bp_groups_moderate_requests' ) || $user_id === $user_id_arg ) {
    439439                        $retval = true;
    440440                } else {
    441441                        $retval = new WP_Error(
    class BP_Groups_Membership_Request_REST_Controller extends WP_REST_Controller { 
    532532                                        'status' => 404,
    533533                                )
    534534                        );
    535                 } elseif ( bp_current_user_can( 'bp_moderate' ) || groups_is_user_admin( $user_id, $group_request->item_id ) ) {
     535                } elseif ( bp_current_user_can( 'bp_groups_moderate_requests' ) || groups_is_user_admin( $user_id, $group_request->item_id ) ) {
    536536                        $retval = true;
    537537                } else {
    538538                        $retval = new WP_Error(
    class BP_Groups_Membership_Request_REST_Controller extends WP_REST_Controller { 
    657657                                        'status' => 404,
    658658                                )
    659659                        );
    660                 } elseif ( bp_current_user_can( 'bp_moderate' ) || $user_id === $group_request->user_id || groups_is_user_admin( $user_id, $group_request->item_id ) ) {
     660                } elseif ( bp_current_user_can( 'bp_groups_moderate_requests' ) || $user_id === $group_request->user_id || groups_is_user_admin( $user_id, $group_request->item_id ) ) {
    661661                        $retval = true;
    662662                } else {
    663663                        $retval = new WP_Error(
  • src/bp-groups/classes/class-bp-groups-membership-rest-controller.php

    diff --git src/bp-groups/classes/class-bp-groups-membership-rest-controller.php src/bp-groups/classes/class-bp-groups-membership-rest-controller.php
    index 43d12c224..9553b153e 100644
    class BP_Groups_Membership_REST_Controller extends WP_REST_Controller { 
    192192                                                'status' => 404,
    193193                                        )
    194194                                );
    195                         } elseif ( bp_current_user_can( 'bp_moderate' ) || 'public' === $group->status || groups_is_user_member( bp_loggedin_user_id(), $group->id ) ) {
     195                        } elseif ( bp_current_user_can( 'bp_groups_view_hidden_groups' ) || 'public' === $group->status || groups_is_user_member( bp_loggedin_user_id(), $group->id ) ) {
    196196                                $retval = true;
    197197                        }
    198198                }
  • src/bp-groups/classes/class-bp-groups-rest-controller.php

    diff --git src/bp-groups/classes/class-bp-groups-rest-controller.php src/bp-groups/classes/class-bp-groups-rest-controller.php
    index 176ac3b01..9c633f841 100644
    class BP_Groups_REST_Controller extends WP_REST_Controller { 
    10601060                }
    10611061
    10621062                // Check for moderators or if user is a member of the group.
    1063                 return ( bp_current_user_can( 'bp_moderate' ) || groups_is_user_member( bp_loggedin_user_id(), $group->id ) );
     1063                return ( bp_current_user_can( 'bp_groups_view_hidden_groups' ) || groups_is_user_member( bp_loggedin_user_id(), $group->id ) );
    10641064        }
    10651065
    10661066        /**
    class BP_Groups_REST_Controller extends WP_REST_Controller { 
    10721072         * @return bool
    10731073         */
    10741074        protected function can_see_hidden_groups( $request ) {
    1075                 if ( bp_current_user_can( 'bp_moderate' ) ) {
     1075                if ( bp_current_user_can( 'bp_groups_view_hidden_groups' ) ) {
    10761076                        return true;
    10771077                }
    10781078
  • src/bp-groups/classes/class-bp-groups-template.php

    diff --git src/bp-groups/classes/class-bp-groups-template.php src/bp-groups/classes/class-bp-groups-template.php
    index 759a926aa..ecc6bf849 100644
    class BP_Groups_Template { 
    198198                $this->pag_page = bp_sanitize_pagination_arg( $this->pag_arg, $r['page']     );
    199199                $this->pag_num  = bp_sanitize_pagination_arg( 'num',          $r['per_page'] );
    200200
    201                 if ( bp_current_user_can( 'bp_moderate' ) || ( is_user_logged_in() && $user_id == bp_loggedin_user_id() ) ) {
     201                if ( bp_current_user_can( 'bp_groups_view_hidden_groups' ) || ( is_user_logged_in() && $user_id == bp_loggedin_user_id() ) ) {
    202202                        $show_hidden = true;
    203203                }
    204204
  • src/bp-groups/screens/single/admin/delete-group.php

    diff --git src/bp-groups/screens/single/admin/delete-group.php src/bp-groups/screens/single/admin/delete-group.php
    index ce83f25b7..59b3782ca 100644
    function groups_screen_group_admin_delete_group() { 
    1818                return;
    1919        }
    2020
    21         if ( ! bp_is_item_admin() && ! bp_current_user_can( 'bp_moderate' ) ) {
     21        if ( ! bp_is_item_admin() && ! bp_current_user_can( 'bp_groups_manage_groups' ) ) {
    2222                return;
    2323        }
    2424
  • src/bp-members/actions/delete-avatar.php

    diff --git src/bp-members/actions/delete-avatar.php src/bp-members/actions/delete-avatar.php
    index c7b5e258c..282b4a566 100644
    function bp_members_action_delete_avatar() { 
    2424        // Check the nonce.
    2525        check_admin_referer( 'bp_delete_avatar_link' );
    2626
    27         if ( ! bp_is_my_profile() && ! bp_current_user_can( 'bp_moderate' ) ) {
     27        if ( ! bp_is_my_profile() && ! bp_current_user_can( 'bp_members_manage_members' ) ) {
    2828                return false;
    2929        }
    3030
  • src/bp-members/bp-members-filters.php

    diff --git src/bp-members/bp-members-filters.php src/bp-members/bp-members-filters.php
    index eb8f3a090..dc7e16e95 100644
    function bp_members_user_can_filter( $retval, $user_id, $capability, $site_id, $ 
    266266
    267267        switch ( $capability ) {
    268268                case 'bp_members_manage_membership_requests':
     269                case 'bp_members_manage_members':
    269270                        $retval = bp_user_can( $user_id, 'bp_moderate' );
    270271                        break;
    271272
  • src/bp-members/bp-members-functions.php

    diff --git src/bp-members/bp-members-functions.php src/bp-members/bp-members-functions.php
    index 4e8174d29..a29540efc 100644
    function bp_core_can_edit_settings() { 
    14741474                $status = true;
    14751475        } elseif ( is_super_admin( bp_displayed_user_id() ) && ! is_super_admin() ) {
    14761476                $status = false;
    1477         } elseif ( bp_current_user_can( 'bp_moderate' ) || current_user_can( 'edit_users' ) ) {
     1477        } elseif ( bp_current_user_can( 'bp_members_manage_members' ) || current_user_can( 'edit_users' ) ) {
    14781478                $status = true;
    14791479        }
    14801480
  • src/bp-members/bp-members-notifications.php

    diff --git src/bp-members/bp-members-notifications.php src/bp-members/bp-members-notifications.php
    index 922129d5a..8314987d5 100644
    add_action( 'admin_footer', 'bp_members_mark_read_submitted_membership_request_n 
    231231function members_screen_notification_settings() {
    232232
    233233        // Bail early if invitations and requests are not allowed--they are the only members notification so far.
    234         if ( ! bp_get_members_invitations_allowed() && ( ! bp_get_membership_requests_required() || ! user_can( bp_displayed_user_id(), 'bp_moderate' ) ) ) {
     234        if ( ! bp_get_members_invitations_allowed() && ( ! bp_get_membership_requests_required() || ! bp_user_can( bp_displayed_user_id(), 'bp_members_manage_membership_requests' ) ) ) {
    235235                return;
    236236        }
    237237        ?>
    function members_screen_notification_settings() { 
    273273                                <?php
    274274                        endif;
    275275
    276                         if ( bp_get_membership_requests_required() && user_can( bp_displayed_user_id(), 'bp_moderate' ) ) :
     276                        if ( bp_get_membership_requests_required() && bp_user_can( bp_displayed_user_id(), 'bp_members_manage_membership_requests' ) ) :
    277277                                if ( ! $allow_request_emails = bp_get_user_meta( bp_displayed_user_id(), 'notification_members_membership_request', true ) ) {
    278278                                        $allow_request_emails = 'yes';
    279279                                }
  • src/bp-members/classes/class-bp-members-admin.php

    diff --git src/bp-members/classes/class-bp-members-admin.php src/bp-members/classes/class-bp-members-admin.php
    index 10dc86fee..76438459f 100644
    class BP_Members_Admin { 
    495495                if ( $this->current_user_id === $user_id ) {
    496496                        $retval = true;
    497497
    498                 // Trust the 'bp_moderate' capability.
     498                // Trust the 'bp_members_manage_members' capability.
    499499                } else {
    500                         $retval = ( bp_current_user_can( 'edit_users' ) || bp_current_user_can( 'bp_moderate' ) );
     500                        $retval = ( bp_current_user_can( 'edit_users' ) || bp_current_user_can( 'bp_members_manage_members' ) );
    501501                }
    502502
    503503                return $retval;
    class BP_Members_Admin { 
    12431243         */
    12441244        public function user_admin() {
    12451245
    1246                 if ( ! bp_current_user_can( 'edit_users' ) && ! bp_current_user_can( 'bp_moderate' ) && empty( $this->is_self_profile ) ) {
     1246                if ( ! bp_current_user_can( 'edit_users' ) && ! bp_current_user_can( 'bp_members_manage_members' ) && empty( $this->is_self_profile ) ) {
    12471247                        die( '-1' );
    12481248                }
    12491249
    class BP_Members_Admin { 
    15981598                $types        = bp_get_member_types( array(), 'objects' );
    15991599                $current_type = (array) bp_get_member_type( $user->ID, false );
    16001600                $types_count  = count( array_filter( $current_type ) );
    1601                 $disabled     = ! bp_current_user_can( 'edit_users' ) && ! bp_current_user_can( 'bp_moderate' );
     1601                $disabled     = ! bp_current_user_can( 'edit_users' ) && ! bp_current_user_can( 'bp_members_manage_members' );
    16021602                ?>
    16031603
    16041604                <label for="bp-members-profile-member-type" class="screen-reader-text">
    class BP_Members_Admin { 
    16381638                check_admin_referer( 'bp-member-type-change-' . $user_id, 'bp-member-type-nonce' );
    16391639
    16401640                // Permission check.
    1641                 if ( ! bp_current_user_can( 'edit_users' ) && ! bp_current_user_can( 'bp_moderate' ) ) {
     1641                if ( ! bp_current_user_can( 'edit_users' ) && ! bp_current_user_can( 'bp_members_manage_members' ) ) {
    16421642                        return;
    16431643                }
    16441644
    class BP_Members_Admin { 
    16941694                $args['wp_http_referer'] = urlencode( $wp_http_referer );
    16951695
    16961696                // Add the "Extended" link if the current user can edit this user.
    1697                 if ( current_user_can( 'edit_user', $user->ID ) || bp_current_user_can( 'bp_moderate' ) ) {
     1697                if ( current_user_can( 'edit_user', $user->ID ) || bp_current_user_can( 'bp_members_manage_members' ) ) {
    16981698
    16991699                        // Add query args and setup the Extended link.
    17001700                        $edit_profile      = add_query_arg( $args, $this->edit_profile_url );
  • src/bp-members/classes/class-bp-members-component.php

    diff --git src/bp-members/classes/class-bp-members-component.php src/bp-members/classes/class-bp-members-component.php
    index 78fe69239..3d1f2ca3b 100644
    class BP_Members_Component extends BP_Component { 
    435435                        }
    436436
    437437                        /*
    438                          * If we're on a spammer's profile page, only users with the 'bp_moderate' cap
     438                         * If we're on a spammer's profile page, only users with the 'bp_members_manage_members' cap
    439439                         * can view subpages on the spammer's profile.
    440440                         *
    441441                         * users without the cap trying to access a spammer's subnav page will get
    442442                         * redirected to the root of the spammer's profile page.  this occurs by
    443443                         * by removing the component in the canonical stack.
    444444                         */
    445                         if ( bp_is_user_spammer( bp_displayed_user_id() ) && ! bp_current_user_can( 'bp_moderate' ) ) {
     445                        if ( bp_is_user_spammer( bp_displayed_user_id() ) && ! bp_current_user_can( 'bp_members_manage_members' ) ) {
    446446                                unset( $bp->canonical_stack['component'] );
    447447                        }
    448448                }
    class BP_Members_Component extends BP_Component { 
    846846
    847847                                // If the member is marked as a spammer, 404 (unless logged-in user is a super admin).
    848848                                if ( bp_is_user_spammer( $member->ID ) ) {
    849                                         if ( bp_current_user_can( 'bp_moderate' ) ) {
     849                                        if ( bp_current_user_can( 'bp_members_manage_members' ) ) {
    850850                                                bp_core_add_message( __( 'This user has been marked as a spammer. Only site admins can view this profile.', 'buddypress' ), 'warning' );
    851851                                        } else {
    852852                                                bp_do_404();
  • src/bp-members/classes/class-bp-members-rest-controller.php

    diff --git src/bp-members/classes/class-bp-members-rest-controller.php src/bp-members/classes/class-bp-members-rest-controller.php
    index 1a21790d4..ac93c9ca0 100644
    class BP_Members_REST_Controller extends WP_REST_Users_Controller { 
    287287                                        __( 'Sorry, you are not allowed to view members with the edit context.', 'buddypress' ),
    288288                                        array( 'status' => rest_authorization_required_code() )
    289289                                );
    290                         } elseif ( bp_current_user_can( 'bp_moderate' ) || ! bp_is_user_spammer( $user->ID ) ) {
     290                        } elseif ( bp_current_user_can( 'bp_members_manage_members' ) || ! bp_is_user_spammer( $user->ID ) ) {
    291291                                $retval = true;
    292292                        }
    293293                }
    class BP_Members_REST_Controller extends WP_REST_Users_Controller { 
    362362                        }
    363363
    364364                        if ( get_current_user_id() === $user->ID ) {
    365                                 if ( $member_type_edit && ! bp_current_user_can( 'bp_moderate' ) ) {
     365                                if ( $member_type_edit && ! bp_current_user_can( 'bp_members_manage_members' ) ) {
    366366                                        $retval = $error;
    367367                                } else {
    368368                                        $retval = parent::update_item_permissions_check( $request );
  • src/bp-members/screens/change-avatar.php

    diff --git src/bp-members/screens/change-avatar.php src/bp-members/screens/change-avatar.php
    index e48f41e48..c054bd609 100644
     
    1414 */
    1515function bp_members_screen_change_avatar() {
    1616        // Bail if not the correct screen.
    17         if ( ! bp_is_my_profile() && ! bp_current_user_can( 'bp_moderate' ) ) {
     17        if ( ! bp_is_my_profile() && ! bp_current_user_can( 'bp_members_manage_members' ) ) {
    1818                return;
    1919        }
    2020
  • src/bp-members/screens/change-cover-image.php

    diff --git src/bp-members/screens/change-cover-image.php src/bp-members/screens/change-cover-image.php
    index 2b7321bc8..025f7ead0 100644
     
    1414 */
    1515function bp_members_screen_change_cover_image() {
    1616        // Bail if not the correct screen.
    17         if ( ! bp_is_my_profile() && ! bp_current_user_can( 'bp_moderate' ) ) {
     17        if ( ! bp_is_my_profile() && ! bp_current_user_can( 'bp_members_manage_members' ) ) {
    1818                return false;
    1919        }
    2020
  • src/bp-messages/actions/bulk-manage.php

    diff --git src/bp-messages/actions/bulk-manage.php src/bp-messages/actions/bulk-manage.php
    index 42ef3b845..f2ad2c1d1 100644
    function bp_messages_action_bulk_manage() { 
    4040
    4141        // Make sure the user has access to all notifications before managing them.
    4242        foreach ( $messages as $message ) {
    43                 if ( ! messages_check_thread_access( $message ) && ! bp_current_user_can( 'bp_moderate' ) ) {
     43                if ( ! messages_check_thread_access( $message ) && ! bp_current_user_can( 'bp_messages_manage_member_messages' ) ) {
    4444                        bp_core_add_message( __( 'There was a problem managing your messages.', 'buddypress' ), 'error' );
    4545                        bp_core_redirect( $redirect );
    4646                }
  • src/bp-messages/actions/read.php

    diff --git src/bp-messages/actions/read.php src/bp-messages/actions/read.php
    index fa383d70a..90a5472cd 100644
    function bp_messages_action_mark_read() { 
    3636        }
    3737
    3838        // Check access to the message and mark as read.
    39         if ( messages_check_thread_access( $id ) || bp_current_user_can( 'bp_moderate' ) ) {
     39        if ( messages_check_thread_access( $id ) || bp_current_user_can( 'bp_messages_manage_member_messages' ) ) {
    4040                messages_mark_thread_read( $id );
    4141                bp_core_add_message( __( 'Message marked as read.', 'buddypress' ) );
    4242        } else {
  • src/bp-messages/actions/unread.php

    diff --git src/bp-messages/actions/unread.php src/bp-messages/actions/unread.php
    index 0a86781af..0fe19213e 100644
    function bp_messages_action_mark_unread() { 
    3636        }
    3737
    3838        // Check access to the message and mark unread.
    39         if ( messages_check_thread_access( $id ) || bp_current_user_can( 'bp_moderate' ) ) {
     39        if ( messages_check_thread_access( $id ) || bp_current_user_can( 'bp_messages_manage_member_messages' ) ) {
    4040                messages_mark_thread_unread( $id );
    4141                bp_core_add_message( __( 'Message marked unread.', 'buddypress' ) );
    4242        } else {
  • src/bp-messages/actions/view.php

    diff --git src/bp-messages/actions/view.php src/bp-messages/actions/view.php
    index fc80f6860..027a3ed62 100644
    function messages_action_conversation() { 
    2222        // Get the thread ID from the action variable.
    2323        $thread_id = (int) bp_action_variable( 0 );
    2424
    25         if ( ! messages_is_valid_thread( $thread_id ) || ( ! messages_check_thread_access( $thread_id ) && ! bp_current_user_can( 'bp_moderate' ) ) ) {
     25        if ( ! messages_is_valid_thread( $thread_id ) || ( ! messages_check_thread_access( $thread_id ) && ! bp_current_user_can( 'bp_messages_manage_member_messages' ) ) ) {
    2626                return;
    2727        }
    2828
  • src/bp-messages/bp-messages-filters.php

    diff --git src/bp-messages/bp-messages-filters.php src/bp-messages/bp-messages-filters.php
    index 70ab91fdb..c3e465af1 100644
    add_filter( 'wp_privacy_personal_data_exporters', 'bp_messages_register_personal 
    101101function bp_messages_enforce_current_user( $args = array() ) {
    102102
    103103        // Non-community moderators can only ever see their own messages.
    104         if ( is_user_logged_in() && ! bp_current_user_can( 'bp_moderate' ) ) {
     104        if ( is_user_logged_in() && ! bp_current_user_can( 'bp_messages_manage_member_messages' ) ) {
    105105                $_user_id = (int) bp_loggedin_user_id();
    106106                if ( $_user_id !== (int) $args['user_id'] ) {
    107107                        $args['user_id'] = $_user_id;
    function bp_messages_register_personal_data_exporter( $exporters ) { 
    154154
    155155        return $exporters;
    156156}
     157
     158/**
     159 * Filter the bp_user_can value to determine what the user can do in the messages component.
     160 *
     161 * @since 8.0.0
     162 *
     163 * @param bool   $retval     Whether or not the current user has the capability.
     164 * @param int    $user_id    User ID.
     165 * @param string $capability The capability being checked for.
     166 * @param int    $site_id    Site ID. Defaults to the BP root blog.
     167 * @param array  $args       Array of extra arguments passed.
     168 *
     169 * @return bool
     170 */
     171function bp_messages_user_can_filter( $retval, $user_id, $capability, $site_id, $args = array() ) {
     172        switch ( $capability ) {
     173                case 'bp_messages_manage_member_messages':
     174                        $retval = bp_user_can( $user_id, 'bp_moderate' );
     175                        break;
     176        }
     177
     178        return $retval;
     179}
     180add_filter( 'bp_user_can', 'bp_messages_user_can_filter', 10, 5 );
     181 No newline at end of file
  • src/bp-messages/classes/class-bp-messages-rest-controller.php

    diff --git src/bp-messages/classes/class-bp-messages-rest-controller.php src/bp-messages/classes/class-bp-messages-rest-controller.php
    index 7efb2e608..78abaf741 100644
    class BP_Messages_REST_Controller extends WP_REST_Controller { 
    201201                                                'status' => 404,
    202202                                        )
    203203                                );
    204                         } elseif ( (int) bp_loggedin_user_id() === $user->ID || bp_current_user_can( 'bp_moderate' ) ) {
     204                        } elseif ( (int) bp_loggedin_user_id() === $user->ID || bp_current_user_can( 'bp_messages_manage_member_messages' ) ) {
    205205                                $retval = true;
    206206                        } else {
    207207                                $retval = new WP_Error(
    class BP_Messages_REST_Controller extends WP_REST_Controller { 
    314314                                                'status' => 404,
    315315                                        )
    316316                                );
    317                         } elseif ( bp_current_user_can( 'bp_moderate' ) || messages_check_thread_access( $id, $user_id ) ) {
     317                        } elseif ( bp_current_user_can( 'bp_messages_manage_member_messages' ) || messages_check_thread_access( $id, $user_id ) ) {
    318318                                $retval = true;
    319319                        }
    320320                }
    class BP_Messages_REST_Controller extends WP_REST_Controller { 
    412412
    413413                        // It's an existing thread.
    414414                        if ( $thread_id ) {
    415                                 if ( bp_current_user_can( 'bp_moderate' ) || ( messages_is_valid_thread( $thread_id ) && messages_check_thread_access( $thread_id ) ) ) {
     415                                if ( bp_current_user_can( 'bp_messages_manage_member_messages' ) || ( messages_is_valid_thread( $thread_id ) && messages_check_thread_access( $thread_id ) ) ) {
    416416                                        $retval = true;
    417417                                }
    418418                        } else {
    class BP_Messages_REST_Controller extends WP_REST_Controller { 
    492492                 */
    493493                $can_edit_item_meta = apply_filters(
    494494                        'bp_rest_messages_can_edit_item_meta',
    495                         bp_loggedin_user_id() === $updated_message->sender_id || bp_current_user_can( 'bp_moderate' ),
     495                        bp_loggedin_user_id() === $updated_message->sender_id || bp_current_user_can( 'bp_messages_manage_member_messages' ),
    496496                        $updated_message,
    497497                        $request
    498498                );
  • src/bp-messages/screens/view.php

    diff --git src/bp-messages/screens/view.php src/bp-messages/screens/view.php
    index ea631440a..0fedc6eb5 100644
    function messages_screen_conversation() { 
    3232        }
    3333
    3434        // No access.
    35         if ( ( ! messages_check_thread_access( $thread_id ) || ! bp_is_my_profile() ) && ! bp_current_user_can( 'bp_moderate' ) ) {
     35        if ( ( ! messages_check_thread_access( $thread_id ) || ! bp_is_my_profile() ) && ! bp_current_user_can( 'bp_messages_manage_member_messages' ) ) {
    3636                // If not logged in, prompt for login.
    3737                if ( ! is_user_logged_in() ) {
    3838                        bp_core_no_access();
  • src/bp-templates/bp-legacy/buddypress-functions.php

    diff --git src/bp-templates/bp-legacy/buddypress-functions.php src/bp-templates/bp-legacy/buddypress-functions.php
    index 809dc0ac7..d75c22dfe 100644
    function bp_legacy_theme_delete_activity_comment() { 
    11961196        $comment = new BP_Activity_Activity( $_POST['id'] );
    11971197
    11981198        // Check access.
    1199         if ( ! bp_current_user_can( 'bp_moderate' ) && $comment->user_id != bp_loggedin_user_id() ) {
     1199        if ( ! bp_current_user_can( 'bp_activity_manage_activity_items' ) && $comment->user_id != bp_loggedin_user_id() ) {
    12001200                exit( '-1' );
    12011201        }
    12021202
    function bp_legacy_theme_ajax_messages_send_reply() { 
    17281728        $thread_id = (int) $_POST['thread_id'];
    17291729
    17301730        // Cannot respond to a thread you're not already a recipient on.
    1731         if ( ! bp_current_user_can( 'bp_moderate' ) && ( ! messages_is_valid_thread( $thread_id ) || ! messages_check_thread_access( $thread_id ) ) ) {
     1731        if ( ! bp_current_user_can( 'bp_activity_manage_activity_items' ) && ( ! messages_is_valid_thread( $thread_id ) || ! messages_check_thread_access( $thread_id ) ) ) {
    17321732                echo "-1<div id='message' class='error'><p>" . esc_html__( 'There was a problem sending that reply. Please try again.', 'buddypress' ) . '</p></div>';
    17331733                die;
    17341734        }
  • src/bp-templates/bp-nouveau/includes/groups/functions.php

    diff --git src/bp-templates/bp-nouveau/includes/groups/functions.php src/bp-templates/bp-nouveau/includes/groups/functions.php
    index 4ec4f05f7..3261541ca 100644
    function bp_nouveau_groups_screen_invites_restriction() { 
    490490                // Nonce check.
    491491                check_admin_referer( 'bp_nouveau_group_invites_settings' );
    492492
    493                 if ( bp_is_my_profile() || bp_current_user_can( 'bp_moderate' ) ) {
     493                if ( bp_is_my_profile() || bp_current_user_can( 'bp_members_manage_members' ) ) {
    494494                        if ( empty( $_POST['account-group-invites-preferences'] ) ) {
    495495                                bp_delete_user_meta( bp_displayed_user_id(), '_bp_nouveau_restrict_invites_to_friends' );
    496496                        } else {
  • src/bp-templates/bp-nouveau/includes/messages/ajax.php

    diff --git src/bp-templates/bp-nouveau/includes/messages/ajax.php src/bp-templates/bp-nouveau/includes/messages/ajax.php
    index 55a1ced8c..db7735a15 100644
    function bp_nouveau_ajax_messages_send_reply() { 
    186186
    187187        $thread_id = (int) $_POST['thread_id'];
    188188
    189         if ( ! bp_current_user_can( 'bp_moderate' ) && ( ! messages_is_valid_thread( $thread_id ) || ! messages_check_thread_access( $thread_id ) ) ) {
     189        if ( ! bp_current_user_can( 'bp_messages_manage_member_messages' ) && ( ! messages_is_valid_thread( $thread_id ) || ! messages_check_thread_access( $thread_id ) ) ) {
    190190                wp_send_json_error( $response );
    191191        }
    192192
    function bp_nouveau_ajax_messages_thread_read() { 
    439439        $thread_id  = (int) $_POST['id'];
    440440        $message_id = (int) $_POST['message_id'];
    441441
    442         if ( ! messages_is_valid_thread( $thread_id ) || ( ! messages_check_thread_access( $thread_id ) && ! bp_current_user_can( 'bp_moderate' ) ) ) {
     442        if ( ! messages_is_valid_thread( $thread_id ) || ( ! messages_check_thread_access( $thread_id ) && ! bp_current_user_can( 'bp_messages_manage_member_messages' ) ) ) {
    443443                wp_send_json_error();
    444444        }
    445445
    function bp_nouveau_ajax_get_thread_messages() { 
    478478
    479479        $thread_id = (int) $_POST['id'];
    480480
    481         if ( ! messages_is_valid_thread( $thread_id ) || ( ! messages_check_thread_access( $thread_id ) && ! bp_current_user_can( 'bp_moderate' ) ) ) {
     481        if ( ! messages_is_valid_thread( $thread_id ) || ( ! messages_check_thread_access( $thread_id ) && ! bp_current_user_can( 'bp_messages_manage_member_messages' ) ) ) {
    482482                wp_send_json_error();
    483483        }
    484484
    function bp_nouveau_ajax_delete_thread_messages() { 
    626626        $thread_ids = wp_parse_id_list( $_POST['id'] );
    627627
    628628        foreach ( $thread_ids as $thread_id ) {
    629                 if ( ! messages_check_thread_access( $thread_id ) && ! bp_current_user_can( 'bp_moderate' ) ) {
     629                if ( ! messages_check_thread_access( $thread_id ) && ! bp_current_user_can( 'bp_messages_manage_member_messages' ) ) {
    630630                        wp_send_json_error( $response );
    631631                }
    632632
    function bp_nouveau_ajax_readunread_thread_messages() { 
    779779        }
    780780
    781781        foreach ( $thread_ids as $thread_id ) {
    782                 if ( ! messages_check_thread_access( $thread_id ) && ! bp_current_user_can( 'bp_moderate' ) ) {
     782                if ( ! messages_check_thread_access( $thread_id ) && ! bp_current_user_can( 'bp_messages_manage_member_messages' ) ) {
    783783                        wp_send_json_error( $response );
    784784                }
    785785
    function bp_nouveau_ajax_exit_thread_messages() { 
    865865        $thread_ids = wp_parse_id_list( $_POST['id'] );
    866866
    867867        foreach ( $thread_ids as $thread_id ) {
    868                 if ( ! messages_check_thread_access( $thread_id ) && ! bp_current_user_can( 'bp_moderate' ) ) {
     868                if ( ! messages_check_thread_access( $thread_id ) && ! bp_current_user_can( 'bp_messages_manage_member_messages' ) ) {
    869869                        wp_send_json_error( $response );
    870870                }
    871871
  • src/bp-xprofile/bp-xprofile-caps.php

    diff --git src/bp-xprofile/bp-xprofile-caps.php src/bp-xprofile/bp-xprofile-caps.php
    index 7c58f2844..37f84d391 100644
    function bp_xprofile_map_meta_caps( $caps, $cap, $user_id, $args ) { 
    5050                        }
    5151
    5252                        // Friends don't let friends edit each other's visibility.
    53                         if ( $profile_user_id != bp_displayed_user_id() && ! bp_current_user_can( 'bp_moderate' ) ) {
     53                        if ( $profile_user_id != bp_displayed_user_id() && ! bp_current_user_can( 'bp_members_manage_members' ) ) {
    5454                                $caps[] = 'do_not_allow';
    5555                                break;
    5656                        }
  • src/bp-xprofile/bp-xprofile-filters.php

    diff --git src/bp-xprofile/bp-xprofile-filters.php src/bp-xprofile/bp-xprofile-filters.php
    index b7cb2268b..5ee6e845f 100644
    function _bp_xprofile_signup_start_backcompat() { 
    776776        add_action( 'bp_locate_template', '_bp_xprofile_signup_check_backcompat', 10, 2 );
    777777}
    778778add_action( 'bp_core_screen_signup', '_bp_xprofile_signup_start_backcompat' );
     779
     780/**
     781 * Filter the bp_user_can value to determine what the user can do in the messages component.
     782 *
     783 * @since 8.0.0
     784 *
     785 * @param bool   $retval     Whether or not the current user has the capability.
     786 * @param int    $user_id    User ID.
     787 * @param string $capability The capability being checked for.
     788 * @param int    $site_id    Site ID. Defaults to the BP root blog.
     789 * @param array  $args       Array of extra arguments passed.
     790 *
     791 * @return bool
     792 */
     793function bp_xprofile_user_can_filter( $retval, $user_id, $capability, $site_id, $args = array() ) {
     794        switch ( $capability ) {
     795                case 'bp_xprofile_create_field_groups':
     796                case 'bp_xprofile_create_fields':
     797                        $retval = bp_user_can( $user_id, 'bp_moderate' );
     798                        break;
     799        }
     800
     801        return $retval;
     802}
     803add_filter( 'bp_user_can', 'bp_xprofile_user_can_filter', 10, 5 );
  • src/bp-xprofile/bp-xprofile-functions.php

    diff --git src/bp-xprofile/bp-xprofile-functions.php src/bp-xprofile/bp-xprofile-functions.php
    index 7a7a293f0..b098ccd3e 100644
    function bp_xprofile_get_hidden_field_types_for_user( $displayed_user_id = 0, $c 
    13061306
    13071307                // Nothing's private when viewing your own profile, or when the
    13081308                // current user is an admin.
    1309                 if ( $displayed_user_id == $current_user_id || bp_current_user_can( 'bp_moderate' ) ) {
     1309                if ( $displayed_user_id == $current_user_id || bp_current_user_can( 'bp_members_manage_members' ) ) {
    13101310                        $hidden_levels = array();
    13111311
    13121312                // If the current user and displayed user are friends, show all.
  • src/bp-xprofile/bp-xprofile-template.php

    diff --git src/bp-xprofile/bp-xprofile-template.php src/bp-xprofile/bp-xprofile-template.php
    index 8f874e76a..d48e656d9 100644
    function bp_has_profile( $args = '' ) { 
    5050        $hide_empty_fields_default = ( ! is_network_admin() && ! is_admin() && ! bp_is_user_profile_edit() && ! bp_is_register_page() );
    5151
    5252        // We only need to fetch visibility levels when viewing your own profile.
    53         if ( bp_is_my_profile() || bp_current_user_can( 'bp_moderate' ) || bp_is_register_page() ) {
     53        if ( bp_is_my_profile() || bp_current_user_can( 'bp_members_manage_members' ) || bp_is_register_page() ) {
    5454                $fetch_visibility_level_default = true;
    5555        } else {
    5656                $fetch_visibility_level_default = false;
  • src/bp-xprofile/classes/class-bp-xprofile-data-rest-controller.php

    diff --git src/bp-xprofile/classes/class-bp-xprofile-data-rest-controller.php src/bp-xprofile/classes/class-bp-xprofile-data-rest-controller.php
    index a57751820..fe9b04f8d 100644
    class BP_XProfile_Data_REST_Controller extends WP_REST_Controller { 
    509509         * @return bool
    510510         */
    511511        protected function can_see( $field_user_id ) {
    512                 return ( bp_current_user_can( 'bp_moderate' ) || bp_loggedin_user_id() === $field_user_id );
     512                return ( bp_current_user_can( 'bp_members_manage_members' ) || bp_loggedin_user_id() === $field_user_id );
    513513        }
    514514
    515515        /**
  • src/bp-xprofile/classes/class-bp-xprofile-field-groups-rest-controller.php

    diff --git src/bp-xprofile/classes/class-bp-xprofile-field-groups-rest-controller.php src/bp-xprofile/classes/class-bp-xprofile-field-groups-rest-controller.php
    index bef7990c3..43a45fc83 100644
    class BP_XProfile_Field_Groups_REST_Controller extends WP_REST_Controller { 
    404404                        )
    405405                );
    406406
    407                 if ( is_user_logged_in() && bp_current_user_can( 'bp_moderate' ) ) {
     407                if ( is_user_logged_in() && bp_current_user_can( 'bp_xprofile_create_field_groups' ) ) {
    408408                        $retval = true;
    409409                }
    410410
  • src/bp-xprofile/classes/class-bp-xprofile-field-type.php

    diff --git src/bp-xprofile/classes/class-bp-xprofile-field-type.php src/bp-xprofile/classes/class-bp-xprofile-field-type.php
    index 66cd18b24..aa1e61e33 100644
    abstract class BP_XProfile_Field_Type { 
    546546                        $r['aria-required'] = 'true';
    547547
    548548                        // Moderators can bypass field requirements.
    549                         if ( ! bp_current_user_can( 'bp_moderate' ) ) {
     549                        if ( ! bp_current_user_can( 'bp_members_manage_members' ) ) {
    550550                                $r[] = 'required';
    551551                        }
    552552                }
  • src/bp-xprofile/classes/class-bp-xprofile-fields-rest-controller.php

    diff --git src/bp-xprofile/classes/class-bp-xprofile-fields-rest-controller.php src/bp-xprofile/classes/class-bp-xprofile-fields-rest-controller.php
    index 39de482bb..1b1752492 100644
    class BP_XProfile_Fields_REST_Controller extends WP_REST_Controller { 
    445445                        )
    446446                );
    447447
    448                 if ( is_user_logged_in() && bp_current_user_can( 'bp_moderate' ) ) {
     448                if ( is_user_logged_in() && bp_current_user_can( 'bp_xprofile_create_fields' ) ) {
    449449                        $retval = true;
    450450                }
    451451
  • src/bp-xprofile/classes/class-bp-xprofile-user-admin.php

    diff --git src/bp-xprofile/classes/class-bp-xprofile-user-admin.php src/bp-xprofile/classes/class-bp-xprofile-user-admin.php
    index 44040e8c4..f7b51dfed 100644
    class BP_XProfile_User_Admin { 
    172172                        foreach ( (array) $posted_field_ids as $field_id ) {
    173173                                bp_xprofile_maybe_format_datebox_post_data( $field_id );
    174174
    175                                 $is_required[ $field_id ] = xprofile_check_is_required_field( $field_id ) && ! bp_current_user_can( 'bp_moderate' );
     175                                $is_required[ $field_id ] = xprofile_check_is_required_field( $field_id ) && ! bp_current_user_can( 'bp_members_manage_members' );
    176176                                if ( $is_required[ $field_id ] && empty( $_POST[ 'field_' . $field_id ] ) ) {
    177177                                        $redirect_to = add_query_arg( 'error', '2', $redirect_to );
    178178                                        bp_core_redirect( $redirect_to );
    class BP_XProfile_User_Admin { 
    276276                                'profile_group_id'       => 0,
    277277                                'user_id'                => $user->ID,
    278278                                'hide_field_types'       => array( 'wp-textbox', 'wp-biography' ),
    279                                 'fetch_visibility_level' => bp_current_user_can( 'bp_moderate' ) || (int) get_current_user_id() === (int) $user->ID,
     279                                'fetch_visibility_level' => bp_current_user_can( 'bp_members_manage_members' ) || (int) get_current_user_id() === (int) $user->ID,
    280280                        ),
    281281                        'bp_xprofile_user_admin_profile_loop_args'
    282282                );
  • src/bp-xprofile/screens/edit.php

    diff --git src/bp-xprofile/screens/edit.php src/bp-xprofile/screens/edit.php
    index 0915334c1..e6616e14c 100644
     
    1515 */
    1616function xprofile_screen_edit_profile() {
    1717
    18         if ( ! bp_is_my_profile() && ! bp_current_user_can( 'bp_moderate' ) ) {
     18        if ( ! bp_is_my_profile() && ! bp_current_user_can( 'bp_members_manage_members' ) ) {
    1919                return;
    2020        }
    2121
    function xprofile_screen_edit_profile() { 
    6060                foreach ( (array) $posted_field_ids as $field_id ) {
    6161                        bp_xprofile_maybe_format_datebox_post_data( $field_id );
    6262
    63                         $is_required[ $field_id ] = xprofile_check_is_required_field( $field_id ) && ! bp_current_user_can( 'bp_moderate' );
     63                        $is_required[ $field_id ] = xprofile_check_is_required_field( $field_id ) && ! bp_current_user_can( 'bp_members_manage_members' );
    6464                        if ( $is_required[ $field_id ] && empty( $_POST[ 'field_' . $field_id ] ) ) {
    6565                                $errors = true;
    6666                        }