Make WordPress Core


Ignore:
Timestamp:
05/03/2018 07:27:14 PM (7 years ago)
Author:
iandunn
Message:

Privacy: Store plugin callbacks in associative array for flexibility.

The personal data export and erasure tools allow plugins to register their own callbacks, in order to add additional data to the export and erasure processes. Previously, these were registered without specifying a constant identifier in the array of callbacks. Using mutable integers makes it difficult for plugins to modify the callbacks of other plugins, though.

Using associative array keys instead provides a covenient and reliable way to identify and interact with another plugin's callbacks.

Props desrosj, allendav, ocean90.
Fixes #43931.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/includes/ajax-actions.php

    r43104 r43154  
    44104410        }
    44114411
    4412         $index = $exporter_index - 1;
    4413 
    44144412        if ( $page < 1 ) {
    44154413            wp_send_json_error( __( 'Page index cannot be less than one.' ) );
    44164414        }
    44174415
    4418         $exporter = $exporters[ $index ];
     4416        $exporter_keys = array_keys( $exporters );
     4417        $exporter_key  = $exporter_keys[ $exporter_index - 1 ];
     4418        $exporter      = $exporters[ $exporter_key ];
    44194419
    44204420        if ( ! is_array( $exporter ) ) {
    44214421            wp_send_json_error(
    4422                 /* translators: %d: array index */
    4423                 sprintf( __( 'Expected an array describing the exporter at index %d.' ), $exporter_index )
     4422                /* translators: %s: array index */
     4423                sprintf( __( 'Expected an array describing the exporter at index %s.' ), $exporter_key )
    44244424            );
    44254425        }
    44264426        if ( ! array_key_exists( 'exporter_friendly_name', $exporter ) ) {
    44274427            wp_send_json_error(
    4428                 /* translators: %d: array index */
    4429                 sprintf( __( 'Exporter array at index %d does not include a friendly name.' ), $exporter_index )
     4428                /* translators: %s: array index */
     4429                sprintf( __( 'Exporter array at index %s does not include a friendly name.' ), $exporter_key )
    44304430            );
    44314431        }
     
    44434443        }
    44444444
    4445         $callback = $exporters[ $index ]['callback'];
    4446         $exporter_friendly_name = $exporters[ $index ]['exporter_friendly_name'];
     4445        $callback               = $exporter['callback'];
     4446        $exporter_friendly_name = $exporter['exporter_friendly_name'];
    44474447
    44484448        $response = call_user_func( $callback, $email_address, $page );
     
    44964496     * @param int    $request_id      The privacy request post ID associated with this request.
    44974497     * @param bool   $send_as_email   Whether the final results of the export should be emailed to the user.
     4498     * @param int    $exporter_key    The key (slug) of the exporter that provided this data.
    44984499     */
    4499     $response = apply_filters( 'wp_privacy_personal_data_export_page', $response, $exporter_index, $email_address, $page, $request_id, $send_as_email );
     4500    $response = apply_filters( 'wp_privacy_personal_data_export_page', $response, $exporter_index, $email_address, $page, $request_id, $send_as_email, $exporter_key );
    45004501
    45014502    if ( is_wp_error( $response ) ) {
     
    45924593        }
    45934594
    4594         $index  = $eraser_index - 1; // Convert to zero based for eraser index.
    4595         $eraser = $erasers[ $index ];
     4595        $eraser_keys = array_keys( $erasers );
     4596        $eraser_key  = $eraser_keys[ $eraser_index - 1 ];
     4597        $eraser      = $erasers[ $eraser_key ];
    45964598
    45974599        if ( ! is_array( $eraser ) ) {
     
    46154617        }
    46164618
    4617         $callback             = $erasers[ $index ]['callback'];
    4618         $eraser_friendly_name = $erasers[ $index ]['eraser_friendly_name'];
     4619        $callback             = $eraser['callback'];
     4620        $eraser_friendly_name = $eraser['eraser_friendly_name'];
    46194621
    46204622        $response = call_user_func( $callback, $email_address, $page );
     
    47074709     *
    47084710     * @param array  $response        The personal data for the given exporter and page.
    4709      * @param int    $exporter_index  The index of the exporter that provided this data.
     4711     * @param int    $eraser_index    The index of the eraser that provided this data.
    47104712     * @param string $email_address   The email address associated with this personal data.
    47114713     * @param int    $page            The page for this response.
    47124714     * @param int    $request_id      The privacy request post ID associated with this request.
     4715     * @param int    $eraser_key      The key (slug) of the eraser that provided this data.
    47134716     */
    4714     $response = apply_filters( 'wp_privacy_personal_data_erasure_page', $response, $eraser_index, $email_address, $page, $request_id );
     4717    $response = apply_filters( 'wp_privacy_personal_data_erasure_page', $response, $eraser_index, $email_address, $page, $request_id, $eraser_key );
    47154718
    47164719    if ( is_wp_error( $response ) ) {
Note: See TracChangeset for help on using the changeset viewer.