Ticket #459: 459.4.diff
File 459.4.diff, 15.3 KB (added by , 11 years ago) |
---|
-
src/bbpress.php
215 215 /** Identifiers *******************************************************/ 216 216 217 217 // Post type identifiers 218 $this->forum_post_type = apply_filters( 'bbp_forum_post_type', 'forum' ); 219 $this->topic_post_type = apply_filters( 'bbp_topic_post_type', 'topic' ); 220 $this->reply_post_type = apply_filters( 'bbp_reply_post_type', 'reply' ); 221 $this->topic_tag_tax_id = apply_filters( 'bbp_topic_tag_tax_id', 'topic-tag' ); 218 $this->forum_post_type = apply_filters( 'bbp_forum_post_type', 'forum' ); 219 $this->topic_post_type = apply_filters( 'bbp_topic_post_type', 'topic' ); 220 $this->reply_post_type = apply_filters( 'bbp_reply_post_type', 'reply' ); 221 $this->forum_moderator_tax_id = apply_filters( 'bbp_forum_moderator_tax_id', 'bbp-moderate' ); 222 $this->topic_tag_tax_id = apply_filters( 'bbp_topic_tag_tax_id', 'topic-tag' ); 222 223 223 224 // Status identifiers 224 225 $this->spam_status_id = apply_filters( 'bbp_spam_post_status', 'spam' ); … … 639 640 } 640 641 641 642 /** 642 * Register the topic tag taxonomy643 * Register the topic tag and forum moderator taxonomies 643 644 * 644 645 * @since bbPress (r2464) 645 646 * @uses register_taxonomy() To register the taxonomy … … 663 664 'show_ui' => bbp_allow_topic_tags() && current_user_can( 'bbp_topic_tags_admin' ) 664 665 ) 665 666 ) ); 667 668 // Define local variable(s) 669 $forum_moderator = array(); 670 671 // Forum moderator labels 672 $forum_moderator['labels'] = array( 673 'name' => __( 'Forum Moderators', 'bbpress' ), 674 'singular_name' => __( 'Forum Moderator', 'bbpress' ), 675 'search_items' => __( 'Search Moderators', 'bbpress' ), 676 'popular_items' => __( 'Popular Moderators', 'bbpress' ), 677 'all_items' => __( 'All Moderators', 'bbpress' ), 678 'edit_item' => __( 'Edit Moderator', 'bbpress' ), 679 'update_item' => __( 'Update Moderator', 'bbpress' ), 680 'add_new_item' => __( 'Add New Moderator', 'bbpress' ), 681 'new_item_name' => __( 'New Moderator Name', 'bbpress' ), 682 'view_item' => __( 'View Forum Moderator', 'bbpress' ), 683 'separate_items_with_commas' => __( 'Separate moderator names with commas', 'bbpress' ) 684 ); 685 686 // Register the forum moderator taxonomy 687 register_taxonomy( 688 bbp_get_forum_moderator_tax_id(), 689 bbp_get_forum_post_type(), 690 apply_filters( 'bbp_register_forum_moderator_taxonomy', array( 691 'labels' => $forum_moderator['labels'], 692 'capabilities' => bbp_get_forum_moderator_caps(), 693 'update_count_callback' => '_update_post_term_count', 694 'query_var' => true, 695 'show_tagcloud' => true, 696 'hierarchical' => false, 697 'public' => false, 698 'show_ui' => current_user_can( 'bbp_forum_moderators_admin' ) 699 ) 700 ) ); 666 701 } 667 702 668 703 /** -
src/includes/admin/forums.php
58 58 private function setup_actions() { 59 59 60 60 // 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' ) ); 62 62 63 63 // Messages 64 add_filter( 'post_updated_messages', array( $this, 'updated_messages') );64 add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) ); 65 65 66 66 // 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' ) ); 69 69 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 70 73 // Forum Column headers. 71 74 add_filter( 'manage_' . $this->post_type . '_posts_columns', array( $this, 'column_headers' ) ); 72 75 … … 255 258 } 256 259 257 260 /** 261 * Return user nicename suggestions instead of tag suggestions 262 * 263 * @return Return early if not a request for forum moderators tax 264 */ 265 public function ajax_tag_search() { 266 267 // Only do AJAX if this is a forum moderators tax search 268 if ( ! isset( $_GET['tax'] ) || ( bbp_get_forum_moderator_tax_id() != $_GET['tax'] ) ) 269 return; 270 271 $taxonomy = sanitize_key( $_GET['tax'] ); 272 $tax = get_taxonomy( $taxonomy ); 273 if ( empty( $tax ) ) 274 wp_die( 0 ); 275 276 // Check permissions 277 if ( ! current_user_can( $tax->cap->assign_terms ) ) 278 wp_die( -1 ); 279 280 $s = stripslashes( $_GET['q'] ); 281 282 // Replace tag delimiter with a comma if needed 283 $comma = _x( ',', 'tag delimiter', 'bbpress' ); 284 if ( ',' !== $comma ) { 285 $s = str_replace( $comma, ',', $s ); 286 } 287 288 if ( false !== strpos( $s, ',' ) ) { 289 $s = explode( ',', $s ); 290 $s = $s[count( $s ) - 1]; 291 } 292 293 // Search on at least 2 characters 294 $s = trim( $s ); 295 if ( strlen( $s ) < 2 ) 296 wp_die(); // require 2 chars for matching 297 298 // Get users 299 $results = array(); 300 $users = get_users( array( 301 'blog_id' => 0, // All users 302 'fields' => array( 'user_nicename' ), 303 'search' => '*' . $s . '*', 304 'search_columns' => array( 'user_nicename' ), 305 'orderby' => 'user_nicename' 306 ) ); 307 308 // Format the users into a nice array 309 if ( ! empty( $users ) ) { 310 foreach( array_values( $users ) as $details ) { 311 $results[] = $details->user_nicename; 312 } 313 } 314 315 // Echo results for AJAX 316 echo join( $results, "\n" ); 317 wp_die(); 318 } 319 320 /** 258 321 * Pass the forum attributes for processing 259 322 * 260 323 * @since bbPress (r2746) -
src/includes/common/functions.php
1952 1952 1953 1953 $wp_query->set_404(); 1954 1954 } 1955 1956 /** User Nicename Taxonomies **************************************************/ 1957 1958 /** 1959 * Return the term id for a given user id and taxonomy 1960 * 1961 * @param int $user_id User id 1962 * @param string $taxonomy Taxonomy 1963 * @uses get_userdata() To get the user data 1964 * @uses taxonomy_exists() To make sure the taxonomy exists 1965 * @uses get_term_by() To get the term by name 1966 * @return boolean Return false early, or if not found, or 1967 * @return int Term id 1968 */ 1969 function bbp_get_user_taxonomy_term_id( $user_id = 0, $taxonomy = '' ) { 1970 // Verify user id 1971 if ( empty( $user_id ) ) 1972 return false; 1973 1974 // Get user data 1975 $user = get_userdata( $user_id ); 1976 if ( empty( $user ) ) 1977 return false; 1978 1979 // Verify taxonomy 1980 if ( empty( $taxonomy ) || !taxonomy_exists( $taxonomy ) ) 1981 return false; 1982 1983 // Get the term id 1984 $term = get_term_by( 'name', $user->user_nicename, $taxonomy ); 1985 if ( $term ) 1986 return $term->term_id; 1987 1988 return false; 1989 } 1990 1991 /** 1992 * Return the user id for a given term id and taxonomy 1993 * 1994 * @param int $term_id Term id 1995 * @param string $taxonomy 1996 * @uses taxonomy_exists() To make sure the taxonomy exists 1997 * @uses get_term() To get the term by term id 1998 * @uses get_user_by() To get the user by nicename 1999 * @return boolean Return false early, or if not found, or 2000 * @return int User id 2001 */ 2002 function bbp_get_term_taxonomy_user_id( $term_id = 0, $taxonomy = '' ) { 2003 // Verify term id 2004 if ( empty( $term_id ) ) 2005 return false; 2006 2007 // Verify taxonomy 2008 if ( empty( $taxonomy ) || !taxonomy_exists( $taxonomy ) ) 2009 return false; 2010 2011 // Get term 2012 $term = get_term( $term_id, $taxonomy ); 2013 if ( !$term ) 2014 return false; 2015 2016 // Get the user by nicename 2017 $nicename = $term->name; 2018 $user = get_user_by( 'slug', $nicename ); 2019 if ( $user ) 2020 return $user->ID; 2021 2022 return false; 2023 } -
src/includes/core/filters.php
234 234 add_filter( 'posts_request', '_bbp_has_replies_where', 10, 2 ); 235 235 236 236 // Capabilities 237 add_filter( 'bbp_map_meta_caps', 'bbp_map_primary_meta_caps', 10, 4 ); // Primary caps 238 add_filter( 'bbp_map_meta_caps', 'bbp_map_forum_meta_caps', 10, 4 ); // Forums 239 add_filter( 'bbp_map_meta_caps', 'bbp_map_topic_meta_caps', 10, 4 ); // Topics 240 add_filter( 'bbp_map_meta_caps', 'bbp_map_reply_meta_caps', 10, 4 ); // Replies 241 add_filter( 'bbp_map_meta_caps', 'bbp_map_topic_tag_meta_caps', 10, 4 ); // Topic tags 237 add_filter( 'bbp_map_meta_caps', 'bbp_map_primary_meta_caps', 10, 4 ); // Primary caps 238 add_filter( 'bbp_map_meta_caps', 'bbp_map_forum_meta_caps', 10, 4 ); // Forums 239 add_filter( 'bbp_map_meta_caps', 'bbp_map_topic_meta_caps', 10, 4 ); // Topics 240 add_filter( 'bbp_map_meta_caps', 'bbp_map_reply_meta_caps', 10, 4 ); // Replies 241 add_filter( 'bbp_map_meta_caps', 'bbp_map_topic_tag_meta_caps', 10, 4 ); // Topic tags 242 add_filter( 'bbp_map_meta_caps', 'bbp_map_forum_moderator_meta_caps', 10, 4 ); // Forum moderator 242 243 243 244 /** Deprecated ****************************************************************/ 244 245 -
src/includes/forums/capabilities.php
182 182 case 'bbp_forums_admin' : 183 183 $caps = array( 'keep_gate' ); 184 184 break; 185 case 'bbp_forum_moderators_admin' : 186 $caps = array( 'manage_options' ); 187 break; 185 188 } 186 189 187 190 return apply_filters( 'bbp_map_forum_meta_caps', $caps, $cap, $user_id, $args ); 188 191 } 192 193 /** 194 * Return forum moderator capabilities 195 * 196 * @since bbPress (rXXXX) 197 * 198 * @uses apply_filters() Calls 'bbp_get_forum_moderator_caps' with the capabilities 199 * @return array Forum mod capabilities 200 */ 201 function bbp_get_forum_moderator_caps() { 202 return apply_filters( 'bbp_get_forum_moderator_caps', array( 203 'manage_terms' => 'keep_gate', 204 'edit_terms' => 'keep_gate', 205 'delete_terms' => 'keep_gate', 206 'assign_terms' => 'keep_gate' 207 ) ); 208 } 209 210 /** 211 * Maps forum moderator capabilities 212 * 213 * @since bbPress (rXXXX) 214 * 215 * @param array $caps Capabilities for meta capability 216 * @param string $cap Capability name 217 * @param int $user_id User id 218 * @param mixed $args Arguments 219 * @uses apply_filters() Filter capabilities map results 220 * @return array Actual capabilities for meta capability 221 */ 222 function bbp_map_forum_moderator_meta_caps( $caps, $cap, $user_id, $args ) { 223 224 // What capability is being checked? 225 switch( $cap ) { 226 case 'manage_forum_moderators' : 227 case 'edit_forum_moderators' : 228 case 'delete_forum_moderators' : 229 case 'assign_forum_moderators' : 230 case 'bbp_forum_moderators_admin' : 231 232 // Key Masters can always edit 233 if ( user_can( $user_id, 'keep_gate' ) ) { 234 $caps = array( 'keep_gate' ); 235 } 236 } 237 238 return apply_filters( 'bbp_map_forum_moderator_meta_caps', $caps, $cap, $user_id, $args ); 239 } 240 241 /** 242 * Get moderators of a forum 243 * 244 * @since bbPress (rXXXX) 245 * 246 * @param $forum_id Forum id 247 * @uses bbp_is_forum() To make sure it is a forum 248 * @uses bbp_get_forum_moderator_tax_id() To get the forum moderator taxonomy 249 * @uses wp_get_object_terms() To get the forum's moderator terms 250 * @uses is_wp_error() To check for errors 251 * @uses bbp_get_term_taxonomy_user_id() To convert terms to user ids 252 * @return boolean Return false early, or if no moderator terms set, or 253 * @return array User ids 254 */ 255 function bbp_get_forum_moderators( $forum_id = 0 ) { 256 257 // Check input forum 258 if ( !empty( $forum_id ) && bbp_is_forum( (int) $forum_id ) ) { 259 260 // Get forum taxonomy terms 261 $taxonomy = bbp_get_forum_moderator_tax_id(); 262 $args = array( 'fields' => 'ids' ); 263 $terms = wp_get_object_terms( $forum_id, $taxonomy, $args ); 264 265 // Terms found 266 if ( !empty( $terms ) && !is_wp_error( $terms ) ) { 267 $moderators = array(); 268 269 // Convert term ids to user ids 270 foreach ( $terms as $term ) { 271 $user_id = bbp_get_term_taxonomy_user_id( $term, $taxonomy ); 272 if ( $user_id ) 273 $moderators[] = $user_id; 274 } 275 276 // Moderators found 277 if ( !empty( $moderators ) ) 278 return $moderators; 279 } 280 } 281 282 return false; 283 } 284 285 /** 286 * Get forums of a moderator 287 * 288 * @since bbPress (rXXXX) 289 * 290 * @param $user_id User id 291 * @uses get_userdata() To get the user object 292 * @uses bbp_get_forum_moderator_tax_id() To get the forum moderator taxonomy 293 * @uses get_term_by() To get the term id 294 * @uses get_objects_in_term() Get the forums the user moderates 295 * @uses is_wp_error() To check for errors 296 * @uses bbp_is_forum() To make sure the objects are forums 297 * @return boolean Return false early, or if user has no forums, or 298 * @return array Forum ids 299 */ 300 function bbp_get_moderator_forums( $user_id = 0 ) { 301 302 // Require a user id 303 if ( empty( $user_id ) ) 304 return false; 305 306 // Get user 307 $user = get_userdata( $user_id ); 308 if ( !$user ) 309 return false; 310 311 // Convert user id to term id 312 $taxonomy = bbp_get_forum_moderator_tax_id(); 313 $term_id = bbp_get_user_taxonomy_term_id( $user_id, $taxonomy ); 314 315 // Get moderator forums 316 $forums = get_objects_in_term( $term_id, $taxonomy ); 317 318 // Forums found 319 if ( !empty( $forums ) && !is_wp_error( $forums ) ) { 320 321 // Make sure the ids returned are forums 322 $forum_ids = array(); 323 foreach ( $forums as $forum_id ) { 324 if ( bbp_is_forum( $forum_id ) ) 325 $forum_ids[] = $forum_id; 326 } 327 if ( !empty( $forum_ids ) ) 328 return $forum_ids; 329 } 330 331 return false; 332 } 333 No newline at end of file -
src/includes/forums/template.php
2037 2037 return apply_filters( 'bbp_get_single_forum_description', $retstr, $r ); 2038 2038 } 2039 2039 2040 /** Moderators ****************************************************************/ 2041 2042 /** 2043 * Output the unique id of the forum moderators taxonomy 2044 * 2045 * @since bbPress (rXXXX) 2046 * 2047 * @uses bbp_get_forum_post_type() To get the forum post type 2048 */ 2049 function bbp_forum_moderator_tax_id() { 2050 echo bbp_get_forum_moderator_tax_id(); 2051 } 2052 /** 2053 * Return the unique id of the forum moderators taxonomy 2054 * 2055 * @since bbPress (rXXXX) 2056 * 2057 * @uses apply_filters() Calls 'bbp_get_forum_moderator_tax_ia' with the forum moderator tax id 2058 * @return string The unique forum moderators taxonomy 2059 */ 2060 function bbp_get_forum_moderator_tax_id() { 2061 return apply_filters( 'bbp_get_forum_moderator_tax_id', bbpress()->forum_moderator_tax_id ); 2062 } 2063 2040 2064 /** Forms *********************************************************************/ 2041 2065 2042 2066 /** … … 2226 2250 2227 2251 return apply_filters( 'bbp_get_form_forum_visibility', esc_attr( $forum_visibility ) ); 2228 2252 } 2229 2253 2230 2254 /** 2231 2255 * Output checked value of forum subscription 2232 2256 *