Ticket #459: 459.3.diff
File 459.3.diff, 14.8 KB (added by , 12 years ago) |
---|
-
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 // Column headers. 71 74 add_filter( 'manage_' . $this->post_type . '_posts_columns', array( $this, 'column_headers' ) ); 72 75 … … 262 265 } 263 266 264 267 /** 268 * Return user nicename suggestions instead of tag suggestions 269 * 270 * @return Return early if not a request for forum moderators tax 271 */ 272 public function ajax_tag_search() { 273 274 // Only do AJAX if this is a forum moderators tax search 275 if ( ! isset( $_GET['tax'] ) || ( bbp_get_forum_moderator_tax_id() != $_GET['tax'] ) ) 276 return; 277 278 $taxonomy = sanitize_key( $_GET['tax'] ); 279 $tax = get_taxonomy( $taxonomy ); 280 if ( empty( $tax ) ) 281 wp_die( 0 ); 282 283 // Check permissions 284 if ( ! current_user_can( $tax->cap->assign_terms ) ) 285 wp_die( -1 ); 286 287 $s = stripslashes( $_GET['q'] ); 288 289 // Replace tag delimiter with a comma if needed 290 $comma = _x( ',', 'tag delimiter', 'bbpress' ); 291 if ( ',' !== $comma ) { 292 $s = str_replace( $comma, ',', $s ); 293 } 294 295 if ( false !== strpos( $s, ',' ) ) { 296 $s = explode( ',', $s ); 297 $s = $s[count( $s ) - 1]; 298 } 299 300 // Search on at least 2 characters 301 $s = trim( $s ); 302 if ( strlen( $s ) < 2 ) 303 wp_die(); // require 2 chars for matching 304 305 // Get users 306 $results = array(); 307 $users = get_users( array( 308 'blog_id' => 0, // All users 309 'fields' => array( 'user_nicename' ), 310 'search' => '*' . $s . '*', 311 'search_columns' => array( 'user_nicename' ), 312 'orderby' => 'user_nicename' 313 ) ); 314 315 // Format the users into a nice array 316 if ( ! empty( $users ) ) { 317 foreach( array_values( $users ) as $details ) { 318 $results[] = $details->user_nicename; 319 } 320 } 321 322 // Echo results for AJAX 323 echo join( $results, "\n" ); 324 wp_die(); 325 } 326 327 /** 265 328 * Pass the forum attributes for processing 266 329 * 267 330 * @since bbPress (r2746) -
includes/common/functions.php
1687 1687 1688 1688 $wp_query->set_404(); 1689 1689 } 1690 1691 /** User Nicename Taxonomies **************************************************/ 1692 1693 /** 1694 * Return the term id for a given user id and taxonomy 1695 * 1696 * @param int $user_id User id 1697 * @param string $taxonomy Taxonomy 1698 * @uses get_userdata() To get the user data 1699 * @uses taxonomy_exists() To make sure the taxonomy exists 1700 * @uses get_term_by() To get the term by name 1701 * @return boolean Return false early, or if not found, or 1702 * @return int Term id 1703 */ 1704 function bbp_get_user_taxonomy_term_id( $user_id = 0, $taxonomy = '' ) { 1705 // Verify user id 1706 if ( empty( $user_id ) ) 1707 return false; 1708 1709 // Get user data 1710 $user = get_userdata( $user_id ); 1711 if ( empty( $user ) ) 1712 return false; 1713 1714 // Verify taxonomy 1715 if ( empty( $taxonomy ) || !taxonomy_exists( $taxonomy ) ) 1716 return false; 1717 1718 // Get the term id 1719 $term = get_term_by( 'name', $user->user_nicename, $taxonomy ); 1720 if ( $term ) 1721 return $term->term_id; 1722 1723 return false; 1724 } 1725 1726 /** 1727 * Return the user id for a given term id and taxonomy 1728 * 1729 * @param int $term_id Term id 1730 * @param string $taxonomy 1731 * @uses taxonomy_exists() To make sure the taxonomy exists 1732 * @uses get_term() To get the term by term id 1733 * @uses get_user_by() To get the user by nicename 1734 * @return boolean Return false early, or if not found, or 1735 * @return int User id 1736 */ 1737 function bbp_get_term_taxonomy_user_id( $term_id = 0, $taxonomy = '' ) { 1738 // Verify term id 1739 if ( empty( $term_id ) ) 1740 return false; 1741 1742 // Verify taxonomy 1743 if ( empty( $taxonomy ) || !taxonomy_exists( $taxonomy ) ) 1744 return false; 1745 1746 // Get term 1747 $term = get_term( $term_id, $taxonomy ); 1748 if ( !$term ) 1749 return false; 1750 1751 // Get the user by nicename 1752 $nicename = $term->name; 1753 $user = get_user_by( 'slug', $nicename ); 1754 if ( $user ) 1755 return $user->ID; 1756 1757 return false; 1758 } -
includes/core/filters.php
208 208 add_filter( 'posts_request', '_bbp_has_replies_where', 10, 2 ); 209 209 210 210 // Capabilities 211 add_filter( 'bbp_map_meta_caps', 'bbp_map_primary_meta_caps', 10, 4 ); // Primary caps 212 add_filter( 'bbp_map_meta_caps', 'bbp_map_forum_meta_caps', 10, 4 ); // Forums 213 add_filter( 'bbp_map_meta_caps', 'bbp_map_topic_meta_caps', 10, 4 ); // Topics 214 add_filter( 'bbp_map_meta_caps', 'bbp_map_reply_meta_caps', 10, 4 ); // Replies 215 add_filter( 'bbp_map_meta_caps', 'bbp_map_topic_tag_meta_caps', 10, 4 ); // Topic tags 211 add_filter( 'bbp_map_meta_caps', 'bbp_map_primary_meta_caps', 10, 4 ); // Primary caps 212 add_filter( 'bbp_map_meta_caps', 'bbp_map_forum_meta_caps', 10, 4 ); // Forums 213 add_filter( 'bbp_map_meta_caps', 'bbp_map_topic_meta_caps', 10, 4 ); // Topics 214 add_filter( 'bbp_map_meta_caps', 'bbp_map_reply_meta_caps', 10, 4 ); // Replies 215 add_filter( 'bbp_map_meta_caps', 'bbp_map_topic_tag_meta_caps', 10, 4 ); // Topic tags 216 add_filter( 'bbp_map_meta_caps', 'bbp_map_forum_moderator_meta_caps', 10, 4 ); // Forum moderator 216 217 217 218 /** Deprecated ****************************************************************/ 218 219 -
includes/forums/capabilities.php
176 176 /** Admin *************************************************************/ 177 177 178 178 case 'bbp_forums_admin' : 179 case 'bbp_forum_moderators_admin' : 179 180 $caps = array( 'manage_options' ); 180 181 break; 181 182 } 182 183 183 184 return apply_filters( 'bbp_map_forum_meta_caps', $caps, $cap, $user_id, $args ); 184 185 } 186 187 /** 188 * Return forum moderator capabilities 189 * 190 * @uses apply_filters() Calls 'bbp_get_forum_moderator_caps' with the capabilities 191 * @return array Forum mod capabilities 192 */ 193 function bbp_get_forum_moderator_caps() { 194 return apply_filters( 'bbp_get_forum_moderator_caps', array( 195 'manage_terms' => 'keep_gate', 196 'edit_terms' => 'keep_gate', 197 'delete_terms' => 'keep_gate', 198 'assign_terms' => 'keep_gate' 199 ) ); 200 } 201 202 /** 203 * Maps forum moderator capabilities 204 * 205 * @param array $caps Capabilities for meta capability 206 * @param string $cap Capability name 207 * @param int $user_id User id 208 * @param mixed $args Arguments 209 * @uses apply_filters() Filter capabilities map results 210 * @return array Actual capabilities for meta capability 211 */ 212 function bbp_map_forum_moderator_meta_caps( $caps, $cap, $user_id, $args ) { 213 214 // What capability is being checked? 215 switch( $cap ) { 216 case 'manage_forum_moderators' : 217 case 'edit_forum_moderators' : 218 case 'delete_forum_moderators' : 219 case 'assign_forum_moderators' : 220 case 'bbp_forum_moderators_admin' : 221 222 // Key Masters can always edit 223 if ( user_can( $user_id, 'keep_gate' ) ) { 224 $caps = array( 'keep_gate' ); 225 } 226 } 227 228 return apply_filters( 'bbp_map_forum_moderator_meta_caps', $caps, $cap, $user_id, $args ); 229 } 230 231 /** 232 * Get moderators of a forum 233 * 234 * @param $forum_id Forum id 235 * @uses bbp_is_forum() To make sure it is a forum 236 * @uses bbp_get_forum_moderator_tax_id() To get the forum moderator taxonomy 237 * @uses wp_get_object_terms() To get the forum's moderator terms 238 * @uses is_wp_error() To check for errors 239 * @uses bbp_get_term_taxonomy_user_id() To convert terms to user ids 240 @ @return boolean Return false early, or if no moderator terms set, or 241 * @return array User ids 242 */ 243 function bbp_get_forum_moderators( $forum_id = 0 ) { 244 245 // Check input forum 246 if ( !empty( $forum_id ) && bbp_is_forum( (int) $forum_id ) ) { 247 248 // Get forum taxonomy terms 249 $taxonomy = bbp_get_forum_moderator_tax_id(); 250 $args = array( 'fields' => 'ids' ); 251 $terms = wp_get_object_terms( $forum_id, $taxonomy, $args ); 252 253 // Terms found 254 if ( !empty( $terms ) && !is_wp_error( $terms ) ) { 255 $moderators = array(); 256 257 // Convert term ids to user ids 258 foreach ( $terms as $term ) { 259 $user_id = bbp_get_term_taxonomy_user_id( $term, $taxonomy ); 260 if ( $user_id ) 261 $moderators[] = $user_id; 262 } 263 264 // Moderators found 265 if ( !empty( $moderators ) ) 266 return $moderators; 267 } 268 } 269 270 return false; 271 } 272 273 /** 274 * Get forums of a moderator 275 * 276 * @param $user_id User id 277 * @uses get_userdata() To get the user object 278 * @uses bbp_get_forum_moderator_tax_id() To get the forum moderator taxonomy 279 * @uses get_term_by() To get the term id 280 * @uses get_objects_in_term() Get the forums the user moderates 281 * @uses is_wp_error() To check for errors 282 * @uses bbp_is_forum() To make sure the objects are forums 283 * @return boolean Return false early, or if user has no forums, or 284 * @return array Forum ids 285 */ 286 function bbp_get_moderator_forums( $user_id = 0 ) { 287 288 // Require a user id 289 if ( empty( $user_id ) ) 290 return false; 291 292 // Get user 293 $user = get_userdata( $user_id ); 294 if ( !$user ) 295 return false; 296 297 // Convert user id to term id 298 $taxonomy = bbp_get_forum_moderator_tax_id(); 299 $term_id = bbp_get_user_taxonomy_term_id( $user_id, $taxonomy ); 300 301 // Get moderator forums 302 $forums = get_objects_in_term( $term_id, $taxonomy ); 303 304 // Forums found 305 if ( !empty( $forums ) && !is_wp_error( $forums ) ) { 306 307 // Make sure the ids returned are forums 308 $forum_ids = array(); 309 foreach ( $forums as $forum_id ) { 310 if ( bbp_is_forum( $forum_id ) ) 311 $forum_ids[] = $forum_id; 312 } 313 if ( !empty( $forum_ids ) ) 314 return $forum_ids; 315 } 316 317 return false; 318 } -
includes/forums/template-tags.php
1919 1919 return apply_filters( 'bbp_get_single_forum_description', $retstr, $args ); 1920 1920 } 1921 1921 1922 /** Moderators ****************************************************************/ 1923 1924 /** 1925 * Output the unique id of the forum moderators taxonomy 1926 * 1927 * @uses bbp_get_forum_post_type() To get the forum post type 1928 */ 1929 function bbp_forum_moderator_tax_id() { 1930 echo bbp_get_forum_moderator_tax_id(); 1931 } 1932 /** 1933 * Return the unique id of the forum moderators taxonomy 1934 * 1935 * @uses apply_filters() Calls 'bbp_get_forum_moderator_tax_ia' with the forum moderator tax id 1936 * @return string The unique forum moderators taxonomy 1937 */ 1938 function bbp_get_forum_moderator_tax_id() { 1939 return apply_filters( 'bbp_get_forum_moderator_tax_id', bbpress()->forum_moderator_tax_id ); 1940 } 1941 1922 1942 /** Forms *********************************************************************/ 1923 1943 1924 1944 /** -
bbpress.php
205 205 /** Identifiers *******************************************************/ 206 206 207 207 // Post type identifiers 208 $this->forum_post_type = apply_filters( 'bbp_forum_post_type', 'forum' ); 209 $this->topic_post_type = apply_filters( 'bbp_topic_post_type', 'topic' ); 210 $this->reply_post_type = apply_filters( 'bbp_reply_post_type', 'reply' ); 211 $this->topic_tag_tax_id = apply_filters( 'bbp_topic_tag_tax_id', 'topic-tag' ); 208 $this->forum_post_type = apply_filters( 'bbp_forum_post_type', 'forum' ); 209 $this->topic_post_type = apply_filters( 'bbp_topic_post_type', 'topic' ); 210 $this->reply_post_type = apply_filters( 'bbp_reply_post_type', 'reply' ); 211 $this->forum_moderator_tax_id = apply_filters( 'bbp_forum_moderator_tax_id', 'bbp-moderate' ); 212 $this->topic_tag_tax_id = apply_filters( 'bbp_topic_tag_tax_id', 'topic-tag' ); 212 213 213 214 // Status identifiers 214 215 $this->spam_status_id = apply_filters( 'bbp_spam_post_status', 'spam' ); … … 725 726 } 726 727 727 728 /** 728 * Register the topic tag taxonomy729 * Register the topic tag and forum moderator taxonomies 729 730 * 730 731 * @since bbPress (r2464) 731 732 * @uses register_taxonomy() To register the taxonomy … … 771 772 'show_ui' => bbp_allow_topic_tags() && current_user_can( 'bbp_topic_tags_admin' ) 772 773 ) 773 774 ) ); 775 776 // Define local variable(s) 777 $forum_moderator = array(); 778 779 // Forum moderator labels 780 $forum_moderator['labels'] = array( 781 'name' => __( 'Forum Moderators', 'bbpress' ), 782 'singular_name' => __( 'Forum Moderator', 'bbpress' ), 783 'search_items' => __( 'Search Moderators', 'bbpress' ), 784 'popular_items' => __( 'Popular Moderators', 'bbpress' ), 785 'all_items' => __( 'All Moderators', 'bbpress' ), 786 'edit_item' => __( 'Edit Moderator', 'bbpress' ), 787 'update_item' => __( 'Update Moderator', 'bbpress' ), 788 'add_new_item' => __( 'Add New Moderator', 'bbpress' ), 789 'new_item_name' => __( 'New Moderator Name', 'bbpress' ), 790 'view_item' => __( 'View Forum Moderator', 'bbpress' ), 791 'separate_items_with_commas' => __( 'Separate moderator names with commas', 'bbpress' ) 792 ); 793 794 // Register the forum moderator taxonomy 795 register_taxonomy( 796 bbp_get_forum_moderator_tax_id(), 797 bbp_get_forum_post_type(), 798 apply_filters( 'bbp_register_forum_moderator_taxonomy', array( 799 'labels' => $forum_moderator['labels'], 800 'capabilities' => bbp_get_forum_moderator_caps(), 801 'update_count_callback' => '_update_post_term_count', 802 'query_var' => true, 803 'show_tagcloud' => true, 804 'hierarchical' => false, 805 'public' => false, 806 'show_ui' => current_user_can( 'bbp_forum_moderators_admin' ) 807 ) 808 ) ); 774 809 } 775 810 776 811 /**