Skip to:
Content

BuddyPress.org

Changeset 12163


Ignore:
Timestamp:
06/04/2018 08:52:12 PM (7 years ago)
Author:
boonebgorges
Message:

Add data exporters for Groups component.

See #7820.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-groups/bp-groups-filters.php

    r11970 r12163  
    7474add_filter( 'bp_core_avatar_default',       'bp_groups_default_avatar', 10, 3 );
    7575add_filter( 'bp_core_avatar_default_thumb', 'bp_groups_default_avatar', 10, 3 );
     76
     77// Personal data export.
     78add_filter( 'wp_privacy_personal_data_exporters', 'bp_groups_register_personal_data_exporters' );
    7679
    7780/**
     
    363366}
    364367add_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 */
     377function 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  
    26392639}
    26402640add_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 */
     2651function 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 */
     2740function 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 */
     2806function 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 */
     2876function 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  
    66 */
    77class 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
    823    public function test_creating_new_group_as_authenticated_user() {
    924        $u = self::factory()->user->create();
     
    850865    }
    851866
     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    }
    852938}
Note: See TracChangeset for help on using the changeset viewer.