WordPress.org

Make WordPress Core

Ticket #43985: 43985.5.diff

File 43985.5.diff, 11.8 KB (added by desrosj, 17 months ago)
  • src/wp-includes/user.php

     
    30513051        $content = str_replace( '###MANAGE_URL###', esc_url_raw( $email_data['manage_url'] ), $content );
    30523052        $content = str_replace( '###SITEURL###', esc_url_raw( $email_data['siteurl'] ), $content );
    30533053
     3054        // Localize message content for user; fallback to site default for visitors.
     3055        $switched_locales = switch_to_locale( get_user_locale( $request_data->user_id ) );
     3056
    30543057        $subject = sprintf(
    30553058                /* translators: 1: Site name. 2: Name of the confirmed action. */
    30563059                __( '[%1$s] Action Confirmed: %2$s' ),
     
    32213224        if ( $email_sent ) {
    32223225                update_post_meta( $request_id, '_wp_user_notified', true );
    32233226        }
     3227
     3228        if ( $switched_locales ) {
     3229                restore_current_locale();
     3230        }
    32243231}
    32253232
    32263233/**
     
    33673374                return new WP_Error( 'user_request_error', __( 'Invalid request.' ) );
    33683375        }
    33693376
     3377        // Localize message content for user; fallback to site default for visitors.
     3378        $switched_locales = switch_to_locale( get_user_locale( $request->user_id ) );
     3379
    33703380        $email_data = array(
    33713381                'request'     => $request,
    33723382                'email'       => $request->email,
     
    34543464         */
    34553465        $subject = apply_filters( 'user_request_action_email_subject', $subject, $email_data['sitename'], $email_data );
    34563466
    3457         return wp_mail( $email_data['email'], $subject, $content );
     3467        $email_sent = wp_mail( $email_data['email'], $subject, $content );
     3468
     3469        if ( $switched_locales ) {
     3470                restore_current_locale();
     3471        }
     3472
     3473        return $email_sent;
    34583474}
    34593475
    34603476/**
  • tests/phpunit/data/languages/es_ES.po

    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
     
    1 # Translation of Development (4.4.x) in Spanish (Spain)
    2 # This file is distributed under the same license as the Development (4.4.x) package.
     1# Translation of Development (4.9.x) in Spanish (Spain)
     2# This file is distributed under the same license as the Development (4.9.x) package.
    33msgid ""
    44msgstr ""
    5 "PO-Revision-Date: 2016-10-25 18:28+0200\n"
     5"PO-Revision-Date: 2018-07-25 10:48-0400\n"
    66"MIME-Version: 1.0\n"
    77"Content-Type: text/plain; charset=UTF-8\n"
    88"Content-Transfer-Encoding: 8bit\n"
    99"Plural-Forms: nplurals=2; plural=n != 1;\n"
    10 "X-Generator: Poedit 1.8.10\n"
    11 "Project-Id-Version: Development (4.4.x)\n"
     10"X-Generator: Poedit 2.1\n"
     11"Project-Id-Version: Development (4.9.x)\n"
    1212"Language: es_ES\n"
    1313
    1414#. translators: 'rtl' or 'ltr'. This sets the text direction for WordPress.
     
    3636msgctxt "menu"
    3737msgid "(Currently set to: %s)"
    3838msgstr "(Actualmente fijado en: %s)"
     39
     40#. translators: Privacy data request subject. 1: Site name, 2: Name of the action
     41#: wp-includes/user.php:3445
     42msgid "[%1$s] Confirm Action: %2$s"
     43msgstr "[%1$s] Confirma la acción: %2$s"
  • tests/phpunit/tests/user/wpSendUserRequest.php

     
     1<?php
     2/**
     3 * Test cases for the `wp_send_user_request()` function.
     4 *
     5 * @package WordPress
     6 * @since 4.9.9
     7 */
     8
     9/**
     10 * Tests_User_WpSendUserRequest class.
     11 *
     12 * @since 4.9.9
     13 *
     14 * @group privacy
     15 * @group user
     16 * @covers wp_send_user_request
     17 */
     18class Tests_User_WpSendUserRequest extends WP_UnitTestCase {
     19        /**
     20         * Reset the mocked phpmailer instance before each test method.
     21         *
     22         * @since 4.9.9
     23         */
     24        public function setUp() {
     25                parent::setUp();
     26                reset_phpmailer_instance();
     27        }
     28
     29        /**
     30         * Reset the mocked phpmailer instance after each test method.
     31         *
     32         * @since 4.9.9
     33         */
     34        public function tearDown() {
     35                reset_phpmailer_instance();
     36                parent::tearDown();
     37        }
     38
     39        /**
     40         * The function should error when the request ID is invalid.
     41         *
     42         * @ticket 43985
     43         */
     44        public function test_function_should_error_when_invalid_request_id() {
     45                $request_id = null;
     46
     47                $email_sent = wp_send_user_request( $request_id );
     48
     49                $this->assertWPError( $email_sent );
     50                $this->assertSame( 'Invalid request.', $email_sent->get_error_message() );
     51        }
     52
     53        /**
     54         * The function should send a user request export email when the requester is a registered user.
     55         *
     56         * @ticket 43985
     57         */
     58        public function test_function_should_send_user_request_export_email_when_requester_registered_user() {
     59                $email      = 'export.request.from.user@example.com';
     60                $user_id    = $this->factory->user->create(
     61                        array(
     62                                'user_email' => $email,
     63                                'role'       => 'administrator',
     64                        )
     65                );
     66                $request_id = wp_create_user_request( $email, 'export_personal_data' );
     67
     68                $email_sent = wp_send_user_request( $request_id );
     69                $mailer     = tests_retrieve_phpmailer_instance();
     70
     71                $this->assertTrue( $email_sent );
     72                $this->assertSame( $email, $mailer->get_recipient( 'to' )->address );
     73                $this->assertContains( 'Confirm Action: Export Personal Data', $mailer->get_sent()->subject );
     74                $this->assertContains( 'action=confirmaction&request_id=', $mailer->get_sent()->body );
     75                $this->assertContains( 'Export Personal Data', $mailer->get_sent()->body );
     76        }
     77
     78        /**
     79         * The function should send a user request erase email when the requester is a registered user.
     80         *
     81         * @ticket 43985
     82         */
     83        public function test_function_should_send_user_request_erase_email_when_requester_registered_user() {
     84                $email      = 'erase.request.from.user@example.com';
     85                $user_id    = $this->factory->user->create(
     86                        array(
     87                                'user_email' => $email,
     88                                'role'       => 'author',
     89                        )
     90                );
     91                $request_id = wp_create_user_request( $email, 'remove_personal_data' );
     92
     93                $email_sent = wp_send_user_request( $request_id );
     94                $mailer     = tests_retrieve_phpmailer_instance();
     95
     96                $this->assertTrue( $email_sent );
     97                $this->assertSame( $email, $mailer->get_recipient( 'to' )->address );
     98                $this->assertContains( 'Confirm Action: Erase Personal Data', $mailer->get_sent()->subject );
     99                $this->assertContains( 'action=confirmaction&request_id=', $mailer->get_sent()->body );
     100                $this->assertContains( 'Erase Personal Data', $mailer->get_sent()->body );
     101        }
     102
     103        /**
     104         * The function should send a user request export email when the requester is an un-registered user.
     105         *
     106         * @ticket 43985
     107         */
     108        public function test_function_should_send_user_request_export_email_when_user_not_registered() {
     109                $email      = 'export.request.from.unregistered.user@example.com';
     110                $request_id = wp_create_user_request( $email, 'export_personal_data' );
     111
     112                $email_sent = wp_send_user_request( $request_id );
     113                $mailer     = tests_retrieve_phpmailer_instance();
     114
     115                $this->assertTrue( $email_sent );
     116                $this->assertSame( $email, $mailer->get_recipient( 'to' )->address );
     117                $this->assertContains( 'Confirm Action: Export Personal Data', $mailer->get_sent()->subject );
     118                $this->assertContains( 'action=confirmaction&request_id=', $mailer->get_sent()->body );
     119                $this->assertContains( 'Export Personal Data', $mailer->get_sent()->body );
     120        }
     121
     122        /**
     123         * The function should send a user request erase email when the requester is an un-registered user.
     124         *
     125         * @ticket 43985
     126         */
     127        public function test_function_should_send_user_request_erase_email_when_user_not_registered() {
     128                $email      = 'erase.request.from.unregistered.user@example.com';
     129                $request_id = wp_create_user_request( $email, 'remove_personal_data' );
     130
     131                $email_sent = wp_send_user_request( $request_id );
     132                $mailer     = tests_retrieve_phpmailer_instance();
     133
     134                $this->assertTrue( $email_sent );
     135                $this->assertSame( $email, $mailer->get_recipient( 'to' )->address );
     136                $this->assertContains( 'Confirm Action: Erase Personal Data', $mailer->get_sent()->subject );
     137                $this->assertContains( 'action=confirmaction&request_id=', $mailer->get_sent()->body );
     138                $this->assertContains( 'Erase Personal Data', $mailer->get_sent()->body );
     139        }
     140
     141        /**
     142         * The function should respect the user locale settings when the site does not have a locale.
     143         *
     144         * @ticket 43985
     145         */
     146        public function test_function_should_send_user_request_email_in_user_language() {
     147                $email      = 'export.request.from.user@example.com';
     148                $user_id    = $this->factory->user->create(
     149                        array(
     150                                'user_email' => $email,
     151                                'locale'     => 'es_ES',
     152                                'role'       => 'author',
     153                        )
     154                );
     155                $request_id = wp_create_user_request( $email, 'export_personal_data' );
     156
     157                $email_sent = wp_send_user_request( $request_id );
     158                $mailer     = tests_retrieve_phpmailer_instance();
     159
     160                $this->assertContains( 'Confirma la', $mailer->get_sent()->subject );
     161        }
     162
     163        /**
     164         * The function should respect the user locale settings when the site does not have a locale.
     165         *
     166         * @ticket 43985
     167         */
     168        public function test_function_should_send_user_request_email_in_user_language_not_default_site_locale() {
     169                update_option( 'WPLANG', 'es_ES' );
     170
     171                $email      = 'export.request.from.user@example.com';
     172                $user_id    = $this->factory->user->create(
     173                        array(
     174                                'user_email' => $email,
     175                                'locale'     => 'en_US',
     176                                'role'       => 'author',
     177                        )
     178                );
     179                $request_id = wp_create_user_request( $email, 'export_personal_data' );
     180
     181                $email_sent = wp_send_user_request( $request_id );
     182                $mailer     = tests_retrieve_phpmailer_instance();
     183
     184                $this->assertContains( 'Confirm Action', $mailer->get_sent()->subject );
     185
     186                delete_option( 'WPLANG' );
     187        }
     188
     189        /**
     190         * The email subject should be filterable.
     191         *
     192         * @ticket 43985
     193         */
     194        public function test_email_subject_should_be_filterable() {
     195                $email      = 'erase.request.from.user@example.com';
     196                $user_id    = $this->factory->user->create(
     197                        array(
     198                                'user_email' => $email,
     199                        )
     200                );
     201                $request_id = wp_create_user_request( $email, 'remove_personal_data' );
     202
     203                add_filter( 'user_request_action_email_subject', array( $this, 'modify_email_subject' ) );
     204                $email_sent = wp_send_user_request( $request_id );
     205                $mailer     = tests_retrieve_phpmailer_instance();
     206                remove_filter( 'user_request_action_email_subject', array( $this, 'modify_email_subject' ) );
     207
     208                $this->assertTrue( $email_sent );
     209                $this->assertSame( 'Custom Email Subject', $mailer->get_sent()->subject );
     210        }
     211
     212        /**
     213         * Filter callback to modify the subject of the email sent when an account action is attempted.
     214         *
     215         * @since 4.9.9
     216         *
     217         * @param string $subject The email subject.
     218         * @return string Filtered email subject.
     219         */
     220        public function modify_email_subject( $subject ) {
     221                return 'Custom Email Subject';
     222        }
     223
     224        /**
     225         * The email content should be filterable.
     226         *
     227         * @ticket 43985
     228         */
     229        public function test_email_content_should_be_filterable() {
     230                $email      = 'erase.request.from.user@example.com';
     231                $user_id    = $this->factory->user->create(
     232                        array(
     233                                'user_email' => $email,
     234                        )
     235                );
     236                $request_id = wp_create_user_request( $email, 'remove_personal_data' );
     237
     238                add_filter( 'user_request_action_email_content', array( $this, 'modify_email_content' ), 10, 2 );
     239                $email_sent = wp_send_user_request( $request_id );
     240                $mailer     = tests_retrieve_phpmailer_instance();
     241                remove_filter( 'user_request_action_email_content', array( $this, 'modify_email_content' ), 10 );
     242
     243                $this->assertTrue( $email_sent );
     244                $this->assertContains( 'Custom Email Content.', $mailer->get_sent()->body );
     245        }
     246
     247        /**
     248         * Filter callback to modify the content of the email sent when an account action is attempted.
     249         *
     250         * @since 4.9.9
     251         *
     252         * @param string $email_text Confirmation email text.
     253         * @return string $email_text Filtered email text.
     254         */
     255        public function modify_email_content( $email_text ) {
     256                return 'Custom Email Content.';
     257        }
     258}