Make WordPress Core

Changeset 43154


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.

Location:
trunk/src
Files:
6 edited

Legend:

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

    r43012 r43154  
    134134
    135135// Privacy hooks
    136 add_filter( 'wp_privacy_personal_data_export_page', 'wp_privacy_process_personal_data_export_page', 10, 6 );
     136add_filter( 'wp_privacy_personal_data_export_page', 'wp_privacy_process_personal_data_export_page', 10, 7 );
    137137add_action( 'wp_privacy_personal_data_export_file', 'wp_privacy_generate_personal_data_export_file', 10 );
    138138
  • 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 ) ) {
  • trunk/src/wp-admin/includes/file.php

    r43118 r43154  
    22632263 * @param int    $request_id      The request ID for this personal data export.
    22642264 * @param bool   $send_as_email   Whether the final results of the export should be emailed to the user.
     2265 * @param string $exporter_key    The slug (key) of the exporter.
    22652266 * @return array The filtered response.
    22662267 */
    2267 function wp_privacy_process_personal_data_export_page( $response, $exporter_index, $email_address, $page, $request_id, $send_as_email ) {
     2268function wp_privacy_process_personal_data_export_page( $response, $exporter_index, $email_address, $page, $request_id, $send_as_email, $exporter_key ) {
    22682269    /* Do some simple checks on the shape of the response from the exporter.
    22692270     * If the exporter response is malformed, don't attempt to consume it - let it
  • trunk/src/wp-includes/comment.php

    r43061 r43154  
    32863286 */
    32873287function wp_register_comment_personal_data_exporter( $exporters ) {
    3288     $exporters[] = array(
     3288    $exporters['wordpress-comments'] = array(
    32893289        'exporter_friendly_name' => __( 'WordPress Comments' ),
    32903290        'callback'               => 'wp_comments_personal_data_exporter',
     
    33913391 */
    33923392function wp_register_comment_personal_data_eraser( $erasers ) {
    3393     $erasers[] = array(
     3393    $erasers['wordpress-comments'] = array(
    33943394        'eraser_friendly_name' => __( 'WordPress Comments' ),
    33953395        'callback'             => 'wp_comments_personal_data_eraser',
     
    34993499    );
    35003500}
    3501 
  • trunk/src/wp-includes/media.php

    r43135 r43154  
    41034103 */
    41044104function wp_register_media_personal_data_exporter( $exporters ) {
    4105     $exporters[] = array(
     4105    $exporters['wordpress-media'] = array(
    41064106        'exporter_friendly_name' => __( 'WordPress Media' ),
    41074107        'callback'               => 'wp_media_personal_data_exporter',
  • trunk/src/wp-includes/user.php

    r43118 r43154  
    28352835 */
    28362836function wp_register_user_personal_data_exporter( $exporters ) {
    2837     $exporters[] = array(
     2837    $exporters['wordpress-user'] = array(
    28382838        'exporter_friendly_name' => __( 'WordPress User' ),
    28392839        'callback'               => 'wp_user_personal_data_exporter',
Note: See TracChangeset for help on using the changeset viewer.