Skip to:
Content

bbPress.org

Ticket #3328: 3328.2.patch

File 3328.2.patch, 16.0 KB (added by johnjamesjacoby, 4 months ago)
  • src/includes/common/functions.php

     
    26332633        // Filter & return
    26342634        return (bool) apply_filters( 'bbp_is_title_too_long', $result, $title, $max, $len );
    26352635}
     2636
     2637/** Revisions *****************************************************************/
     2638
     2639/**
     2640 * Update a forum/topic/reply without creating a subsequent revision.
     2641 *
     2642 * This is particularly handy when toggling specific attributes (like statuses)
     2643 * where you _do_ want all of the related hooks to fire but you _do not_ want to
     2644 * generate a new revision when doing so.
     2645 *
     2646 * @since 2.6.7 bbPress (r7188)
     2647 *
     2648 * @param array $post
     2649 * @return mixed
     2650 */
     2651function bbp_update_post_without_revision( $post = array() ) {
     2652
     2653        // Default return value
     2654        $retval = false;
     2655
     2656        // Default post data
     2657        $to_save = array();
     2658
     2659        // Maybe cast to array
     2660        if ( is_object( $post ) || is_array( $post ) ) {
     2661                $to_save = (array) $post;
     2662        }
     2663
     2664        // Bail if no "post_type" in array
     2665        if ( ! empty( $to_save['post_type'] ) ) {
     2666
     2667                // Set a post type variable so code is cleaner below
     2668                $post_type = $to_save['post_type'];
     2669
     2670                // Are revisions supported?
     2671                $supported = post_type_supports( $post_type, 'revisions' );
     2672
     2673                // Maybe remove revision support
     2674                if ( true === $supported ) {
     2675                        remove_post_type_support( $post_type, 'revisions' );
     2676                }
     2677
     2678                // Update the post
     2679                $retval = wp_update_post( $to_save );
     2680
     2681                // Toggle revisions back on
     2682                if ( true === $supported ) {
     2683                        add_post_type_support( $post_type, 'revisions' );
     2684                }
     2685        }
     2686
     2687        // Filter & return
     2688        return apply_filters( 'bbp_update_post_without_revision', $retval, $post );
     2689}
  • src/includes/core/template-functions.php

     
    722722                        $posts_query->bbp_is_404            = false;
    723723                }
    724724
    725                 // We save post revisions on our own
    726                 remove_action( 'pre_post_update', 'wp_save_post_revision' );
    727 
    728725        // Topic tag page
    729726        } elseif ( bbp_is_topic_tag() ) {
    730727                $posts_query->set( 'bbp_topic_tag',  get_query_var( 'term' )   );
  • src/includes/extend/buddypress/activity.php

     
    211211         */
    212212        private function record_activity( $args = array() ) {
    213213
    214                 // Default activity args
     214                // Parse arguments
    215215                $activity = bbp_parse_args( $args, array(
    216                         'id'                => null,
     216                        'id'                => false,
    217217                        'user_id'           => bbp_get_current_user_id(),
    218218                        'type'              => '',
    219219                        'action'            => '',
     
    227227                ), 'record_activity' );
    228228
    229229                // Add the activity
    230                 return bp_activity_add( $activity );
     230                $activity_id = bp_activity_add( $activity );
     231
     232                // Add the activity entry ID as a meta value to the topic
     233                if ( ! empty( $activity_id ) && ! empty( $activity['item_id'] ) ) {
     234                        update_post_meta( $activity['item_id'], '_bbp_activity_id', $activity_id );
     235                }
     236
     237                // Return the activity ID
     238                return $activity_id;
    231239        }
    232240
    233241        /**
     
    235243         *
    236244         * @since 2.0.0 bbPress (r3395)
    237245         *
    238          * @param  array $args Array of arguments for bp_activity_add()
     246         * @param  array $args Array of arguments for bp_activity_delete_by_item_id()
    239247         *
    240248         * @return int   Activity ID if successful, false if not
    241249         */
    242250        public function delete_activity( $args = array() ) {
    243251
    244                 // Default activity args
     252                // Parse arguments
    245253                $activity = bbp_parse_args( $args, array(
    246254                        'item_id'           => false,
    247255                        'component'         => $this->component,
     
    257265        /**
    258266         * Check for an existing activity stream entry for a given post_id
    259267         *
     268         * @since 2.0.0 bbPress (r3395)
     269         *
    260270         * @param int $post_id ID of the topic or reply
    261271         * @return int if an activity id is verified, false if not
    262272         */
     
    267277
    268278                // Bail if no activity ID is in post meta
    269279                if ( empty( $activity_id ) ) {
    270                         return null;
     280                        return false;
    271281                }
    272282
    273                 // Get the activity stream item, bail if it doesn't exist
     283                // Get the activity stream item
    274284                $existing = new BP_Activity_Activity( $activity_id );
     285
     286                // Bail if activity does not exist
    275287                if ( empty( $existing->component ) ) {
    276                         return null;
     288
     289                        // Remove orphaned meta data
     290                        delete_post_meta( $post_id, '_bbp_activity_id' );
     291
     292                        return false;
    277293                }
    278294
    279295                // Return the activity ID since we've verified the connection
     
    348364        /**
    349365         * Record an activity stream entry when a topic is created or updated
    350366         *
     367         * Despite the method name, it is also used when Editing a Topic, which will
     368         * update the subsequent related activity stream entry.
     369         *
    351370         * @since 2.0.0 bbPress (r3395)
    352371         *
    353372         * @param int $topic_id
     
    402421                $activity_action  = apply_filters( 'bbp_activity_topic_create',         $activity_text, $user_id,   $topic_id,   $forum_id );
    403422                $activity_content = apply_filters( 'bbp_activity_topic_create_excerpt', $topic_content                                     );
    404423
     424                // ID, time, and visibility
     425                $activity_id      = $this->get_activity_id( $topic_id );
     426                $recorded_time    = get_post_time( 'Y-m-d H:i:s', true, $topic_id );
     427                $hide_sitewide    = ! bbp_is_forum_public( $forum_id, false );
     428
    405429                // Compile and record the activity stream results
    406                 $activity_id = $this->record_activity( array(
    407                         'id'                => $this->get_activity_id( $topic_id ),
     430                $this->record_activity( array(
     431                        'id'                => $activity_id,
    408432                        'user_id'           => $user_id,
    409433                        'action'            => $activity_action,
    410434                        'content'           => $activity_content,
     
    412436                        'type'              => $this->topic_create,
    413437                        'item_id'           => $topic_id,
    414438                        'secondary_item_id' => $forum_id,
    415                         'recorded_time'     => get_post_time( 'Y-m-d H:i:s', true, $topic_id ),
    416                         'hide_sitewide'     => ! bbp_is_forum_public( $forum_id, false )
     439                        'recorded_time'     => $recorded_time,
     440                        'hide_sitewide'     => $hide_sitewide
    417441                ) );
    418 
    419                 // Add the activity entry ID as a meta value to the topic
    420                 if ( ! empty( $activity_id ) ) {
    421                         update_post_meta( $topic_id, '_bbp_activity_id', $activity_id );
    422                 }
    423442        }
    424443
    425444        /**
     
    452471                        return;
    453472                }
    454473
    455                 // Bail early if revisions are off
    456                 if ( ! bbp_allow_revisions() || ! post_type_supports( bbp_get_topic_post_type(), 'revisions' ) ) {
    457                         return;
    458                 }
    459 
    460474                $topic_id = bbp_get_topic_id( $topic_id );
    461475
    462476                // Bail early if topic is by anonymous user
     
    480494        /** Replies ***************************************************************/
    481495
    482496        /**
    483          * Record an activity stream entry when a reply is created
     497         * Record an activity stream entry when a reply is created or updated
    484498         *
     499         * Despite the method name, it is also used when Editing a Reply, which will
     500         * update the subsequent related activity stream entry.
     501         *
    485502         * @since 2.0.0 bbPress (r3395)
    486503         *
    487504         * @param int $topic_id
     
    540557                $activity_action  = apply_filters( 'bbp_activity_reply_create',         $activity_text, $user_id, $reply_id,  $topic_id );
    541558                $activity_content = apply_filters( 'bbp_activity_reply_create_excerpt', $reply_content                                  );
    542559
     560                // ID, time, and visibility
     561                $activity_id      = $this->get_activity_id( $reply_id );
     562                $recorded_time    = get_post_time( 'Y-m-d H:i:s', true, $reply_id );
     563                $hide_sitewide    = ! bbp_is_forum_public( $forum_id, false );
     564
    543565                // Compile and record the activity stream results
    544                 $activity_id = $this->record_activity( array(
    545                         'id'                => $this->get_activity_id( $reply_id ),
     566                $this->record_activity( array(
     567                        'id'                => $activity_id,
    546568                        'user_id'           => $user_id,
    547569                        'action'            => $activity_action,
    548570                        'content'           => $activity_content,
     
    550572                        'type'              => $this->reply_create,
    551573                        'item_id'           => $reply_id,
    552574                        'secondary_item_id' => $topic_id,
    553                         'recorded_time'     => get_post_time( 'Y-m-d H:i:s', true, $reply_id ),
    554                         'hide_sitewide'     => ! bbp_is_forum_public( $forum_id, false )
     575                        'recorded_time'     => $recorded_time,
     576                        'hide_sitewide'     => $hide_sitewide
    555577                ) );
    556 
    557                 // Add the activity entry ID as a meta value to the reply
    558                 if ( ! empty( $activity_id ) ) {
    559                         update_post_meta( $reply_id, '_bbp_activity_id', $activity_id );
    560                 }
    561578        }
    562579
    563580        /**
     
    583600         * @param obj $post
    584601         * @return Bail early if not a reply, or reply is by anonymous user
    585602         */
    586         public function reply_update( $reply_id, $post ) {
     603        public function reply_update( $reply_id = 0, $post = null) {
    587604
    588605                // Bail early if not a reply
    589606                if ( get_post_type( $post ) !== bbp_get_reply_post_type() ) {
    590607                        return;
    591608                }
    592609
    593                 // Bail early if revisions are off
    594                 if ( ! bbp_allow_revisions() || ! post_type_supports( bbp_get_reply_post_type(), 'revisions' ) ) {
    595                         return;
    596                 }
    597 
    598610                $reply_id = bbp_get_reply_id( $reply_id );
    599611
    600612                // Bail early if reply is by anonymous user
  • src/includes/forums/functions.php

     
    507507                'post_parent'  => $forum_parent_id
    508508        ) );
    509509
    510         // Insert forum
    511         $forum_id = wp_update_post( $forum_data );
     510        // Update forum
     511        $forum_id = bbp_update_post_without_revision( $forum_data );
    512512
    513513        /** No Errors *************************************************************/
    514514
  • src/includes/replies/functions.php

     
    504504        }
    505505
    506506        // Define local variable(s)
    507         $revisions_removed = false;
    508507        $reply = $reply_id = $reply_to = $reply_author = $topic_id = $forum_id = 0;
    509508        $reply_title = $reply_content = $reply_edit_reason = $terms = '';
    510509        $anonymous_data = array();
     
    693692                'post_type'    => bbp_get_reply_post_type()
    694693        ) );
    695694
    696         // Toggle revisions to avoid duplicates
    697         if ( post_type_supports( bbp_get_reply_post_type(), 'revisions' ) ) {
    698                 $revisions_removed = true;
    699                 remove_post_type_support( bbp_get_reply_post_type(), 'revisions' );
    700         }
     695        // Update reply
     696        $reply_id = bbp_update_post_without_revision( $reply_data );
    701697
    702         // Insert reply
    703         $reply_id = wp_update_post( $reply_data );
    704 
    705         // Toggle revisions back on
    706         if ( true === $revisions_removed ) {
    707                 $revisions_removed = false;
    708                 add_post_type_support( bbp_get_reply_post_type(), 'revisions' );
    709         }
    710 
    711698        /** Topic Tags ************************************************************/
    712699
    713700        // Just in time manipulation of reply terms before being edited
     
    17421729        // Set post status to spam
    17431730        $reply->post_status = bbp_get_spam_status_id();
    17441731
    1745         // No revisions
    1746         remove_action( 'pre_post_update', 'wp_save_post_revision' );
     1732        // Update reply
     1733        $reply_id = bbp_update_post_without_revision( $reply );
    17471734
    1748         // Update the reply
    1749         $reply_id = wp_update_post( $reply );
    1750 
    17511735        // Execute post spam code
    17521736        do_action( 'bbp_spammed_reply', $reply_id );
    17531737
     
    17901774        // Delete pre spam meta
    17911775        delete_post_meta( $reply_id, '_bbp_spam_meta_status' );
    17921776
    1793         // No revisions
    1794         remove_action( 'pre_post_update', 'wp_save_post_revision' );
     1777        // Update reply
     1778        $reply_id = bbp_update_post_without_revision( $reply );
    17951779
    1796         // Update the reply
    1797         $reply_id = wp_update_post( $reply );
    1798 
    17991780        // Execute post unspam code
    18001781        do_action( 'bbp_unspammed_reply', $reply_id );
    18011782
     
    18361817        // Set post date GMT - prevents post_date override in wp_update_post()
    18371818        $reply->post_date_gmt = get_gmt_from_date( $reply->post_date );
    18381819
    1839         // No revisions
    1840         remove_action( 'pre_post_update', 'wp_save_post_revision' );
    1841 
    18421820        // Update reply
    1843         $reply_id = wp_update_post( $reply );
     1821        $reply_id = bbp_update_post_without_revision( $reply );
    18441822
    18451823        // Execute post pending code
    18461824        do_action( 'bbp_approved_reply', $reply_id );
     
    18791857        // Set pending status
    18801858        $reply->post_status = $status;
    18811859
    1882         // No revisions
    1883         remove_action( 'pre_post_update', 'wp_save_post_revision' );
    1884 
    18851860        // Update reply
    1886         $reply_id = wp_update_post( $reply );
     1861        $reply_id = bbp_update_post_without_revision( $reply );
    18871862
    18881863        // Execute post open code
    18891864        do_action( 'bbp_unapproved_reply', $reply_id );
  • src/includes/topics/functions.php

     
    418418        }
    419419
    420420        // Define local variable(s)
    421         $revisions_removed = false;
    422421        $topic = $topic_id = $topic_author = $forum_id = 0;
    423422        $topic_title = $topic_content = $topic_edit_reason = '';
    424423        $anonymous_data = array();
     
    626625                'tax_input'    => $terms,
    627626        ) );
    628627
    629         // Toggle revisions to avoid duplicates
    630         if ( post_type_supports( bbp_get_topic_post_type(), 'revisions' ) ) {
    631                 $revisions_removed = true;
    632                 remove_post_type_support( bbp_get_topic_post_type(), 'revisions' );
    633         }
     628        // Update topic
     629        $topic_id = bbp_update_post_without_revision( $topic_data );
    634630
    635         // Insert topic
    636         $topic_id = wp_update_post( $topic_data );
    637 
    638         // Toggle revisions back on
    639         if ( true === $revisions_removed ) {
    640                 $revisions_removed = false;
    641                 add_post_type_support( bbp_get_topic_post_type(), 'revisions' );
    642         }
    643 
    644631        /** No Errors *************************************************************/
    645632
    646633        if ( ! empty( $topic_id ) && ! is_wp_error( $topic_id ) ) {
     
    28152802        // Set closed status
    28162803        $topic->post_status = $status;
    28172804
    2818         // Toggle revisions off as we are not altering content
    2819         if ( post_type_supports( bbp_get_topic_post_type(), 'revisions' ) ) {
    2820                 $revisions_removed = true;
    2821                 remove_post_type_support( bbp_get_topic_post_type(), 'revisions' );
    2822         }
    2823 
    28242805        // Update topic
    2825         $topic_id = wp_update_post( $topic );
     2806        $topic_id = bbp_update_post_without_revision( $topic );
    28262807
    2827         // Toggle revisions back on
    2828         if ( true === $revisions_removed ) {
    2829                 $revisions_removed = false;
    2830                 add_post_type_support( bbp_get_topic_post_type(), 'revisions' );
    2831         }
    2832 
    28332808        // Execute post close code
    28342809        do_action( 'bbp_closed_topic', $topic_id );
    28352810
     
    28692844                $topic_status = bbp_get_public_status_id();
    28702845        }
    28712846
    2872         // Set previous status
    2873         $topic->post_status = $topic_status;
    2874 
    28752847        // Remove old status meta
    28762848        delete_post_meta( $topic_id, '_bbp_status' );
    28772849
    2878         // Toggle revisions off as we are not altering content
    2879         if ( post_type_supports( bbp_get_topic_post_type(), 'revisions' ) ) {
    2880                 $revisions_removed = true;
    2881                 remove_post_type_support( bbp_get_topic_post_type(), 'revisions' );
    2882         }
     2850        // Set previous status
     2851        $topic->post_status = $topic_status;
    28832852
    28842853        // Update topic
    2885         $topic_id = wp_update_post( $topic );
     2854        $topic_id = bbp_update_post_without_revision( $topic );
    28862855
    2887         // Toggle revisions back on
    2888         if ( true === $revisions_removed ) {
    2889                 $revisions_removed = false;
    2890                 add_post_type_support( bbp_get_topic_post_type(), 'revisions' );
    2891         }
    2892 
    28932856        // Execute post open code
    28942857        do_action( 'bbp_opened_topic', $topic_id );
    28952858
     
    29332896        // Empty the topic of its tags
    29342897        $topic->tax_input = bbp_spam_topic_tags( $topic_id );
    29352898
    2936         // No revisions
    2937         remove_action( 'pre_post_update', 'wp_save_post_revision' );
     2899        // Update topic
     2900        $topic_id = bbp_update_post_without_revision( $topic );
    29382901
    2939         // Update the topic
    2940         $topic_id = wp_update_post( $topic );
    2941 
    29422902        // Execute post spam code
    29432903        do_action( 'bbp_spammed_topic', $topic_id );
    29442904
     
    30773037        // Delete pre spam meta
    30783038        delete_post_meta( $topic_id, '_bbp_spam_meta_status' );
    30793039
    3080         // No revisions
    3081         remove_action( 'pre_post_update', 'wp_save_post_revision' );
     3040        // Update topic
     3041        $topic_id = bbp_update_post_without_revision( $topic );
    30823042
    3083         // Update the topic
    3084         $topic_id = wp_update_post( $topic );
    3085 
    30863043        // Execute post unspam code
    30873044        do_action( 'bbp_unspammed_topic', $topic_id );
    30883045
     
    32383195        // Set post date GMT - prevents post_date override in wp_update_post()
    32393196        $topic->post_date_gmt = get_gmt_from_date( $topic->post_date );
    32403197
    3241         // No revisions
    3242         remove_action( 'pre_post_update', 'wp_save_post_revision' );
    3243 
    32443198        // Update topic
    3245         $topic_id = wp_update_post( $topic );
     3199        $topic_id = bbp_update_post_without_revision( $topic );
    32463200
    32473201        // Execute post pending code
    32483202        do_action( 'bbp_approved_topic', $topic_id );
     
    32813235        // Set pending status
    32823236        $topic->post_status = $status;
    32833237
    3284         // No revisions
    3285         remove_action( 'pre_post_update', 'wp_save_post_revision' );
    3286 
    32873238        // Update topic
    3288         $topic_id = wp_update_post( $topic );
     3239        $topic_id = bbp_update_post_without_revision( $topic );
    32893240
    32903241        // Execute post open code
    32913242        do_action( 'bbp_unapproved_topic', $topic_id );