Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
09/09/2021 02:01:40 PM (4 years ago)
Author:
espellcaste
Message:

Improving the group member count routine and the function helper.

The group member count routine was updated to avoid direct, uncached, SQL query and unnecessary cache refresh when a group's Members page was viewed.

is now being used to get the group member count which takes into account users' existence in the site,

the query is now cached and filterable.

was also updated to get the current group from if available.

Props imath
Fixes #7614 and see #6749

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/testcases/groups/functions.php

    r12605 r13103  
    185185
    186186        groups_join_group( $g, $u2 );
    187         $this->assertEquals( 2, groups_get_groupmeta( $g, 'total_member_count' ) );
     187        $this->assertEquals( 2, groups_get_total_member_count( $g ) );
     188    }
     189
     190    /**
     191     * @group total_member_count
     192     */
     193    public function test_total_member_count_with_invalid_group() {
     194        $this->assertFalse( groups_get_total_member_count( 'invalid-group' ) );
     195        $this->assertFalse( groups_get_total_member_count( '' ) );
     196        $this->assertFalse( groups_get_total_member_count( 123456789 ) );
    188197    }
    189198
     
    194203    public function test_total_member_count_groups_leave_group() {
    195204        $u1 = self::factory()->user->create();
     205        $u2 = self::factory()->user->create();
    196206        $g1 = self::factory()->group->create( array( 'creator_id' => $u1 ) );
    197         groups_join_group( $g1, $u1 );
    198 
    199         groups_leave_group( $g1, $u1 );
    200         $this->assertEquals( 1, groups_get_groupmeta( $g1, 'total_member_count' ) );
     207
     208        groups_join_group( $g1, $u2 );
     209
     210        $this->assertEquals( 2, groups_get_total_member_count( $g1 ) );
     211
     212        groups_leave_group( $g1, $u2 );
     213
     214        $this->assertEquals( 1, groups_get_total_member_count( $g1 ) );
    201215    }
    202216
     
    215229        buddypress()->is_item_admin = true;
    216230
     231        $this->assertEquals( 2, groups_get_total_member_count( $g1 ) );
     232
    217233        groups_ban_member( $u2, $g1 );
    218234
    219         $this->assertEquals( 1, groups_get_groupmeta( $g1, 'total_member_count' ) );
     235        $this->assertEquals( 1, groups_get_total_member_count( $g1 ) );
    220236    }
    221237
     
    236252        groups_ban_member( $u2, $g1 );
    237253
     254        $this->assertEquals( 1, groups_get_total_member_count( $g1 ) );
     255
    238256        groups_unban_member( $u2, $g1 );
    239257
    240         $this->assertEquals( 2, groups_get_groupmeta( $g1, 'total_member_count' ) );
     258        $this->assertEquals( 2, groups_get_total_member_count( $g1 ) );
    241259    }
    242260
     
    256274        ) );
    257275
     276        $this->assertEquals( 1, groups_get_total_member_count( $g ) );
     277
    258278        groups_accept_invite( $u2, $g );
    259279
    260         $this->assertEquals( 2, groups_get_groupmeta( $g, 'total_member_count' ) );
     280        $this->assertEquals( 2, groups_get_total_member_count( $g ) );
    261281    }
    262282
     
    276296        groups_accept_membership_request( 0, $u2, $g );
    277297
    278         $this->assertEquals( 2, groups_get_groupmeta( $g, 'total_member_count' ) );
     298        $this->assertEquals( 2, groups_get_total_member_count( $g ) );
    279299    }
    280300
     
    295315        groups_remove_member( $u2, $g1 );
    296316
    297         $this->assertEquals( 1, groups_get_groupmeta( $g1, 'total_member_count' ) );
     317        $this->assertEquals( 1, groups_get_total_member_count( $g1 ));
     318    }
     319
     320    /**
     321     * @group total_member_count
     322     * @group groups_remove_member
     323     */
     324    public function test_total_member_count_groups_delete_member() {
     325        $u1 = self::factory()->user->create();
     326        $u2 = self::factory()->user->create();
     327        $u3 = self::factory()->user->create();
     328        $g1 = self::factory()->group->create( array( 'creator_id' => $u1 ) );
     329
     330        groups_join_group( $g1, $u2 );
     331        groups_join_group( $g1, $u3 );
     332
     333        $this->assertEquals( 3, groups_get_total_member_count( $g1 ) );
     334        $this->assertEquals( 3, BP_Groups_Group::get_total_member_count( $g1 ) );
     335
     336        add_filter( 'bp_remove_user_data_on_delete_user_hook', '__return_true' );
     337
     338        // Delete user.
     339        wp_delete_user( $u2 );
     340
     341        remove_filter( 'bp_remove_user_data_on_delete_user_hook', '__return_true' );
     342
     343        $this->assertEquals( 2, groups_get_total_member_count( $g1 ) );
     344        $this->assertEquals( 2, BP_Groups_Group::get_total_member_count( $g1 ) );
    298345    }
    299346
     
    314361        ) );
    315362
    316         $this->assertEquals( 1, groups_get_groupmeta( $g, 'total_member_count' ) );
     363        $this->assertEquals( 1, groups_get_total_member_count( $g ) );
    317364    }
    318365
Note: See TracChangeset for help on using the changeset viewer.