diff --git src/bp-groups/bp-groups-functions.php src/bp-groups/bp-groups-functions.php
index 8b19738..283392b 100644
|
|
function groups_leave_group( $group_id, $user_id = 0 ) { |
431 | 431 | } |
432 | 432 | } |
433 | 433 | |
434 | | // This is exactly the same as deleting an invite, just is_confirmed = 1 NOT 0. |
435 | | if ( !groups_uninvite_user( $user_id, $group_id ) ) { |
| 434 | if ( ! groups_remove_member( $user_id, $group_id ) ) { |
436 | 435 | return false; |
437 | 436 | } |
438 | 437 | |
… |
… |
function groups_unban_member( $user_id, $group_id ) { |
1401 | 1400 | */ |
1402 | 1401 | function groups_remove_member( $user_id, $group_id ) { |
1403 | 1402 | |
1404 | | if ( ! bp_is_item_admin() ) |
1405 | | return false; |
| 1403 | if ( ! bp_is_item_admin() ) { |
| 1404 | // bp_is_item_admin may not be set if this function is called outside of group context. |
| 1405 | // Site admins and group admins can remove a member from a group. |
| 1406 | // A member may also request to remove herself from a group. |
| 1407 | if ( ! current_user_can( 'bp_moderate' ) |
| 1408 | && ! groups_is_user_admin( bp_loggedin_user_id(), $group_id ) |
| 1409 | && $user_id != bp_loggedin_user_id() ) { |
| 1410 | return false; |
| 1411 | } |
| 1412 | } |
1406 | 1413 | |
1407 | 1414 | $member = new BP_Groups_Member( $user_id, $group_id ); |
1408 | 1415 | |
diff --git tests/phpunit/testcases/groups/functions.php tests/phpunit/testcases/groups/functions.php
index 8d9e990..f73766b 100644
|
|
class BP_Tests_Groups_Functions extends BP_UnitTestCase { |
37 | 37 | groups_join_group( $g1, $u2 ); |
38 | 38 | groups_join_group( $g2, $u2 ); |
39 | 39 | |
| 40 | // Set the current user so the leave group request goes through. |
| 41 | $this->set_current_user( $u2 ); |
40 | 42 | groups_leave_group( $g1, $u2 ); |
41 | 43 | $this->assertEquals( 1, bp_get_user_meta( $u2, 'total_group_count', true ) ); |
42 | 44 | } |