Ticket #7820: 7820.diff
File 7820.diff, 9.4 KB (added by , 7 years ago) |
---|
-
src/bp-groups/bp-groups-filters.php
diff --git src/bp-groups/bp-groups-filters.php src/bp-groups/bp-groups-filters.php index d0a42a003..bf15e9983 100644
add_filter( 'bp_activity_at_name_do_notifications', 'bp_groups_disable_at_mentio 74 74 add_filter( 'bp_core_avatar_default', 'bp_groups_default_avatar', 10, 3 ); 75 75 add_filter( 'bp_core_avatar_default_thumb', 'bp_groups_default_avatar', 10, 3 ); 76 76 77 // Personal data export. 78 add_filter( 'wp_privacy_personal_data_exporters', 'bp_groups_register_personal_data_exporter' ); 79 77 80 /** 78 81 * Filter output of Group Description through WordPress's KSES API. 79 82 * … … function bp_groups_user_can_filter( $retval, $user_id, $capability, $site_id, $a 362 365 363 366 } 364 367 add_filter( 'bp_user_can', 'bp_groups_user_can_filter', 10, 5 ); 368 369 /** 370 * Registers Groups personal data exporter. 371 * 372 * @since 4.0.0 373 * 374 * @param array $exporters An array of personal data exporters. 375 * @return array An array of personal data exporters. 376 */ 377 function bp_groups_register_personal_data_exporter( $exporters ) { 378 $exporters['buddypress-groups'] = array( 379 'exporter_friendly_name' => __( 'BuddyPress Group Memberships', 'buddypress' ), 380 'callback' => 'bp_groups_personal_data_exporter', 381 ); 382 383 return $exporters; 384 } -
src/bp-groups/bp-groups-functions.php
diff --git src/bp-groups/bp-groups-functions.php src/bp-groups/bp-groups-functions.php index 24ca400f0..c878fa654 100644
function bp_remove_group_type_on_group_delete( $group_id = 0 ) { 2611 2611 bp_groups_set_group_type( $group_id, '' ); 2612 2612 } 2613 2613 add_action( 'groups_delete_group', 'bp_remove_group_type_on_group_delete' ); 2614 2615 /** 2616 * Finds and exports personal data associated with an email address from the Groups tables. 2617 * 2618 * @since 4.0.0 2619 * 2620 * @param string $email_address The user's email address. 2621 * @param int $page Batch number. 2622 * @return array An array of personal data. 2623 */ 2624 function bp_groups_personal_data_exporter( $email_address, $page ) { 2625 $email_address = trim( $email_address ); 2626 2627 $data_to_export = array(); 2628 2629 $user = get_user_by( 'email', $email_address ); 2630 2631 if ( ! $user ) { 2632 return array( 2633 'data' => array(), 2634 'done' => true, 2635 ); 2636 } 2637 2638 $user_groups = bp_get_user_groups( $user->id, array( 2639 'is_confirmed' => null, 2640 'is_admin' => null, 2641 'is_mod' => null, 2642 ) ); 2643 2644 $memberships = $invitations = $requests = $sent_invitations = array(); 2645 2646 foreach ( $user_groups as $user_group ) { 2647 $group = groups_get_group( $user_group->group_id ); 2648 2649 $item_data = array( 2650 array( 2651 'name' => __( 'Group Name', 'buddypress' ), 2652 'value' => bp_get_group_name( $group ), 2653 ), 2654 array( 2655 'name' => __( 'Group URL', 'buddypress' ), 2656 'value' => bp_get_group_permalink( $group ), 2657 ), 2658 ); 2659 2660 if ( $user_group->inviter_id ) { 2661 $item_data[] = array( 2662 'name' => __( 'Invited By', 'buddypress' ), 2663 'value' => bp_core_get_userlink( $user_group->inviter_id ), 2664 ); 2665 } 2666 2667 // Confirmed membership. 2668 if ( $user_group->is_confirmed ) { 2669 if ( $group->creator_id === $user->ID ) { 2670 $group_role = __( 'Creator', 'buddypress' ); 2671 } elseif ( $user_group->is_admin ) { 2672 $group_role = __( 'Admin', 'buddypress' ); 2673 } elseif ( $user_group->is_mod ) { 2674 $group_role = __( 'Moderator', 'buddypress' ); 2675 } else { 2676 $group_role = __( 'Member', 'buddypress' ); 2677 } 2678 2679 $item_data[] = array( 2680 'name' => __( 'Group Role', 'buddypress' ), 2681 'value' => $group_role, 2682 ); 2683 2684 $item_data[] = array( 2685 'name' => __( 'Date Joined', 'buddypress' ), 2686 'value' => $user_group->date_modified, 2687 ); 2688 2689 $memberships[ $user_group->group_id ] = $item_data; 2690 2691 // Pending invitation. 2692 } elseif ( $user_group->inviter_id ) { 2693 $item_data[] = array( 2694 'name' => __( 'Date Sent', 'buddypress' ), 2695 'value' => $user_group->date_modified, 2696 ); 2697 2698 $invitations[ $user_group->group_id ] = $item_data; 2699 2700 // Pending request. 2701 } else { 2702 $item_data[] = array( 2703 'name' => __( 'Date Sent', 'buddypress' ), 2704 'value' => $user_group->date_modified, 2705 ); 2706 2707 $requests[ $user_group->group_id ] = $item_data; 2708 } 2709 } 2710 2711 foreach ( $memberships as $group_id => $membership ) { 2712 $data_to_export[] = array( 2713 'group_id' => 'bp_groups_memberships', 2714 'group_label' => __( 'Group Memberships', 'buddypress' ), 2715 'item_id' => "bp-group-membership-{$group_id}", 2716 'data' => $membership, 2717 ); 2718 } 2719 2720 foreach ( $invitations as $group_id => $invitation ) { 2721 $data_to_export[] = array( 2722 'group_id' => 'bp_groups_invitations', 2723 'group_label' => __( 'Pending Group Invitations (Received)', 'buddypress' ), 2724 'item_id' => "bp-group-pending-invitation-{$group_id}", 2725 'data' => $invitation, 2726 ); 2727 } 2728 2729 foreach ( $requests as $group_id => $request ) { 2730 $data_to_export[] = array( 2731 'group_id' => 'bp_groups_requests', 2732 'group_label' => __( 'Pending Group Membership Requests', 'buddypress' ), 2733 'item_id' => "bp-group-request-{$group_id}", 2734 'data' => $request, 2735 ); 2736 } 2737 2738 return array( 2739 'data' => $data_to_export, 2740 'done' => true, 2741 ); 2742 } -
src/bp-groups/classes/class-bp-group-member-query.php
diff --git src/bp-groups/classes/class-bp-group-member-query.php src/bp-groups/classes/class-bp-group-member-query.php index d872810e3..d405420a7 100644
class BP_Group_Member_Query extends BP_User_Query { 136 136 /* WHERE clauses *****************************************************/ 137 137 138 138 // Group id. 139 $group_ids = wp_parse_id_list( $this->query_vars['group_id'] ); 140 $group_ids = implode( ',', $group_ids ); 141 $sql['where'][] = "group_id IN ({$group_ids})"; 139 if ( ! is_null( $this->query_vars['group_id'] ) ) { 140 $group_ids = wp_parse_id_list( $this->query_vars['group_id'] ); 141 $group_ids = implode( ',', $group_ids ); 142 $sql['where'][] = "group_id IN ({$group_ids})"; 143 } 142 144 143 145 // If is_confirmed. 144 $is_confirmed = ! empty( $this->query_vars['is_confirmed'] ) ? 1 : 0; 145 $sql['where'][] = $wpdb->prepare( "is_confirmed = %d", $is_confirmed ); 146 if ( ! is_null( $this->query_vars['is_confirmed'] ) ) { 147 $is_confirmed = ! empty( $this->query_vars['is_confirmed'] ) ? 1 : 0; 148 $sql['where'][] = $wpdb->prepare( "is_confirmed = %d", $is_confirmed ); 149 } 146 150 147 151 // If invite_sent. 148 152 if ( ! is_null( $this->query_vars['invite_sent'] ) ) { -
src/bp-groups/classes/class-bp-groups-member.php
diff --git src/bp-groups/classes/class-bp-groups-member.php src/bp-groups/classes/class-bp-groups-member.php index ba493fc3c..d7b7b28c3 100644
class BP_Groups_Member { 825 825 return $count; 826 826 } 827 827 828 /** 829 * Gets all invitations sent by a user. 830 * 831 * @since 4.0.0 832 * 833 * @param int $inviter_id ID of the inviting user. 834 * @return array 835 */ 836 public static function get_sent_invites( $inviter_id ) { 837 global $wpdb; 838 839 $bp = buddypress(); 840 841 $sent_invites = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$bp->groups->table_name_members} WHERE inviter_id = %d", $inviter_id ) ); 842 843 foreach ( $sent_invites as &$sent_invite ) { 844 $sent_invite->id = (int) $sent_invite->id; 845 $sent_invite->group_id = (int) $sent_invite->group_id; 846 $sent_invite->user_id = (int) $sent_invite->user_id; 847 $sent_invite->inviter_id = (int) $sent_invite->inviter_id; 848 $sent_invite->is_admin = (int) $sent_invite->is_admin; 849 $sent_invite->is_mod = (int) $sent_invite->is_mod; 850 $sent_invite->is_banned = (int) $sent_invite->is_banned; 851 $sent_invite->is_confirmed = (int) $sent_invite->is_confirmed; 852 $sent_invite->invite_sent = (int) $sent_invite->invite_sent; 853 } 854 855 return array( 856 'invites' => $sent_invites, 857 'total' => count( $sent_invites ), 858 ); 859 } 860 828 861 /** 829 862 * Check whether a user has an outstanding invitation to a given group. 830 863 * -
tests/phpunit/testcases/groups/functions.php
diff --git tests/phpunit/testcases/groups/functions.php tests/phpunit/testcases/groups/functions.php index fddbc0bdc..2736dd323 100644
Bar!'; 849 849 $this->assertNull( groups_get_id_by_previous_slug( 'woohoo' ) ); 850 850 } 851 851 852 /** 853 * @ticket BP7820 854 * @ticket BP7698 855 */ 856 public function test_bp_groups_personal_data_exporter() { 857 $u1 = self::factory()->user->create(); 858 $u2 = self::factory()->user->create(); 859 860 $groups = self::factory()->group->create_many( 4 ); 861 foreach ( $groups as $group_id ) { 862 groups_update_groupmeta( $group_id, 'last_activity', bp_core_current_time() ); 863 groups_update_groupmeta( $group_id, 'total_member_count', 1 ); 864 } 865 866 // Membership. 867 groups_join_group( $groups[0], $u1 ); 868 869 // Invitation. 870 groups_invite_user( array( 871 'user_id' => $u1, 872 'group_id' => $groups[1], 873 'inviter_id' => $u2, 874 ) ); 875 876 // Request. 877 groups_send_membership_request( $u1, $groups[2] ); 878 879 // Sent invitation. 880 groups_invite_user( array( 881 'user_id' => $u2, 882 'group_id' => $groups[3], 883 'inviter_id' => $u1, 884 ) ); 885 groups_send_invites( $u1, $groups[3] ); 886 887 $test_user = new WP_User( $u1 ); 888 889 $actual = bp_groups_personal_data_exporter( $test_user->user_email, 1 ); 890 print_r( $actual ); die; 891 892 $this->assertTrue( $actual['done'] ); 893 894 // Number of exported activity items. 895 $this->assertSame( 3, count( $actual['data'] ) ); 896 } 852 897 }