Skip to:
Content

BuddyPress.org

Ticket #4785: extension-access.patch

File extension-access.patch, 6.5 KB (added by dcavins, 8 years ago)
  • bp-groups/bp-groups-classes.php

    diff --git bp-groups/bp-groups-classes.php bp-groups/bp-groups-classes.php
    index de6110a..4799976 100644
    class BP_Group_Extension { 
    27492749        public $visibility = 'public';
    27502750
    27512751        /**
     2752         * The access setting of the extension tab when used with a public group.
     2753         * Accepted values: anyone, logged_in, group_member, group_mod, group_admin.
     2754         *
     2755         * @since Buddypress 2.0.0
     2756         * @var string
     2757         */
     2758        public $access_public_group = 'anyone';
     2759
     2760        /**
     2761         * The access setting of the extension tab when used with a private group.
     2762         * Accepted values: anyone, logged_in, group_member, group_mod, group_admin.
     2763         *
     2764         * @since Buddypress 2.0.0
     2765         * @var string
     2766         */
     2767        public $access_private_group = 'group-members';
     2768
     2769        /**
    27522770         * The numeric position of the main nav item.
    27532771         *
    27542772         * @var int
    class BP_Group_Extension { 
    29142932                        'slug'              => $this->slug,
    29152933                        'name'              => $this->name,
    29162934                        'visibility'        => $this->visibility,
     2935                        'access_public_group' => $this->$access_public_group,
     2936                        'access_private_group' => $this->$access_private_group,
    29172937                        'nav_item_position' => $this->nav_item_position,
    29182938                        'enable_nav_item'   => (bool) $this->enable_nav_item,
    29192939                        'nav_item_name'     => $this->nav_item_name,
    class BP_Group_Extension { 
    29552975                $this->slug              = $this->params['slug'];
    29562976                $this->name              = $this->params['name'];
    29572977                $this->visibility        = $this->params['visibility'];
     2978                $this->access_public_group       = $this->params['access_public_group'];
     2979                $this->access_private_group      = $this->params['access_private_group'];
    29582980                $this->nav_item_position = $this->params['nav_item_position'];
    29592981                $this->nav_item_name     = $this->params['nav_item_name'];
    29602982                $this->display_hook      = $this->params['display_hook'];
    class BP_Group_Extension { 
    31003122                        return;
    31013123                }
    31023124
     3125                if ( ! $this->extension_user_can_access() ) {
     3126                        return;
     3127                }
     3128
    31033129                if ( true === $this->enable_nav_item ) {
    31043130                        bp_core_new_subnav_item( array(
    31053131                                'name'            => ! $this->nav_item_name ? $this->name : $this->nav_item_name,
    class BP_Group_Extension { 
    31333159                bp_core_load_template( apply_filters( 'bp_core_template_plugin', $this->template_file ) );
    31343160        }
    31353161
     3162        /**
     3163         * Access support for custom access settings for plugins.
     3164         */
     3165        public function extension_user_can_access() {
     3166                global $bp;
     3167
     3168                //return true for site admins
     3169                if ( current_user_can( 'bp_moderate' ) )
     3170                        return true;
     3171
     3172                // Cases for group status
     3173                $group_status = groups_get_group( array( 'group_id' => $this->group_id ) )->status;
     3174
     3175                $bp->groups->current_group->extension_access[$this->slug] = array(
     3176                                'access_public_group' => $this->access_public_group,
     3177                                'access_private_group' => $this->access_private_group,
     3178                );
     3179
     3180                if ( $group_status == 'public' ) {
     3181                        // Use the setting for 'access_public_group' to determine whether this user has access to this extension, Possible values: anyone, logged_in, group_member, group_mod, group_admin
     3182                        switch ( $this->access_public_group ) {
     3183                                case 'group_admin':
     3184                                        return groups_is_user_admin( bp_loggedin_user_id(), $this->group_id );
     3185                                        break;
     3186                                case 'group_mod':
     3187                                        return groups_is_user_mod( bp_loggedin_user_id(), $this->group_id );
     3188                                        break;
     3189                                case 'group_member':
     3190                                        return groups_is_user_member( bp_loggedin_user_id(), $this->group_id );
     3191                                        break;
     3192                                case 'logged_in':
     3193                                        return is_user_logged_in();
     3194                                        break;
     3195                                case 'anyone':
     3196                                        return true;
     3197                                        break;
     3198                        }
     3199
     3200                } elseif ( $group_status == 'private' ) {
     3201                        // Use the setting for 'access_private_group' to determine whether this user has access to this extension.
     3202                        switch ( $this->access_private_group ) {
     3203                                case 'group_admin':
     3204                                        return groups_is_user_admin( bp_loggedin_user_id(), $this->group_id );
     3205                                        break;
     3206                                case 'group_mod':
     3207                                        return groups_is_user_mod( bp_loggedin_user_id(), $this->group_id );
     3208                                        break;
     3209                                case 'group_member':
     3210                                        return groups_is_user_member( bp_loggedin_user_id(), $this->group_id);
     3211                                        break;
     3212                                case 'logged_in':
     3213                                        return  is_user_logged_in();
     3214                                        break;
     3215                                case 'anyone':
     3216                                        return true;
     3217                                        break;
     3218                        }
     3219
     3220                } else { // Hidden groups
     3221                        return $user_has_access;
     3222                }
     3223        }
     3224
     3225
    31363226        /** Create ************************************************************/
    31373227
    31383228        /**
    class BP_Group_Extension { 
    37213811                        'create_name',
    37223812                        'create_slug',
    37233813                        'visibility',
     3814                        'access_public_group',
     3815                        'access_private_group',
    37243816                        'create_step_position',
    37253817                        'nav_item_position',
    37263818                        'admin_metabox_context',
  • bp-groups/bp-groups-functions.php

    diff --git bp-groups/bp-groups-functions.php bp-groups/bp-groups-functions.php
    index 251ae96..96e921e 100644
    function groups_remove_data_for_user( $user_id ) { 
    11331133add_action( 'wpmu_delete_user',  'groups_remove_data_for_user' );
    11341134add_action( 'delete_user',       'groups_remove_data_for_user' );
    11351135add_action( 'bp_make_spam_user', 'groups_remove_data_for_user' );
     1136
     1137/** Access support for custom access settings for plugins. */
     1138function bp_group_extension_user_can_access() {
     1139        return true;
     1140}
     1141 No newline at end of file
  • bp-groups/bp-groups-loader.php

    diff --git bp-groups/bp-groups-loader.php bp-groups/bp-groups-loader.php
    index d28e808..da3f56a 100644
    class BP_Groups_Component extends BP_Component { 
    275275                                // Skip the no_access check on home and membership request pages
    276276                                } elseif ( !bp_is_current_action( 'home' ) && !bp_is_current_action( 'request-membership' ) ) {
    277277
     278                                    $this_is_a_plugin_page = true;
     279                                        // Maybe off-limits to this user. Check if the plugin allows access.
     280                                        // But this is all done before extensions are registered, I think...
     281                                        if ( $this_is_a_plugin_page && bp_group_extension_user_can_access() ) {
     282                                                // Do nothing; let the request go through.
     283
    278284                                        // Off-limits to this user. Throw an error and redirect to the group's home page
    279                                         if ( is_user_logged_in() ) {
     285                                        } elseif ( is_user_logged_in() ) {
    280286                                                bp_core_no_access( array(
    281287                                                        'message'  => __( 'You do not have access to this group.', 'buddypress' ),
    282288                                                        'root'     => bp_get_group_permalink( $bp->groups->current_group ) . 'home/',
    class BP_Groups_Component extends BP_Component { 
    300306                        }
    301307                }
    302308
     309
    303310                // Preconfigured group creation steps
    304311                $this->group_creation_steps = apply_filters( 'groups_create_group_steps', array(
    305312                        'group-details'  => array(