Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
11/05/2018 08:20:05 PM (6 years ago)
Author:
boonebgorges
Message:

Groups: Improve treatment of single-member groups on user deletion.

Instead of deleting single-member groups on user deletion, we simply
remove the member from the group. Because BuddyPress expects groups to
have at least one admin member, in these cases we assign a site admin
to be the sole group admin.

This changeset also fixes a related bug whereby the group admin/mod
cache was not properly invalidated on membership deletion.

Props djpaul.
Fixes #7476.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/testcases/groups/class-bp-groups-member.php

    r12162 r12273  
    14551455        $this->assertSame( self::$group_ids[1], $memberships[0]->group_id );
    14561456    }
     1457
     1458    /**
     1459     * @ticket BP7476
     1460     */
     1461    public function test_delete_all_for_user() {
     1462        $new_user = self::factory()->user->create();
     1463
     1464        $admin_users = get_users( [
     1465            'blog_id' => bp_get_root_blog_id(),
     1466            'fields'  => 'id',
     1467            'number'  => 1,
     1468            'orderby' => 'ID',
     1469            'role'    => 'administrator',
     1470        ] );
     1471
     1472        $admin_user = (int) $admin_users[0];
     1473
     1474        // Sole admin of group.
     1475        $new_group = self::factory()->group->create( [
     1476            'creator_id' => $new_user,
     1477        ] );
     1478
     1479        // One of two group admins.
     1480        groups_join_group( self::$group_ids[0], $new_user );
     1481        $m1 = new BP_Groups_Member( $new_user, self::$group_ids[0] );
     1482        $m1->promote( 'admin' );
     1483
     1484        // Not an admin.
     1485        groups_join_group( self::$group_ids[1], $new_user );
     1486        $m2 = new BP_Groups_Member( $new_user, self::$group_ids[1] );
     1487
     1488        BP_Groups_Member::delete_all_for_user( $new_user );
     1489
     1490        $new_group_members = BP_Groups_Member::get_group_administrator_ids( $new_group );
     1491        $this->assertSame( [ $admin_user ], wp_list_pluck( $new_group_members, 'user_id' ) );
     1492
     1493        $g0_members = BP_Groups_Member::get_group_administrator_ids( self::$group_ids[0] );
     1494        $this->assertSame( [ self::$user_ids[3] ], wp_list_pluck( $g0_members, 'user_id' ) );
     1495
     1496        $g1_members = BP_Groups_Member::get_group_administrator_ids( self::$group_ids[1] );
     1497        $this->assertSame( [ self::$user_ids[3] ], wp_list_pluck( $g1_members, 'user_id' ) );
     1498    }
    14571499}
Note: See TracChangeset for help on using the changeset viewer.