Skip to:
Content

bbPress.org

Ticket #1925: 1925.3.patch

File 1925.3.patch, 17.8 KB (added by johnjamesjacoby, 11 years ago)
  • plugins/bbpress/includes/common/functions.php

    diff --git a/plugins/bbpress/includes/common/functions.php b/plugins/bbpress/includes/common/functions.php
    index 7620d92..975bc2a 100644
    a b  
    364364}
    365365
    366366/**
     367 * Fix post modified times on post save for topics/forums
     368 *
     369 * When a forum or topic is updated, the post_modified and post_modified_gmt
     370 * fields are updated. Since these fields are used for freshness data, we
     371 * don't want to stomp out the current data. This keeps the post_modified(_gmt)
     372 * fields at their current status, and moves the last edit time (in GMT) to post
     373 * meta as '_bbp_last_edit_time_gmt'. This also solves the problem of not being
     374 * able to pass our own custom post_modified(_gmt) values
     375 *
     376 * @since bbPress (rXXXX)
     377 *
     378 * @param array $data Post data
     379 * @param array $postarr Original post array data
     380 * @uses bbp_get_topic_post_type() To get the topic post type
     381 * @uses bbp_get_reply_post_type() To get the reply post type
     382 * @uses bbp_is_post_request() To determine if we're in a POST request
     383 * @uses update_post_meta() To update the '_bbp_last_edit_time_gmt' post meta field
     384 * @return array Post data
     385 */
     386function bbp_fix_post_modified( $data = array(), $postarr = array() ) {
     387
     388        // Post is not being updated, return
     389        if ( empty( $postarr['ID'] ) || ( empty( $postarr['post_modified'] ) && empty( $postarr['post_modified_gmt'] ) ) ) {
     390                return $data;
     391        }
     392
     393        // Post is not a forum or topic, return
     394        if ( !in_array( $postarr['post_type'], array( bbp_get_forum_post_type(), bbp_get_topic_post_type() ) ) ) {
     395                return $data;
     396        }
     397
     398        // Are we editing?
     399        if ( bbp_is_post_request() && in_array( $_POST['action'], array( 'bbp-edit-forum', 'bbp-edit-topic', 'editpost' ) ) ) {
     400
     401                // Set the last edited time in post meta to the new post_modified_gmt
     402                update_post_meta( $postarr['ID'], '_bbp_last_edit_time_gmt', $data['post_modified_gmt'] );
     403        }
     404
     405        // Reset post_modified and post_modified_gmt back to their original values
     406        $data['post_modified']     = $postarr['post_modified'];
     407        $data['post_modified_gmt'] = $postarr['post_modified_gmt'];
     408
     409        return $data;
     410}
     411
     412/**
     413 * Fix revision post_(date/date_gmt/modified/modified_gmt) times
     414 *
     415 * When a revision is created, _wp_post_revision_fields() sets the post_date(_gmt)
     416 * fields to the post_modified time of the of the post being revised. Since we
     417 * are now using the post_modified(_gmt) fields for freshness times, these fields
     418 * are no longer accurate with respect to revisions. Here we reset the post_*
     419 * times to back their proper values
     420 *
     421 * @since bbPress (rXXXX)
     422 *
     423 * @param array $data Post data
     424 * @param array $postarr Original post array (includes post id)
     425 * @uses bbp_is_topic() To make sure the revision is of a topic
     426 * @uses get_post_meta() To get the '_bbp_last_edit_time_gmt' post meta field
     427 * @uses get_date_from_gmt() To get the localized date from a gmt date
     428 * @uses current_time() To get the current_time in mysql format
     429 * @return array Post data
     430 */
     431function bbp_fix_revision_times( $data = array(), $postarr = array() ) {
     432
     433        // Don't even bother. This is not a revision or we're updating
     434        if ( 'revision' !== $postarr['post_type'] || !empty( $postarr['ID'] ) ) {
     435                return $data;
     436        }
     437
     438        // Make sure we're working with a revision of a topic or forum
     439        // TODO: Add a bbp_is_forum when forum revisions are added
     440        if ( bbp_is_topic( $postarr['post_parent'] ) ) {
     441                $post_id = $postarr['post_parent'];
     442        }
     443
     444        // Get the true last edited time from post meta
     445        $edit_time = get_post_meta( $post_id, '_bbp_last_edit_time_gmt', true );
     446
     447        // Reset post_modified and post_modified_gmt back to their original values
     448        $data['post_date']         = get_date_from_gmt( $edit_time );
     449        $data['post_date_gmt']     = $edit_time;
     450        $data['post_modified']     = current_time( 'mysql'    );
     451        $data['post_modified_gmt'] = current_time( 'mysql', 1 );
     452
     453        return $data;
     454}
     455
     456/**
    367457 * Check the date against the _bbp_edit_lock setting.
    368458 *
    369459 * @since bbPress (r3133)
  • plugins/bbpress/includes/common/widgets.php

    diff --git a/plugins/bbpress/includes/common/widgets.php b/plugins/bbpress/includes/common/widgets.php
    index 3204dc7..9866888 100644
    a b  
    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'             => 'modified',
    748747                                        'order'               => 'DESC',
    749748                                );
    750749                                break;
  • plugins/bbpress/includes/core/filters.php

    diff --git a/plugins/bbpress/includes/core/filters.php b/plugins/bbpress/includes/core/filters.php
    index 8dcd42c..f7ff034 100644
    a b  
    4949add_filter( 'plugin_locale',           'bbp_plugin_locale',      10, 2 );
    5050
    5151// Fix post author id for anonymous posts (set it back to 0) when the post status is changed
    52 add_filter( 'wp_insert_post_data', 'bbp_fix_post_author', 30, 2 );
     52add_filter( 'wp_insert_post_data', 'bbp_fix_post_author',    30, 2 );
     53
     54// Fix post modified and post modified gmt time for forums and topics when the post is edited
     55add_filter( 'wp_insert_post_data', 'bbp_fix_post_modified',  32, 2 );
     56
     57// Fix post revision times when topics and replies are edited
     58add_filter( 'wp_insert_post_data', 'bbp_fix_revision_times', 34, 2 );
    5359
    5460// Force comments_status on bbPress post types
    5561add_filter( 'comments_open', 'bbp_force_comment_status' );
  • plugins/bbpress/includes/forums/functions.php

    diff --git a/plugins/bbpress/includes/forums/functions.php b/plugins/bbpress/includes/forums/functions.php
    index 050791d..9cbfe57 100644
    a b  
    11711171                $post_vars = array(
    11721172                        'post_parent' => $forum_id,
    11731173                        'post_type'   => bbp_get_topic_post_type(),
    1174                         'meta_key'    => '_bbp_last_active_time',
    1175                         'orderby'     => 'meta_value',
     1174                        'orderby'     => 'modified',
    11761175                        'numberposts' => 1
    11771176                );
    11781177
     
    13261325}
    13271326
    13281327/**
    1329  * Update the forums last active date/time (aka freshness)
     1328 * Update the forum's last active date/time (aka freshness)
    13301329 *
    13311330 * @since bbPress (r2680)
    13321331 *
    1333  * @param int $forum_id Optional. Topic id
     1332 * @param int $forum_id Optional. Forum id
    13341333 * @param string $new_time Optional. New time in mysql format
    13351334 * @uses bbp_get_forum_id() To get the forum id
    13361335 * @uses bbp_get_forum_last_active_id() To get the forum's last post id
    1337  * @uses get_post_field() To get the post date of the forum's last post
    1338  * @uses update_post_meta() To update the forum last active time
     1336 * @uses get_post_field() To get the post_modified date of the forum
     1337 * @uses update_post_meta() To update the forum last active meta
     1338 * @uses wp_update_post() To update the post_modified date of the forum
    13391339 * @uses apply_filters() Calls 'bbp_update_forum_last_active' with the new time
    13401340 *                        and forum id
    13411341 * @return bool True on success, false on failure
     
    13441344        $forum_id = bbp_get_forum_id( $forum_id );
    13451345
    13461346        // Check time and use current if empty
    1347         if ( empty( $new_time ) )
     1347        if ( empty( $new_time ) ) {
    13481348                $new_time = get_post_field( 'post_date', bbp_get_forum_last_active_id( $forum_id ) );
     1349        }
    13491350
    13501351        // Update only if there is a time
    1351         if ( !empty( $new_time ) )
     1352        if ( !empty( $new_time ) ) {
     1353
     1354                // Update forum's meta - not used since 2.6
    13521355                update_post_meta( $forum_id, '_bbp_last_active_time', $new_time );
     1356
     1357                // Toggle revisions to avoid duplicates
     1358                $revisions_removed = false;
     1359                if ( post_type_supports( bbp_get_forum_post_type(), 'revisions' ) ) {
     1360                        $revisions_removed = true;
     1361                        remove_post_type_support( bbp_get_forum_post_type(), 'revisions' );
     1362                }
     1363
     1364                // Update forum's post_modified date - since 2.6
     1365                wp_update_post( array(
     1366                        'ID'                => $forum_id,
     1367                        'post_modified'     => $new_time,
     1368                        'post_modified_gmt' => get_gmt_from_date( $new_time )
     1369                ) );
     1370
     1371                // Toggle revisions back on
     1372                if ( true === $revisions_removed ) {
     1373                        $revisions_removed = false;
     1374                        add_post_type_support( bbp_get_forum_post_type(), 'revisions' );
     1375                }
     1376        }
    13531377
    13541378        return (int) apply_filters( 'bbp_update_forum_last_active', $new_time, $forum_id );
    13551379}
     
    19061930 * @return Position change based on sort
    19071931 */
    19081932function _bbp_forum_query_usort_subforum_ids( $a = 0, $b = 0 ) {
    1909         $ta = get_post_meta( $a, '_bbp_last_active_time', true );
    1910         $tb = get_post_meta( $b, '_bbp_last_active_time', true );
     1933        $ta = get_post_field( 'post_modified', $a );
     1934        $tb = get_post_field( 'post_modified', $b );
    19111935        return ( $ta < $tb ) ? -1 : 1;
    19121936}
    19131937
  • plugins/bbpress/includes/forums/template.php

    diff --git a/plugins/bbpress/includes/forums/template.php b/plugins/bbpress/includes/forums/template.php
    index 890dbe0..0d65b5d 100644
    a b  
    447447 * Allow forum rows to have adminstrative actions
    448448 *
    449449 * @since bbPress (r3653)
     450 *
    450451 * @uses do_action()
    451452 * @todo Links and filter
    452453 */
     
    496497        echo bbp_get_forum_last_active_time( $forum_id );
    497498}
    498499        /**
    499          * Return the forums last update date/time (aka freshness)
     500         * Return the forum's last update date/time (aka freshness)
    500501         *
    501502         * @since bbPress (r2464)
    502503         *
    503504         * @param int $forum_id Optional. Forum id
    504505         * @uses bbp_get_forum_id() To get the forum id
    505          * @uses get_post_meta() To retrieve forum last active meta
    506          * @uses bbp_get_forum_last_reply_id() To get forum's last reply id
    507          * @uses get_post_field() To get the post date of the reply
    508          * @uses bbp_get_forum_last_topic_id() To get forum's last topic id
    509          * @uses bbp_get_topic_last_active_time() To get time when the topic was
    510          *                                    last active
     506         * @uses get_post_field() To get the post_modified of the forum
    511507         * @uses bbp_convert_date() To convert the date
    512508         * @uses bbp_get_time_since() To get time in since format
    513509         * @uses apply_filters() Calls 'bbp_get_forum_last_active' with last
     
    516512         */
    517513        function bbp_get_forum_last_active_time( $forum_id = 0 ) {
    518514
    519                 // Verify forum and get last active meta
     515                // Verify forum and get last active time
    520516                $forum_id    = bbp_get_forum_id( $forum_id );
    521                 $last_active = get_post_meta( $forum_id, '_bbp_last_active_time', true );
     517                $last_active = get_post_field( 'post_modified', $forum_id );
    522518
    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                                 }
    532                         }
    533                 }
     519                // Convert to time since format
     520                $active_time = bbp_get_time_since( bbp_convert_date( $last_active ) );
    534521
    535                 $active_time = !empty( $last_active ) ? bbp_get_time_since( bbp_convert_date( $last_active ) ) : '';
    536 
     522                // Return the time since
    537523                return apply_filters( 'bbp_get_forum_last_active', $active_time, $forum_id );
    538524        }
    539525
     
    22262212
    22272213                return apply_filters( 'bbp_get_form_forum_visibility', esc_attr( $forum_visibility ) );
    22282214        }
    2229        
     2215
    22302216/**
    22312217 * Output checked value of forum subscription
    22322218 *
  • plugins/bbpress/includes/topics/functions.php

    diff --git a/plugins/bbpress/includes/topics/functions.php b/plugins/bbpress/includes/topics/functions.php
    index d097d22..8dad245 100644
    a b  
    24972497}
    24982498
    24992499/**
    2500  * Update the topics last active date/time (aka freshness)
     2500 * Update the topic's last active date/time (aka freshness)
    25012501 *
    25022502 * @since bbPress (r2680)
    25032503 *
    25042504 * @param int $topic_id Optional. Topic id
    25052505 * @param string $new_time Optional. New time in mysql format
    2506  * @uses bbp_get_topic_id() To get the topic id
     2506 * @uses bbp_is_reply() To check if the id passed is a reply
    25072507 * @uses bbp_get_reply_topic_id() To get the reply topic id
    2508  * @uses current_time() To get the current time
     2508 * @uses bbp_get_topic_id() To get the topic id
     2509 * @uses bbp_get_reply_post_type() To get the reply post type
     2510 * @uses bbp_get_public_child_last_id() To get the last public reply id
     2511 * @uses get_post_field() To get the post_modified date of the topic
    25092512 * @uses update_post_meta() To update the topic last active meta
     2513 * @uses bbp_get_reply_post_type() To get the topic post type
     2514 * @uses post_type_supports() To check if the them supports revisions
     2515 * @uses remove_post_type_support() To remove support for revisions
     2516 * @uses wp_update_post() To update the post_modified date of the topic
     2517 * @uses remove_post_type_support() To add support for revisions
     2518 * @uses apply_filters() Calls 'bbp_update_topic_last_active' with the new time
     2519 *                        and topic id
    25102520 * @return bool True on success, false on failure
    25112521 */
    25122522function bbp_update_topic_last_active_time( $topic_id = 0, $new_time = '' ) {
     
    25252535
    25262536        // Update only if published
    25272537        if ( !empty( $new_time ) ) {
     2538
     2539                // Update topic's meta - not used since 2.6
    25282540                update_post_meta( $topic_id, '_bbp_last_active_time', $new_time );
     2541
     2542                // Toggle revisions to avoid duplicates
     2543                $revisions_removed = false;
     2544                if ( post_type_supports( bbp_get_topic_post_type(), 'revisions' ) ) {
     2545                        $revisions_removed = true;
     2546                        remove_post_type_support( bbp_get_topic_post_type(), 'revisions' );
     2547                }
     2548
     2549                // Update topic's post_modified date - since 2.6
     2550                wp_update_post( array(
     2551                        'ID'                => $topic_id,
     2552                        'post_modified'     => $new_time,
     2553                        'post_modified_gmt' => get_gmt_from_date( $new_time )
     2554                ) );
     2555
     2556                // Toggle revisions back on
     2557                if ( true === $revisions_removed ) {
     2558                        $revisions_removed = false;
     2559                        add_post_type_support( bbp_get_topic_post_type(), 'revisions' );
     2560                }
    25292561        }
    25302562
    25312563        return apply_filters( 'bbp_update_topic_last_active_time', $new_time, $topic_id );
     
    34563488                                        <guid><?php bbp_topic_permalink(); ?></guid>
    34573489                                        <title><![CDATA[<?php bbp_topic_title(); ?>]]></title>
    34583490                                        <link><?php bbp_topic_permalink(); ?></link>
    3459                                         <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>
     3491                                        <pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_field( 'post_modified', bbp_get_topic_id() ) ); ?></pubDate>
    34603492                                        <dc:creator><?php the_author() ?></dc:creator>
    34613493
    34623494                                        <?php if ( !post_password_required() ) : ?>
  • plugins/bbpress/includes/topics/template.php

    diff --git a/plugins/bbpress/includes/topics/template.php b/plugins/bbpress/includes/topics/template.php
    index 98fe48d..65da984 100644
    a b  
    9797 * - New Style: Topics appear as "lead" posts, ahead of replies
    9898 *
    9999 * @since bbPress (r2954)
     100 *
    100101 * @param $show_lead Optional. Default false
    101102 * @return bool Yes if the topic appears as a lead, otherwise false
    102103 */
     
    151152        $default = array(
    152153                'post_type'      => bbp_get_topic_post_type(), // Narrow query down to bbPress topics
    153154                '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',
     155                'orderby'        => 'modified',                // 'meta_value', 'author', 'date', 'title', 'modified', 'parent', rand',
    156156                'order'          => 'DESC',                    // 'ASC', 'DESC'
    157157                'posts_per_page' => bbp_get_topics_per_page(), // Topics per page
    158158                'paged'          => bbp_get_paged(),           // Page Number
     
    279279                                $sticky_query = array(
    280280                                        'post_type'   => bbp_get_topic_post_type(),
    281281                                        'post_parent' => 'any',
    282                                         'meta_key'    => '_bbp_last_active_time',
    283                                         'orderby'     => 'meta_value',
     282                                        'orderby'     => 'modified',
    284283                                        'order'       => 'DESC',
    285284                                        'include'     => $stickies
    286285                                );
     
    17731772        echo bbp_get_topic_last_active_time( $topic_id );
    17741773}
    17751774        /**
    1776          * Return the topics last update date/time (aka freshness)
     1775         * Return the topic's last update date/time (aka freshness)
    17771776         *
    17781777         * @since bbPress (r2625)
    17791778         *
    17801779         * @param int $topic_id Optional. Topic id
    17811780         * @uses bbp_get_topic_id() To get topic id
    1782          * @uses get_post_meta() To get the topic lst active meta
    1783          * @uses bbp_get_topic_last_reply_id() To get topic last reply id
    1784          * @uses get_post_field() To get the post date of topic/reply
    1785          * @uses bbp_convert_date() To convert date
     1781         * @uses get_post_field() To get the post_modified of the topic
     1782         * @uses bbp_convert_date() To convert the date
    17861783         * @uses bbp_get_time_since() To get time in since format
    17871784         * @uses apply_filters() Calls 'bbp_get_topic_last_active' with topic
    17881785         *                        freshness and topic id
    17891786         * @return string Topic freshness
    17901787         */
    17911788        function bbp_get_topic_last_active_time( $topic_id = 0 ) {
    1792                 $topic_id = bbp_get_topic_id( $topic_id );
    17931789
    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                         }
    1803                 }
     1790                // Verify forum and get last active time
     1791                $topic_id    = bbp_get_topic_id( $topic_id );
     1792                $last_active = get_post_field( 'post_modified', $topic_id );
    18041793
    1805                 $last_active = !empty( $last_active ) ? bbp_get_time_since( bbp_convert_date( $last_active ) ) : '';
     1794                // Convert to time since format
     1795                $active_time = bbp_get_time_since( bbp_convert_date( $last_active ) );
    18061796
    18071797                // Return the time since
    1808                 return apply_filters( 'bbp_get_topic_last_active', $last_active, $topic_id );
     1798                return apply_filters( 'bbp_get_topic_last_active', $active_time, $topic_id );
    18091799        }
    18101800
    18111801/** Topic Subscriptions *******************************************************/