Skip to:
Content

bbPress.org

Ticket #459: 459.6.diff

File 459.6.diff, 23.9 KB (added by netweb, 5 years ago)
  • src/bbpress.php

     
    223223
    224224                // Post type identifiers
    225225                $this->forum_post_type   = apply_filters( 'bbp_forum_post_type',  'forum'     );
     226                $this->forum_mod_tax_id  = apply_filters( 'bbp_forum_mod_tax_id', 'forum-mod' );
    226227                $this->topic_post_type   = apply_filters( 'bbp_topic_post_type',  'topic'     );
     228                $this->topic_tag_tax_id  = apply_filters( 'bbp_topic_tag_tax_id', 'topic-tag' );
    227229                $this->reply_post_type   = apply_filters( 'bbp_reply_post_type',  'reply'     );
    228                 $this->topic_tag_tax_id  = apply_filters( 'bbp_topic_tag_tax_id', 'topic-tag' );
    229230
    230231                // Status identifiers
    231232                $this->spam_status_id    = apply_filters( 'bbp_spam_post_status',    'spam'    );
     
    650651        }
    651652
    652653        /**
    653          * Register the topic tag taxonomy
     654         * Register the topic tag and forum moderator taxonomies
    654655         *
    655          * @since bbPress (r2464)
     656         * @since bbPress (r2464) Added bbp_get_topic_tag_tax_id() taxonomy
     657         * @since bbPress (rXXXX) Added bbp_get_forum_mod_tax_id() taxonomy
     658         *
    656659         * @uses register_taxonomy() To register the taxonomy
     660         * @uses bbp_get_topic_post_type() To get the topic post type
     661         * @uses bbp_get_topic_tag_tax_labels() To get the topic tag taxonomy labels
     662         * @uses bbp_get_topic_tag_tax_rewrite() To get the topic tag taxonomy slug
     663         * @uses bbp_get_topic_tag_caps() To get topic tag capabilities
     664         * @uses bbp_allow_topic_tags() To check if topic tags are allowed
     665         * @uses current_user_can() To check if the current user can edit/delete tags
     666         * @uses bbp_get_forum_post_type() To get the forum post type
     667         * @uses bbp_get_forum_mod_tax_labels() To get the forum moderator taxonomy label
     668         * @uses bbp_get_forum_mod_caps() To check the forum moderator capabilities
     669         * @uses bbp_allow_forum_mods() To check if forum moderators are allowed
     670         * @uses current_user_can() To check if the current user can edit/delete forums
    657671         */
    658672        public static function register_taxonomies() {
    659673
    660                 // Register the topic-tag taxonomy
     674                // Register the topic-tag taxonomy.
    661675                register_taxonomy(
    662676                        bbp_get_topic_tag_tax_id(),
    663677                        bbp_get_topic_post_type(),
     
    671685                                'hierarchical'          => false,
    672686                                'show_in_nav_menus'     => false,
    673687                                'public'                => true,
    674                                 'show_ui'               => bbp_allow_topic_tags() && current_user_can( 'bbp_topic_tags_admin' )
     688                                'show_ui'               => bbp_allow_topic_tags() && current_user_can( 'bbp_topic_tags_admin' ),
    675689                        )
    676690                ) );
     691
     692                // Register the forum-mod taxonomy.
     693                register_taxonomy(
     694                        bbp_get_forum_mod_tax_id(),
     695                        bbp_get_forum_post_type(),
     696                        apply_filters( 'bbp_register_forum_moderator_taxonomy', array(
     697                                'labels'                => bbp_get_forum_mod_tax_labels(),
     698                                'capabilities'          => bbp_get_forum_mod_caps(),
     699                                'update_count_callback' => '_update_post_term_count',
     700                                'query_var'             => false,
     701                                'show_tagcloud'         => true,
     702                                'hierarchical'          => false,
     703                                'show_in_nav_menus'     => false,
     704                                'public'                => false,
     705                                'show_ui'               => bbp_allow_forum_mods() && current_user_can( 'bbp_forum_mods_admin' ),
     706                        )
     707                ) );
    677708        }
    678709
    679710        /**
  • src/includes/admin/forums.php

     
    5858        private function setup_actions() {
    5959
    6060                // Add some general styling to the admin area
    61                 add_action( 'bbp_admin_head',        array( $this, 'admin_head'       ) );
     61                add_action( 'bbp_admin_head',          array( $this, 'admin_head'              ) );
    6262
    6363                // Messages
    64                 add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) );
     64                add_filter( 'post_updated_messages',   array( $this, 'updated_messages'        ) );
    6565
    6666                // Metabox actions
    67                 add_action( 'add_meta_boxes',        array( $this, 'attributes_metabox'      ) );
    68                 add_action( 'save_post',             array( $this, 'attributes_metabox_save' ) );
     67                add_action( 'add_meta_boxes',          array( $this, 'attributes_metabox'      ) );
     68                add_action( 'save_post',               array( $this, 'attributes_metabox_save' ) );
    6969
     70                // Forum moderators AJAX; run at -1 to preempt built-in tag search
     71                add_action( 'wp_ajax_ajax-tag-search', array( $this, 'ajax_tag_search'         ), -1 );
     72
    7073                // Forum Column headers.
    7174                add_filter( 'manage_' . $this->post_type . '_posts_columns',        array( $this, 'column_headers' )        );
    7275
     
    262265        }
    263266
    264267        /**
     268         * Return user nicename suggestions instead of tag suggestions
     269         *
     270         * @since bbPress (rXXXX)
     271         *
     272         * @uses bbp_get_forum_mod_tax_id() To get the forum moderator taxonomy id
     273         * @uses sanitize_key() To sanitize the taxonomy id
     274         * @uses get_taxonomy() To get the forum moderator taxonomy
     275         * @uses current_user_can() To check if the current user add/edit forum moderators
     276         * @uses get_users() To get an array of users
     277         * @uses user_nicename() To get the users nice name
     278         *
     279         * @return Return early if not a request for forum moderators tax
     280         */
     281        public function ajax_tag_search() {
     282
     283                // Only do AJAX if this is a forum moderators tax search.
     284                if ( ! isset( $_GET['tax'] ) || ( bbp_get_forum_mod_tax_id() !== $_GET['tax'] ) ) {
     285                        return;
     286                }
     287
     288                $taxonomy = sanitize_key( $_GET['tax'] );
     289                $tax      = get_taxonomy( $taxonomy );
     290                if ( empty( $tax ) ) {
     291                        wp_die( 0 );
     292                }
     293
     294                // Check permissions.
     295                if ( ! current_user_can( $tax->cap->assign_terms ) ) {
     296                        wp_die( -1 );
     297                }
     298
     299                $s = stripslashes( $_GET['q'] );
     300
     301                // Replace tag delimiter with a comma if needed.
     302                $comma = _x( ',', 'tag delimiter', 'bbpress' );
     303                if ( ',' !== $comma ) {
     304                        $s = str_replace( $comma, ',', $s );
     305                }
     306
     307                if ( false !== strpos( $s, ',' ) ) {
     308                        $s = explode( ',', $s );
     309                        $s = $s[ count( $s ) - 1 ];
     310                }
     311
     312                // Search on at least 2 characters.
     313                $s = trim( $s );
     314                if ( strlen( $s ) < 2 ) {
     315                        wp_die(); // Require 2 chars for matching.
     316                }
     317
     318                // Get users.
     319                $results = array();
     320                $users   = get_users( array(
     321                        'blog_id'        => 0, // All users.
     322                        'fields'         => array( 'user_nicename' ),
     323                        'search'         => '*' . $s . '*',
     324                        'search_columns' => array( 'user_nicename' ),
     325                        'orderby'        => 'user_nicename',
     326                ) );
     327
     328                // Format the users into a nice array.
     329                if ( ! empty( $users ) ) {
     330                        foreach ( array_values( $users ) as $details ) {
     331                                $results[] = $details->user_nicename;
     332                        }
     333                }
     334
     335                // Echo results for AJAX.
     336                echo join( $results, "\n" );
     337                wp_die();
     338        }
     339
     340        /**
    265341         * Pass the forum attributes for processing
    266342         *
    267343         * @since bbPress (r2746)
  • src/includes/core/filters.php

     
    257257// Capabilities
    258258add_filter( 'bbp_map_meta_caps', 'bbp_map_primary_meta_caps',   10, 4 ); // Primary caps
    259259add_filter( 'bbp_map_meta_caps', 'bbp_map_forum_meta_caps',     10, 4 ); // Forums
     260add_filter( 'bbp_map_meta_caps', 'bbp_map_forum_mod_meta_caps', 10, 4 ); // Forum moderator
    260261add_filter( 'bbp_map_meta_caps', 'bbp_map_topic_meta_caps',     10, 4 ); // Topics
     262add_filter( 'bbp_map_meta_caps', 'bbp_map_topic_tag_meta_caps', 10, 4 ); // Topic tags
    261263add_filter( 'bbp_map_meta_caps', 'bbp_map_reply_meta_caps',     10, 4 ); // Replies
    262 add_filter( 'bbp_map_meta_caps', 'bbp_map_topic_tag_meta_caps', 10, 4 ); // Topic tags
    263264
    264265/** Deprecated ****************************************************************/
    265266
  • src/includes/core/options.php

     
    235235}
    236236
    237237/**
     238 * Are per-forum moderators allowed
     239 *
     240 * @since bbPress (rXXXX)
     241 *
     242 * @param bool $default Optional. Default value true.
     243 * @uses get_option() To get the allow tags
     244 *
     245 * @return bool Are per-forum moderators allowed?
     246 */
     247function bbp_allow_forum_mods( $default = 1 ) {
     248        return (bool) apply_filters( 'bbp_allow_forum_mods', (bool) get_option( '_bbp_allow_forum_mods', $default ) );
     249}
     250
     251/**
    238252 * Is forum-wide searching allowed
    239253 *
    240254 * @since bbPress (r4970)
  • src/includes/forums/capabilities.php

     
    179179
    180180                /** Admin *************************************************************/
    181181
     182                // Forum admin area.
    182183                case 'bbp_forums_admin' :
    183184                        $caps = array( 'keep_gate' );
    184185                        break;
     186
     187                // Forum moderator admin area.
     188                case 'bbp_forum_mods_admin' :
     189                        $caps = array( 'keep_gate' );
     190                        break;
    185191        }
    186192
    187193        return apply_filters( 'bbp_map_forum_meta_caps', $caps, $cap, $user_id, $args );
    188194}
     195
     196/**
     197 * Return forum moderator capabilities
     198 *
     199 * @since bbPress (rXXXX)
     200 *
     201 * @uses apply_filters() Calls 'bbp_get_forum_mod_caps' with the capabilities
     202 *
     203 * @return array Forum mod capabilities.
     204 */
     205function bbp_get_forum_mod_caps() {
     206        return apply_filters( 'bbp_get_forum_mod_caps', array(
     207                'manage_terms' => 'keep_gate',
     208                'edit_terms'   => 'keep_gate',
     209                'delete_terms' => 'keep_gate',
     210                'assign_terms' => 'keep_gate',
     211        ) );
     212}
     213
     214/**
     215 * Maps forum moderator capabilities
     216 *
     217 * @since bbPress (rXXXX)
     218 *
     219 * @param array  $caps Capabilities for meta capability.
     220 * @param string $cap Capability name.
     221 * @param int    $user_id User id.
     222 * @param mixed  $args Arguments.
     223 * @uses apply_filters() Filter capabilities map results.
     224 *
     225 * @return array Actual capabilities for meta capability.
     226 */
     227function bbp_map_forum_mod_meta_caps( $caps, $cap, $user_id, $args ) {
     228
     229        // What capability is being checked?
     230        switch ( $cap ) {
     231                case 'manage_forum_mods'    :
     232                case 'edit_forum_mods'      :
     233                case 'delete_forum_mods'    :
     234                case 'assign_forum_mods'    :
     235                case 'bbp_forum_mods_admin' :
     236
     237                        // Key Masters can always edit.
     238                        if ( user_can( $user_id, 'keep_gate' ) ) {
     239                                $caps = array( 'keep_gate' );
     240                        }
     241        }
     242
     243        return apply_filters( 'bbp_map_forum_mod_meta_caps', $caps, $cap, $user_id, $args );
     244}
     245
     246/**
     247 * Get moderators of a forum
     248 *
     249 * @since bbPress (rXXXX)
     250 *
     251 * @param int $forum_id Forum id.
     252 * @uses bbp_get_forum_id() To get the forum id
     253 * @uses bbp_is_forum() To make sure it is a forum
     254 * @uses bbp_get_forum_mod_tax_id() To get the forum moderator taxonomy
     255 * @uses wp_get_object_terms() To get the forum's moderator terms
     256 * @uses is_wp_error() To check for errors
     257 * @uses bbp_get_term_taxonomy_user_id() To convert terms to user ids
     258 *
     259 * @return boolean|array Return false early, or if no moderator terms set, or
     260 *                 an array of User ids
     261 */
     262function bbp_get_forum_mod_ids( $forum_id = 0 ) {
     263
     264        // Bail if no forum ID.
     265        $forum_id = bbp_get_forum_id( $forum_id );
     266        if ( empty( $forum_id ) ) {
     267                return false;
     268        }
     269
     270        // Bail if forum does not exist.
     271        if ( ! bbp_is_forum( $forum_id ) ) {
     272                return false;
     273        }
     274
     275        // Get forum taxonomy terms.
     276        $taxonomy = bbp_get_forum_mod_tax_id();
     277        $terms    = wp_get_object_terms( $forum_id, $taxonomy, array(
     278                'fields' => 'ids',
     279        ) );
     280
     281        // Bail if no terms found.
     282        if ( empty( $terms ) || is_wp_error( $terms ) ) {
     283                return false;
     284        }
     285
     286        $moderators = array();
     287
     288        // Convert term ids to user ids.
     289        foreach ( $terms as $term ) {
     290                $user_id = bbp_get_term_taxonomy_user_id( $term, $taxonomy );
     291                if ( ! empty( $user_id ) ) {
     292                        $moderators[] = $user_id;
     293                }
     294        }
     295
     296        // Moderators found.
     297        if ( ! empty( $moderators ) ) {
     298                return $moderators;
     299        }
     300
     301        return false;
     302}
     303
     304/**
     305 * Get forums of a moderator
     306 *
     307 * @since bbPress (rXXXX)
     308 *
     309 * @param int $user_id User id.
     310 * @uses get_userdata() To get the user object
     311 * @uses bbp_get_forum_mod_tax_id() To get the forum moderator taxonomy
     312 * @uses bbp_get_user_taxonomy_term_id() To get the user taxonomy term id
     313 * @uses get_term_by() To get the term id
     314 * @uses get_objects_in_term() Get the forums the user moderates
     315 * @uses is_wp_error() To check for errors
     316 * @uses bbp_is_forum() To make sure the objects are forums
     317 *
     318 * @return boolean|array Return false early, or if user has no forums, or
     319 *                 an array of Forum ids
     320 */
     321function bbp_get_moderator_forum_ids( $user_id = 0 ) {
     322
     323        // Bail if no user ID.
     324        if ( empty( $user_id ) ) {
     325                return false;
     326        }
     327
     328        // Bail if user does not eist.
     329        $user = get_userdata( $user_id );
     330        if ( empty( $user ) ) {
     331                return false;
     332        }
     333
     334        // Convert user id to term id.
     335        $taxonomy = bbp_get_forum_mod_tax_id();
     336        $term_id  = bbp_get_user_taxonomy_term_id( $user_id, $taxonomy );
     337
     338        // Get moderator forums.
     339        $forums = get_objects_in_term( $term_id, $taxonomy );
     340
     341        // Forums found.
     342        if ( empty( $forums ) || is_wp_error( $forums ) ) {
     343                return false;
     344        }
     345
     346        // Make sure the ids returned are forums.
     347        $forum_ids = array();
     348        foreach ( $forums as $forum_id ) {
     349                if ( bbp_is_forum( $forum_id ) ) {
     350                        $forum_ids[] = $forum_id;
     351                }
     352        }
     353
     354        return $forum_ids;
     355}
     356
     357/**
     358 * Can a user moderate a forum?
     359 *
     360 * @since bbPress (rXXXX)
     361 *
     362 * @param int $user_id User id.
     363 * @param int $forum_id Forum id.
     364 * @uses bbp_get_user_id()
     365 * @uses bbp_get_forum_id()
     366 * @uses bbp_get_moderator_forum_ids()
     367 * @uses apply_filters() Calls 'bbp_is_user_forum_mod' with the forums
     368 *
     369 * @return bool Return true if user is moderator of forum
     370 */
     371function bbp_is_user_forum_mod( $user_id = 0, $forum_id = 0 ) {
     372
     373        // Assume user cannot moderate the forum.
     374        $retval    = false;
     375
     376        // Validate user ID - fallback to current user if no ID passed.
     377        $user_id   = bbp_get_user_id( $user_id, false, ! empty( $user_id ) );
     378        $forum_id  = bbp_get_forum_id( $forum_id );
     379
     380        // Get forums the user can moderate.
     381        $forum_ids = bbp_get_moderator_forum_ids( $user_id );
     382
     383        // Is this forum ID in the users array of forum IDs?
     384        if ( ! empty( $forum_ids ) ) {
     385                $retval = in_array( $forum_id, $forum_ids );
     386        }
     387
     388        return (bool) apply_filters( 'bbp_is_user_forum_mod', $retval, $user_id, $forum_id, $forum_ids );
     389}
  • src/includes/forums/template.php

     
    21772177                return apply_filters( 'bbp_get_single_forum_description', $retstr, $r, $args );
    21782178        }
    21792179
     2180/** Moderators ****************************************************************/
     2181
     2182/**
     2183 * Output the unique id of the forum moderators taxonomy
     2184 *
     2185 * @since bbPress (rXXXX)
     2186 *
     2187 * @uses bbp_get_forum_mod_tax_id() To get the forum modorator taxonomy ID
     2188 */
     2189function bbp_forum_mod_tax_id() {
     2190        echo bbp_get_forum_mod_tax_id();
     2191}
     2192        /**
     2193         * Return the unique id of the forum moderators taxonomy
     2194         *
     2195         * @since bbPress (rXXXX)
     2196         *
     2197         * @uses apply_filters() Calls 'bbp_get_forum_mod_tax_id' with the forum
     2198         *                        moderator taxonomy id
     2199         * @return string The unique forum moderators taxonomy
     2200         */
     2201        function bbp_get_forum_mod_tax_id() {
     2202                return apply_filters( 'bbp_get_forum_mod_tax_id', bbpress()->forum_mod_tax_id );
     2203        }
     2204
     2205/**
     2206 * Return array of labels used by the forum-mod taxonomy
     2207 *
     2208 * @since bbPress (rXXXX)
     2209 *
     2210 * @uses apply_filters() Calls 'bbp_get_forum_mod_tax_id' with the forum
     2211 *                        moderator taxonomy labels
     2212 * @return array
     2213 */
     2214function bbp_get_forum_mod_tax_labels() {
     2215        return apply_filters( 'bbp_get_forum_mod_tax_labels', array(
     2216                'name'                       => __( 'Forum Moderators',     'bbpress' ),
     2217                'singular_name'              => __( 'Forum Moderator',      'bbpress' ),
     2218                'search_items'               => __( 'Search Moderators',    'bbpress' ),
     2219                'popular_items'              => __( 'Popular Moderators',   'bbpress' ),
     2220                'all_items'                  => __( 'All Moderators',       'bbpress' ),
     2221                'edit_item'                  => __( 'Edit Moderator',       'bbpress' ),
     2222                'update_item'                => __( 'Update Moderator',     'bbpress' ),
     2223                'add_new_item'               => __( 'Add New Moderator',    'bbpress' ),
     2224                'new_item_name'              => __( 'New Moderator Name',   'bbpress' ),
     2225                'view_item'                  => __( 'View Forum Moderator', 'bbpress' ),
     2226                'separate_items_with_commas' => __( 'Separate moderator names with commas', 'bbpress' ),
     2227        ) );
     2228}
     2229
    21802230/** Forms *********************************************************************/
    21812231
    21822232/**
  • src/includes/replies/capabilities.php

     
    3939 * @param array $args Arguments
    4040 * @uses get_post() To get the post
    4141 * @uses get_post_type_object() To get the post type object
     42 * @uses bbp_get_public_status_id() To get the public status id
     43 * @uses bbp_is_user_forum_mod() To check if the user is a forum moderator
     44 * @uses bbp_get_reply_forum_id() To get the repliy forum id
    4245 * @uses apply_filters() Filter mapped results
     46 *
    4347 * @return array Actual capabilities for meta capability
    4448 */
    4549function bbp_map_reply_meta_caps( $caps = array(), $cap = '', $user_id = 0, $args = array() ) {
     
    131135
    132136                                // Unknown, so map to edit_others_posts
    133137                                } else {
    134                                         $caps[] = $post_type->cap->edit_others_posts;
     138
     139                                        // If user is a per-forum moderator, make sure they can spectate.
     140                                        if ( bbp_is_user_forum_mod( $user_id, bbp_get_reply_forum_id( $_post->ID ) ) ) {
     141                                                $caps = array( 'spectate' );
     142
     143                                        // Fallback to edit_others_posts.
     144                                        } else {
     145                                                $caps[] = $post_type->cap->edit_others_posts;
     146                                        }
    135147                                }
    136148                        }
    137149
  • src/includes/topics/capabilities.php

     
    5757 * @param array $args Arguments
    5858 * @uses get_post() To get the post
    5959 * @uses get_post_type_object() To get the post type object
     60 * @uses bbp_get_public_status_id() To get the  public status id
     61 * @uses bbp_is_user_forum_mod() To check if the user is a forum moderator
     62 * @uses bbp_get_topic_forum_id() To get the opic forum id
    6063 * @uses apply_filters() Filter capability map results
     64 *
    6165 * @return array Actual capabilities for meta capability
    6266 */
    6367function bbp_map_topic_meta_caps( $caps = array(), $cap = '', $user_id = 0, $args = array() ) {
     
    149153
    150154                                // Unknown, so map to edit_others_posts
    151155                                } else {
    152                                         $caps[] = $post_type->cap->edit_others_posts;
     156
     157                                        // If user is a per-forum moderator, make sure they can spectate.
     158                                        if ( bbp_is_user_forum_mod( $user_id, bbp_get_topic_forum_id( $_post->ID ) ) ) {
     159                                                $caps = array( 'spectate' );
     160
     161                                        // Fallback to edit_others_posts.
     162                                        } else {
     163                                                $caps[] = $post_type->cap->edit_others_posts;
     164                                        }
    153165                                }
    154166                        }
    155167
  • src/includes/users/capabilities.php

     
    1414 *
    1515 * @since bbPress (r4242)
    1616 *
    17  * @param array $caps Capabilities for meta capability
    18  * @param string $cap Capability name
    19  * @param int $user_id User id
    20  * @param array $args Arguments
     17 * @param array  $caps Capabilities for meta capability.
     18 * @param string $cap Capability name.
     19 * @param int    $user_id User id.
     20 * @param array  $args Arguments.
     21 * @uses bbp_is_user_inactive() To check if user is spammer or deleted
     22 * @uses get_post() To get the post
     23 * @uses bbp_get_forum_post_type() To get the forum post type
     24 * @uses bbp_get_topic_post_type() To get the topic post type
     25 * @uses bbp_get_topic_forum_id() To get the topic forum id
     26 * @uses bbp_get_reply_post_type() To get the reply post type
     27 * @uses bbp_get_reply_forum_id() To get the reply forum id
     28 * @uses bbp_is_user_forum_mod() To check if the user is a forum moderator
    2129 * @uses apply_filters() Filter mapped results
     30 *
    2231 * @return array Actual capabilities for meta capability
    2332 */
    2433function bbp_map_primary_meta_caps( $caps = array(), $cap = '', $user_id = 0, $args = array() ) {
     
    2938                case 'participate' :
    3039                case 'moderate'    :
    3140
    32                         // Do not allow inactive users
     41                        // Do not allow inactive users.
    3342                        if ( bbp_is_user_inactive( $user_id ) ) {
    3443                                $caps = array( 'do_not_allow' );
    3544
    36                         // Moderators are always participants
     45                        // Moderators are always participants.
    3746                        } else {
     47
     48                                // Default to the current cap.
    3849                                $caps = array( $cap );
     50
     51                                // Bail if no post to check.
     52                                if ( ( 'moderate' !== $cap ) || empty( $args[0] ) ) {
     53                                        break;
     54                                }
     55
     56                                // Get the post.
     57                                $_post = get_post( $args[0] );
     58                                if ( empty( $_post ) ) {
     59                                        break;
     60                                }
     61
     62                                // Get forum ID for specific type of post.
     63                                switch ( $_post->post_type ) {
     64
     65                                        // Forum.
     66                                        case bbp_get_forum_post_type() :
     67                                                $forum_id = $_post->ID;
     68                                                break;
     69
     70                                        // Topic.
     71                                        case bbp_get_topic_post_type() :
     72                                                $forum_id = bbp_get_topic_forum_id( $_post->ID );
     73                                                break;
     74
     75                                        // Reply.
     76                                        case bbp_get_reply_post_type() :
     77                                                $forum_id = bbp_get_reply_forum_id( $_post->ID );
     78                                                break;
     79
     80                                        // Any other post type defaults to 0.
     81                                        default :
     82                                                $forum_id = 0;
     83                                                break;
     84                                }
     85
     86                                // Bail if no forum ID.
     87                                if ( empty( $forum_id ) ) {
     88                                        break;
     89                                }
     90
     91                                // If user is a per-forum moderator, make sure they can spectate.
     92                                if ( bbp_is_user_forum_mod( $user_id, $forum_id ) ) {
     93                                        $caps = array( 'spectate' );
     94                                }
    3995                        }
    4096
    4197                        break;
  • src/includes/users/functions.php

     
    19111911        return bbp_bump_user_reply_count( $user_id, -1 );
    19121912}
    19131913
     1914/** User Nicename Taxonomies **************************************************/
     1915
     1916/**
     1917 * Return the term id for a given user id and taxonomy
     1918 *
     1919 * @since bbPress (rXXXX)
     1920 *
     1921 * @param int    $user_id User id.
     1922 * @param string $taxonomy Taxonomy.
     1923 * @uses get_userdata() To get the user data
     1924 * @uses taxonomy_exists() To make sure the taxonomy exists
     1925 * @uses get_term_by() To get the term by name
     1926 *
     1927 * @return boolean|int Return false early, or if not found, or int term id
     1928 */
     1929function bbp_get_user_taxonomy_term_id( $user_id = 0, $taxonomy = '' ) {
     1930
     1931        // Bail if no user ID.
     1932        if ( empty( $user_id ) ) {
     1933                return false;
     1934        }
     1935
     1936        // Bail if user does not exist.
     1937        $user = get_userdata( $user_id );
     1938        if ( empty( $user ) ) {
     1939                return false;
     1940        }
     1941
     1942        // Bail if no taxonomy.
     1943        if ( empty( $taxonomy ) || ! taxonomy_exists( $taxonomy ) ) {
     1944                return false;
     1945        }
     1946
     1947        // Get the term id.
     1948        $term = get_term_by( 'name', $user->user_nicename, $taxonomy );
     1949        if ( ! empty( $term ) ) {
     1950                return $term->term_id;
     1951        }
     1952
     1953        return false;
     1954}
     1955
     1956/**
     1957 * Return the user id for a given term id and taxonomy
     1958 *
     1959 * @since bbPress (rXXXX)
     1960 *
     1961 * @param int    $term_id Term id.
     1962 * @param string $taxonomy Taxonomy.
     1963 * @uses taxonomy_exists() To make sure the taxonomy exists
     1964 * @uses get_term() To get the term by term id
     1965 * @uses get_user_by() To get the user by nicename
     1966 *
     1967 * @return boolean|int Return false early, or if not found, or int user id
     1968 */
     1969function bbp_get_term_taxonomy_user_id( $term_id = 0, $taxonomy = '' ) {
     1970
     1971        // Bail if no user ID.
     1972        if ( empty( $term_id ) ) {
     1973                return false;
     1974        }
     1975
     1976        // Bail if no taxonomy.
     1977        if ( empty( $taxonomy ) || ! taxonomy_exists( $taxonomy ) ) {
     1978                return false;
     1979        }
     1980
     1981        // Bail if no term exists.
     1982        $term = get_term( $term_id, $taxonomy );
     1983        if ( empty( $term ) ) {
     1984                return false;
     1985        }
     1986
     1987        // Get the user by nicename.
     1988        $nicename = $term->name;
     1989        $user     = get_user_by( 'slug', $nicename );
     1990        if ( ! empty( $user ) ) {
     1991                return $user->ID;
     1992        }
     1993
     1994        return false;
     1995}
     1996
    19141997/** Permissions ***************************************************************/
    19151998
    19161999/**