Skip to:
Content

BuddyPress.org

Ticket #5121: 5121.02.groups.patch

File 5121.02.groups.patch, 29.0 KB (added by thebrandonallen, 5 years ago)
  • src/bp-activity/bp-activity-template.php

    diff --git src/bp-activity/bp-activity-template.php src/bp-activity/bp-activity-template.php
    index e73a259..cf8771d 100644
    function bp_has_activities( $args = '' ) { 
    625625        if ( bp_is_group() ) {
    626626                $object      = $bp->groups->id;
    627627                $primary_id  = bp_get_current_group_id();
    628                 $show_hidden = (bool) ( groups_is_user_member( bp_loggedin_user_id(), $primary_id ) || bp_current_user_can( 'bp_moderate' ) );
     628                $show_hidden = bp_current_user_can(
     629                        'view_group',
     630                        array( 'group' => groups_get_current_group(), 'strict' => true, )
     631                );
    629632        } else {
    630633                $object      = false;
    631634                $primary_id  = false;
  • src/bp-core/bp-core-attachments.php

    diff --git src/bp-core/bp-core-attachments.php src/bp-core/bp-core-attachments.php
    index 3156e8b..ca288b5 100644
    function bp_attachments_current_user_can( $capability, $args = array() ) { 
    321321                        // Group profile photo
    322322                        if ( bp_is_active( 'groups' ) && 'group' === $args['object'] ) {
    323323                                if ( bp_is_group_create() ) {
    324                                         $can = (bool) groups_is_user_creator( bp_loggedin_user_id(), $args['item_id'] ) || bp_current_user_can( 'bp_moderate' );
     324                                        $can = (bool) ( groups_is_user_creator( bp_loggedin_user_id(), $args['item_id'] ) || bp_user_can_create_groups() );
    325325                                } else {
    326                                         $can = (bool) groups_is_user_admin( bp_loggedin_user_id(), $args['item_id'] ) || bp_current_user_can( 'bp_moderate' );
     326                                        $can = bp_current_user_can(
     327                                                'edit_group',
     328                                                array( 'group_id' => $args['item_id'], )
     329                                        );
    327330                                }
    328331                        // User profile photo
    329332                        } elseif ( bp_is_active( 'xprofile' ) && 'user' === $args['object'] ) {
  • src/bp-core/bp-core-component.php

    diff --git src/bp-core/bp-core-component.php src/bp-core/bp-core-component.php
    index a24de99..4b79f1a 100644
    class BP_Component { 
    429429                // Generate rewrite rules
    430430                add_action( 'bp_generate_rewrite_rules', array( $this, 'generate_rewrite_rules' ), 10 );
    431431
     432                // Map meta caps
     433                add_filter( 'map_meta_cap',              array( $this, 'map_meta_caps'          ), 10, 4 );
     434
    432435                /**
    433436                 * Fires at the end of the setup_actions method inside BP_Component.
    434437                 *
    class BP_Component { 
    485488        }
    486489
    487490        /**
     491         * Map component meta caps.
     492         *
     493         * @since BuddyPress (x.x.x)
     494         *
     495         * @param array  $caps
     496         * @param string $cap
     497         * @param int    $user_id
     498         * @param mixed  $args
     499         * @uses apply_filters()
     500         *
     501         * @return array Mapped meta cap.
     502         */
     503        public function map_meta_caps( $caps, $cap, $user_id, $args ) {
     504
     505                /**
     506                 * Fires at the end of the map_meta_caps method inside BP_Component.
     507                 *
     508                 * This is a dynamic filter that is based on the component string ID.
     509                 *
     510                 * @since BuddyPress (x.x.x)
     511                 */
     512                return apply_filters( 'bp_' . $this->id . '_map_meta_caps', $caps, $cap, $user_id, $args );
     513        }
     514
     515        /**
    488516         * Set up the component entries in the WordPress Admin Bar.
    489517         *
    490518         * @see WP_Admin_Bar::add_menu() for a description of the syntax
  • src/bp-core/deprecated/2.1.php

    diff --git src/bp-core/deprecated/2.1.php src/bp-core/deprecated/2.1.php
    index edc12d5..a3febc9 100644
    function bp_groups_adminbar_admin_menu() { 
    405405        }
    406406
    407407        // Only group admins and site admins can see this menu
    408         if ( !current_user_can( 'edit_users' ) && !bp_current_user_can( 'bp_moderate' ) && !bp_is_item_admin() ) {
     408        if ( ! current_user_can( 'edit_users' ) && ! bp_current_user_can( 'edit_group', array( 'group' => $bp->groups->current_group->id ) ) ) {
    409409                return false;
    410410        } ?>
    411411
  • src/bp-forums/bp-forums-screens.php

    diff --git src/bp-forums/bp-forums-screens.php src/bp-forums/bp-forums-screens.php
    index 6778edc..8be50cc 100644
    function bp_forums_directory_forums_setup() { 
    4040                        check_admin_referer( 'bp_forums_new_topic' );
    4141
    4242                        $bp->groups->current_group = groups_get_group( array( 'group_id' => $_POST['topic_group_id'] ) );
    43                         if ( !empty( $bp->groups->current_group->id ) ) {
     43                        if ( ! empty( $bp->groups->current_group->id ) ) {
    4444                                // Auto join this user if they are not yet a member of this group
    45                                 if ( !bp_current_user_can( 'bp_moderate' ) && 'public' == $bp->groups->current_group->status && !groups_is_user_member( bp_loggedin_user_id(), $bp->groups->current_group->id ) )
     45                                if ( bp_groups_auto_join() && ! bp_current_user_can( 'view_group', array( 'group' => $bp->groups->current_group, 'strict' => true ) )
     46                                     && 'public' === $bp->groups->current_group->status
     47                                ) {
    4648                                        groups_join_group( $bp->groups->current_group->id );
     49                                }
    4750
    4851                                $error_message = '';
    4952
  • src/bp-forums/bp-forums-template.php

    diff --git src/bp-forums/bp-forums-template.php src/bp-forums/bp-forums-template.php
    index 93f3f78..1aed77f 100644
    class BP_Forums_Template_Forum { 
    293293                                $topic_count = $tag->count;
    294294                        } else {
    295295                                // For forum directories (All Topics), get a true count
    296                                 $status = bp_current_user_can( 'bp_moderate' ) ? 'all' : 'public'; // todo: member-of
    297                                 $topic_count = (int)groups_total_forum_topic_count( $status, $search_terms );
     296                                $status = bp_current_user_can( 'manage_groups' ) ? 'all' : 'public'; // todo: member-of
     297                                $topic_count = (int) groups_total_forum_topic_count( $status, $search_terms );
    298298                        }
    299299
    300300                        if ( !$max || $max >= $topic_count ) {
    function bp_the_topic_admin_links( $args = '' ) { 
    15931593
    15941594                $links[] = '<a href="' . wp_nonce_url( bp_get_the_topic_permalink() . 'edit', 'bp_forums_edit_topic' ) . '">' . __( 'Edit Topic', 'buddypress' ) . '</a>';
    15951595
    1596                 if ( bp_is_item_admin() || bp_is_item_mod() || bp_current_user_can( 'bp_moderate' ) ) {
     1596                if ( bp_current_user_can( 'moderate_group', array( 'group' => groups_get_current_group() ) ) ) {
    15971597                        if ( 0 == (int) $forum_template->topic->topic_sticky )
    15981598                                $links[] = '<a href="' . wp_nonce_url( bp_get_the_topic_permalink() . 'stick', 'bp_forums_stick_topic' ) . '">' . __( 'Sticky Topic', 'buddypress' ) . '</a>';
    15991599                        else
  • src/bp-groups/bp-groups-admin.php

    diff --git src/bp-groups/bp-groups-admin.php src/bp-groups/bp-groups-admin.php
    index 19b88d8..eb94eca 100644
    function bp_groups_add_admin_menu() { 
    3131        $hook = add_menu_page(
    3232                _x( 'Groups', 'Admin Groups page title', 'buddypress' ),
    3333                _x( 'Groups', 'Admin Groups menu', 'buddypress' ),
    34                 'bp_moderate',
     34                'manage_groups',
    3535                'bp-groups',
    3636                'bp_groups_admin',
    3737                'div'
    function bp_groups_admin() { 
    481481 */
    482482function bp_groups_admin_edit() {
    483483
    484         if ( ! current_user_can( 'bp_moderate' ) )
     484        if ( ! bp_current_user_can( 'manage_groups' ) )
    485485                die( '-1' );
    486486
    487487        $messages = array();
    function bp_groups_admin_edit() { 
    638638 */
    639639function bp_groups_admin_delete() {
    640640
    641         if ( ! bp_current_user_can( 'bp_moderate' ) ) {
     641        if ( ! bp_current_user_can( 'manage_groups' ) ) {
    642642                die( '-1' );
    643643        }
    644644
    function bp_groups_admin_get_usernames_from_ids( $user_ids = array() ) { 
    10861086function bp_groups_admin_autocomplete_handler() {
    10871087
    10881088        // Bail if user user shouldn't be here, or is a large network
    1089         if ( ! current_user_can( 'bp_moderate' ) || ( is_multisite() && wp_is_large_network( 'users' ) ) ) {
     1089        if ( ! bp_current_user_can( 'manage_groups' ) || ( is_multisite() && wp_is_large_network( 'users' ) ) ) {
    10901090                wp_die( -1 );
    10911091        }
    10921092
  • src/bp-groups/bp-groups-adminbar.php

    diff --git src/bp-groups/bp-groups-adminbar.php src/bp-groups/bp-groups-adminbar.php
    index 8a307e0..4975f91 100644
    function bp_groups_group_admin_menu() { 
    3232        }
    3333
    3434        // Only show this menu to group admins and super admins
    35         if ( ! bp_current_user_can( 'bp_moderate' ) && ! bp_group_is_admin() ) {
     35        if ( ! bp_current_user_can( 'edit_group', array( 'group' => $bp->groups->current_group ) ) ) {
    3636                return false;
    3737        }
    3838
  • src/bp-groups/bp-groups-filters.php

    diff --git src/bp-groups/bp-groups-filters.php src/bp-groups/bp-groups-filters.php
    index d3972f8..bc77df7 100644
    function groups_add_forum_where_sql( $sql = '' ) { 
    175175         * Decide if private are visible
    176176         */
    177177        // Are we in our own profile?
    178         if ( bp_is_my_profile() )
     178        if ( bp_is_my_profile() ) {
    179179                unset( $parts['private'] );
    180180
    181181        // Are we a super admin?
    182         elseif ( bp_current_user_can( 'bp_moderate' ) )
     182        } elseif ( bp_current_user_can( 'manage_groups' ) ) {
    183183                unset( $parts['private'] );
    184184
    185185        // No need to filter on a single item
    186         elseif ( bp_is_single_item() )
     186        } elseif ( bp_is_single_item() ) {
    187187                unset( $parts['private'] );
     188        }
    188189
    189190        // Check the SQL filter that was passed
    190         if ( !empty( $sql ) )
     191        if ( ! empty( $sql ) ) {
    191192                $parts['passed'] = $sql;
     193        }
    192194
    193195        // Assemble Voltron
    194196        $parts_string = implode( ' AND ', $parts );
    function groups_add_forum_where_sql( $sql = '' ) { 
    213215 */
    214216function groups_filter_bbpress_caps( $value, $cap, $args ) {
    215217
    216         if ( bp_current_user_can( 'bp_moderate' ) )
     218        if ( bp_current_user_can( 'manage_groups' ) ) {
    217219                return true;
     220        }
    218221
    219222        if ( 'add_tag_to' === $cap ) {
    220223                $bp = buddypress();
  • src/bp-groups/bp-groups-functions.php

    diff --git src/bp-groups/bp-groups-functions.php src/bp-groups/bp-groups-functions.php
    index a65f82d..b67746a 100644
    function groups_post_update( $args = '' ) { 
    944944        $bp->groups->current_group = groups_get_group( array( 'group_id' => $group_id ) );
    945945
    946946        // Be sure the user is a member of the group before posting.
    947         if ( !bp_current_user_can( 'bp_moderate' ) && !groups_is_user_member( $user_id, $group_id ) )
     947        if ( ! bp_current_user_can( 'view_group', array( 'group' => $bp->groups->current_group, 'strict' => true ) ) ) {
    948948                return false;
     949        }
    949950
    950951        // Record this in activity streams
    951952        $activity_action  = sprintf( __( '%1$s posted an update in the group %2$s', 'buddypress'), bp_core_get_userlink( $user_id ), '<a href="' . bp_get_group_permalink( $bp->groups->current_group ) . '">' . esc_attr( $bp->groups->current_group->name ) . '</a>' );
    function groups_unban_member( $user_id, $group_id ) { 
    14341435 */
    14351436function groups_remove_member( $user_id, $group_id ) {
    14361437
    1437         if ( ! bp_is_item_admin() ) {
    1438                 // bp_is_item_admin may not be set if this function is called outside of group context.
    1439                 // Site admins and group admins can remove a member from a group.
    1440                 // A member may also request to remove herself from a group.
    1441                 if ( ! current_user_can( 'bp_moderate' )
    1442                         && ! groups_is_user_admin( bp_loggedin_user_id(), $group_id )
    1443                         && $user_id != bp_loggedin_user_id() ) {
    1444                                 return false;
    1445                         }
    1446         }
     1438        // Site admins and group admins can remove a member from a group.
     1439        // A member may also request to remove herself from a group.
     1440        if ( ! bp_current_user_can( 'edit_group', array( 'group_id' => $group_id ) )
     1441                && $user_id != bp_loggedin_user_id()
     1442        ) {
     1443                return false;
     1444        }
    14471445
    14481446        $member = new BP_Groups_Member( $user_id, $group_id );
    14491447
  • src/bp-groups/bp-groups-loader.php

    diff --git src/bp-groups/bp-groups-loader.php src/bp-groups/bp-groups-loader.php
    index c5f6f05..a6cb644 100644
    class BP_Groups_Component extends BP_Component { 
    215215                        array_shift( $bp->action_variables );
    216216
    217217                        // Using "item" not "group" for generic support in other components.
    218                         if ( bp_current_user_can( 'bp_moderate' ) ) {
    219                                 bp_update_is_item_admin( true, 'groups' );
    220                         } else {
    221                                 bp_update_is_item_admin( groups_is_user_admin( bp_loggedin_user_id(), $this->current_group->id ), 'groups' );
    222                         }
     218                        bp_update_is_item_admin( bp_current_user_can( 'edit_group', array( 'group' => $this->current_group ) ), 'groups' );
    223219
    224220                        // If the user is not an admin, check if they are a moderator
    225221                        if ( ! bp_is_item_admin() ) {
    226                                 bp_update_is_item_mod  ( groups_is_user_mod  ( bp_loggedin_user_id(), $this->current_group->id ), 'groups' );
     222                                bp_update_is_item_mod( groups_is_user_mod( bp_loggedin_user_id(), $this->current_group->id ), 'groups' );
    227223                        }
    228224
    229225                        // Is the logged in user a member of the group?
    class BP_Groups_Component extends BP_Component { 
    242238
    243239                        // If this is a private or hidden group, does the user have access?
    244240                        if ( 'private' == $this->current_group->status || 'hidden' == $this->current_group->status ) {
    245                                 if ( $this->current_group->is_user_member && is_user_logged_in() || bp_current_user_can( 'bp_moderate' ) ) {
     241                                if ( bp_current_user_can( 'view_group', array( 'group' => $this->current_group ) ) ) {
    246242                                        $this->current_group->user_has_access = true;
    247243                                } else {
    248244                                        $this->current_group->user_has_access = false;
    class BP_Groups_Component extends BP_Component { 
    633629        }
    634630
    635631        /**
     632         * Map groups component meta caps.
     633         *
     634         * @since BuddyPress (x.x.x)
     635         *
     636         * @param array  $caps
     637         * @param string $cap
     638         * @param int    $user_id
     639         * @param mixed  $args
     640         * @uses bp_get_option()
     641         * @uses bp_get_current_group_id()
     642         * @uses groups_is_user_admin()
     643         * @uses BP_Component::map_meta_caps()
     644         *
     645         * @return array Mapped meta cap.
     646         */
     647        public function map_meta_caps( $caps, $cap, $user_id, $args ) {
     648
     649                switch ( $cap ) {
     650
     651                        case 'create_group' :
     652
     653                                // Default to admins only
     654                                $caps = array( 'manage_options' );
     655
     656                                // Group creation option
     657                                $restricted = (bool) bp_get_option( 'bp_restrict_group_creation', 0 );
     658
     659                                // If the user exists and group creation is unrestricted, give them access.
     660                                if ( ! empty( $user_id ) && empty( $restricted ) ) {
     661                                        $caps = array( 'exist' );
     662                                }
     663                                break;
     664
     665                        case 'edit_group'   :
     666                        case 'delete_group' :
     667
     668                                // Default to admins only
     669                                $caps = array( 'manage_options' );
     670
     671                                $r = $this->parse_map_meta_caps_args( $args, (int) $user_id );
     672
     673                                // If the user exists and is a group admin, give them access. Otherwise,
     674                                // default to super admins.
     675                                if ( ! empty( $user_id ) && ! empty( $r['group_id'] ) ) {
     676                                        // Check if current user is an admin of the group
     677                                        if ( groups_is_user_admin( $user_id, $r['group_id'] ) ) {
     678                                                $caps = array( 'exist' );
     679                                        }
     680                                }
     681                                break;
     682
     683                        // View individual group
     684                        case 'view_group' :
     685
     686                                // Default to admins only
     687                                $caps = array( 'manage_options' ); error_log( var_export( $args, true ) );
     688
     689                                $r = $this->parse_map_meta_caps_args( $args, (int) $user_id );
     690
     691                                // If the user exists and is a group member, give them access. Otherwise,
     692                                // default to super admins.
     693                                if ( ! empty( $user_id ) && ! empty( $r['group_id'] ) ) {
     694                                        // Check if current user is a member of the group
     695                                        $is_member = groups_is_user_member( $user_id, $r['group_id'] );
     696
     697                                        // Ignore group status if we're doing a strict check
     698                                        if ( ! empty( $r['strict'] ) && $is_member ) {
     699                                                $caps = array( 'exist' );
     700                                        } elseif ( 'public' === $r['group']->status || $is_member ) {
     701                                                $caps = array( 'exist' );
     702                                        }
     703                                }
     704                                break;
     705
     706                        // View groups directory
     707                        // Not currently used, but it has potential ;)
     708                        case 'view_groups' :
     709
     710                                // Everyone is allowed to view groups
     711                                $caps = array( 'exist' );
     712                                break;
     713
     714                        case 'moderate_group' :
     715
     716                                // Default to admins only
     717                                $caps = array( 'manage_options' );
     718
     719                                $r = $this->parse_map_meta_caps_args( $args, (int) $user_id );
     720
     721                                // If the user exists and is the group moderator, give them access. Otherwise,
     722                                // default to super admins.
     723                                if ( ! empty( $user_id ) && ! empty( $r['group_id'] ) ) {
     724
     725                                        // Check if the user is a mod of the group
     726                                        $is_mod = (bool) groups_is_user_mod( $user_id, $r['group_id'] );
     727
     728                                        // Check if the user is an admin of the group
     729                                        if ( empty( $r['strict'] ) ) {
     730                                                $is_admin = (bool) groups_is_user_admin( $user_id, $r['group_id'] );
     731                                        }
     732
     733                                        if ( ! empty( $r['strict'] ) && $is_mod ) {
     734                                                $caps = array( 'exist' );
     735                                        } elseif ( $is_mod || $is_admin ) {
     736                                                $caps = array( 'exist' );
     737                                        }
     738                                }
     739                                break;
     740
     741                        // While predominantly used in the admin to show menu items, this cap is also
     742                        // used in places where a targeted capability doesn't really make sense.
     743                        case 'manage_groups' :
     744
     745                                // Default to admins only
     746                                $caps = array( 'manage_options' );
     747                                break;
     748
     749                }
     750
     751                return parent::map_meta_caps( $caps, $cap, $user_id, $args );
     752        }
     753
     754        /**
     755         * Parse arguments passed to the map_meta_cap.
     756         *
     757         * Expects either 'group_id' or 'group'. Both are not required, but if neither
     758         * are passed then the function will return the defaults, which will result in
     759         * cap checks defaulting to 'manage_options'.
     760         *
     761         * @since BuddyPress (x.x.x)
     762         *
     763         * @param array $args {
     764         *     @type int    $group_id Group id. Defaults to 0.
     765         *     @type object $group    BP_Groups_Group object. Defaults to null.
     766         *     @type bool   $strict   Whether the cap check should be strict. Varies by cap.
     767         * }
     768         * @uses bp_get_current_group_id() To get the current group id.
     769         * @uses groups_get_current_group() To get the current group object.
     770         * @uses groups_get_group() To get group object.
     771         *
     772         * @return array Parsed arguments.
     773         */
     774        function parse_map_meta_caps_args( $args = array(), $user_id = 0 ) {
     775                $defaults = array(
     776                        'group_id' => 0,
     777                        'group'    => new BP_Groups_Group(),
     778                        'strict'   => false,
     779                );
     780
     781                // If we have no group ids, nothing else matters.
     782                if ( empty( $args[0]['group']->id ) && empty( $args[0]['group_id'] ) ) {
     783                        return $defaults;
     784                }
     785
     786                $r = wp_parse_args( $args[0], $defaults );
     787
     788                // Set the group or group_id array keys, depending on what's missing
     789                if ( ! empty( $r['group_id'] ) ) {
     790                        if ( ! $r['group'] instanceof BP_Groups_Group ) {
     791                                if ( (int) $r['group_id'] === (int) bp_get_current_group_id() ) {
     792                                        $r['group'] = groups_get_current_group();
     793                                } else {
     794                                        $r['group'] = groups_get_group( array( 'group_id' => $r['group_id'] ) );
     795                                }
     796                        }
     797                } elseif ( ( $r['group'] instanceof BP_Groups_Group ) && ! empty( $r['group']->id ) ) {
     798                        $r['group_id'] = $r['group']->id;
     799                }
     800
     801                return $r;
     802        }
     803
     804        /**
    636805         * Set up the component entries in the WordPress Admin Bar.
    637806         *
    638807         * @see BP_Component::setup_nav() for a description of the $wp_admin_nav
  • src/bp-groups/bp-groups-screens.php

    diff --git src/bp-groups/bp-groups-screens.php src/bp-groups/bp-groups-screens.php
    index 61a9ed6..e3b16cd 100644
    function groups_screen_group_forum() { 
    189189        $forum_id       = groups_get_groupmeta( $bp->groups->current_group->id, 'forum_id' );
    190190        $user_is_banned = false;
    191191
    192         if ( !bp_current_user_can( 'bp_moderate' ) && groups_is_user_banned( bp_loggedin_user_id(), $bp->groups->current_group->id ) )
     192        if ( ! bp_current_user_can( 'manage_groups' ) && groups_is_user_banned( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) {
    193193                $user_is_banned = true;
     194        }
    194195
    195196        if ( !empty( $topic_slug ) && !empty( $topic_id ) ) {
    196197
    function groups_screen_group_forum() { 
    200201                        check_admin_referer( 'bp_forums_new_reply' );
    201202
    202203                        // Auto join this user if they are not yet a member of this group
    203                         if ( bp_groups_auto_join() && !bp_current_user_can( 'bp_moderate' ) && 'public' == $bp->groups->current_group->status && !groups_is_user_member( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) {
     204                        if ( bp_groups_auto_join() && ! bp_current_user_can( 'view_group', array( 'group' => $bp->groups->current_group, 'strict' => true ) ) && 'public' == $bp->groups->current_group->status ) {
    204205                                groups_join_group( $bp->groups->current_group->id, bp_loggedin_user_id() );
    205206                        }
    206207
    function groups_screen_group_forum() { 
    507508                        if ( $user_is_banned ) {
    508509                                $error_message = __( "You have been banned from this group.", 'buddypress' );
    509510
    510                         } elseif ( bp_groups_auto_join() && !bp_current_user_can( 'bp_moderate' ) && 'public' == $bp->groups->current_group->status && !groups_is_user_member( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) {
     511                        } elseif ( bp_groups_auto_join() && ! bp_current_user_can( 'view_group', array( 'group' => $bp->groups->current_group, 'strict' => true ) ) && 'public' == $bp->groups->current_group->status ) {
    511512                                // Auto join this user if they are not yet a member of this group
    512513                                groups_join_group( $bp->groups->current_group->id, bp_loggedin_user_id() );
    513514                        }
    function groups_screen_group_admin_delete_group() { 
    12451246        if ( 'delete-group' != bp_get_group_current_admin_tab() )
    12461247                return false;
    12471248
    1248         if ( ! bp_is_item_admin() && !bp_current_user_can( 'bp_moderate' ) )
     1249        if ( ! bp_current_user_can( 'delete_group', array( 'group' => groups_get_current_group() ) ) ) {
    12491250                return false;
     1251        }
    12501252
    12511253        $bp = buddypress();
    12521254
  • src/bp-groups/bp-groups-template.php

    diff --git src/bp-groups/bp-groups-template.php src/bp-groups/bp-groups-template.php
    index 854143c..836cde5 100644
    class BP_Groups_Template { 
    255255                $this->pag_page = bp_sanitize_pagination_arg( $this->pag_arg, $r['page']     );
    256256                $this->pag_num  = bp_sanitize_pagination_arg( 'num',          $r['per_page'] );
    257257
    258                 if ( bp_current_user_can( 'bp_moderate' ) || ( is_user_logged_in() && $user_id == bp_loggedin_user_id() ) ) {
     258                if ( bp_current_user_can( 'manage_groups' ) || ( (int) $user_id === (int) bp_loggedin_user_id() ) ) {
    259259                        $show_hidden = true;
    260260                }
    261261
    function bp_the_group() { 
    621621function bp_group_is_visible( $group = false ) {
    622622        global $groups_template;
    623623
    624         if ( bp_current_user_can( 'bp_moderate' ) ) {
    625                 return true;
    626         }
    627 
    628624        if ( empty( $group ) ) {
    629625                $group =& $groups_template->group;
    630626        }
    631627
    632         if ( 'public' == $group->status ) {
     628        if ( bp_current_user_can( 'view_group', array( 'group' => $group ) ) ) {
    633629                return true;
    634         } else {
    635                 if ( groups_is_user_member( bp_loggedin_user_id(), $group->id ) ) {
    636                         return true;
    637                 }
    638630        }
    639631
    640632        return false;
    function bp_groups_user_can_send_invites( $group_id = 0, $user_id = 0 ) { 
    22842276
    22852277        if ( $user_id ) {
    22862278                // Users with the 'bp_moderate' cap can always send invitations
    2287                 if ( user_can( $user_id, 'bp_moderate' ) ) {
     2279                if ( user_can( $user_id, 'manage_groups' ) ) {
    22882280                        $can_send_invites = true;
    22892281                } else {
    22902282                        $invite_status = bp_group_get_invite_status( $group_id );
    function bp_group_is_member( $group = false ) { 
    29422934        global $groups_template;
    29432935
    29442936        // Site admins always have access
    2945         if ( bp_current_user_can( 'bp_moderate' ) ) {
     2937        if ( bp_current_user_can( 'manage_groups' ) ) {
    29462938                return true;
    29472939        }
    29482940
    function bp_group_is_user_banned( $group = false, $user_id = 0 ) { 
    30113003        global $groups_template;
    30123004
    30133005        // Site admins always have access
    3014         if ( bp_current_user_can( 'bp_moderate' ) ) {
     3006        if ( bp_current_user_can( 'manage_groups' ) ) {
    30153007                return false;
    30163008        }
    30173009
    function bp_groups_members_filter() { 
    44084400function bp_user_can_create_groups() {
    44094401
    44104402        // Super admin can always create groups
    4411         if ( bp_current_user_can( 'bp_moderate' ) ) {
    4412                 return true;
    4413         }
     4403        $can_create = bp_current_user_can( 'create_group' );
    44144404
    44154405        // Get group creation option, default to 0 (allowed)
     4406        // No longer used. Left behind for backwards compatability.
    44164407        $restricted = (int) bp_get_option( 'bp_restrict_group_creation', 0 );
    44174408
    4418         // Allow by default
    4419         $can_create = true;
    4420 
    4421         // Are regular users restricted?
    4422         if ( $restricted ) {
    4423                 $can_create = false;
    4424         }
    4425 
    44264409        /**
    44274410         * Filters if the current logged in user can create groups.
    44284411         *
  • src/bp-groups/classes/class-bp-group-extension.php

    diff --git src/bp-groups/classes/class-bp-group-extension.php src/bp-groups/classes/class-bp-group-extension.php
    index 02374dd..87c9901 100644
    class BP_Group_Extension { 
    805805         * @return bool
    806806         */
    807807        public function user_can_see_nav_item( $user_can_see_nav_item = false ) {
    808                 if ( 'noone' !== $this->params['show_tab'] && current_user_can( 'bp_moderate' ) ) {
     808                // Should we use bp_current_user_can here?
     809                if ( 'noone' !== $this->params['show_tab'] && current_user_can( 'manage_groups' ) ) {
    809810                        return true;
    810811                }
    811812
    class BP_Group_Extension { 
    820821         * @return bool
    821822         */
    822823        public function user_can_visit( $user_can_visit = false ) {
    823                 if ( 'noone' !== $this->params['access'] && current_user_can( 'bp_moderate' ) ) {
     824                // Should we use bp_current_user_can here?
     825                if ( 'noone' !== $this->params['access'] && current_user_can( 'manage_groups' ) ) {
    824826                        return true;
    825827                }
    826828
  • 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 bd77987..668727d 100644
    class BP_Groups_Group { 
    249249                                $this->user_has_access = false;
    250250
    251251                                // Group members or community moderators have access
    252                                 if ( ( $this->is_member && is_user_logged_in() ) || bp_current_user_can( 'bp_moderate' ) ) {
     252                                if ( ( $this->is_member && is_user_logged_in() ) || bp_current_user_can( 'manage_groups' ) ) {
    253253                                        $this->user_has_access = true;
    254254                                }
    255255                        } else {
    class BP_Groups_Group { 
    544544                        $order_sql = "ORDER BY {$sort_by} {$order}";
    545545                }
    546546
    547                 if ( !bp_current_user_can( 'bp_moderate' ) )
     547                if ( ! bp_current_user_can( 'manage_groups' ) ) {
    548548                        $hidden_sql = "AND status != 'hidden'";
     549                }
    549550
    550551                $bp = buddypress();
    551552
    class BP_Groups_Group { 
    11101111                        $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
    11111112                }
    11121113
    1113                 if ( !is_user_logged_in() || ( !bp_current_user_can( 'bp_moderate' ) && ( $user_id != bp_loggedin_user_id() ) ) )
     1114                if ( ! is_user_logged_in() || ( ! bp_current_user_can( 'manage_groups' ) && ( $user_id != bp_loggedin_user_id() ) ) ) {
    11141115                        $hidden_sql = " AND g.status != 'hidden'";
     1116                }
    11151117
    11161118                if ( !empty( $search_terms ) ) {
    11171119                        $search_terms_like = '%' . bp_esc_like( $search_terms ) . '%';
    class BP_Groups_Group { 
    11771179                        $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
    11781180                }
    11791181
    1180                 if ( !is_user_logged_in() || ( !bp_current_user_can( 'bp_moderate' ) && ( $user_id != bp_loggedin_user_id() ) ) )
     1182                if ( ! is_user_logged_in() || ( ! bp_current_user_can( 'manage_groups' ) && ( $user_id != bp_loggedin_user_id() ) ) ) {
    11811183                        $hidden_sql = " AND g.status != 'hidden'";
     1184                }
    11821185
    11831186                if ( !empty( $search_terms ) ) {
    11841187                        $search_terms_like = '%' . bp_esc_like( $search_terms ) . '%';
    class BP_Groups_Group { 
    12531256                        $exclude_sql = " AND g.id NOT IN ({$exclude})";
    12541257                }
    12551258
    1256                 if ( !bp_current_user_can( 'bp_moderate' ) )
     1259                if ( ! bp_current_user_can( 'manage_groups' ) ) {
    12571260                        $hidden_sql = " AND status != 'hidden'";
     1261                }
    12581262
    12591263                $letter_like = bp_esc_like( $letter ) . '%';
    12601264
    class BP_Groups_Group { 
    13081312                if ( !empty( $limit ) && !empty( $page ) )
    13091313                        $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
    13101314
    1311                 if ( !is_user_logged_in() || ( !bp_current_user_can( 'bp_moderate' ) && ( $user_id != bp_loggedin_user_id() ) ) )
     1315                if ( ! is_user_logged_in() || ( ! bp_current_user_can( 'manage_groups' ) && ( $user_id != bp_loggedin_user_id() ) ) ) {
    13121316                        $hidden_sql = "AND g.status != 'hidden'";
     1317                }
    13131318
    13141319                if ( !empty( $search_terms ) ) {
    13151320                        $search_terms_like = '%' . bp_esc_like( $search_terms ) . '%';
    class BP_Groups_Group { 
    14561461                global $wpdb;
    14571462
    14581463                $hidden_sql = '';
    1459                 if ( !bp_current_user_can( 'bp_moderate' ) )
     1464                if ( ! bp_current_user_can( 'manage_groups' ) ) {
    14601465                        $hidden_sql = "WHERE status != 'hidden'";
     1466                }
    14611467
    14621468                $bp = buddypress();
    14631469
  • 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 dfd0ab5..8d03be9 100644
    class BP_Groups_Member { 
    629629
    630630                $bp = buddypress();
    631631
    632                 if ( $user_id != bp_loggedin_user_id() && !bp_current_user_can( 'bp_moderate' ) ) {
     632                if ( $user_id != bp_loggedin_user_id() && ! bp_current_user_can( 'manage_groups' ) ) {
    633633                        return $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 ) );
    634634                } else {
    635635                        return $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-templates/bp-legacy/buddypress/forums/index.php

    diff --git src/bp-templates/bp-legacy/buddypress/forums/index.php src/bp-templates/bp-legacy/buddypress/forums/index.php
    index 0d17542..8878459 100644
     
    172172
    173173                                                <?php while ( bp_groups() ) : bp_the_group(); ?>
    174174
    175                                                         <?php if ( bp_group_is_forum_enabled() && ( bp_current_user_can( 'bp_moderate' ) || 'public' == bp_get_group_status() || bp_group_is_member() ) ) : ?>
     175                                                        <?php if ( bp_group_is_forum_enabled() && bp_current_user_can( 'view_group', array( 'group' => bp_the_group() ) ) ) : ?>
    176176
    177177                                                                <option value="<?php bp_group_id(); ?>"><?php bp_group_name(); ?></option>
    178178