Skip to:
Content

bbPress.org


Ignore:
Timestamp:
11/27/2011 09:57:44 AM (10 years ago)
Author:
johnjamesjacoby
Message:

Theme Compatibility Updates:

  • Tableless layout, fixes #1586, props mercime
  • Introduce content-single-reply and content-topic-tag-edit templates
  • Update shortcodes to use content templates
  • Update theme compatibility to include single reply shortcode
  • @todo CSS audit, RTL audit, shortcode audit
File:
1 edited

Legend:

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

    r3627 r3634  
    8383
    8484            // Reply form
    85             'bbp-reply-form'  => array( $this, 'display_reply_form'   ),
     85            'bbp-reply-form'   => array( $this, 'display_reply_form'  ),
     86
     87            // Specific reply - pass an 'id' attribute
     88            'bbp-single-reply' => array( $this, 'display_reply'       ),
    8689
    8790            /** Views *********************************************************/
     
    133136
    134137        // Unset global queries
    135         $bbp->forum_query      = new stdClass;
    136         $bbp->topic_query      = new stdClass;
    137         $bbp->reply_query      = new stdClass;
     138        $bbp->forum_query = new stdClass;
     139        $bbp->topic_query = new stdClass;
     140        $bbp->reply_query = new stdClass;
    138141
    139142        // Unset global ID's
     
    218221        $this->start( 'bbp_forum_archive' );
    219222
    220         // Breadcrumb
    221         bbp_breadcrumb();
    222 
    223         // Before forums index
    224         do_action( 'bbp_template_before_forums_index' );
    225 
    226         // Load the forums index
    227         if ( bbp_has_forums() )
    228             bbp_get_template_part( 'bbpress/loop',     'forums'    );
    229 
    230         // No forums
    231         else
    232             bbp_get_template_part( 'bbpress/feedback', 'no-forums' );
    233 
    234         // After forums index
    235         do_action( 'bbp_template_after_forums_index' );
     223        bbp_get_template_part( 'bbpress/content', 'archive-forum' );
    236224
    237225        // Return contents of output buffer
     
    271259        // Check forum caps
    272260        if ( bbp_user_can_view_forum( array( 'forum_id' => $forum_id ) ) ) {
    273 
    274             // Breadcrumb
    275             bbp_breadcrumb();
    276 
    277             // Before single forum
    278             do_action( 'bbp_template_before_single_forum' );
    279 
    280             // Password protected
    281             if ( post_password_required() ) {
    282 
    283                 // Output the password form
    284                 bbp_get_template_part( 'bbpress/form', 'protected' );
    285 
    286             // Not password protected, or password is already approved
    287             } else {
    288 
    289                 // Forum description
    290                 bbp_single_forum_description( array( 'forum_id' => $forum_id ) );
    291 
    292                 /** Sub forums ****************************************************/
    293 
    294                 // Check if forum has subforums first
    295                 if ( bbp_get_forum_subforum_count( $forum_id ) ) {
    296 
    297                     // Forum query
    298                     $forum_query = array( 'post_parent' => $forum_id );
    299 
    300                     // Load the sub forums
    301                     if ( bbp_has_forums( $forum_query ) )
    302                         bbp_get_template_part( 'bbpress/loop', 'forums' );
    303                 }
    304 
    305                 /** Topics ********************************************************/
    306 
    307                 // Skip if forum is a category
    308                 if ( !bbp_is_forum_category( $forum_id ) ) {
    309 
    310                     // Unset globals
    311                     $this->unset_globals();
    312 
    313                     // Reset necessary forum_query attributes for topics loop to function
    314                     $bbp->forum_query->query_vars['post_type'] = bbp_get_forum_post_type();
    315                     $bbp->forum_query->in_the_loop             = true;
    316                     $bbp->forum_query->post                    = get_post( $forum_id );
    317 
    318                     // Query defaults
    319                     $topics_query = array(
    320                         'author'        => 0,
    321                         'post_parent'   => $forum_id,
    322                         'show_stickies' => true,
    323                     );
    324 
    325                     // Load the topic index
    326                     if ( bbp_has_topics( $topics_query ) ) {
    327                         bbp_get_template_part( 'bbpress/pagination', 'topics'    );
    328                         bbp_get_template_part( 'bbpress/loop',       'topics'    );
    329                         bbp_get_template_part( 'bbpress/pagination', 'topics'    );
    330                         bbp_get_template_part( 'bbpress/form',       'topic'     );
    331 
    332                     // No topics
    333                     } else {
    334                         bbp_get_template_part( 'bbpress/feedback',   'no-topics' );
    335                         bbp_get_template_part( 'bbpress/form',       'topic'     );
    336                     }
    337                 }
    338 
    339                 // After single forum
    340                 do_action( 'bbp_template_after_single_forum' );
    341             }
     261            bbp_get_template_part( 'bbpress/content',  'single-forum' );
    342262
    343263        // Forum is private and user does not have caps
    344264        } elseif ( bbp_is_forum_private( $forum_id, false ) ) {
    345             bbp_get_template_part( 'bbpress/feedback', 'no-access' );
     265            bbp_get_template_part( 'bbpress/feedback', 'no-access'    );
    346266        }
    347267
     
    387307    public function display_topic_index() {
    388308
     309        // Unset globals
     310        $this->unset_globals();
     311
     312        // Start output buffer
     313        $this->start( 'bbp_topic_archive' );
     314
    389315        // Query defaults
    390316        $topics_query = array(
    391             'author'         => 0,
    392             'show_stickies'  => true,
    393             'order'          => 'DESC',
     317            'author'        => 0,
     318            'show_stickies' => true,
     319            'order'         => 'DESC',
    394320        );
    395321
    396         // Unset globals
    397         $this->unset_globals();
    398 
    399         // Start output buffer
    400         $this->start( 'bbp_topic_archive' );
    401 
    402         // Breadcrumb
    403         bbp_breadcrumb();
    404 
    405         // Before topics index
    406         do_action( 'bbp_template_before_topics_index' );
    407 
    408322        // Load the topic index
    409         if ( bbp_has_topics( $topics_query ) ) {
    410             bbp_get_template_part( 'bbpress/pagination', 'topics'    );
    411             bbp_get_template_part( 'bbpress/loop',       'topics'    );
    412             bbp_get_template_part( 'bbpress/pagination', 'topics'    );
    413 
    414         // No topics
    415         } else {
    416             bbp_get_template_part( 'bbpress/feedback',   'no-topics' );
    417         }
    418 
    419         // After topics index
    420         do_action( 'bbp_template_after_topics_index' );
     323        bbp_has_topics( $topics_query );
     324
     325        // Output template
     326        bbp_get_template_part( 'bbpress/content', 'archive-topic' );
    421327
    422328        // Return contents of output buffer
     
    451357        if ( !bbp_is_topic( $topic_id ) )
    452358            return $content;
    453 
    454         // Setup the meta_query
    455         $replies_query['meta_query'] = array( array(
    456             'key'     => '_bbp_topic_id',
    457             'value'   => $topic_id,
    458             'compare' => '='
    459         ) );
    460359
    461360        // Unset globals
     
    482381        if ( bbp_user_can_view_forum( array( 'forum_id' => $forum_id ) ) ) {
    483382
    484             // Breadcrumb
    485             bbp_breadcrumb();
    486 
    487             // Before single topic
    488             do_action( 'bbp_template_before_single_topic' );
    489 
    490             // Password protected
    491             if ( post_password_required() ) {
    492 
    493                 // Output the password form
    494                 bbp_get_template_part( 'bbpress/form', 'protected' );
    495 
    496             // Not password protected, or password is already approved
    497             } else {
    498 
    499                 // Tags
    500                 bbp_topic_tag_list( $topic_id );
    501 
    502                 // Topic description
    503                 bbp_single_topic_description( array( 'topic_id' => $topic_id ) );
    504 
    505                 // Template files
    506                 if ( bbp_show_lead_topic() )
    507                     bbp_get_template_part( 'bbpress/content', 'single-topic-lead' );
    508 
    509                 // Load the topic
    510                 if ( bbp_has_replies( $replies_query ) ) {
    511                     bbp_get_template_part( 'bbpress/pagination', 'replies' );
    512                     bbp_get_template_part( 'bbpress/loop',       'replies' );
    513                     bbp_get_template_part( 'bbpress/pagination', 'replies' );
    514                 }
    515 
    516                 // Reply form
    517                 bbp_get_template_part( 'bbpress/form', 'reply' );
    518             }
    519 
    520             // After single topic
    521             do_action( 'bbp_template_after_single_topic' );
     383            // Setup the meta_query
     384            $replies_query['meta_query'] = array( array(
     385                'key'     => '_bbp_topic_id',
     386                'value'   => $topic_id,
     387                'compare' => '='
     388            ) );
     389
     390            // Setup an accurate replies query
     391            bbp_has_replies( $replies_query );
     392
     393            // Output the single topic
     394            bbp_get_template_part( 'bbpress/content', 'single-topic' );
    522395
    523396        // Forum is private and user does not have caps
     
    551424
    552425    /** Replies ***************************************************************/
     426
     427    /**
     428     * Display the contents of a specific reply ID in an output buffer
     429     * and return to ensure that post/page contents are displayed first.
     430     *
     431     * @since bbPress (r3031)
     432     *
     433     * @global bbPress $bbp
     434     *
     435     * @param array $attr
     436     * @param string $content
     437     * @uses get_template_part()
     438     * @return string
     439     */
     440    public function display_reply( $attr, $content = '' ) {
     441        global $bbp;
     442
     443        // Sanity check required info
     444        if ( !empty( $content ) || ( empty( $attr['id'] ) || !is_numeric( $attr['id'] ) ) )
     445            return $content;
     446
     447        // Set passed attribute to $reply_id for clarity
     448        $reply_id = $attr['id'];
     449        $forum_id = bbp_get_reply_forum_id( $reply_id );
     450
     451        // Bail if ID passed is not a forum
     452        if ( !bbp_is_reply( $reply_id ) )
     453            return $content;
     454
     455        // Unset globals
     456        $this->unset_globals();
     457
     458        // Reset the queries if not in theme compat
     459        if ( !bbp_is_theme_compat_active() ) {
     460
     461            // Reset necessary forum_query attributes for replys loop to function
     462            $bbp->forum_query->query_vars['post_type'] = bbp_get_forum_post_type();
     463            $bbp->forum_query->in_the_loop             = true;
     464            $bbp->forum_query->post                    = get_post( $forum_id );
     465
     466            // Reset necessary reply_query attributes for replys loop to function
     467            $bbp->reply_query->query_vars['post_type'] = bbp_get_reply_post_type();
     468            $bbp->reply_query->in_the_loop             = true;
     469            $bbp->reply_query->post                    = get_post( $reply_id );
     470        }
     471
     472        // Start output buffer
     473        $this->start( 'bbp_single_reply' );
     474
     475        // Check forum caps
     476        if ( bbp_user_can_view_forum( array( 'forum_id' => $forum_id ) ) ) {
     477            bbp_get_template_part( 'bbpress/content',  'single-reply' );
     478
     479        // Forum is private and user does not have caps
     480        } elseif ( bbp_is_forum_private( $forum_id, false ) ) {
     481            bbp_get_template_part( 'bbpress/feedback', 'no-access'    );
     482        }
     483
     484        // Return contents of output buffer
     485        return $this->end();
     486    }
    553487
    554488    /**
     
    635569        $this->start( 'bbp_topics_of_tag' );
    636570
    637         // Breadcrumb
    638         bbp_breadcrumb();
    639 
    640         // Tag description
    641         bbp_topic_tag_description();
    642 
    643         // Before tag topics
    644         do_action( 'bbp_template_before_topic_tag' );
    645 
    646571        // Load the topics
    647         if ( bbp_has_topics( $args ) ) {
    648             bbp_get_template_part( 'bbpress/pagination', 'topics'    );
    649             bbp_get_template_part( 'bbpress/loop',       'topics'    );
    650             bbp_get_template_part( 'bbpress/pagination', 'topics'    );
    651 
    652         // No topics
    653         } else {
    654             bbp_get_template_part( 'bbpress/feedback',   'no-topics' );
    655         }
    656 
    657         // After tag topics
    658         do_action( 'bbp_template_after_topic_tag' );
     572        bbp_has_topics( $args );
     573
     574        // Output template
     575        bbp_get_template_part( 'bbpress/content', 'archive-topic' );
    659576
    660577        // Return contents of output buffer
     
    681598        $this->start( 'bbp_topic_tag_edit' );
    682599
    683         // Breadcrumb
    684         bbp_breadcrumb();
    685 
    686         // Tag description
    687         bbp_topic_tag_description();
    688 
    689         // Before tag topics
    690         do_action( 'bbp_template_before_topic_tag_edit' );
    691 
    692         // Tag editing form
    693         bbp_get_template_part( 'bbpress/form', 'topic-tag' );
    694 
    695         // After tag topics
    696         do_action( 'bbp_template_after_topic_tag_edit' );
     600        // Output template
     601        bbp_get_template_part( 'bbpress/content', 'topic-tag-edit' );
    697602
    698603        // Return contents of output buffer
     
    728633        $this->start( 'bbp_single_view' );
    729634
    730         // Breadcrumb
    731         bbp_breadcrumb();
    732 
    733         // Password protected
    734         if ( post_password_required() ) {
    735 
    736             // Output the password form
    737             bbp_get_template_part( 'bbpress/form', 'protected' );
    738 
    739         // Not password protected, or password is already approved
    740         } else {
    741 
    742             /** Topics ********************************************************/
    743 
    744             // Unset globals
    745             $this->unset_globals();
    746 
    747             // Load the topic index
    748             if ( bbp_view_query( $view_id ) ) {
    749                 bbp_get_template_part( 'bbpress/pagination', 'topics'    );
    750                 bbp_get_template_part( 'bbpress/loop',       'topics'    );
    751                 bbp_get_template_part( 'bbpress/pagination', 'topics'    );
    752 
    753             // No topics
    754             } else {
    755                 bbp_get_template_part( 'bbpress/feedback',   'no-topics' );
    756             }
    757         }
     635        // Unset globals
     636        $this->unset_globals();
     637
     638        // Load the topic index
     639        bbp_view_query( $view_id );
     640
     641        // Output template
     642        bbp_get_template_part( 'bbpress/content', 'single-view' );
    758643
    759644        // Return contents of output buffer
Note: See TracChangeset for help on using the changeset viewer.