Changeset 5834
- Timestamp:
- 07/15/2015 03:59:23 PM (10 years ago)
- Location:
- trunk/src
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/bbpress.php
r5829 r5834 224 224 // Post type identifiers 225 225 $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' ); 226 227 $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' ); 227 229 $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' );229 230 230 231 // Status identifiers … … 652 653 653 654 /** 654 * Register the topic tag taxonomy 655 * 656 * @since bbPress (r2464) 655 * Register the topic tag and forum moderator taxonomies 656 * 657 * @since bbPress (r2464) Added bbp_get_topic_tag_tax_id() taxonomy 658 * @since bbPress (r5834) Added bbp_get_forum_mod_tax_id() taxonomy 659 * 657 660 * @uses register_taxonomy() To register the taxonomy 661 * @uses bbp_get_topic_post_type() To get the topic post type 662 * @uses bbp_get_topic_tag_tax_labels() To get the topic tag taxonomy labels 663 * @uses bbp_get_topic_tag_tax_rewrite() To get the topic tag taxonomy slug 664 * @uses bbp_get_topic_tag_caps() To get topic tag capabilities 665 * @uses bbp_allow_topic_tags() To check if topic tags are allowed 666 * @uses current_user_can() To check if the current user can edit/delete tags 667 * @uses bbp_get_forum_post_type() To get the forum post type 668 * @uses bbp_get_forum_mod_tax_labels() To get the forum moderator taxonomy label 669 * @uses bbp_get_forum_mod_caps() To check the forum moderator capabilities 670 * @uses bbp_allow_forum_mods() To check if forum moderators are allowed 671 * @uses current_user_can() To check if the current user can edit/delete forums 658 672 */ 659 673 public static function register_taxonomies() { 660 674 661 // Register the topic-tag taxonomy 675 // Register the topic-tag taxonomy. 662 676 register_taxonomy( 663 677 bbp_get_topic_tag_tax_id(), … … 673 687 'show_in_nav_menus' => false, 674 688 'public' => true, 675 'show_ui' => bbp_allow_topic_tags() && current_user_can( 'bbp_topic_tags_admin' ) 689 'show_ui' => bbp_allow_topic_tags() && current_user_can( 'bbp_topic_tags_admin' ), 690 ) 691 ) ); 692 693 // Register the forum-mod taxonomy. 694 register_taxonomy( 695 bbp_get_forum_mod_tax_id(), 696 bbp_get_forum_post_type(), 697 apply_filters( 'bbp_register_forum_moderator_taxonomy', array( 698 'labels' => bbp_get_forum_mod_tax_labels(), 699 'capabilities' => bbp_get_forum_mod_caps(), 700 'update_count_callback' => '_update_post_term_count', 701 'query_var' => false, 702 'show_tagcloud' => true, 703 'hierarchical' => false, 704 'show_in_menu' => true, 705 'show_in_nav_menus' => false, 706 'public' => false, 707 'show_ui' => bbp_allow_forum_mods() && current_user_can( 'bbp_forum_mods_admin' ), 676 708 ) 677 709 ) ); -
trunk/src/includes/admin/forums.php
r5829 r5834 64 64 add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) ); 65 65 66 // Metabox actions67 add_action( 'add_meta_boxes', array( $this, 'attributes_metabox' ) );68 add_action( 'save_post', array( $this, 'attributes_metabox_save' ) );69 70 66 // Forum Column headers. 71 67 add_filter( 'manage_' . $this->post_type . '_posts_columns', array( $this, 'column_headers' ) ); … … 75 71 add_filter( 'page_row_actions', array( $this, 'row_actions' ), 10, 2 ); 76 72 73 // Metabox actions 74 add_action( 'add_meta_boxes', array( $this, 'attributes_metabox' ) ); 75 add_action( 'save_post', array( $this, 'attributes_metabox_save' ) ); 76 77 77 // Check if there are any bbp_toggle_forum_* requests on admin_init, also have a message displayed 78 78 add_action( 'load-edit.php', array( $this, 'toggle_forum' ) ); 79 79 add_action( 'admin_notices', array( $this, 'toggle_forum_notice' ) ); 80 81 // Forum moderators AJAX; run at -1 to preempt built-in tag search 82 add_action( 'wp_ajax_ajax-tag-search', array( $this, 'ajax_tag_search' ), -1 ); 80 83 81 84 // Contextual Help … … 260 263 261 264 do_action( 'bbp_forum_attributes_metabox' ); 265 } 266 267 /** 268 * Return user nicename suggestions instead of tag suggestions 269 * 270 * @since bbPress (r5834) 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(); 262 338 } 263 339 … … 349 425 /*<![CDATA[*/ 350 426 351 #mi sc-publishing-actions,427 #minor-publishing, 352 428 #save-post { 353 429 display: none; … … 373 449 374 450 .column-author, 451 .column-bbp_forum_mods, 375 452 .column-bbp_reply_author, 376 453 .column-bbp_topic_author { … … 566 643 } 567 644 568 $columns = array ( 645 // Set list table column headers 646 $columns = array( 569 647 'cb' => '<input type="checkbox" />', 570 'title' => __( 'Forum', 'bbpress' ), 571 'bbp_forum_topic_count' => __( 'Topics', 'bbpress' ), 572 'bbp_forum_reply_count' => __( 'Replies', 'bbpress' ), 573 'author' => __( 'Creator', 'bbpress' ), 574 'bbp_forum_created' => __( 'Created' , 'bbpress' ), 575 'bbp_forum_freshness' => __( 'Freshness', 'bbpress' ) 648 'title' => __( 'Forum', 'bbpress' ), 649 'bbp_forum_topic_count' => __( 'Topics', 'bbpress' ), 650 'bbp_forum_reply_count' => __( 'Replies', 'bbpress' ), 651 'author' => __( 'Creator', 'bbpress' ), 652 'bbp_forum_mods' => __( 'Moderators', 'bbpress' ), 653 'bbp_forum_created' => __( 'Created' , 'bbpress' ), 654 'bbp_forum_freshness' => __( 'Freshness', 'bbpress' ) 576 655 ); 656 657 // Remove forum mods column if not enabled 658 if ( ! bbp_allow_forum_mods() ) { 659 unset( $columns['bbp_forum_mods'] ); 660 } 577 661 578 662 return apply_filters( 'bbp_admin_forums_column_headers', $columns ); … … 609 693 case 'bbp_forum_reply_count' : 610 694 bbp_forum_reply_count( $forum_id ); 695 break; 696 697 case 'bbp_forum_mods' : 698 $moderators = wp_get_object_terms( $forum_id, bbp_get_forum_mod_tax_id() ); 699 if ( empty( $moderators ) ) { 700 esc_html__( 'None', 'bbpress' ); 701 } else { 702 echo implode( ', ', wp_list_pluck( $moderators, 'name' ) ); 703 } 611 704 break; 612 705 -
trunk/src/includes/admin/settings.php
r5829 r5834 162 162 ), 163 163 164 // Allow per-forum moderators 165 '_bbp_allow_forum_mods' => array( 166 'title' => __( 'Forum Moderators', 'bbpress' ), 167 'callback' => 'bbp_admin_setting_callback_forum_mods', 168 'sanitize_callback' => 'intval', 169 'args' => array() 170 ), 171 164 172 // Allow topic tags 165 173 '_bbp_allow_search' => array( … … 597 605 <input name="_bbp_allow_topic_tags" id="_bbp_allow_topic_tags" type="checkbox" value="1" <?php checked( bbp_allow_topic_tags( true ) ); bbp_maybe_admin_setting_disabled( '_bbp_allow_topic_tags' ); ?> /> 598 606 <label for="_bbp_allow_topic_tags"><?php esc_html_e( 'Allow topics to have tags', 'bbpress' ); ?></label> 607 608 <?php 609 } 610 611 /** 612 * Allow forum-mods setting field 613 * 614 * @since bbPress (r5834) 615 * 616 * @uses checked() To display the checked attribute 617 */ 618 function bbp_admin_setting_callback_forum_mods() { 619 ?> 620 621 <input name="_bbp_allow_forum_mods" id="_bbp_allow_forum_mods" type="checkbox" value="1" <?php checked( bbp_allow_forum_mods( true ) ); bbp_maybe_admin_setting_disabled( '_bbp_allow_forum_mods' ); ?> /> 622 <label for="_bbp_allow_forum_mods"><?php esc_html_e( 'Allow forums to have dedicated moderators', 'bbpress' ); ?></label> 599 623 600 624 <?php -
trunk/src/includes/core/filters.php
r5820 r5834 255 255 add_filter( 'bbp_map_meta_caps', 'bbp_map_primary_meta_caps', 10, 4 ); // Primary caps 256 256 add_filter( 'bbp_map_meta_caps', 'bbp_map_forum_meta_caps', 10, 4 ); // Forums 257 add_filter( 'bbp_map_meta_caps', 'bbp_map_forum_mod_meta_caps', 10, 4 ); // Forum mods 257 258 add_filter( 'bbp_map_meta_caps', 'bbp_map_topic_meta_caps', 10, 4 ); // Topics 259 add_filter( 'bbp_map_meta_caps', 'bbp_map_topic_tag_meta_caps', 10, 4 ); // Topic tags 258 260 add_filter( 'bbp_map_meta_caps', 'bbp_map_reply_meta_caps', 10, 4 ); // Replies 259 add_filter( 'bbp_map_meta_caps', 'bbp_map_topic_tag_meta_caps', 10, 4 ); // Topic tags260 261 261 262 /** Deprecated ****************************************************************/ -
trunk/src/includes/core/options.php
r5770 r5834 13 13 /** 14 14 * Get the default site options and their values. 15 * 15 * 16 16 * These option 17 17 * … … 38 38 '_bbp_allow_revisions' => 1, // Allow revisions 39 39 '_bbp_allow_topic_tags' => 1, // Allow topic tagging 40 '_bbp_allow_forum_mods' => 1, // Allow per-forum moderation 40 41 '_bbp_allow_threaded_replies' => 0, // Allow threaded replies 41 42 '_bbp_allow_search' => 1, // Allow forum-wide search … … 233 234 function bbp_allow_topic_tags( $default = 1 ) { 234 235 return (bool) apply_filters( 'bbp_allow_topic_tags', (bool) get_option( '_bbp_allow_topic_tags', $default ) ); 236 } 237 238 /** 239 * Are per-forum moderators allowed 240 * 241 * @since bbPress (r5834) 242 * 243 * @param bool $default Optional. Default value true. 244 * @uses get_option() To get the allow per-forum moderators 245 * 246 * @return bool Are per-forum moderators allowed? 247 */ 248 function bbp_allow_forum_mods( $default = 1 ) { 249 return (bool) apply_filters( 'bbp_allow_forum_mods', (bool) get_option( '_bbp_allow_forum_mods', $default ) ); 235 250 } 236 251 -
trunk/src/includes/forums/capabilities.php
r5829 r5834 180 180 /** Admin *************************************************************/ 181 181 182 // Forum admin area. 182 183 case 'bbp_forums_admin' : 183 184 $caps = array( 'keep_gate' ); 184 185 break; 186 187 // Forum moderator admin area. 188 case 'bbp_forum_mods_admin' : 189 $caps = array( 'keep_gate' ); 190 break; 185 191 } 186 192 187 193 return apply_filters( 'bbp_map_forum_meta_caps', $caps, $cap, $user_id, $args ); 188 194 } 195 196 /** 197 * Return forum moderator capabilities 198 * 199 * @since bbPress (r5834) 200 * 201 * @uses apply_filters() Calls 'bbp_get_forum_mod_caps' with the capabilities 202 * 203 * @return array Forum mod capabilities. 204 */ 205 function 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 */ 227 function 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 (r5834) 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 */ 262 function 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 (r5834) 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 */ 321 function 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 (r5834) 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 */ 371 function 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 } -
trunk/src/includes/forums/template.php
r5770 r5834 2178 2178 } 2179 2179 2180 /** Moderators ****************************************************************/ 2181 2182 /** 2183 * Output the unique id of the forum moderators taxonomy 2184 * 2185 * @since bbPress (r5834) 2186 * 2187 * @uses bbp_get_forum_mod_tax_id() To get the forum modorator taxonomy ID 2188 */ 2189 function 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 (r5834) 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 (r5834) 2209 * 2210 * @uses apply_filters() Calls 'bbp_get_forum_mod_tax_id' with the forum 2211 * moderator taxonomy labels 2212 * @return array 2213 */ 2214 function 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 2230 /** 2231 * Output a the moderators of a forum 2232 * 2233 * @param int $forum_id Optional. Topic id 2234 * @param array $args See {@link bbp_get_forum_mod_list()} 2235 * @uses bbp_get_topic_tag_list() To get the forum mod list 2236 */ 2237 function bbp_forum_mod_list( $forum_id = 0, $args = array() ) { 2238 echo bbp_get_forum_mod_list( $forum_id, $args ); 2239 } 2240 /** 2241 * Return the moderators of a forum 2242 * 2243 * @param int $forum_id Optional. Forum id 2244 * @param array $args This function supports these arguments: 2245 * - before: Before the tag list 2246 * - sep: Tag separator 2247 * - after: After the tag list 2248 * @uses bbp_get_forum_id() To get the forum id 2249 * @uses get_the_term_list() To get the moderator list 2250 * 2251 * @return string Moderator list of the forum 2252 */ 2253 function bbp_get_forum_mod_list( $forum_id = 0, $args = array() ) { 2254 2255 // Bail if forum-mods are off 2256 if ( ! bbp_allow_forum_mods() ) { 2257 return; 2258 } 2259 2260 // Parse arguments against default values 2261 $r = bbp_parse_args( $args, array( 2262 'before' => '<div class="bbp-forum-mods"><p>' . esc_html__( 'Moderators:', 'bbpress' ) . ' ', 2263 'sep' => ', ', 2264 'after' => '</p></div>' 2265 ), 'get_forum_mod_list' ); 2266 2267 $forum_id = bbp_get_forum_id( $forum_id ); 2268 2269 $retval = get_the_term_list( $forum_id, bbp_get_forum_mod_id(), $r['before'], $r['sep'], $r['after'] ); 2270 2271 return $retval; 2272 } 2273 2180 2274 /** Forms *********************************************************************/ 2181 2275 -
trunk/src/includes/replies/capabilities.php
r5829 r5834 40 40 * @uses get_post() To get the post 41 41 * @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 42 45 * @uses apply_filters() Filter mapped results 46 * 43 47 * @return array Actual capabilities for meta capability 44 48 */ … … 63 67 if ( ! empty( $_post ) ) { 64 68 65 // Get caps forpost type object69 // Get post type object 66 70 $post_type = get_post_type_object( $_post->post_type ); 67 71 … … 118 122 if ( ! empty( $_post ) ) { 119 123 120 // Get caps forpost type object124 // Get post type object 121 125 $post_type = get_post_type_object( $_post->post_type ); 122 126 $caps = array(); … … 127 131 128 132 // User is author so allow edit if not in admin 129 } elseif ( ! is_admin() && ( (int) $user_id === (int) $_post->post_author ) ) {133 } elseif ( ! is_admin() && ( (int) $user_id === (int) $_post->post_author ) ) { 130 134 $caps[] = $post_type->cap->edit_posts; 131 135 132 // Unknown, so map to edit_others_posts 136 // User is a per-forum moderator, make sure they can spectate. 137 } elseif ( bbp_allow_forum_mods() && bbp_is_user_forum_mod( $user_id, bbp_get_reply_forum_id( $_post->ID ) ) ) { 138 $caps = array( 'spectate' ); 139 140 // Fallback to edit_others_posts. 133 141 } else { 134 142 $caps[] = $post_type->cap->edit_others_posts; … … 146 154 if ( ! empty( $_post ) ) { 147 155 148 // Get caps forpost type object156 // Get post type object 149 157 $post_type = get_post_type_object( $_post->post_type ); 150 158 $caps = array(); -
trunk/src/includes/topics/capabilities.php
r5770 r5834 58 58 * @uses get_post() To get the post 59 59 * @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 60 63 * @uses apply_filters() Filter capability map results 64 * 61 65 * @return array Actual capabilities for meta capability 62 66 */ … … 150 154 // Unknown, so map to edit_others_posts 151 155 } 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 } 153 165 } 154 166 } -
trunk/src/includes/users/capabilities.php
r5827 r5834 15 15 * @since bbPress (r4242) 16 16 * 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 21 29 * @uses apply_filters() Filter mapped results 30 * 22 31 * @return array Actual capabilities for meta capability 23 32 */ … … 26 35 // What capability is being checked? 27 36 switch ( $cap ) { 28 case 'spectate' : 29 case 'participate' : 30 case 'moderate' : 31 32 // Do not allow inactive users 37 case 'spectate' : 38 39 // Do not allow inactive users. 33 40 if ( bbp_is_user_inactive( $user_id ) ) { 34 41 $caps = array( 'do_not_allow' ); 35 42 36 // Moderators are always participants43 // Default to the current cap. 37 44 } else { 38 45 $caps = array( $cap ); 46 } 47 break; 48 49 case 'participate' : 50 51 // Do not allow inactive users. 52 if ( bbp_is_user_inactive( $user_id ) ) { 53 $caps = array( 'do_not_allow' ); 54 55 // Default to the current cap. 56 } else { 57 $caps = array( $cap ); 58 } 59 break; 60 61 case 'moderate' : 62 63 // Do not allow inactive users. 64 if ( bbp_is_user_inactive( $user_id ) ) { 65 $caps = array( 'do_not_allow' ); 66 67 // Default to the current cap. 68 } else { 69 $caps = array( $cap ); 70 71 // Bail if no post to check. 72 if ( empty( $args[0] ) ) { 73 break; 74 } 75 76 // Get the post. 77 $_post = get_post( $args[0] ); 78 if ( empty( $_post ) ) { 79 break; 80 } 81 82 // Get forum ID for specific type of post. 83 switch ( $_post->post_type ) { 84 85 // Forum. 86 case bbp_get_forum_post_type() : 87 $forum_id = $_post->ID; 88 break; 89 90 // Topic. 91 case bbp_get_topic_post_type() : 92 $forum_id = bbp_get_topic_forum_id( $_post->ID ); 93 break; 94 95 // Reply. 96 case bbp_get_reply_post_type() : 97 $forum_id = bbp_get_reply_forum_id( $_post->ID ); 98 break; 99 100 // Any other post type defaults to 0. 101 default : 102 $forum_id = 0; 103 break; 104 } 105 106 // Bail if no forum ID. 107 if ( empty( $forum_id ) ) { 108 break; 109 } 110 111 // If user is a per-forum moderator, make sure they can spectate. 112 if ( bbp_is_user_forum_mod( $user_id, $forum_id ) ) { 113 $caps = array( 'spectate' ); 114 } 39 115 } 40 116 … … 212 288 return; 213 289 } 214 290 215 291 // Bail if current user cannot promote the passing user 216 292 if ( ! current_user_can( 'promote_user', $user_id ) ) { … … 308 384 309 385 // Don't add the user, but still give them the correct caps dynamically 310 } else { 386 } else { 311 387 $bbp->current_user->caps[$new_role] = true; 312 388 $bbp->current_user->get_role_caps(); … … 671 747 * @since bbPress (r4783) 672 748 * 673 * @param int $user_id 749 * @param int $user_id 674 750 * @return bool True if keymaster, false if not 675 751 */ -
trunk/src/includes/users/functions.php
r5827 r5834 1906 1906 } 1907 1907 1908 /** User Nicename Taxonomies **************************************************/ 1909 1910 /** 1911 * Return the term id for a given user id and taxonomy 1912 * 1913 * @since bbPress (r5834) 1914 * 1915 * @param int $user_id User id. 1916 * @param string $taxonomy Taxonomy. 1917 * @uses get_userdata() To get the user data 1918 * @uses taxonomy_exists() To make sure the taxonomy exists 1919 * @uses get_term_by() To get the term by name 1920 * 1921 * @return boolean|int Return false early, or if not found, or int term id 1922 */ 1923 function bbp_get_user_taxonomy_term_id( $user_id = 0, $taxonomy = '' ) { 1924 1925 // Bail if no user ID. 1926 if ( empty( $user_id ) ) { 1927 return false; 1928 } 1929 1930 // Bail if user does not exist. 1931 $user = get_userdata( $user_id ); 1932 if ( empty( $user ) ) { 1933 return false; 1934 } 1935 1936 // Bail if no taxonomy. 1937 if ( empty( $taxonomy ) || ! taxonomy_exists( $taxonomy ) ) { 1938 return false; 1939 } 1940 1941 // Get the term id. 1942 $term = get_term_by( 'name', $user->user_nicename, $taxonomy ); 1943 if ( ! empty( $term ) ) { 1944 return $term->term_id; 1945 } 1946 1947 return false; 1948 } 1949 1950 /** 1951 * Return the user id for a given term id and taxonomy 1952 * 1953 * @since bbPress (r5834) 1954 * 1955 * @param int $term_id Term id. 1956 * @param string $taxonomy Taxonomy. 1957 * @uses taxonomy_exists() To make sure the taxonomy exists 1958 * @uses get_term() To get the term by term id 1959 * @uses get_user_by() To get the user by nicename 1960 * 1961 * @return boolean|int Return false early, or if not found, or int user id 1962 */ 1963 function bbp_get_term_taxonomy_user_id( $term_id = 0, $taxonomy = '' ) { 1964 1965 // Bail if no user ID. 1966 if ( empty( $term_id ) ) { 1967 return false; 1968 } 1969 1970 // Bail if no taxonomy. 1971 if ( empty( $taxonomy ) || ! taxonomy_exists( $taxonomy ) ) { 1972 return false; 1973 } 1974 1975 // Bail if no term exists. 1976 $term = get_term( $term_id, $taxonomy ); 1977 if ( empty( $term ) ) { 1978 return false; 1979 } 1980 1981 // Get the user by nicename. 1982 $nicename = $term->name; 1983 $user = get_user_by( 'slug', $nicename ); 1984 if ( ! empty( $user ) ) { 1985 return $user->ID; 1986 } 1987 1988 return false; 1989 } 1990 1991 function bbp_filter_forum_mod_term_link( $termlink = '', $term = '', $taxonomy = '' ) { 1992 1993 // Bail if taxonomy is not forum mod 1994 if ( bbp_get_forum_mod_tax_id() !== $taxonomy ) { 1995 return $termlink; 1996 } 1997 1998 // Bail if forum mods is not allowed 1999 if ( ! bbp_allow_forum_mods() ) { 2000 return $termlink; 2001 } 2002 2003 // Get user ID from taxonomy term 2004 $user_id = bbp_get_term_taxonomy_user_id( $term->term_id, bbp_get_forum_mod_tax_id() ); 2005 2006 if ( is_admin() ) { 2007 2008 // Get the moderator's display name 2009 $display_name = get_userdata( $user_id )->display_name; 2010 $user_link = get_edit_user_link( $user_id ); 2011 2012 // Link or name only 2013 if ( ! empty( $user_link ) ) { 2014 $retval = '<a href="' . esc_url( $user_link ) . '">' . esc_html( $display_name ) . '</a>'; 2015 2016 // Can't edit 2017 } else { 2018 $retval = $display_name; 2019 } 2020 2021 // Theme side term link 2022 } else { 2023 $retval = bbp_get_user_profile_link( $user_id ); 2024 } 2025 2026 return $retval; 2027 } 2028 1908 2029 /** Permissions ***************************************************************/ 1909 2030
Note: See TracChangeset
for help on using the changeset viewer.