Make WordPress Core

Ticket #43890: 43890.5.diff

File 43890.5.diff, 9.8 KB (added by xkon, 4 years ago)

phpunit tests

  • src/wp-admin/css/forms.css

     
    13301330        margin: 1.5em 0;
    13311331}
    13321332
    1333 .wp-privacy-request-form label {
    1334         font-weight: 600;
    1335         line-height: 1.5;
    1336         padding-bottom: .5em;
    1337         display: block;
    1338 }
    1339 
    13401333.wp-privacy-request-form input {
    13411334        margin: 0;
    13421335}
  • src/wp-admin/erase-personal-data.php

     
    5858
    5959        <form action="<?php echo esc_url( admin_url( 'erase-personal-data.php' ) ); ?>" method="post" class="wp-privacy-request-form">
    6060                <h2><?php esc_html_e( 'Add Data Erasure Request' ); ?></h2>
    61                 <p><?php esc_html_e( 'An email will be sent to the user at this email address asking them to verify the request.' ); ?></p>
    62 
    6361                <div class="wp-privacy-request-form-field">
    64                         <label for="username_or_email_for_privacy_request"><?php esc_html_e( 'Username or email address' ); ?></label>
    65                         <input type="text" required class="regular-text ltr" id="username_or_email_for_privacy_request" name="username_or_email_for_privacy_request" />
    66                         <?php submit_button( __( 'Send Request' ), 'secondary', 'submit', false ); ?>
     62                        <table class="form-table">
     63                                <tr>
     64                                        <th scope="row">
     65                                                <label for="username_or_email_for_privacy_request"><?php esc_html_e( 'Username or email address' ); ?></label>
     66                                        </th>
     67                                        <td>
     68                                                <input type="text" required class="regular-text ltr" id="username_or_email_for_privacy_request" name="username_or_email_for_privacy_request" />
     69                                        </td>
     70                                </tr>
     71                                <tr>
     72                                        <th scope="row">
     73                                                <?php _e( 'Confirmation email' ); ?>
     74                                        </th>
     75                                        <td>
     76                                                <label for="send_confirmation_email">
     77                                                        <input type="checkbox" name="send_confirmation_email" id="send_confirmation_email" value="1" checked="checked" />
     78                                                        <?php _e( 'Send personal data erasure confirmation email.' ); ?>
     79                                                </label>
     80                                        </td>
     81                                </tr>
     82                        </table>
     83                        <p class="submit">
     84                                <?php submit_button( __( 'Send Request' ), 'secondary', 'submit', false ); ?>
     85                        </p>
    6786                </div>
    6887                <?php wp_nonce_field( 'personal-data-request' ); ?>
    6988                <input type="hidden" name="action" value="add_remove_personal_data_request" />
  • src/wp-admin/export-personal-data.php

     
    5858
    5959        <form action="<?php echo esc_url( admin_url( 'export-personal-data.php' ) ); ?>" method="post" class="wp-privacy-request-form">
    6060                <h2><?php esc_html_e( 'Add Data Export Request' ); ?></h2>
    61                 <p><?php esc_html_e( 'An email will be sent to the user at this email address asking them to verify the request.' ); ?></p>
    62 
    6361                <div class="wp-privacy-request-form-field">
    64                         <label for="username_or_email_for_privacy_request"><?php esc_html_e( 'Username or email address' ); ?></label>
    65                         <input type="text" required class="regular-text ltr" id="username_or_email_for_privacy_request" name="username_or_email_for_privacy_request" />
    66                         <?php submit_button( __( 'Send Request' ), 'secondary', 'submit', false ); ?>
     62                <table class="form-table">
     63                                <tr>
     64                                        <th scope="row">
     65                                                <label for="username_or_email_for_privacy_request"><?php esc_html_e( 'Username or email address' ); ?></label>
     66                                        </th>
     67                                        <td>
     68                                                <input type="text" required class="regular-text ltr" id="username_or_email_for_privacy_request" name="username_or_email_for_privacy_request" />
     69                                        </td>
     70                                </tr>
     71                                <tr>
     72                                        <th scope="row">
     73                                                <?php _e( 'Confirmation email' ); ?>
     74                                        </th>
     75                                        <td>
     76                                                <label for="send_confirmation_email">
     77                                                        <input type="checkbox" name="send_confirmation_email" id="send_confirmation_email" value="1" checked="checked" />
     78                                                        <?php _e( 'Send personal data export confirmation email.' ); ?>
     79                                                </label>
     80                                        </td>
     81                                </tr>
     82                        </table>
     83                        <p class="submit">
     84                                <?php submit_button( __( 'Send Request' ), 'secondary', 'submit', false ); ?>
     85                        </p>
    6786                </div>
    6887                <?php wp_nonce_field( 'personal-data-request' ); ?>
    6988                <input type="hidden" name="action" value="add_export_personal_data_request" />
  • src/wp-admin/includes/privacy-tools.php

     
    111111                                $action_type               = sanitize_text_field( wp_unslash( $_POST['type_of_action'] ) );
    112112                                $username_or_email_address = sanitize_text_field( wp_unslash( $_POST['username_or_email_for_privacy_request'] ) );
    113113                                $email_address             = '';
     114                                $send_confirmation_email   = true;
    114115
     116                                if ( ! isset( $_POST['send_confirmation_email'] ) ) {
     117                                        $send_confirmation_email   = false;
     118                                }
     119
    115120                                if ( ! in_array( $action_type, _wp_privacy_action_request_types(), true ) ) {
    116121                                        add_settings_error(
    117122                                                'action_type',
     
    141146                                        break;
    142147                                }
    143148
    144                                 $request_id = wp_create_user_request( $email_address, $action_type );
     149                                $request_id = wp_create_user_request( $email_address, $action_type, array(), $send_confirmation_email );
    145150
    146151                                if ( is_wp_error( $request_id ) ) {
    147152                                        add_settings_error(
     
    161166                                        break;
    162167                                }
    163168
    164                                 wp_send_user_request( $request_id );
     169                                if ( $send_confirmation_email ) {
     170                                        wp_send_user_request( $request_id );
     171                                }
    165172
    166173                                add_settings_error(
    167174                                        'username_or_email_for_privacy_request',
  • src/wp-includes/user.php

     
    37703770 *
    37713771 * @since 4.9.6
    37723772 *
    3773  * @param string $email_address User email address. This can be the address of a registered or non-registered user.
    3774  * @param string $action_name   Name of the action that is being confirmed. Required.
    3775  * @param array  $request_data  Misc data you want to send with the verification request and pass to the actions once the request is confirmed.
    3776  * @return int|WP_Error Returns the request ID if successful, or a WP_Error object on failure.
     3773 * @param string $email_address           User email address. This can be the address of a registered or non-registered user.
     3774 * @param string $action_name             Name of the action that is being confirmed. Required.
     3775 * @param array  $request_data            Misc data you want to send with the verification request and pass to the actions once the request is confirmed.
     3776 * @param bool   $send_confirmation_email Optional. True by default, if false is passed the request status is set to Completed directly.
     3777 * @return int|WP_Error                   Returns the request ID if successful, or a WP_Error object on failure.
    37773778 */
    3778 function wp_create_user_request( $email_address = '', $action_name = '', $request_data = array() ) {
     3779function wp_create_user_request( $email_address = '', $action_name = '', $request_data = array(), $send_confirmation_email = true ) {
    37793780        $email_address = sanitize_email( $email_address );
    37803781        $action_name   = sanitize_key( $action_name );
    37813782
     
    38083809                return new WP_Error( 'duplicate_request', __( 'An incomplete user privacy request for this email address already exists.' ) );
    38093810        }
    38103811
     3812        if ( $send_confirmation_email ) {
     3813                $status = 'request-pending';
     3814        } else {
     3815                $status = 'request-completed';
     3816        }
     3817
    38113818        $request_id = wp_insert_post(
    38123819                array(
    38133820                        'post_author'   => $user_id,
     
    38143821                        'post_name'     => $action_name,
    38153822                        'post_title'    => $email_address,
    38163823                        'post_content'  => wp_json_encode( $request_data ),
    3817                         'post_status'   => 'request-pending',
     3824                        'post_status'   => $status,
    38183825                        'post_type'     => 'user_request',
    38193826                        'post_date'     => current_time( 'mysql', false ),
    38203827                        'post_date_gmt' => current_time( 'mysql', true ),
  • tests/phpunit/tests/privacy/wpCreateUserRequest.php

     
    308308                $this->assertWPError( $actual );
    309309                $this->assertSame( 'empty_content', $actual->get_error_code() );
    310310        }
     311
     312        /**
     313         * Test that the request has a Pending status if a confirmation email is sent.
     314         *
     315         * @ticket 43890
     316         */
     317        public function test_pending_status_with_default_wp_create_user_request_params() {
     318                $actual = wp_create_user_request( self::$non_registered_user_email, 'export_personal_data' );
     319                $post   = get_post( $actual );
     320
     321                $this->assertSame( 'request-pending', $post->post_status );
     322        }
     323
     324        /**
     325         * Test that the request has a Pending status if the $send_confirmation_email param is true.
     326         *
     327         * @ticket 43890
     328         */
     329        public function test_pending_status_with_true_send_confirmation_email() {
     330                $request_data            = array();
     331                $send_confirmation_email = true;
     332
     333                $actual = wp_create_user_request( self::$non_registered_user_email, 'export_personal_data', $request_data, $send_confirmation_email );
     334                $post   = get_post( $actual );
     335
     336                $this->assertSame( 'request-pending', $post->post_status );
     337        }
     338
     339        /**
     340         * Test that the request has a Completed status if the $send_confirmation_email param is false.
     341         *
     342         * @ticket 43890
     343         */
     344        public function test_pending_status_with_false_send_confirmation_email() {
     345                $request_data                    = array();
     346                $send_confirmation_email = false;
     347
     348                $actual = wp_create_user_request( self::$non_registered_user_email, 'export_personal_data', $request_data, $send_confirmation_email );
     349                $post   = get_post( $actual );
     350
     351                $this->assertSame( 'request-completed', $post->post_status );
     352        }
    311353}