Skip to:
Content

bbPress.org


Ignore:
Timestamp:
05/03/2011 08:01:48 AM (14 years ago)
Author:
johnjamesjacoby
Message:

Revert most of r3054. $wp_query needs to be explicitly checked to guarantee we are not checking the $post global from a different internal loop.
Change from post_meta based _bbp_visibility to custom forum post status for private and hidden forums. This allows for easier exclusion without the need for slower meta queries. Add wp_reset_postdata() through-out loop and template files where the post global might have been altered by an external plugin. Add bbp_exclude_forum_ids() function, to explicitly exclude forums based on user capabilities.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/plugin/bbp-includes/bbp-widgets.php

    r3044 r3085  
    303303
    304304        $title        = apply_filters( 'bbp_forum_widget_title', $instance['title'] );
    305         $parent_forum = !empty( $instance['parent_forum'] ) ? $instance['parent_forum'] : 0;
    306 
    307         $default = array(
     305        $parent_forum = !empty( $instance['parent_forum'] ) ? $instance['parent_forum'] : '0';
     306
     307        $forums_query = array(
    308308            'post_parent'    => $parent_forum,
    309309            'posts_per_page' => get_option( '_bbp_forums_per_page', 15 ),
     
    312312        );
    313313
    314         // Don't show private forums to normal users
    315         if ( !current_user_can( 'read_private_forums' ) && empty( $default['meta_key'] ) && empty( $default['meta_value'] ) ) {
    316             $default['meta_key']   = '_bbp_visibility';
    317             $default['meta_value'] = 'public';
    318         }
    319 
    320314        bbp_set_query_name( 'bbp_widget' );
    321315
    322         if ( bbp_has_forums( $default ) ) :
     316        if ( bbp_has_forums( $forums_query ) ) :
    323317
    324318            echo $before_widget;
     
    455449        // Query defaults
    456450        $topics_query = array(
     451            'post_parent'    => $parent_forum,
    457452            'post_author'    => 0,
    458453            'posts_per_page' => $max_shown > $pop_check ? $max_shown : $pop_check,
     454            'posts_per_page' => $max_shown,
    459455            'show_stickies'  => false,
    460             'posts_per_page' => $max_shown,
    461456            'order'          => 'DESC',
    462457        );
    463458
    464         // Setup a meta_query to remove hidden forums
    465         if ( ( empty( $parent_forum ) || ( 'any' == $parent_forum ) ) && ( $hidden = bbp_get_hidden_forum_ids() ) ) {
    466 
    467             // Value and compare for meta_query
    468             $value   = implode( ',', $hidden );
    469             $compare = ( 1 < count( $hidden ) ) ? 'NOT IN' : '!=';
    470 
    471             // Add meta_query to $replies_query
    472             $topics_query['meta_query'] = array( array(
    473                 'key'     => '_bbp_forum_id',
    474                 'value'   => $value,
    475                 'compare' => $compare
    476             ) );
    477             $topics_query['post_parent'] = 'any';
    478         }
    479 
    480459        bbp_set_query_name( 'bbp_widget' );
     460
     461        // Remove any topics from hidden forums
     462        $topics_query = bbp_exclude_forum_ids( $topics_query );
    481463
    482464        if ( $pop_check < $max_shown && bbp_has_topics( $topics_query ) ) :
     
    655637        );
    656638
    657         // Setup a meta_query to remove hidden forums
    658         if ( $hidden = bbp_get_hidden_forum_ids() ) {
    659 
    660             // Value and compare for meta_query
    661             $value   = implode( ',', $hidden );
    662             $compare = ( 1 < count( $hidden ) ) ? 'NOT IN' : '!=';
    663 
    664             // Add meta_query to $replies_query
    665             $replies_query['meta_query'] = array( array(
    666                 'key'     => '_bbp_forum_id',
    667                 'value'   => $value,
    668                 'compare' => $compare
    669             ) );
    670         }
    671 
    672639        // Set the query name
    673640        bbp_set_query_name( 'bbp_widget' );
     641
     642        // Exclude hidden forums
     643        $replies_query = bbp_exclude_forum_ids( $replies_query );
    674644
    675645        // Get replies and display them
Note: See TracChangeset for help on using the changeset viewer.