Skip to:
Content

bbPress.org

Ticket #2905: 2905.01.patch

File 2905.01.patch, 3.6 KB (added by r-a-y, 8 years ago)
  • src/includes/extend/buddypress/groups.php

    diff --git src/includes/extend/buddypress/groups.php src/includes/extend/buddypress/groups.php
    index 408bf1e..aed9108 100644
    class BBP_Forums_Group_Extension extends BP_Group_Extension { 
    9999
    100100                // Adds a hidden input value to the "Group Settings" page
    101101                add_action( 'bp_before_group_settings_admin', array( $this, 'group_settings_hidden_field'     ) );
     102
     103                // Check group permissions before save
     104                add_action( 'bbp_new_topic_pre_extras',       array( $this, 'check_group_permissions_before_save' ) );
     105                add_action( 'bbp_new_reply_pre_extras',       array( $this, 'check_group_permissions_before_save' ) );
    102106        }
    103107
    104108        /**
    class BBP_Forums_Group_Extension extends BP_Group_Extension { 
    251255                remove_filter( 'bbp_map_meta_caps', array( $this, 'map_group_forum_meta_caps' ), 99, 4 );
    252256        }
    253257
     258        /**
     259         * Helper method to check if the current user has appropriate group permissions.
     260         *
     261         * @todo Perhaps check caps instead of group member status?
     262         *
     263         * @since 2.6.0
     264         */
     265        public function check_group_permissions_for_current_user() {
     266                // Bail if not on a BuddyPress group page.
     267                if ( ! bp_is_group() ) {
     268                        return false;
     269                }
     270
     271                // Default to true.
     272                $retval = true;
     273
     274                // Bail conditions.
     275                if ( ! is_user_logged_in() || ! bbp_group_is_member() || bbp_group_is_banned() ) {
     276                        $retval = false;
     277                }
     278
     279                return $retval;
     280        }
     281
    254282        /** Edit ******************************************************************/
    255283
    256284        /**
    class BBP_Forums_Group_Extension extends BP_Group_Extension { 
    11421170         * @since 2.3.0 bbPress (r4608)
    11431171         *
    11441172         * @param bool $retval Are we allowed to view the reply form?
    1145          * @uses bp_is_group() To determine if we're on a group page
    1146          * @uses is_user_logged_in() To determine if a user is logged in.
    1147          * @uses bbp_is_user_keymaster() Is the current user a keymaster?
    1148          * @uses bbp_group_is_member() Is the current user a member of the group?
    1149          * @uses bbp_group_is_user_banned() Is the current user banned from the group?
    1150          *
    11511173         * @return bool
    11521174         */
    11531175        public function form_permissions( $retval = false ) {
    class BBP_Forums_Group_Extension extends BP_Group_Extension { 
    11571179                        return $retval;
    11581180                }
    11591181
    1160                 // Bail if user is not logged in
    1161                 if ( ! is_user_logged_in() ) {
    1162                         return $retval;
    1163 
    1164                 // Keymasters can always pass go
    1165                 } elseif ( bbp_is_user_keymaster() ) {
    1166                         $retval = true;
    1167 
    1168                 // Non-members cannot see forms
    1169                 } elseif ( ! bbp_group_is_member() ) {
    1170                         $retval = false;
    1171 
    1172                 // Banned users cannot see forms
    1173                 } elseif ( bbp_group_is_banned() ) {
    1174                         $retval = false;
    1175                 }
    1176 
    1177                 return $retval;
     1182                return $this->check_group_permissions_for_current_user();
    11781183        }
    11791184
    11801185        /**
    class BBP_Forums_Group_Extension extends BP_Group_Extension { 
    12011206        <?php
    12021207        }
    12031208
     1209        /**
     1210         * Check if current user has permissions to post to a group forum before save.
     1211         *
     1212         * @since 2.6.0
     1213         */
     1214        public function check_group_permissions_before_save() {
     1215                // Make sure we're posting from a BP group.
     1216                if ( ! bp_is_group() ) {
     1217                        return;
     1218                }
     1219
     1220                // No permission, so add an error.
     1221                if ( false === $this->check_group_permissions_for_current_user() ) {
     1222                        // Topic.
     1223                        if ( ! empty( $_POST['bbp_topic_title'] ) ) {
     1224                                bbp_add_error( 'bbp_topic_permissions', __( '<strong>ERROR</strong>: You do not have permission to create new topics.', 'bbpress' ) );
     1225
     1226                        // Reply.
     1227                        } else {
     1228                                bbp_add_error( 'bbp_reply_permissions', __( '<strong>ERROR</strong>: You do not have permission to reply.', 'bbpress' ) );
     1229                        }
     1230                }
     1231        }
     1232
    12041233        /** Permalink Mappers *****************************************************/
    12051234
    12061235        /**