Skip to:
Content

BuddyPress.org

Changeset 12158


Ignore:
Timestamp:
06/04/2018 07:58:30 PM (7 years ago)
Author:
boonebgorges
Message:

Add data exporter for Notifications component.

See #7827.

Location:
trunk
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-notifications/bp-notifications-functions.php

    r11933 r12158  
    795795    return $retval;
    796796}
     797
     798/**
     799 * Finds and exports personal data associated with an email address from the Notifications tables.
     800 *
     801 * @since 4.0.0
     802 *
     803 * @param string $email_address  The users email address.
     804 * @param int    $page           Batch number.
     805 * @return array An array of personal data.
     806 */
     807function bp_notifications_personal_data_exporter( $email_address, $page ) {
     808    $number = 50;
     809
     810    $email_address = trim( $email_address );
     811
     812    $data_to_export = array();
     813
     814    $user = get_user_by( 'email', $email_address );
     815
     816    if ( ! $user ) {
     817        return array(
     818            'data' => array(),
     819            'done' => true,
     820        );
     821    }
     822
     823    $notifications = BP_Notifications_Notification::get( array(
     824        'is_new'   => null,
     825        'per_page' => $number,
     826        'page'     => $page,
     827        'user_id'  => $user->ID,
     828        'order'    => 'DESC',
     829    ) );
     830
     831    $user_data_to_export = array();
     832
     833    foreach ( $notifications as $notification ) {
     834        if ( 'xprofile' === $notification->component_name ) {
     835            $component_name = 'profile';
     836        } else {
     837            $component_name = $notification->component_name;
     838        }
     839
     840        // Format notifications.
     841        if ( isset( buddypress()->{$component_name}->notification_callback ) && is_callable( buddypress()->{$component_name}->notification_callback ) ) {
     842            $content = call_user_func( buddypress()->{$component_name}->notification_callback, $notification->component_action, $notification->item_id, $notification->secondary_item_id, 1, 'string', $notification->id );
     843        } else {
     844            // The array to reference with apply_filters_ref_array().
     845            $ref_array = array(
     846                $notification->component_action,
     847                $notification->item_id,
     848                $notification->secondary_item_id,
     849                $notification->total_count,
     850                'string',
     851                $notification->component_action,
     852                $component_name,
     853                $notification_item->id,
     854            );
     855
     856            /** This filter is documented in bp-notifications/bp-notifications-functions.php */
     857            $content = apply_filters_ref_array( 'bp_notifications_get_notifications_for_user', $ref_array );
     858        }
     859
     860        $item_data = array(
     861            array(
     862                'name'  => __( 'Notification Content', 'buddypress' ),
     863                'value' => $content,
     864            ),
     865            array(
     866                'name'  => __( 'Notification Date', 'buddypress' ),
     867                'value' => $notification->date_notified,
     868            ),
     869            array(
     870                'name'  => __( 'Status', 'buddypress' ),
     871                'value' => $notification->is_new ? __( 'Unread', 'buddypress' ) : __( 'Read', 'buddypress' ),
     872            ),
     873        );
     874
     875        $data_to_export[] = array(
     876            'group_id'    => 'bp_notifications',
     877            'group_label' => __( 'Notifications' ),
     878            'item_id'     => "bp-notifications-{$notification->id}",
     879            'data'        => $item_data,
     880        );
     881    }
     882
     883    // Tell core if we have more items to process.
     884    $done = count( $notifications ) < $number;
     885
     886    return array(
     887        'data' => $data_to_export,
     888        'done' => $done,
     889    );
     890}
  • trunk/src/bp-notifications/classes/class-bp-notifications-component.php

    r11933 r12158  
    4747            'adminbar',
    4848            'template',
     49            'filters',
    4950            'functions',
    5051            'cache',
  • trunk/tests/phpunit/testcases/notifications/functions.php

    r11888 r12158  
    433433        $this->assertEquals( 2, $found[0]->total_count );
    434434    }
     435
     436    /**
     437     * @ticket BP7827
     438     */
     439    public function test_bp_notifications_personal_data_exporter() {
     440        $u = self::factory()->user->create();
     441
     442        // Create notifications
     443        $n1 = self::factory()->notification->create( array(
     444            'component_name'    => 'messages',
     445            'component_action'  => 'new_message',
     446            'item_id'           => 99,
     447            'user_id'           => $u,
     448        ) );
     449
     450        $n2 = self::factory()->notification->create( array(
     451            'component_name'    => 'activity',
     452            'component_action'  => 'new_at_mention',
     453            'item_id'           => 99,
     454            'user_id'           => $u,
     455        ) );
     456
     457        $test_user = new WP_User( $u );
     458
     459        $actual = bp_notifications_personal_data_exporter( $test_user->user_email, 1 );
     460
     461        $this->assertTrue( $actual['done'] );
     462
     463        // Number of exported notification items.
     464        $this->assertSame( 2, count( $actual['data'] ) );
     465    }
    435466}
Note: See TracChangeset for help on using the changeset viewer.