Skip to:
Content

BuddyPress.org

Ticket #8296: 8296.3.patch

File 8296.3.patch, 10.6 KB (added by imath, 3 years ago)
  • src/bp-activity/bp-activity-cache.php

    diff --git src/bp-activity/bp-activity-cache.php src/bp-activity/bp-activity-cache.php
    index da7542770..0ac1d800a 100644
    function bp_activity_update_meta_cache( $activity_ids = false ) { 
    4747function bp_activity_clear_cache_for_activity( $activity ) {
    4848        wp_cache_delete( $activity->id, 'bp_activity' );
    4949        wp_cache_delete( 'bp_activity_sitewide_front', 'bp' );
     50
     51        // Clear the comments cache for the parent activity ID.
     52        if ( 'activity_comment' === $activity->type ) {
     53                wp_cache_delete( $activity->item_id, 'bp_activity_comments' );
     54        }
    5055}
    5156add_action( 'bp_activity_after_save', 'bp_activity_clear_cache_for_activity' );
    5257
  • src/bp-activity/bp-activity-functions.php

    diff --git src/bp-activity/bp-activity-functions.php src/bp-activity/bp-activity-functions.php
    index 2cceae6cd..1c0fb5bb3 100644
    function bp_activity_mark_as_spam( &$activity, $source = 'by_a_person' ) { 
    35953595        // Clear the activity stream first page cache.
    35963596        wp_cache_delete( 'bp_activity_sitewide_front', 'bp' );
    35973597
     3598        if ( 'activity_comment' === $activity->type ) {
     3599                $activity_id = $activity->item_id;
     3600        } else {
     3601                $activity_id = $activity->id;
     3602        }
     3603
    35983604        // Clear the activity comment cache for this activity item.
    3599         wp_cache_delete( $activity->id, 'bp_activity_comments' );
     3605        wp_cache_delete( $activity_id, 'bp_activity_comments' );
    36003606
    36013607        // If Akismet is active, and this was a manual spam/ham request, stop Akismet checking the activity.
    36023608        if ( 'by_a_person' == $source && !empty( $bp->activity->akismet ) ) {
    function bp_activity_mark_as_ham( &$activity, $source = 'by_a_person' ) { 
    36423648        // Clear the activity stream first page cache.
    36433649        wp_cache_delete( 'bp_activity_sitewide_front', 'bp' );
    36443650
     3651        if ( 'activity_comment' === $activity->type ) {
     3652                $activity_id = $activity->item_id;
     3653        } else {
     3654                $activity_id = $activity->id;
     3655        }
     3656
    36453657        // Clear the activity comment cache for this activity item.
    3646         wp_cache_delete( $activity->id, 'bp_activity_comments' );
     3658        wp_cache_delete( $activity_id, 'bp_activity_comments' );
    36473659
    36483660        // If Akismet is active, and this was a manual spam/ham request, stop Akismet checking the activity.
    36493661        if ( 'by_a_person' == $source && !empty( $bp->activity->akismet ) ) {
  • tests/phpunit/testcases/activity/cache.php

    diff --git tests/phpunit/testcases/activity/cache.php tests/phpunit/testcases/activity/cache.php
    index c8068b233..6ce0ca953 100644
    class BP_Tests_Activity_Cache extends BP_UnitTestCase { 
    358358                $q2 = bp_activity_get( $activity_args );
    359359                $this->assertEqualSets( array( $activities[0] ), wp_list_pluck( $q2['activities'], 'id' ) );
    360360        }
     361
     362        /**
     363         * @ticket BP8296
     364         */
     365        public function test_activity_comments_cache_should_be_cleared_when_parent_activity_marked_as_spam() {
     366                $u1 = self::factory()->user->create();
     367                $u2 = self::factory()->user->create();
     368
     369                $activity = self::factory()->activity->create(
     370                        array(
     371                                'component' => buddypress()->activity->id,
     372                                'type'      => 'activity_update',
     373                                'user_id'   => $u1,
     374                                'content'   => 'bar',
     375                        )
     376                );
     377
     378                $comment = bp_activity_new_comment(
     379                        array(
     380                                'activity_id'       => $activity,
     381                                'skip_notification' => true,
     382                                'user_id'           => $u2,
     383                                'content'           => 'foo',
     384                        )
     385                );
     386
     387                $activities = bp_activity_get(
     388                        array(
     389                                'display_comments' => true,
     390                        )
     391                );
     392
     393                $cached_ids = wp_list_pluck( wp_cache_get( $activity, 'bp_activity_comments' ), 'content', 'id' );
     394                $this->assertTrue( 'foo' === $cached_ids[ $comment ] );
     395
     396                $activity_obj = new BP_Activity_Activity( $activity );
     397
     398                // An activity is always saved after being marked as spam.
     399                bp_activity_mark_as_spam( $activity_obj );
     400                $activity_obj->save();
     401
     402                $this->assertFalse( wp_cache_get( $activity, 'bp_activity_comments' ), 'The activity comments cache should be cleared when an activity has been marked as spam' );
     403        }
     404
     405        /**
     406         * @ticket BP8296
     407         */
     408        public function test_activity_comments_cache_should_be_cleared_when_activity_comment_marked_as_spam() {
     409                $u1 = self::factory()->user->create();
     410                $u2 = self::factory()->user->create();
     411
     412                $activity = self::factory()->activity->create(
     413                        array(
     414                                'component' => buddypress()->activity->id,
     415                                'type'      => 'activity_update',
     416                                'user_id'   => $u1,
     417                                'content'   => 'foo',
     418                        )
     419                );
     420
     421                $comment = bp_activity_new_comment(
     422                        array(
     423                                'activity_id'       => $activity,
     424                                'skip_notification' => true,
     425                                'user_id'           => $u2,
     426                                'content'           => 'bar',
     427                        )
     428                );
     429
     430                $activities = bp_activity_get(
     431                        array(
     432                                'display_comments' => true,
     433                        )
     434                );
     435
     436                $cached_ids = wp_list_pluck( wp_cache_get( $activity, 'bp_activity_comments' ), 'content', 'id' );
     437                $this->assertTrue( 'bar' === $cached_ids[ $comment ] );
     438
     439                $comment_obj = new BP_Activity_Activity( $comment );
     440
     441                // An activity is always saved after being marked as spam.
     442                bp_activity_mark_as_spam( $comment_obj );
     443                $comment_obj->save();
     444
     445                $this->assertFalse( wp_cache_get( $activity, 'bp_activity_comments' ), 'The parent activity comments cache should be cleared when an activity comment has been marked as spam' );
     446        }
     447
     448        /**
     449         * @ticket BP8296
     450         */
     451        public function test_activity_comments_cache_should_be_cleared_when_parent_activity_marked_as_ham() {
     452                $u1 = self::factory()->user->create();
     453                $u2 = self::factory()->user->create();
     454
     455                $activity = self::factory()->activity->create(
     456                        array(
     457                                'component' => buddypress()->activity->id,
     458                                'type'      => 'activity_update',
     459                                'user_id'   => $u1,
     460                                'content'   => 'bar',
     461                        )
     462                );
     463
     464                $comment = bp_activity_new_comment(
     465                        array(
     466                                'activity_id'       => $activity,
     467                                'skip_notification' => true,
     468                                'user_id'           => $u2,
     469                                'content'           => 'foo',
     470                        )
     471                );
     472
     473                $activities = bp_activity_get(
     474                        array(
     475                                'display_comments' => true,
     476                        )
     477                );
     478
     479                $activity_obj          = new BP_Activity_Activity( $activity );
     480                $activity_obj->is_spam = 1;
     481                $activity_obj->save();
     482
     483                // An activity is always saved after being marked as spam.
     484                bp_activity_mark_as_ham( $activity_obj );
     485                $activity_obj->save();
     486
     487                $this->assertFalse( wp_cache_get( $activity, 'bp_activity_comments' ), 'The activity comments cache should be cleared when an activity has been marked as ham' );
     488        }
     489
     490        /**
     491         * @ticket BP8296
     492         */
     493        public function test_activity_comments_cache_should_be_cleared_when_activity_comment_marked_as_ham() {
     494                $u1 = self::factory()->user->create();
     495                $u2 = self::factory()->user->create();
     496
     497                $activity = self::factory()->activity->create(
     498                        array(
     499                                'component' => buddypress()->activity->id,
     500                                'type'      => 'activity_update',
     501                                'user_id'   => $u1,
     502                                'content'   => 'foo',
     503                        )
     504                );
     505
     506                $comment = bp_activity_new_comment(
     507                        array(
     508                                'activity_id'       => $activity,
     509                                'skip_notification' => true,
     510                                'user_id'           => $u2,
     511                                'content'           => 'bar',
     512                        )
     513                );
     514
     515                $activities = bp_activity_get(
     516                        array(
     517                                'display_comments' => true,
     518                        )
     519                );
     520
     521                $comment_obj          = new BP_Activity_Activity( $comment );
     522                $comment_obj->is_spam = 1;
     523                $comment_obj->save();
     524
     525                // An activity is always saved after being marked as spam.
     526                bp_activity_mark_as_ham( $comment_obj );
     527                $comment_obj->save();
     528
     529                $this->assertFalse( wp_cache_get( $activity, 'bp_activity_comments' ), 'The parent activity comments cache should be cleared when an activity comment has been marked as ham' );
     530        }
     531
     532        /**
     533         * @ticket BP8296
     534         */
     535        public function test_activity_comments_cache_should_be_cleared_when_activity_comment_has_been_updated() {
     536                $u1 = self::factory()->user->create();
     537                $u2 = self::factory()->user->create();
     538
     539                $activity = self::factory()->activity->create(
     540                        array(
     541                                'component' => buddypress()->activity->id,
     542                                'type'      => 'activity_update',
     543                                'user_id'   => $u1,
     544                                'content'   => 'foo',
     545                        )
     546                );
     547
     548                $comment = bp_activity_new_comment(
     549                        array(
     550                                'activity_id'       => $activity,
     551                                'skip_notification' => true,
     552                                'user_id'           => $u2,
     553                                'content'           => 'bar',
     554                        )
     555                );
     556
     557                $activities = bp_activity_get(
     558                        array(
     559                                'display_comments' => true,
     560                        )
     561                );
     562
     563                $comment_obj          = new BP_Activity_Activity( $comment );
     564                $comment_obj->content = 'foo';
     565                $comment_obj->save();
     566
     567                $this->assertFalse( wp_cache_get( $activity, 'bp_activity_comments' ), 'The parent activity comments cache should be cleared when an activity comment has been updated' );
     568        }
     569
     570        /**
     571         * @ticket BP8296
     572         */
     573        public function test_activity_comments_cache_should_be_cleared_when_activity_comment_has_been_deleted() {
     574                $u1 = self::factory()->user->create();
     575                $u2 = self::factory()->user->create();
     576
     577                $activity = self::factory()->activity->create(
     578                        array(
     579                                'component' => buddypress()->activity->id,
     580                                'type'      => 'activity_update',
     581                                'user_id'   => $u1,
     582                                'content'   => 'foo',
     583                        )
     584                );
     585
     586                $comment = bp_activity_new_comment(
     587                        array(
     588                                'activity_id'       => $activity,
     589                                'skip_notification' => true,
     590                                'user_id'           => $u2,
     591                                'content'           => 'bar',
     592                        )
     593                );
     594
     595                $activities = bp_activity_get(
     596                        array(
     597                                'display_comments' => true,
     598                        )
     599                );
     600
     601                bp_activity_delete_comment( $activity, $comment );
     602
     603                $this->assertFalse( wp_cache_get( $activity, 'bp_activity_comments' ), 'The parent activity comments cache should be cleared when an activity comment has been deleted' );
     604        }
     605
     606        /**
     607         * @ticket BP8296
     608         */
     609        public function test_activity_comments_cache_should_be_cleared_when_activity_comment_has_been_added() {
     610                $u1 = self::factory()->user->create();
     611                $u2 = self::factory()->user->create();
     612
     613                $activity = self::factory()->activity->create(
     614                        array(
     615                                'component' => buddypress()->activity->id,
     616                                'type'      => 'activity_update',
     617                                'user_id'   => $u1,
     618                                'content'   => 'foo',
     619                        )
     620                );
     621
     622                $c1 = bp_activity_new_comment(
     623                        array(
     624                                'activity_id'       => $activity,
     625                                'skip_notification' => true,
     626                                'user_id'           => $u2,
     627                                'content'           => 'bar',
     628                        )
     629                );
     630
     631                $activities = bp_activity_get(
     632                        array(
     633                                'display_comments' => true,
     634                        )
     635                );
     636
     637                $c2 = bp_activity_new_comment(
     638                        array(
     639                                'activity_id'       => $activity,
     640                                'skip_notification' => true,
     641                                'user_id'           => $u1,
     642                                'content'           => 'taz',
     643                        )
     644                );
     645
     646                $this->assertFalse( wp_cache_get( $activity, 'bp_activity_comments' ), 'The parent activity comments cache should be cleared when a new activity comment has been added' );
     647        }
    361648}