Changeset 12163
- Timestamp:
- 06/04/2018 08:52:12 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/bp-groups/bp-groups-filters.php
r11970 r12163 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 77 // Personal data export. 78 add_filter( 'wp_privacy_personal_data_exporters', 'bp_groups_register_personal_data_exporters' ); 76 79 77 80 /** … … 363 366 } 364 367 add_filter( 'bp_user_can', 'bp_groups_user_can_filter', 10, 5 ); 368 369 /** 370 * Registers Groups personal data exporters. 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_exporters( $exporters ) { 378 $exporters['buddypress-groups-memberships'] = array( 379 'exporter_friendly_name' => __( 'BuddyPress Group Memberships', 'buddypress' ), 380 'callback' => 'bp_groups_memberships_personal_data_exporter', 381 ); 382 383 $exporters['buddypress-groups-pending-requests'] = array( 384 'exporter_friendly_name' => __( 'BuddyPress Pending Group Membership Requests', 'buddypress' ), 385 'callback' => 'bp_groups_pending_requests_personal_data_exporter', 386 ); 387 388 $exporters['buddypress-groups-pending-received-invitations'] = array( 389 'exporter_friendly_name' => __( 'BuddyPress Pending Group Invitations (Received)', 'buddypress' ), 390 'callback' => 'bp_groups_pending_received_invitations_personal_data_exporter', 391 ); 392 393 $exporters['buddypress-groups-pending-sent-invitations'] = array( 394 'exporter_friendly_name' => __( 'BuddyPress Pending Group Invitations (Sent)', 'buddypress' ), 395 'callback' => 'bp_groups_pending_sent_invitations_personal_data_exporter', 396 ); 397 398 return $exporters; 399 } -
trunk/src/bp-groups/bp-groups-functions.php
r12126 r12163 2639 2639 } 2640 2640 add_action( 'groups_delete_group', 'bp_remove_group_type_on_group_delete' ); 2641 2642 /** 2643 * Finds and exports group membership data associated with an email address. 2644 * 2645 * @since 4.0.0 2646 * 2647 * @param string $email_address The user's email address. 2648 * @param int $page Batch number. 2649 * @return array An array of personal data. 2650 */ 2651 function bp_groups_memberships_personal_data_exporter( $email_address, $page ) { 2652 $number = 20; 2653 2654 $email_address = trim( $email_address ); 2655 2656 $data_to_export = array(); 2657 2658 $user = get_user_by( 'email', $email_address ); 2659 2660 if ( ! $user ) { 2661 return array( 2662 'data' => array(), 2663 'done' => true, 2664 ); 2665 } 2666 2667 $memberships = BP_Groups_Member::get_user_memberships( $user->ID, array( 2668 'type' => 'membership', 2669 'page' => $page, 2670 'per_page' => $number, 2671 ) ); 2672 2673 foreach ( $memberships as $membership ) { 2674 $group = groups_get_group( $membership->group_id ); 2675 2676 $item_data = array( 2677 array( 2678 'name' => __( 'Group Name', 'buddypress' ), 2679 'value' => bp_get_group_name( $group ), 2680 ), 2681 array( 2682 'name' => __( 'Group URL', 'buddypress' ), 2683 'value' => bp_get_group_permalink( $group ), 2684 ), 2685 ); 2686 2687 if ( $membership->inviter_id ) { 2688 $item_data[] = array( 2689 'name' => __( 'Invited By', 'buddypress' ), 2690 'value' => bp_core_get_userlink( $membership->inviter_id ), 2691 ); 2692 } 2693 2694 if ( $group->creator_id === $user->ID ) { 2695 $group_role = __( 'Creator', 'buddypress' ); 2696 } elseif ( $membership->is_admin ) { 2697 $group_role = __( 'Admin', 'buddypress' ); 2698 } elseif ( $membership->is_mod ) { 2699 $group_role = __( 'Moderator', 'buddypress' ); 2700 } else { 2701 $group_role = __( 'Member', 'buddypress' ); 2702 } 2703 2704 $item_data[] = array( 2705 'name' => __( 'Group Role', 'buddypress' ), 2706 'value' => $group_role, 2707 ); 2708 2709 $item_data[] = array( 2710 'name' => __( 'Date Joined', 'buddypress' ), 2711 'value' => $membership->date_modified, 2712 ); 2713 2714 $data_to_export[] = array( 2715 'group_id' => 'bp_groups_memberships', 2716 'group_label' => __( 'Group Memberships', 'buddypress' ), 2717 'item_id' => "bp-group-membership-{$group->id}", 2718 'data' => $item_data, 2719 ); 2720 } 2721 2722 // Tell core if we have more items to process. 2723 $done = count( $memberships ) < $number; 2724 2725 return array( 2726 'data' => $data_to_export, 2727 'done' => $done, 2728 ); 2729 } 2730 2731 /** 2732 * Finds and exports data on pending group membership requests associated with an email address. 2733 * 2734 * @since 4.0.0 2735 * 2736 * @param string $email_address The user's email address. 2737 * @param int $page Batch number. 2738 * @return array An array of personal data. 2739 */ 2740 function bp_groups_pending_requests_personal_data_exporter( $email_address, $page ) { 2741 $number = 20; 2742 2743 $email_address = trim( $email_address ); 2744 2745 $data_to_export = array(); 2746 2747 $user = get_user_by( 'email', $email_address ); 2748 2749 if ( ! $user ) { 2750 return array( 2751 'data' => array(), 2752 'done' => true, 2753 ); 2754 } 2755 2756 $requests = BP_Groups_Member::get_user_memberships( $user->ID, array( 2757 'type' => 'pending_request', 2758 'page' => $page, 2759 'per_page' => $number, 2760 ) ); 2761 2762 foreach ( $requests as $request ) { 2763 $group = groups_get_group( $request->group_id ); 2764 2765 $item_data = array( 2766 array( 2767 'name' => __( 'Group Name', 'buddypress' ), 2768 'value' => bp_get_group_name( $group ), 2769 ), 2770 array( 2771 'name' => __( 'Group URL', 'buddypress' ), 2772 'value' => bp_get_group_permalink( $group ), 2773 ), 2774 array( 2775 'name' => __( 'Date Sent', 'buddypress' ), 2776 'value' => $request->date_modified, 2777 ), 2778 ); 2779 2780 $data_to_export[] = array( 2781 'group_id' => 'bp_groups_pending_requests', 2782 'group_label' => __( 'Pending Group Membership Requests', 'buddypress' ), 2783 'item_id' => "bp-group-pending-request-{$group->id}", 2784 'data' => $item_data, 2785 ); 2786 } 2787 2788 // Tell core if we have more items to process. 2789 $done = count( $requests ) < $number; 2790 2791 return array( 2792 'data' => $data_to_export, 2793 'done' => $done, 2794 ); 2795 } 2796 2797 /** 2798 * Finds and exports data on pending group invitations sent by a user associated with an email address. 2799 * 2800 * @since 4.0.0 2801 * 2802 * @param string $email_address The user's email address. 2803 * @param int $page Batch number. 2804 * @return array An array of personal data. 2805 */ 2806 function bp_groups_pending_sent_invitations_personal_data_exporter( $email_address, $page ) { 2807 $number = 20; 2808 2809 $email_address = trim( $email_address ); 2810 2811 $data_to_export = array(); 2812 2813 $user = get_user_by( 'email', $email_address ); 2814 2815 if ( ! $user ) { 2816 return array( 2817 'data' => array(), 2818 'done' => true, 2819 ); 2820 } 2821 2822 $invitations = BP_Groups_Member::get_user_memberships( $user->ID, array( 2823 'type' => 'pending_sent_invitation', 2824 'page' => $page, 2825 'per_page' => $number, 2826 ) ); 2827 2828 foreach ( $invitations as $invitation ) { 2829 $group = groups_get_group( $invitation->group_id ); 2830 2831 $item_data = array( 2832 array( 2833 'name' => __( 'Group Name', 'buddypress' ), 2834 'value' => bp_get_group_name( $group ), 2835 ), 2836 array( 2837 'name' => __( 'Group URL', 'buddypress' ), 2838 'value' => bp_get_group_permalink( $group ), 2839 ), 2840 array( 2841 'name' => __( 'Sent To', 'buddypress' ), 2842 'value' => bp_core_get_userlink( $invitation->user_id ), 2843 ), 2844 array( 2845 'name' => __( 'Date Sent', 'buddypress' ), 2846 'value' => $invitation->date_modified, 2847 ), 2848 ); 2849 2850 $data_to_export[] = array( 2851 'group_id' => 'bp_groups_pending_sent_invitations', 2852 'group_label' => __( 'Pending Group Invitations (Sent)', 'buddypress' ), 2853 'item_id' => "bp-group-pending-sent-invitation-{$group->id}", 2854 'data' => $item_data, 2855 ); 2856 } 2857 2858 // Tell core if we have more items to process. 2859 $done = count( $invitations ) < $number; 2860 2861 return array( 2862 'data' => $data_to_export, 2863 'done' => $done, 2864 ); 2865 } 2866 2867 /** 2868 * Finds and exports data on pending group invitations received by a user associated with an email address. 2869 * 2870 * @since 4.0.0 2871 * 2872 * @param string $email_address The user's email address. 2873 * @param int $page Batch number. 2874 * @return array An array of personal data. 2875 */ 2876 function bp_groups_pending_received_invitations_personal_data_exporter( $email_address, $page ) { 2877 $number = 20; 2878 2879 $email_address = trim( $email_address ); 2880 2881 $data_to_export = array(); 2882 2883 $user = get_user_by( 'email', $email_address ); 2884 2885 if ( ! $user ) { 2886 return array( 2887 'data' => array(), 2888 'done' => true, 2889 ); 2890 } 2891 2892 $invitations = BP_Groups_Member::get_user_memberships( $user->ID, array( 2893 'type' => 'pending_received_invitation', 2894 'page' => $page, 2895 'per_page' => $number, 2896 ) ); 2897 2898 foreach ( $invitations as $invitation ) { 2899 $group = groups_get_group( $invitation->group_id ); 2900 2901 $item_data = array( 2902 array( 2903 'name' => __( 'Group Name', 'buddypress' ), 2904 'value' => bp_get_group_name( $group ), 2905 ), 2906 array( 2907 'name' => __( 'Group URL', 'buddypress' ), 2908 'value' => bp_get_group_permalink( $group ), 2909 ), 2910 array( 2911 'name' => __( 'Invited By', 'buddypress' ), 2912 'value' => bp_core_get_userlink( $invitation->inviter_id ), 2913 ), 2914 array( 2915 'name' => __( 'Date Sent', 'buddypress' ), 2916 'value' => $invitation->date_modified, 2917 ), 2918 ); 2919 2920 $data_to_export[] = array( 2921 'group_id' => 'bp_groups_pending_received_invitations', 2922 'group_label' => __( 'Pending Group Invitations (Received)', 'buddypress' ), 2923 'item_id' => "bp-group-pending-received-invitation-{$group->id}", 2924 'data' => $item_data, 2925 ); 2926 } 2927 2928 // Tell core if we have more items to process. 2929 $done = count( $invitations ) < $number; 2930 2931 return array( 2932 'data' => $data_to_export, 2933 'done' => $done, 2934 ); 2935 } -
trunk/tests/phpunit/testcases/groups/functions.php
r11737 r12163 6 6 */ 7 7 class BP_Tests_Groups_Functions extends BP_UnitTestCase { 8 static public $group_ids; 9 static public $user_ids; 10 11 static public function wpSetUpBeforeClass( $factory ) { 12 self::$user_ids = $factory->user->create_many( 3 ); 13 self::$group_ids = $factory->group->create_many( 2, array( 14 'creator_id' => self::$user_ids[2], 15 ) ); 16 } 17 18 static public function wpTearDownAfterClass() { 19 array_map( array( __CLASS__, 'delete_user' ), self::$user_ids ); 20 array_map( 'groups_delete_group', self::$group_ids ); 21 } 22 8 23 public function test_creating_new_group_as_authenticated_user() { 9 24 $u = self::factory()->user->create(); … … 850 865 } 851 866 867 /** 868 * @ticket BP7820 869 * @ticket BP7698 870 */ 871 public function test_bp_groups_memberships_personal_data_exporter() { 872 groups_join_group( self::$group_ids[0], self::$user_ids[0] ); 873 874 $test_user = new WP_User( self::$user_ids[0] ); 875 876 $actual = bp_groups_memberships_personal_data_exporter( $test_user->user_email, 1 ); 877 878 $this->assertTrue( $actual['done'] ); 879 $this->assertCount( 1, $actual['data'] ); 880 $this->assertSame( 'bp-group-membership-' . self::$group_ids[0], $actual['data'][0]['item_id'] ); 881 } 882 883 /** 884 * @ticket BP7820 885 * @ticket BP7698 886 */ 887 public function test_bp_groups_pending_requests_personal_data_exporter() { 888 groups_send_membership_request( self::$user_ids[0], self::$group_ids[0] ); 889 890 $test_user = new WP_User( self::$user_ids[0] ); 891 892 $actual = bp_groups_pending_requests_personal_data_exporter( $test_user->user_email, 1 ); 893 894 $this->assertTrue( $actual['done'] ); 895 $this->assertCount( 1, $actual['data'] ); 896 $this->assertSame( 'bp-group-pending-request-' . self::$group_ids[0], $actual['data'][0]['item_id'] ); 897 } 898 899 /** 900 * @ticket BP7820 901 * @ticket BP7698 902 */ 903 public function test_bp_groups_pending_sent_invitations_personal_data_exporter() { 904 groups_invite_user( array( 905 'user_id' => self::$user_ids[1], 906 'group_id' => self::$group_ids[0], 907 'inviter_id' => self::$user_ids[0], 908 ) ); 909 910 $test_user = new WP_User( self::$user_ids[0] ); 911 912 $actual = bp_groups_pending_sent_invitations_personal_data_exporter( $test_user->user_email, 1 ); 913 914 $this->assertTrue( $actual['done'] ); 915 $this->assertCount( 1, $actual['data'] ); 916 $this->assertSame( 'bp-group-pending-sent-invitation-' . self::$group_ids[0], $actual['data'][0]['item_id'] ); 917 } 918 919 /** 920 * @ticket BP7820 921 * @ticket BP7698 922 */ 923 public function test_bp_groups_pending_received_invitations_personal_data_exporter() { 924 groups_invite_user( array( 925 'user_id' => self::$user_ids[0], 926 'group_id' => self::$group_ids[0], 927 'inviter_id' => self::$user_ids[1], 928 ) ); 929 930 $test_user = new WP_User( self::$user_ids[0] ); 931 932 $actual = bp_groups_pending_received_invitations_personal_data_exporter( $test_user->user_email, 1 ); 933 934 $this->assertTrue( $actual['done'] ); 935 $this->assertCount( 1, $actual['data'] ); 936 $this->assertSame( 'bp-group-pending-received-invitation-' . self::$group_ids[0], $actual['data'][0]['item_id'] ); 937 } 852 938 }
Note: See TracChangeset
for help on using the changeset viewer.