Skip to:
Content

bbPress.org


Ignore:
Timestamp:
06/05/2016 06:27:54 PM (9 years ago)
Author:
johnjamesjacoby
Message:

Moderators: Refactor per-forum moderators to use meta-data instead of mocked taxonomy terms.

If the future of Forums is a taxonomy (vs. a custom post-type) then a per-forum Moderator taxonomy for a Forum taxonomy won't work very well, for a few reasons:

  • Scalability
  • Taxonomies for taxonomies is a bit more inception than should be required for this simple feature
  • Forum moderators do not require much of what taxonomy objects provide (permalinks, visibility, metadata, etc...)
  • User taxonomy terms matching nicenames works okay for something like Automattic's P2 theme, but bbPress requires a user ID based solution to avoid data synchronization issues between nicenames & term slugs

So... the future of per-forum per-user capability mappings is in meta-data using map_meta_cap.

This commit:

  • Removes the forum_mod taxonomy and surrounding code additions introduced in the first pass in r5834
  • Renames forum_mod functions to forum_moderator to be more explicit
  • Adds CRUD wrapper functions for per-forum moderator meta data
  • Adds administrative interfaces for assigning moderators to forums for wp-admin and forum edit pages
  • Adds helper functions for getting user nicenames & IDs

Note that this feature has now been refactored to no longer be forum specific (I.E. object agnostic) -- it's possible for any user access to be mapped based on the object type using any meta-data key. While this is currently useful for per-forum moderators, it may be user for per-topic blocking, per-topic-tag moderation, etc...

See #459.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/src/includes/core/cache.php ΒΆ

    r6054 r6056  
    131131 *
    132132 * @since 2.1.0 bbPress (r4040)
    133  * @since 2.6.0 bbPress (r6053) Introduced the `$post_id` parameter.
    134133 *
    135  * @param int     $post_id The post id.
    136  * @param WP_Post $post    The WP_Post object.
    137  *
    138  * @uses get_post() To get the post object.
    139  * @uses bbp_get_forum_post_type() To get the forum post type.
    140  * @uses bbp_get_topic_post_type() To get the topic post type.
    141  * @uses bbp_get_reply_post_type() To get the reply post type.
    142  * @uses wp_cache_delete() To delete the cache item.
    143  * @uses clean_object_term_cache() To clean the term cache.
    144  * @uses bbp_clean_post_cache() Recursion.
    145134 * @uses do_action() Calls 'bbp_clean_post_cache' on $id
    146  *
    147  * @return void
     135 * @param object|int $_post The post object or ID to remove from the cache
    148136 */
    149 function bbp_clean_post_cache( $post_id = null, $post = null ) {
     137function bbp_clean_post_cache( $_post = '' ) {
    150138
    151     // Get the post object.
    152     if ( null !== $post ) {
    153         $post = get_post( $post );
    154     } else {
    155         $post = get_post( $post_id );
    156     }
    157 
    158     // Bail if no post.
    159     if ( empty( $post ) ) {
     139    // Bail if no post
     140    $_post = get_post( $_post );
     141    if ( empty( $_post ) ) {
    160142        return;
    161143    }
    162144
    163     // Child query types to clean.
     145    // Child query types to clean
    164146    $post_types = array(
    165147        bbp_get_forum_post_type(),
    166148        bbp_get_topic_post_type(),
    167         bbp_get_reply_post_type(),
     149        bbp_get_reply_post_type()
    168150    );
    169151
    170     // Bail if not a bbPress post type.
    171     if ( ! in_array( $post->post_type, $post_types, true ) ) {
     152    // Bail if not a bbPress post type
     153    if ( ! in_array( $_post->post_type, $post_types, true ) ) {
    172154        return;
    173155    }
    174156
    175     // Be sure we haven't recached the post data.
    176     wp_cache_delete( $post->ID, 'posts'     );
    177     wp_cache_delete( $post->ID, 'post_meta' );
     157    wp_cache_delete( $_post->ID, 'posts'     );
     158    wp_cache_delete( $_post->ID, 'post_meta' );
    178159
    179     // Clean the term cache for the given post.
    180     clean_object_term_cache( $post->ID, $post->post_type );
     160    clean_object_term_cache( $_post->ID, $_post->post_type );
    181161
    182     // Loop through query types and clean caches.
     162    do_action( 'bbp_clean_post_cache', $_post->ID, $_post );
     163
     164    // Loop through query types and clean caches
    183165    foreach ( $post_types as $post_type ) {
    184         wp_cache_delete( 'bbp_parent_all_'    . $post->ID . '_type_' . $post_type . '_child_ids',     'bbpress_posts' );
     166        wp_cache_delete( 'bbp_parent_all_'    . $_post->ID . '_type_' . $post_type . '_child_ids',     'bbpress_posts' );
    185167    }
    186168
    187     /**
    188      * Fires immediately after the given post's cache is cleaned.
    189      *
    190      * @since 2.1.0
    191      *
    192      * @param int     $post_id Post ID.
    193      * @param WP_Post $post    Post object.
    194      */
    195     do_action( 'bbp_clean_post_cache', $post->ID, $post );
    196 
    197     // Invalidate parent caches.
    198     if ( ! empty( $post->post_parent ) ) {
    199         bbp_clean_post_cache( $post->post_parent );
     169    // Invalidate parent caches
     170    if ( ! empty( $_post->post_parent ) ) {
     171        bbp_clean_post_cache( $_post->post_parent );
    200172    }
    201173}
Note: See TracChangeset for help on using the changeset viewer.