Skip to:
Content

bbPress.org

Ticket #1925: 1925.alt.01.diff

File 1925.alt.01.diff, 8.9 KB (added by netweb, 11 years ago)
  • includes/common/widgets.php

     
    743743                                        'post_status'         => array( bbp_get_public_status_id(), bbp_get_closed_status_id() ),
    744744                                        'ignore_sticky_posts' => true,
    745745                                        'no_found_rows'       => true,
    746                                         'meta_key'            => '_bbp_last_active_time',
    747                                         'orderby'             => 'meta_value',
     746                                        'orderby'             => 'date',
    748747                                        'order'               => 'DESC',
    749748                                );
    750749                                break;
  • includes/forums/functions.php

     
    929929        // First, delete everything.
    930930        delete_option( '_bbp_private_forums' );
    931931        delete_option( '_bbp_hidden_forums'  );
    932        
     932
    933933        /**
    934934         * Don't search for both private/hidden statuses. Since 'pre_get_posts' is an
    935          * action, it's not removed by suppress_filters. We need to make sure that 
     935         * action, it's not removed by suppress_filters. We need to make sure that
    936936         * we're only searching for the supplied post_status.
    937937         *
    938938         * @see https://bbpress.trac.wordpress.org/ticket/2512
     
    954954                'post_status'      => bbp_get_hidden_status_id(),
    955955                'fields'           => 'ids'
    956956        ) );
    957        
     957
    958958        // Enable forum visibilty normalization
    959959        add_action( 'pre_get_posts', 'bbp_pre_get_posts_normalize_forum_visibility', 4 );
    960960
     
    11791179                        }
    11801180                }
    11811181
    1182                 // Setup recent topic query vars
    1183                 $post_vars = array(
     1182                // Get the most recent topic in this forum_id
     1183                $recent_topic = get_posts( array(
    11841184                        'post_parent' => $forum_id,
    11851185                        'post_type'   => bbp_get_topic_post_type(),
    1186                         'meta_key'    => '_bbp_last_active_time',
    1187                         'orderby'     => 'meta_value',
     1186                        'orderby'     => 'date',
     1187                        'order'       => 'DESC',
    11881188                        'numberposts' => 1
    1189                 );
     1189                ) );
    11901190
    1191                 // Get the most recent topic in this forum_id
    1192                 $recent_topic = get_posts( $post_vars );
    11931191                if ( !empty( $recent_topic ) ) {
    11941192                        $topic_id = $recent_topic[0]->ID;
    11951193                }
     
    13601358                $new_time = get_post_field( 'post_date', bbp_get_forum_last_active_id( $forum_id ) );
    13611359
    13621360        // Update only if there is a time
    1363         if ( !empty( $new_time ) )
     1361        if ( !empty( $new_time ) ) {
     1362
     1363                // Update forum's meta - not used since 2.6
    13641364                update_post_meta( $forum_id, '_bbp_last_active_time', $new_time );
     1365        }
    13651366
    13661367        return (int) apply_filters( 'bbp_update_forum_last_active', $new_time, $forum_id );
    13671368}
  • includes/forums/template.php

     
    502502         *
    503503         * @param int $forum_id Optional. Forum id
    504504         * @uses bbp_get_forum_id() To get the forum id
    505          * @uses get_post_meta() To retrieve forum last active meta
    506505         * @uses bbp_get_forum_last_reply_id() To get forum's last reply id
    507506         * @uses get_post_field() To get the post date of the reply
    508507         * @uses bbp_get_forum_last_topic_id() To get forum's last topic id
     
    516515         */
    517516        function bbp_get_forum_last_active_time( $forum_id = 0 ) {
    518517
    519                 // Verify forum and get last active meta
    520                 $forum_id    = bbp_get_forum_id( $forum_id );
    521                 $last_active = get_post_meta( $forum_id, '_bbp_last_active_time', true );
     518                // Verify forum id
     519                $forum_id = bbp_get_forum_id( $forum_id );
    522520
    523                 if ( empty( $last_active ) ) {
    524                         $reply_id = bbp_get_forum_last_reply_id( $forum_id );
    525                         if ( !empty( $reply_id ) ) {
    526                                 $last_active = get_post_field( 'post_date', $reply_id );
    527                         } else {
    528                                 $topic_id = bbp_get_forum_last_topic_id( $forum_id );
    529                                 if ( !empty( $topic_id ) ) {
    530                                         $last_active = bbp_get_topic_last_active_time( $topic_id );
    531                                 }
     521                // Check the forum for the last reply id and use this time stamp
     522                $reply_id = bbp_get_forum_last_reply_id( $forum_id );
     523                if ( !empty( $reply_id ) ) {
     524                        $last_active = get_post_field( 'post_date', $reply_id );
     525
     526                // No reply's, lets try the last topic and use that time stamp
     527                } else {
     528                        $topic_id = bbp_get_forum_last_topic_id( $forum_id );
     529                        if ( !empty( $topic_id ) ) {
     530                                $last_active = bbp_get_topic_last_active_time( $topic_id );
    532531                        }
    533532                }
    534533
     534                // Convert to time since format
    535535                $active_time = !empty( $last_active ) ? bbp_get_time_since( bbp_convert_date( $last_active ) ) : '';
    536536
     537                // Return the time since
    537538                return apply_filters( 'bbp_get_forum_last_active', $active_time, $forum_id );
    538539        }
    539540
     
    22262227
    22272228                return apply_filters( 'bbp_get_form_forum_visibility', esc_attr( $forum_visibility ) );
    22282229        }
    2229        
     2230
    22302231/**
    22312232 * Output checked value of forum subscription
    22322233 *
  • includes/topics/functions.php

     
    25242524
    25252525        // Update only if published
    25262526        if ( !empty( $new_time ) ) {
     2527
     2528                // Update topic's meta - not used since 2.6
    25272529                update_post_meta( $topic_id, '_bbp_last_active_time', $new_time );
    25282530        }
    25292531
     
    34553457                                        <guid><?php bbp_topic_permalink(); ?></guid>
    34563458                                        <title><![CDATA[<?php bbp_topic_title(); ?>]]></title>
    34573459                                        <link><?php bbp_topic_permalink(); ?></link>
    3458                                         <pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_meta( bbp_get_topic_id(), '_bbp_last_active_time', true ) ); ?></pubDate>
     3460                                        <pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_field( 'post_date', bbp_get_topic_id() ) ); ?></pubDate>
    34593461                                        <dc:creator><?php the_author() ?></dc:creator>
    34603462
    34613463                                        <?php if ( !post_password_required() ) : ?>
  • includes/topics/template.php

     
    151151        $default = array(
    152152                'post_type'      => bbp_get_topic_post_type(), // Narrow query down to bbPress topics
    153153                'post_parent'    => $default_post_parent,      // Forum ID
    154                 'meta_key'       => '_bbp_last_active_time',   // Make sure topic has some last activity time
    155                 'orderby'        => 'meta_value',              // 'meta_value', 'author', 'date', 'title', 'modified', 'parent', rand',
     154                'orderby'        => 'date',                    // 'meta_value', 'author', 'date', 'title', 'modified', 'parent', rand',
    156155                'order'          => 'DESC',                    // 'ASC', 'DESC'
    157156                'posts_per_page' => bbp_get_topics_per_page(), // Topics per page
    158157                'paged'          => bbp_get_paged(),           // Page Number
     
    279278                                $sticky_query = array(
    280279                                        'post_type'   => bbp_get_topic_post_type(),
    281280                                        'post_parent' => 'any',
    282                                         'meta_key'    => '_bbp_last_active_time',
    283                                         'orderby'     => 'meta_value',
    284                                         'order'       => 'DESC',
     281                                        'orderby'     => 'date',
     282                                        'order'       => 'ASC',
    285283                                        'include'     => $stickies
    286284                                );
    287285
     
    411409
    412410        // Return object
    413411        return apply_filters( 'bbp_has_topics', $bbp->topic_query->have_posts(), $bbp->topic_query );
     412
    414413}
    415414
     415function bbp_topic_freshness_override( $orderby_statement ) {
     416        global $wp_query;
     417
     418        $bbp = bbpress();
     419
     420        // Currently inside a topic loop
     421        if ( bbp_is_single_forum() ) {
     422                $orderby_statement = "COALESCE( ( SELECT MAX( post_date ) FROM wp_posts bbp1 WHERE bbp1.post_parent = wp_posts.id ) , wp_posts.post_date ) DESC, ".$orderby_statement;
     423
     424        // Currently inside a search loop
     425        } elseif ( !empty($bbp->topic_query ) ) {
     426                $orderby_statement = "wp_posts.post_title DESC";
     427
     428        // @ToDo - What other conditions do we need to alter the query?
     429
     430        // Fallback
     431        } else {
     432                $orderby_statement = $orderby_statement;
     433        }
     434
     435        return $orderby_statement;
     436}
     437add_filter('posts_orderby', 'bbp_topic_freshness_override', 10, 2 );
     438
    416439/**
    417440 * Whether there are more topics available in the loop
    418441 *
     
    17891812         * @return string Topic freshness
    17901813         */
    17911814        function bbp_get_topic_last_active_time( $topic_id = 0 ) {
     1815                // Verify the topic id
    17921816                $topic_id = bbp_get_topic_id( $topic_id );
    17931817
    1794                 // Try to get the most accurate freshness time possible
    1795                 $last_active = get_post_meta( $topic_id, '_bbp_last_active_time', true );
    1796                 if ( empty( $last_active ) ) {
    1797                         $reply_id = bbp_get_topic_last_reply_id( $topic_id );
    1798                         if ( !empty( $reply_id ) ) {
    1799                                 $last_active = get_post_field( 'post_date', $reply_id );
    1800                         } else {
    1801                                 $last_active = get_post_field( 'post_date', $topic_id );
    1802                         }
     1818                // Check the topic for the last reply id
     1819                $reply_id = bbp_get_topic_last_reply_id( $topic_id );
     1820
     1821                // If we have a reply use that timestamp, if not use the topic timestamp
     1822                if ( !empty( $reply_id ) ) {
     1823                        $last_active = get_post_field( 'post_date', $reply_id );
     1824                } else {
     1825                        $last_active = get_post_field( 'post_date', $topic_id );
    18031826                }
    18041827
     1828                // Convert to time since format
    18051829                $last_active = !empty( $last_active ) ? bbp_get_time_since( bbp_convert_date( $last_active ) ) : '';
    18061830
    18071831                // Return the time since