Skip to:
Content

bbPress.org

Ticket #2785: 2785.2.diff

File 2785.2.diff, 8.3 KB (added by netweb, 9 years ago)
  • src/includes/common/classes.php

     
    368368                $id_field = $this->db_fields['id'];
    369369                $id       = $element->$id_field;
    370370
     371                // Now fetch child replies for each reply as they're listed...
     372
     373                $reply_search = !empty($_REQUEST['rs']) ? $_REQUEST['rs'] : false;
     374                $post_type = (bbp_is_single_topic() && bbp_show_lead_topic()) ? bbp_get_reply_post_type() : array(bbp_get_topic_post_type(), bbp_get_reply_post_type());
     375
     376                $child_args = array(
     377                        'post_type'           => $post_type,
     378                        'post_parent'         => bbp_get_topic_id(),
     379                        'posts_per_page'      => '-1',
     380                        'orderby'             => 'date',
     381                        'order'               => 'ASC',
     382                        'hierarchical'        => true,
     383                        'ignore_sticky_posts' => true,
     384                        's'                   => $reply_search,
     385                        'meta_query'          => array(array(
     386                                                                                'key' => '_bbp_reply_to',
     387                                                                                'compare' => '=',
     388                                                                                'value'   => $id
     389                                                                        ))
     390                );
     391
     392                $parsed_args = bbp_parse_args('', $child_args, 'has_replies');
     393                $child_posts = new WP_Query($parsed_args);
     394                $children_elements = array($id => $child_posts->posts);
     395                wp_reset_postdata();
     396
    371397                // Display element
    372398                parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
    373399
  • src/includes/replies/functions.php

     
    358358                'post_parent'    => $topic_id,
    359359                'post_type'      => bbp_get_reply_post_type(),
    360360                'comment_status' => 'closed',
    361                 'menu_order'     => bbp_get_topic_reply_count( $topic_id, true ) + 1
     361                'menu_order'     => 0
    362362        ) );
    363363
    364364        // Insert reply
     
    13581358                                        'post_title'  => '',
    13591359                                        'post_name'   => false, // will be automatically generated
    13601360                                        'post_parent' => $destination_topic->ID,
    1361                                         'menu_order'  => $reply_position,
     1361                                        'menu_order'  => 0, // will be automatically regenerated
    13621362                                        'guid'        => ''
    13631363                                ) );
    13641364
     
    23742374        $topic_id       = !empty( $topic_id ) ? bbp_get_topic_id( $topic_id ) : bbp_get_reply_topic_id( $reply_id );
    23752375        $reply_position = 0;
    23762376
    2377         // If reply is actually the first post in a topic, return 0
    2378         if ( $reply_id !== $topic_id ) {
     2377        if ($reply_id != $topic_id) {
     2378                $top_level_replies = array();
     2379                $replies_args = array(
     2380                        'post_type' => bbp_get_reply_post_type(),
     2381                        'post_parent' => $topic_id,
     2382                        'posts_per_page' => -1,
     2383                        'orderby' => 'ID',
     2384                        'meta_query' => array('relation' => 'OR',
     2385                                array(
     2386                                        'key' => '_bbp_reply_to',
     2387                                        'compare' => 'NOT EXISTS',
     2388                                        'value'   => '0'
     2389                                ),
     2390                                array(
     2391                                        'key' => '_bbp_reply_to',
     2392                                        'compare' => '=',
     2393                                        'value'   => '0'
     2394                                )
     2395                ));
     2396                $top_level_reply_posts = get_posts($replies_args);
     2397                foreach ($top_level_reply_posts as $top_level_reply_post) {
     2398                        array_unshift($top_level_replies, $top_level_reply_post->ID);
     2399                }
     2400                array_unshift($top_level_replies, $topic_id);
    23792401
    2380                 // Make sure the topic has replies before running another query
    2381                 $reply_count = bbp_get_topic_reply_count( $topic_id, false );
    2382                 if ( !empty( $reply_count ) ) {
    2383 
    2384                         // Get reply id's
    2385                         $topic_replies = bbp_get_all_child_ids( $topic_id, bbp_get_reply_post_type() );
    2386                         if ( !empty( $topic_replies ) ) {
    2387 
    2388                                 // Reverse replies array and search for current reply position
    2389                                 $topic_replies  = array_reverse( $topic_replies );
    2390                                 $reply_position = array_search( (string) $reply_id, $topic_replies );
    2391 
    2392                                 // Bump the position to compensate for the lead topic post
    2393                                 $reply_position++;
    2394                         }
     2402                $reply_position = array_search($reply_id, $top_level_replies);
     2403                if (empty($reply_position)) {
     2404                        $next_up = $reply_id;
     2405                        do {
     2406                                $reply_to_id = get_post_meta($next_up, '_bbp_reply_to', true);
     2407                                $reply_position = array_search($reply_to_id, $top_level_replies);
     2408                                $next_up = $reply_to_id;
     2409                        } while ($reply_position == false);
    23952410                }
    23962411        }
    23972412
     
    24272442        $walker = new BBP_Walker_Reply;
    24282443        $walker->paged_walk( bbpress()->reply_query->posts, $r['max_depth'], $r['page'], $r['per_page'], $r );
    24292444
    2430         bbpress()->max_num_pages            = $walker->max_pages;
     2445        bbpress()->max_num_pages = $walker->max_pages;
    24312446        bbpress()->reply_query->in_the_loop = false;
    24322447}
    24332448
  • src/includes/replies/template.php

     
    146146                $default['s'] = $_REQUEST['rs'];
    147147        }
    148148
     149        // Suppress threaded replies for now...
     150        if (bbp_thread_replies()) {
     151                $default['meta_query'] = array('relation' => 'OR',
     152                        array(
     153                                'key' => '_bbp_reply_to',
     154                                'compare' => 'NOT EXISTS',
     155                                'value'   => '0'
     156                        ),
     157                        array(
     158                                'key' => '_bbp_reply_to',
     159                                'compare' => '=',
     160                                'value'   => '0'
     161                        )
     162                );
     163        }
     164
    149165        // What are the default allowed statuses (based on user caps)
    150166        if ( bbp_get_view_all() ) {
    151167
     
    178194
    179195        // Set posts_per_page value if replies are threaded
    180196        $replies_per_page = $r['posts_per_page'];
    181         if ( true === $r['hierarchical'] ) {
    182                 $r['posts_per_page'] = -1;
    183         }
    184197
    185198        // Get bbPress
    186199        $bbp = bbpress();
     
    252265                }
    253266
    254267                // Figure out total pages
    255                 if ( true === $r['hierarchical'] ) {
    256                         $walker      = new BBP_Walker_Reply;
    257                         $total_pages = ceil( (int) $walker->get_number_of_root_elements( $bbp->reply_query->posts ) / (int) $replies_per_page );
    258                 } else {
     268
    259269                        $total_pages = ceil( (int) $bbp->reply_query->found_posts / (int) $replies_per_page );
    260270
    261271                        // Add pagination to query object
     
    276286                        } else {
    277287                                $bbp->reply_query->pagination_links = str_replace( '&paged=1', '', $bbp->reply_query->pagination_links );
    278288                        }
    279                 }
     289
    280290        }
    281291
    282292        // Return object
     
    486496                $reply_id   = bbp_get_reply_id      ( $reply_id );
    487497                $topic_id   = bbp_get_reply_topic_id( $reply_id );
    488498
    489                 // Hierarchical reply page
    490                 if ( bbp_thread_replies() ) {
    491                         $reply_page = 1;
     499                $reply_page = ceil( (int) bbp_get_reply_position( $reply_id, $topic_id ) / (int) bbp_get_replies_per_page() );
    492500
    493                 // Standard reply page
    494                 } else {
    495                         $reply_page = ceil( (int) bbp_get_reply_position( $reply_id, $topic_id ) / (int) bbp_get_replies_per_page() );
    496                 }
     501                $reply_hash = '#post-' . $reply_id;
    497502
    498                 $reply_hash = '#post-' . $reply_id;
    499503                $topic_link = bbp_get_topic_permalink( $topic_id, $redirect_to );
    500504                $topic_url  = remove_query_arg( 'view', $topic_link );
    501505
     
    18001804                $reply_id       = bbp_get_reply_id( $reply_id );
    18011805                $reply_position = get_post_field( 'menu_order', $reply_id );
    18021806
    1803                 // Reply doesn't have a position so get the raw value
    1804                 if ( empty( $reply_position ) ) {
    1805                         $topic_id = !empty( $topic_id ) ? bbp_get_topic_id( $topic_id ) : bbp_get_reply_topic_id( $reply_id );
    1806 
    1807                         // Post is not the topic
    1808                         if ( $reply_id !== $topic_id ) {
    1809                                 $reply_position = bbp_get_reply_position_raw( $reply_id, $topic_id );
    1810 
    1811                                 // Update the reply position in the posts table so we'll never have
    1812                                 // to hit the DB again.
    1813                                 if ( !empty( $reply_position ) ) {
    1814                                         bbp_update_reply_position( $reply_id, $reply_position );
    1815                                 }
    1816 
    1817                         // Topic's position is always 0
    1818                         } else {
    1819                                 $reply_position = 0;
     1807                if (empty($reply_position)) {
     1808                        $reply_position = bbp_get_reply_position_raw( $reply_id, $topic_id );
     1809                        // Bump the position by one if the lead topic isn't in the replies loop
     1810                        if (!bbp_show_lead_topic()) {
     1811                                $reply_position++;
    18201812                        }
     1813                        bbp_update_reply_position($reply_id, $reply_position);
    18211814                }
    18221815
    1823                 // Bump the position by one if the lead topic is in the replies loop
    1824                 if ( ! bbp_show_lead_topic() ) {
    1825                         $reply_position++;
    1826                 }
    1827 
    18281816                return (int) apply_filters( 'bbp_get_reply_position', $reply_position, $reply_id, $topic_id );
    18291817        }
    18301818
     
    24612449
    24622450                // We are threading replies
    24632451                if ( bbp_thread_replies() && bbp_is_single_topic() ) {
    2464                         return;
     2452
    24652453                        $walker  = new BBP_Walker_Reply;
    2466                         $threads = (int) $walker->get_number_of_root_elements( $bbp->reply_query->posts );
     2454                        $threads = (int) $walker->get_number_of_root_elements( $bbp->reply_query->posts ) + 1; // Not sure where this OB1 error comes from...
    24672455
    24682456                        // Adjust for topic
    24692457                        $threads--;