Ticket #7819: 7819.diff
File 7819.diff, 6.3 KB (added by , 6 years ago) |
---|
-
src/bp-messages/bp-messages-filters.php
diff --git src/bp-messages/bp-messages-filters.php src/bp-messages/bp-messages-filters.php index 05ca3eee3..bc501df7b 100644
add_filter( 'bp_get_the_thread_message_content', 'stripslashes_deep' ); 79 79 add_filter( 'bp_get_the_thread_subject', 'stripslashes_deep' ); 80 80 add_filter( 'bp_get_message_thread_content', 'stripslashes_deep', 1 ); 81 81 82 // Personal data export. 83 add_filter( 'wp_privacy_personal_data_exporters', 'bp_messages_register_personal_data_exporter' ); 84 82 85 /** 83 86 * Enforce limitations on viewing private message contents 84 87 * … … function bp_messages_filter_kses( $content ) { 126 129 $messages_allowedtags = apply_filters( 'bp_messages_allowed_tags', $messages_allowedtags ); 127 130 return wp_kses( $content, $messages_allowedtags ); 128 131 } 132 133 /** 134 * Register Messages personal data exporter. 135 * 136 * @since 4.0.0 137 * 138 * @param array $exporters An array of personal data exporters. 139 * @return array An array of personal data exporters. 140 */ 141 function bp_messages_register_personal_data_exporter( $exporters ) { 142 $exporters['buddypress-messages'] = array( 143 'exporter_friendly_name' => __( 'BuddyPress Messages', 'buddypress' ), 144 'callback' => 'bp_messages_personal_data_exporter', 145 ); 146 147 return $exporters; 148 } -
src/bp-messages/bp-messages-functions.php
diff --git src/bp-messages/bp-messages-functions.php src/bp-messages/bp-messages-functions.php index 6699597b4..c0ff5e2b9 100644
function messages_notification_new_message( $raw_args = array() ) { 624 624 do_action( 'bp_messages_sent_notification_email', $recipients, '', '', $args ); 625 625 } 626 626 add_action( 'messages_message_sent', 'messages_notification_new_message', 10 ); 627 628 /** 629 * Finds and exports personal data associated with an email address from the Messages tables. 630 * 631 * @since 4.0.0 632 * 633 * @param string $email_address The user's email address. 634 * @param int $page Batch number. 635 * @return array An array of personal data. 636 */ 637 function bp_messages_personal_data_exporter( $email_address, $page ) { 638 $number = 10; 639 640 $email_address = trim( $email_address ); 641 642 $data_to_export = array(); 643 644 $user = get_user_by( 'email', $email_address ); 645 646 if ( ! $user ) { 647 return array( 648 'data' => array(), 649 'done' => true, 650 ); 651 } 652 653 $user_data_to_export = array(); 654 655 $user_threads = BP_Messages_Thread::get_current_threads_for_user( array( 656 'user_id' => $user->ID, 657 'box' => 'sentbox', 658 'type' => null, 659 'limit' => $number, 660 'page' => $page, 661 ) ); 662 663 foreach ( $user_threads['threads'] as $thread ) { 664 $recipient_links = array(); 665 foreach ( $thread->recipients as $recipient ) { 666 if ( $recipient->user_id === $user->ID ) { 667 continue; 668 } 669 670 $recipient_links[] = bp_core_get_userlink( $recipient->user_id ); 671 } 672 $recipients = implode( ', ', $recipient_links ); 673 674 $thread_link = bp_get_message_thread_view_link( $thread->thread_id, $user->ID ); 675 676 foreach ( $thread->messages as $message_index => $message ) { 677 // Only include messages written by the user. 678 if ( $recipient->user_id !== $message->sender_id ) { 679 continue; 680 } 681 682 $message_data = array( 683 array( 684 'name' => __( 'Message Subject', 'buddypress' ), 685 'value' => $message->subject, 686 ), 687 array( 688 'name' => __( 'Message Content', 'buddypress' ), 689 'value' => $message->message, 690 ), 691 array( 692 'name' => __( 'Date Sent', 'buddypress' ), 693 'value' => $message->date_sent, 694 ), 695 array( 696 'name' => __( 'Recipients', 'buddypress' ), 697 'value' => $recipients, 698 ), 699 array( 700 'name' => __( 'Thread URL', 'buddypress' ), 701 'value' => $thread_link, 702 ), 703 ); 704 705 $data_to_export[] = array( 706 'group_id' => 'bp_messages', 707 'group_label' => __( 'Private Messages', 'buddypress' ), 708 'item_id' => "bp-messages-{$message->id}", 709 'data' => $message_data, 710 ); 711 } 712 } 713 714 return array( 715 'data' => $data_to_export, 716 'done' => true, 717 ); 718 } -
tests/phpunit/testcases/messages/functions.php
diff --git tests/phpunit/testcases/messages/functions.php tests/phpunit/testcases/messages/functions.php index 108b444ab..4af19fcb3 100644
class BP_Tests_Messages_Functions extends BP_UnitTestCase { 89 89 public function remove_recipients_before_save( $message ) { 90 90 $message->recipients = array(); 91 91 } 92 93 /** 94 * @ticket BP7819 95 * @ticket BP7698 96 */ 97 public function test_bp_messages_personal_data_exporter() { 98 $u1 = self::factory()->user->create(); 99 $u2 = self::factory()->user->create(); 100 101 $time = time(); 102 103 $t1 = messages_new_message( array( 104 'sender_id' => $u1, 105 'recipients' => array( $u2 ), 106 'subject' => 'A new message', 107 'content' => 'Hey there!', 108 'date_sent' => date( 'Y-m-d H:i:s', $time - ( 3 * HOUR_IN_SECONDS ) ), 109 ) ); 110 111 $t1m1 = messages_new_message( array( 112 'sender_id' => $u2, 113 'thread_id' => $t1, 114 'recipients' => array( $u1 ), 115 'subject' => 'Reply to ' . $t1, 116 'content' => 'Hey there!', 117 'date_sent' => date( 'Y-m-d H:i:s', $time - ( 2 * HOUR_IN_SECONDS ) ), 118 ) ); 119 120 $t1m2 = messages_new_message( array( 121 'sender_id' => $u1, 122 'thread_id' => $t1, 123 'recipients' => array( $u2 ), 124 'subject' => 'Reply to ' . $t1, 125 'content' => 'Hey there!', 126 'date_sent' => date( 'Y-m-d H:i:s', $time - ( 2 * HOUR_IN_SECONDS ) ), 127 ) ); 128 129 $t2 = messages_new_message( array( 130 'sender_id' => $u2, 131 'recipients' => array( $u1 ), 132 'subject' => 'A new message', 133 'content' => 'Hey there!', 134 'date_sent' => date( 'Y-m-d H:i:s', $time - ( 5 * HOUR_IN_SECONDS ) ), 135 ) ); 136 137 $t2m1 = messages_new_message( array( 138 'sender_id' => $u1, 139 'thread_id' => $t2, 140 'recipients' => array( $u2 ), 141 'subject' => 'Reply to ' . $t2, 142 'content' => 'Hey there!', 143 'date_sent' => date( 'Y-m-d H:i:s', $time - ( 4 * HOUR_IN_SECONDS ) ), 144 ) ); 145 146 $test_user = new WP_User( $u1 ); 147 148 $actual = bp_messages_personal_data_exporter( $test_user->user_email, 1 ); 149 150 $this->assertTrue( $actual['done'] ); 151 152 // Number of exported messages. 153 $this->assertSame( 3, count( $actual['data'] ) ); 154 } 92 155 }