Skip to:
Content

BuddyPress.org

Ticket #8581: 8581-a.patch

File 8581-a.patch, 3.2 KB (added by oztaser, 3 years ago)
  • src/bp-members/bp-members-activity.php

    diff --git src/bp-members/bp-members-activity.php src/bp-members/bp-members-activity.php
    index 3f0d28945..97efc0a16 100644
    function bp_members_new_avatar_activity( $user_id = 0 ) { 
    192192         */
    193193        $user_id = apply_filters( 'bp_members_new_avatar_user_id', $user_id );
    194194
     195        // Check to make sure that a user has just one `new_avatar` activity per throttle time.
     196        $last_new_avatar_activity = bp_activity_get( array(
     197                'user_id'   => $user_id,
     198                'component' => buddypress()->members->id,
     199                'type'      => 'new_avatar',
     200                'per_page'  => 1,
     201        ) );
     202
     203        if ( ! empty( $last_new_avatar_activity['activities'] ) ) {
     204
     205                /**
     206                 * Filters the throttle time, in seconds, used to prevent generating multiple `new_avatar` activity.
     207                 *
     208                 * @since 10.0.0
     209                 *
     210                 * @param int $value Throttle time, in seconds.
     211                 */
     212                $throttle_period = apply_filters( 'bp_members_new_avatar_throttle_time', HOUR_IN_SECONDS );
     213                $then            = strtotime( $last_new_avatar_activity['activities'][0]->date_recorded );
     214                $now             = bp_core_current_time( true, 'timestamp' );
     215
     216                // Delete the old activity.
     217                if ( ( $now - $then ) < $throttle_period ) {
     218                        bp_activity_delete( array(
     219                                'id' => $last_new_avatar_activity['activities'][0]->id
     220                        ) );
     221                }
     222        }
     223
    195224        // Add the activity.
    196225        bp_activity_add( array(
    197226                'user_id'   => $user_id,
  • tests/phpunit/testcases/members/activity.php

    diff --git tests/phpunit/testcases/members/activity.php tests/phpunit/testcases/members/activity.php
    index 07ec30406..307d861ff 100644
    class BP_Tests_Members_Activity extends BP_UnitTestCase { 
    9393
    9494                $this->assertSame( $expected, $found );
    9595        }
     96
     97        /**
     98         * @group bp_members_new_avatar_activity
     99         */
     100        public function test_bp_members_new_avatar_activity_throttled() {
     101                $u = self::factory()->user->create();
     102                $a = self::factory()->activity->create( array(
     103                        'component' => 'members',
     104                        'type'      => 'new_avatar',
     105                        'user_id'   => $u,
     106                ) );
     107
     108                bp_members_new_avatar_activity( $u );
     109
     110                $new_avatar_activities = bp_activity_get( array(
     111                        'user_id'     => $u,
     112                        'component'   => buddypress()->members->id,
     113                        'type'        => 'new_avatar',
     114                        'count_total' => 'count_query',
     115                ) );
     116
     117                $this->assertEquals( 1, $new_avatar_activities['total'] );
     118                $this->assertNotSame( $a, $new_avatar_activities['activities'][0]->id );
     119        }
     120
     121        /**
     122         * @group bp_members_new_avatar_activity
     123         */
     124        public function test_bp_members_new_avatar_activity_outside_of_throttle_time() {
     125                $u = self::factory()->user->create();
     126
     127                $time      = strtotime( bp_core_current_time() );
     128                $prev_time = date( 'Y-m-d H:i:s', $time - ( 121 * HOUR_IN_SECONDS ) );
     129
     130                $a = self::factory()->activity->create( array(
     131                        'component'     => 'members',
     132                        'type'          => 'new_avatar',
     133                        'user_id'       => $u,
     134                        'recorded_time' => $prev_time,
     135                ) );
     136
     137                bp_members_new_avatar_activity( $u );
     138
     139                $new_avatar_activities = bp_activity_get( array(
     140                        'user_id'     => $u,
     141                        'component'   => buddypress()->members->id,
     142                        'type'        => 'new_avatar',
     143                        'count_total' => 'count_query',
     144                ) );
     145
     146                $this->assertEquals( 2, $new_avatar_activities['total'] );
     147        }
    96148}