WordPress.org

Make WordPress Core

Changeset 43105


Ignore:
Timestamp:
05/02/2018 03:18:19 AM (12 months ago)
Author:
SergeyBiryukov
Message:

Privacy: translate error messages, some fixes and improvements for the AJAX actions for exporting and erasing user data.

Props desrosj, birgire.
Merges [43060] to the 4.9 branch.
See #43438.

Location:
branches/4.9
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/4.9

  • branches/4.9/src/wp-admin/includes/ajax-actions.php

    r43092 r43105  
    40254025 */
    40264026function wp_ajax_wp_privacy_export_personal_data() {
    4027     $request_id  = (int) $_POST['id'];
    4028 
    4029     if ( empty( $request_id ) ) {
    4030         wp_send_json_error( __( 'Error: Invalid request ID.' ) );
     4027
     4028    if ( empty( $_POST['id'] ) ) {
     4029        wp_send_json_error( __( 'Missing request ID.' ) );
     4030    }
     4031    $request_id = (int) $_POST['id'];
     4032
     4033    if ( $request_id < 1 ) {
     4034        wp_send_json_error( __( 'Invalid request ID.' ) );
    40314035    }
    40324036
    40334037    if ( ! current_user_can( 'manage_options' ) ) {
    4034         wp_send_json_error( __( 'Error: Invalid request.' ) );
     4038        wp_send_json_error( __( 'Invalid request.' ) );
    40354039    }
    40364040
     
    40414045
    40424046    if ( ! $request || 'export_personal_data' !== $request->action_name ) {
    4043         wp_send_json_error( __( 'Error: Invalid request type.' ) );
     4047        wp_send_json_error( __( 'Invalid request type.' ) );
    40444048    }
    40454049
    40464050    $email_address = $request->email;
    40474051    if ( ! is_email( $email_address ) ) {
    4048         wp_send_json_error( __( 'Error: A valid email address must be given.' ) );
    4049     }
    4050 
     4052        wp_send_json_error( __( 'A valid email address must be given.' ) );
     4053    }
     4054
     4055    if ( ! isset( $_POST['exporter'] ) ) {
     4056        wp_send_json_error( __( 'Missing exporter index.' ) );
     4057    }
    40514058    $exporter_index = (int) $_POST['exporter'];
    4052     $page           = (int) $_POST['page'];
    4053     $send_as_email  = isset( $_POST['sendAsEmail'] ) ? ( "true" === $_POST['sendAsEmail'] ) : false;
     4059
     4060    if ( ! isset( $_POST['page'] ) ) {
     4061        wp_send_json_error( __( 'Missing page index.' ) );
     4062    }
     4063    $page = (int) $_POST['page'];
     4064
     4065    $send_as_email = isset( $_POST['sendAsEmail'] ) ? ( 'true' === $_POST['sendAsEmail'] ) : false;
    40544066
    40554067    /**
     
    40604072     * @param array $args {
    40614073     *     An array of callable exporters of personal data. Default empty array.
    4062      *     [
    4063      *         callback               string  Callable exporter that accepts an email address and
    4064      *                                        a page and returns an array of name => value
    4065      *                                        pairs of personal data.
    4066      *         exporter_friendly_name string  Translated user facing friendly name for the exporter.
    4067      *     ]
     4074     *
     4075     *     @type array {
     4076     *         Array of personal data exporters.
     4077     *
     4078     *         @type string $callback               Callable exporter function that accepts an
     4079     *                                              email address and a page and returns an array
     4080     *                                              of name => value pairs of personal data.
     4081     *         @type string $exporter_friendly_name Translated user facing friendly name for the
     4082     *                                              exporter.
     4083     *     }
    40684084     * }
    40694085     */
     
    40714087
    40724088    if ( ! is_array( $exporters ) ) {
    4073         wp_send_json_error( 'An exporter has improperly used the registration filter.' );
     4089        wp_send_json_error( __( 'An exporter has improperly used the registration filter.' ) );
    40744090    }
    40754091
     
    40774093    if ( 0 < count( $exporters ) ) {
    40784094        if ( $exporter_index < 1 ) {
    4079             wp_send_json_error( 'Exporter index cannot be negative.' );
     4095            wp_send_json_error( __( 'Exporter index cannot be negative.' ) );
    40804096        }
    40814097
    40824098        if ( $exporter_index > count( $exporters ) ) {
    4083             wp_send_json_error( 'Exporter index out of range.' );
     4099            wp_send_json_error( __( 'Exporter index out of range.' ) );
    40844100        }
    40854101
     
    40874103
    40884104        if ( $page < 1 ) {
    4089             wp_send_json_error( 'Page index cannot be less than one.' );
     4105            wp_send_json_error( __( 'Page index cannot be less than one.' ) );
    40904106        }
    40914107
     
    40934109
    40944110        if ( ! is_array( $exporter ) ) {
    4095             wp_send_json_error( "Expected an array describing the exporter at index {$exporter_index}." );
     4111            wp_send_json_error(
     4112                /* translators: %d: array index */
     4113                sprintf( __( 'Expected an array describing the exporter at index %d.' ), $exporter_index )
     4114            );
    40964115        }
    40974116        if ( ! array_key_exists( 'exporter_friendly_name', $exporter ) ) {
    4098             wp_send_json_error( "Exporter array at index {$exporter_index} does not include a friendly name." );
     4117            wp_send_json_error(
     4118                /* translators: %d: array index */
     4119                sprintf( __( 'Exporter array at index %d does not include a friendly name.' ), $exporter_index )
     4120            );
    40994121        }
    41004122        if ( ! array_key_exists( 'callback', $exporter ) ) {
    4101             wp_send_json_error( "Exporter does not include a callback: {$exporter['exporter_friendly_name']}." );
     4123            wp_send_json_error(
     4124                /* translators: %s: exporter friendly name */
     4125                sprintf( __( 'Exporter does not include a callback: %s.' ), esc_html( $exporter['exporter_friendly_name'] ) )
     4126            );
    41024127        }
    41034128        if ( ! is_callable( $exporter['callback'] ) ) {
    4104             wp_send_json_error( "Exporter callback is not a valid callback: {$exporter['exporter_friendly_name']}." );
     4129            wp_send_json_error(
     4130                /* translators: %s: exporter friendly name */
     4131                sprintf( __( 'Exporter callback is not a valid callback: %s.' ), esc_html( $exporter['exporter_friendly_name'] ) )
     4132            );
    41054133        }
    41064134
     
    41144142
    41154143        if ( ! is_array( $response ) ) {
    4116             wp_send_json_error( "Expected response as an array from exporter: {$exporter_friendly_name}." );
     4144            wp_send_json_error(
     4145                /* translators: %s: exporter friendly name */
     4146                sprintf( __( 'Expected response as an array from exporter: %s.' ), esc_html( $exporter_friendly_name ) )
     4147            );
    41174148        }
    41184149        if ( ! array_key_exists( 'data', $response ) ) {
    4119             wp_send_json_error( "Expected data in response array from exporter: {$exporter_friendly_name}." );
     4150            wp_send_json_error(
     4151                /* translators: %s: exporter friendly name */
     4152                sprintf( __( 'Expected data in response array from exporter: %s.' ), esc_html( $exporter_friendly_name ) )
     4153            );
    41204154        }
    41214155        if ( ! is_array( $response['data'] ) ) {
    4122             wp_send_json_error( "Expected data array in response array from exporter: {$exporter_friendly_name}." );
     4156            wp_send_json_error(
     4157                /* translators: %s: exporter friendly name */
     4158                sprintf( __( 'Expected data array in response array from exporter: %s.' ), esc_html( $exporter_friendly_name ) )
     4159            );
    41234160        }
    41244161        if ( ! array_key_exists( 'done', $response ) ) {
    4125             wp_send_json_error( "Expected done (boolean) in response array from exporter: {$exporter_friendly_name}." );
     4162            wp_send_json_error(
     4163                /* translators: %s: exporter friendly name */
     4164                sprintf( __( 'Expected done (boolean) in response array from exporter: %s.' ), esc_html( $exporter_friendly_name ) )
     4165            );
    41264166        }
    41274167    } else {
     
    41434183     * @param int    $exporter_index  The index of the exporter that provided this data.
    41444184     * @param string $email_address   The email address associated with this personal data.
    4145      * @param int    $page            The zero-based page for this response.
     4185     * @param int    $page            The page for this response.
    41464186     * @param int    $request_id      The privacy request post ID associated with this request.
    41474187     * @param bool   $send_as_email   Whether the final results of the export should be emailed to the user.
     
    41624202 */
    41634203function wp_ajax_wp_privacy_erase_personal_data() {
    4164     $request_id  = (int) $_POST['id'];
    4165 
    4166     if ( empty( $request_id ) ) {
    4167         wp_send_json_error( __( 'Error: Invalid request ID.' ) );
     4204
     4205    if ( empty( $_POST['id'] ) ) {
     4206        wp_send_json_error( __( 'Missing request ID.' ) );
     4207    }
     4208
     4209    $request_id = (int) $_POST['id'];
     4210
     4211    if ( $request_id < 1 ) {
     4212        wp_send_json_error( __( 'Invalid request ID.' ) );
    41684213    }
    41694214
    41704215    if ( ! current_user_can( 'delete_users' ) ) {
    4171         wp_send_json_error( __( 'Error: Invalid request.' ) );
     4216        wp_send_json_error( __( 'Invalid request.' ) );
    41724217    }
    41734218
     
    41784223
    41794224    if ( ! $request || 'remove_personal_data' !== $request->action_name ) {
    4180         wp_send_json_error( __( 'Error: Invalid request ID.' ) );
     4225        wp_send_json_error( __( 'Invalid request ID.' ) );
    41814226    }
    41824227
     
    41844229
    41854230    if ( ! is_email( $email_address ) ) {
    4186         wp_send_json_error( __( 'Error: Invalid email address in request.' ) );
     4231        wp_send_json_error( __( 'Invalid email address in request.' ) );
     4232    }
     4233
     4234    if ( ! isset( $_POST['eraser'] ) ) {
     4235        wp_send_json_error( __( 'Missing eraser index.' ) );
    41874236    }
    41884237
    41894238    $eraser_index = (int) $_POST['eraser'];
    4190     $page         = (int) $_POST['page'];
     4239
     4240    if ( ! isset( $_POST['page'] ) ) {
     4241        wp_send_json_error( __( 'Missing page index.' ) );
     4242    }
     4243
     4244    $page = (int) $_POST['page'];
    41914245
    41924246    /**
     
    41974251     * @param array $args {
    41984252     *     An array of callable erasers of personal data. Default empty array.
    4199      *     [
    4200      *         callback             string Callable eraser that accepts an email address and
    4201      *                                     a page and returns an array with the number of items
    4202      *                                     removed, the number of items retained and any messages
    4203      *                                     from the eraser, as well as if additional pages are
    4204      *                                     available.
    4205      *         eraser_friendly_name string Translated user facing friendly name for the eraser.
    4206      *     ]
     4253     *     @type array {
     4254     *         Array of personal data exporters.
     4255     *
     4256     *         @type string $callback               Callable eraser that accepts an email address and
     4257     *                                              a page and returns an array with the number of items
     4258     *                                              removed, the number of items retained and any messages
     4259     *                                              from the eraser, as well as if additional pages are
     4260     *                                              available.
     4261     *         @type string $exporter_friendly_name Translated user facing friendly name for the eraser.
     4262     *     }
    42074263     * }
    42084264     */
     
    42114267    // Do we have any registered erasers?
    42124268    if ( 0 < count( $erasers ) ) {
     4269
    42134270        if ( $eraser_index < 1 ) {
    4214             wp_send_json_error( __( 'Error: Eraser index cannot be less than one.' ) );
     4271            wp_send_json_error( __( 'Eraser index cannot be less than one.' ) );
    42154272        }
    42164273
    42174274        if ( $eraser_index > count( $erasers ) ) {
    4218             wp_send_json_error( __( 'Error: Eraser index is out of range.' ) );
     4275            wp_send_json_error( __( 'Eraser index is out of range.' ) );
    42194276        }
    42204277
    42214278        if ( $page < 1 ) {
    4222             wp_send_json_error( __( 'Error: Page index cannot be less than one.' ) );
    4223         }
    4224 
    4225         $index = $eraser_index - 1; // Convert to zero based for eraser index
     4279            wp_send_json_error( __( 'Page index cannot be less than one.' ) );
     4280        }
     4281
     4282        $index  = $eraser_index - 1; // Convert to zero based for eraser index.
    42264283        $eraser = $erasers[ $index ];
     4284
    42274285        if ( ! is_array( $eraser ) ) {
     4286            /* translators: %d: array index */
     4287            wp_send_json_error( sprintf( __( 'Expected an array describing the eraser at index %d.' ), $eraser_index ) );
     4288        }
     4289
     4290        if ( ! array_key_exists( 'callback', $eraser ) ) {
     4291            /* translators: %d: array index */
     4292            wp_send_json_error( sprintf( __( 'Eraser array at index %d does not include a callback.' ), $eraser_index ) );
     4293        }
     4294
     4295        if ( ! is_callable( $eraser['callback'] ) ) {
     4296            /* translators: %d: array index */
     4297            wp_send_json_error( sprintf( __( 'Eraser callback at index %d is not a valid callback.' ), $eraser_index ) );
     4298        }
     4299
     4300        if ( ! array_key_exists( 'eraser_friendly_name', $eraser ) ) {
     4301            /* translators: %d: array index */
     4302            wp_send_json_error( sprintf( __( 'Eraser array at index %d does not include a friendly name.' ), $eraser_index ) );
     4303        }
     4304
     4305        $callback             = $erasers[ $index ]['callback'];
     4306        $eraser_friendly_name = $erasers[ $index ]['eraser_friendly_name'];
     4307
     4308        $response = call_user_func( $callback, $email_address, $page );
     4309
     4310        if ( is_wp_error( $response ) ) {
     4311            wp_send_json_error( $response );
     4312        }
     4313
     4314        if ( ! is_array( $response ) ) {
    42284315            wp_send_json_error(
    42294316                sprintf(
    4230                     __( 'Error: Expected an array describing the eraser at index %d.' ),
     4317                    /* translators: %1$s: eraser friendly name, %2$d: array index */
     4318                    __( 'Did not receive array from %1$s eraser (index %2$d).' ),
     4319                    esc_html( $eraser_friendly_name ),
    42314320                    $eraser_index
    42324321                )
    42334322            );
    42344323        }
    4235         if ( ! array_key_exists( 'callback', $eraser ) ) {
     4324
     4325        if ( ! array_key_exists( 'num_items_removed', $response ) ) {
    42364326            wp_send_json_error(
    42374327                sprintf(
    4238                     __( 'Error: Eraser array at index %d does not include a callback.' ),
     4328                    /* translators: %1$s: eraser friendly name, %2$d: array index */
     4329                    __( 'Expected num_items_removed key in response array from %1$s eraser (index %2$d).' ),
     4330                    esc_html( $eraser_friendly_name ),
    42394331                    $eraser_index
    42404332                )
    42414333            );
    42424334        }
    4243         if ( ! is_callable( $eraser['callback'] ) ) {
     4335
     4336        if ( ! array_key_exists( 'num_items_retained', $response ) ) {
    42444337            wp_send_json_error(
    42454338                sprintf(
    4246                     __( 'Error: Eraser callback at index %d is not a valid callback.' ),
     4339                    /* translators: %1$s: eraser friendly name, %2$d: array index */
     4340                    __( 'Expected num_items_retained key in response array from %1$s eraser (index %2$d).' ),
     4341                    esc_html( $eraser_friendly_name ),
    42474342                    $eraser_index
    42484343                )
    42494344            );
    42504345        }
    4251         if ( ! array_key_exists( 'eraser_friendly_name', $eraser ) ) {
     4346
     4347        if ( ! array_key_exists( 'messages', $response ) ) {
    42524348            wp_send_json_error(
    42534349                sprintf(
    4254                     __( 'Error: Eraser array at index %d does not include a friendly name.' ),
     4350                    /* translators: %1$s: eraser friendly name, %2$d: array index */
     4351                    __( 'Expected messages key in response array from %1$s eraser (index %2$d).' ),
     4352                    esc_html( $eraser_friendly_name ),
    42554353                    $eraser_index
    42564354                )
     
    42584356        }
    42594357
    4260         $callback = $erasers[ $index ]['callback'];
    4261         $eraser_friendly_name = $erasers[ $index ]['eraser_friendly_name'];
    4262 
    4263         $response = call_user_func( $callback, $email_address, $page );
    4264         if ( is_wp_error( $response ) ) {
    4265             wp_send_json_error( $response );
    4266         }
    4267 
    4268         if ( ! is_array( $response ) ) {
     4358        if ( ! is_array( $response['messages'] ) ) {
    42694359            wp_send_json_error(
    42704360                sprintf(
    4271                     __( 'Error: Did not receive array from %s eraser (index %d).' ),
    4272                     $eraser_friendly_name,
     4361                    /* translators: %1$s: eraser friendly name, %2$d: array index */
     4362                    __( 'Expected messages key to reference an array in response array from %1$s eraser (index %2$d).' ),
     4363                    esc_html( $eraser_friendly_name ),
    42734364                    $eraser_index
    42744365                )
    42754366            );
    42764367        }
    4277         if ( ! array_key_exists( 'num_items_removed', $response ) ) {
     4368
     4369        if ( ! array_key_exists( 'done', $response ) ) {
    42784370            wp_send_json_error(
    42794371                sprintf(
    4280                     __( 'Error: Expected num_items_removed key in response array from %s eraser (index %d).' ),
    4281                     $eraser_friendly_name,
     4372                    /* translators: %1$s: eraser friendly name, %2$d: array index */
     4373                    __( 'Expected done flag in response array from %1$s eraser (index %2$d).' ),
     4374                    esc_html( $eraser_friendly_name ),
    42824375                    $eraser_index
    42834376                )
    42844377            );
    42854378        }
    4286         if ( ! array_key_exists( 'num_items_retained', $response ) ) {
    4287             wp_send_json_error(
    4288                 sprintf(
    4289                     __( 'Error: Expected num_items_retained key in response array from %s eraser (index %d).' ),
    4290                     $eraser_friendly_name,
    4291                     $eraser_index
    4292                 )
    4293             );
    4294         }
    4295         if ( ! array_key_exists( 'messages', $response ) ) {
    4296             wp_send_json_error(
    4297                 sprintf(
    4298                     __( 'Error: Expected messages key in response array from %s eraser (index %d).' ),
    4299                     $eraser_friendly_name,
    4300                     $eraser_index
    4301                 )
    4302             );
    4303         }
    4304         if ( ! is_array( $response['messages'] ) ) {
    4305             wp_send_json_error(
    4306                 sprintf(
    4307                     __( 'Error: Expected messages key to reference an array in response array from %s eraser (index %d).' ),
    4308                     $eraser_friendly_name,
    4309                     $eraser_index
    4310                 )
    4311             );
    4312         }
    4313         if ( ! array_key_exists( 'done', $response ) ) {
    4314             wp_send_json_error(
    4315                 sprintf(
    4316                     __( 'Error: Expected done flag in response array from %s eraser (index %d).' ),
    4317                     $eraser_friendly_name,
    4318                     $eraser_index
    4319                 )
    4320             );
    4321         }
    43224379    } else {
    4323         // No erasers, so we're done
     4380        // No erasers, so we're done.
    43244381        $response = array(
    4325             'num_items_removed' => 0,
     4382            'num_items_removed'  => 0,
    43264383            'num_items_retained' => 0,
    4327             'messages' => array(),
    4328             'done' => true,
     4384            'messages'           => array(),
     4385            'done'               => true,
    43294386        );
    43304387    }
     
    43404397     * @param int    $exporter_index  The index of the exporter that provided this data.
    43414398     * @param string $email_address   The email address associated with this personal data.
    4342      * @param int    $page            The zero-based page for this response.
     4399     * @param int    $page            The page for this response.
    43434400     * @param int    $request_id      The privacy request post ID associated with this request.
    43444401     */
    43454402    $response = apply_filters( 'wp_privacy_personal_data_erasure_page', $response, $eraser_index, $email_address, $page, $request_id );
     4403
    43464404    if ( is_wp_error( $response ) ) {
    43474405        wp_send_json_error( $response );
Note: See TracChangeset for help on using the changeset viewer.