Skip to:
Content

BuddyPress.org

Changeset 12333


Ignore:
Timestamp:
02/19/2019 03:31:05 PM (8 years ago)
Author:
boonebgorges
Message:

Blogs: Ensure activity data integrity when updating post title.

Previously, a missing primary_id could cause the post_title activity meta
value to be updated for activity items unrelated to the one linked to the
updated blog post.

Merges [12311] to the 4.0.x branch.

Props r-a-y.
Fixes #8007.

Location:
branches/4.0
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/4.0

  • branches/4.0/src/bp-blogs/bp-blogs-functions.php

    r12304 r12333  
    663663                                        'object'       => $activity_post_object->comments_tracking->component_id,
    664664                                        'action'       => $activity_post_object->comments_tracking->action_id,
     665                                        'primary_id'   => get_current_blog_id(),
    665666                                        'secondary_id' => implode( ',', $comment_ids ),
    666667                                );
  • branches/4.0/tests/phpunit/testcases/blogs/activity.php

    r12246 r12333  
    308308
    309309                $this->assertEquals( $this->comment_post_id, $p );
     310        }
     311
     312        /**
     313         * @group post_type_comment_activities
     314         */
     315        public function test_bp_blogs_update_post_title_activity_meta_should_not_be_the_same_for_same_comment_id() {
     316                global $wpdb;
     317
     318                if ( ! is_multisite() ) {
     319                        $this->markTestSkipped();
     320                }
     321
     322                if ( function_exists( 'wp_initialize_site' ) ) {
     323                        $this->setExpectedDeprecated( 'wpmu_new_blog' );
     324                }
     325
     326                $b1 = self::factory()->blog->create();
     327                $b2 = self::factory()->blog->create();
     328                $b3 = self::factory()->blog->create();
     329                $u = self::factory()->user->create();
     330                $u2 = self::factory()->user->create();
     331                $commenter = self::factory()->user->get_object_by_id( $u2 );
     332
     333                $bids = array( $b1, $b2, $b3 );
     334                $pids = array();
     335
     336                foreach ( $bids as $bid ) {
     337                        switch_to_blog( $bid );
     338
     339                        // Ensure blog privacy is public so post activities are recorded.
     340                        update_option( 'blog_public', 1 );
     341
     342                        // Create the post.
     343                        $pids[ $bid ] = self::factory()->post->create( array(
     344                                'post_author' => $u,
     345                        ) );
     346
     347                        /*
     348                         * Create the post comment.
     349                         *
     350                         * Both user_id and comment_author_email are required for unit tests.
     351                         */
     352                        $c = self::factory()->comment->create( array(
     353                                'user_id'         => $u2,
     354                                'comment_author_email' => $commenter->user_email,
     355                                'comment_post_ID' => $pids[ $bid ],
     356                        ) );
     357
     358                        // Approve the comment so the activity item is generated.
     359                        self::factory()->comment->update_object( $c, array( 'comment_approved' => 1 ) );
     360
     361                        restore_current_blog();
     362                }
     363
     364                // Now update the post title on one blog only.
     365                switch_to_blog( $b1 );
     366                wp_update_post( array(
     367                        'ID' => $pids[ $b1 ],
     368                        'post_title' => 'Updated'
     369                ) );
     370                restore_current_blog();
     371
     372                // Check our activity meta to see if the post title is different.
     373                $aids = bp_activity_get( array(
     374                        'fields' => 'ids',
     375                        'filter' => array(
     376                                'action' => 'new_blog_comment'
     377                        )
     378                ) );
     379                $aids= $aids['activities'];
     380                foreach ( $aids as $aid ) {
     381                        // Skip the check for the correct blog.
     382                        $a = new BP_Activity_Activity( $aid );
     383                        if ( $a->item_id == $b1 ) {
     384                                continue;
     385                        }
     386
     387                        // Assert that post title is different.
     388                        $post_title = bp_activity_get_meta( $aid, 'post_title' );
     389                        $this->assertFalse( 'Updated' === $post_title, 'Post title should not be the same across all sites with the same post comment ID' );
     390                }
    310391        }
    311392
Note: See TracChangeset for help on using the changeset viewer.