Skip to:
Content

Ticket #459: 459.3.diff

File 459.3.diff, 14.8 KB (added by jmdodd, 17 months ago)

Helper functions.

  • 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                // 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         * @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        /** 
    265328         * Pass the forum attributes for processing 
    266329         * 
    267330         * @since bbPress (r2746) 
  • includes/common/functions.php

     
    16871687 
    16881688        $wp_query->set_404(); 
    16891689} 
     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 */ 
     1704function 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 */ 
     1737function 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

     
    208208add_filter( 'posts_request', '_bbp_has_replies_where', 10, 2 ); 
    209209 
    210210// 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 
     211add_filter( 'bbp_map_meta_caps', 'bbp_map_primary_meta_caps',         10, 4 ); // Primary caps 
     212add_filter( 'bbp_map_meta_caps', 'bbp_map_forum_meta_caps',           10, 4 ); // Forums 
     213add_filter( 'bbp_map_meta_caps', 'bbp_map_topic_meta_caps',           10, 4 ); // Topics 
     214add_filter( 'bbp_map_meta_caps', 'bbp_map_reply_meta_caps',           10, 4 ); // Replies 
     215add_filter( 'bbp_map_meta_caps', 'bbp_map_topic_tag_meta_caps',       10, 4 ); // Topic tags 
     216add_filter( 'bbp_map_meta_caps', 'bbp_map_forum_moderator_meta_caps', 10, 4 ); // Forum moderator  
    216217 
    217218/** Deprecated ****************************************************************/ 
    218219 
  • includes/forums/capabilities.php

     
    176176                /** Admin *************************************************************/ 
    177177 
    178178                case 'bbp_forums_admin' : 
     179                case 'bbp_forum_moderators_admin' : 
    179180                        $caps = array( 'manage_options' ); 
    180181                        break; 
    181182        } 
    182183 
    183184        return apply_filters( 'bbp_map_forum_meta_caps', $caps, $cap, $user_id, $args ); 
    184185} 
     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 */ 
     193function 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 */ 
     212function 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 */ 
     243function 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 */ 
     286function 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

     
    19191919                return apply_filters( 'bbp_get_single_forum_description', $retstr, $args ); 
    19201920        } 
    19211921 
     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 */ 
     1929function 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 
    19221942/** Forms *********************************************************************/ 
    19231943 
    19241944/** 
  • bbpress.php

     
    205205                /** Identifiers *******************************************************/ 
    206206 
    207207                // 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'    ); 
    212213 
    213214                // Status identifiers 
    214215                $this->spam_status_id    = apply_filters( 'bbp_spam_post_status',    'spam'    ); 
     
    725726        } 
    726727 
    727728        /** 
    728          * Register the topic tag taxonomy 
     729         * Register the topic tag and forum moderator taxonomies 
    729730         * 
    730731         * @since bbPress (r2464) 
    731732         * @uses register_taxonomy() To register the taxonomy 
     
    771772                                'show_ui'               => bbp_allow_topic_tags() && current_user_can( 'bbp_topic_tags_admin' ) 
    772773                        ) 
    773774                ) ); 
     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                ) ); 
    774809        } 
    775810 
    776811        /**