Make WordPress Core

Changeset 43212


Ignore:
Timestamp:
05/10/2018 10:00:19 AM (6 years ago)
Author:
azaozz
Message:

Privacy: cleanup of the "Export Personal Data" and "Erase Personal Data" screens.

Props desrosj, xkon.
See #43929.

Location:
trunk/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/css/forms.css

    r43193 r43212  
    11331133}
    11341134
     1135.privacy_requests .request-results .notice {
     1136    margin: -2px 0 0;
     1137}
     1138
     1139.privacy_requests .request-results .notice p {
     1140    margin: 0.5em 0;
     1141}
     1142
     1143.request-results td {
     1144    padding: 0 0 1px;
     1145}
     1146
    11351147.status-label {
    11361148    font-weight: 600;
  • trunk/src/wp-admin/includes/user.php

    r43191 r43212  
    664664            );
    665665        }
    666 
    667666    } elseif ( isset( $_POST['action'] ) ) {
    668667        $action = isset( $_POST['action'] ) ? sanitize_key( wp_unslash( $_POST['action'] ) ) : ''; // WPCS: input var ok, CSRF ok.
     
    761760        'post_status'    => 'request-pending',
    762761        'fields'         => 'ids',
    763         'date_query' => array(
     762        'date_query'     => array(
    764763            array(
    765764                'column' => 'post_modified_gmt',
     
    11131112     */
    11141113    protected function get_views() {
    1115         $current_status = isset( $_REQUEST['filter-status'] ) ? sanitize_text_field( $_REQUEST['filter-status'] ): '';
     1114        $current_status = isset( $_REQUEST['filter-status'] ) ? sanitize_text_field( $_REQUEST['filter-status'] ) : '';
    11161115        $statuses       = _wp_privacy_statuses();
    11171116        $views          = array();
     
    11521151        $action      = $this->current_action();
    11531152        $request_ids = isset( $_REQUEST['request_id'] ) ? wp_parse_id_list( wp_unslash( $_REQUEST['request_id'] ) ) : array(); // WPCS: input var ok, CSRF ok.
    1154         $count = 0;
     1153        $count       = 0;
    11551154
    11561155        if ( $request_ids ) {
     
    11691168                    'bulk_action',
    11701169                    'bulk_action',
     1170                    /* translators: %d: number of requests */
    11711171                    sprintf( _n( 'Deleted %d request', 'Deleted %d requests', $count ), $count ),
    11721172                    'updated'
     
    11851185                    'bulk_action',
    11861186                    'bulk_action',
     1187                    /* translators: %d: number of requests */
    11871188                    sprintf( _n( 'Re-sent %d request', 'Re-sent %d requests', $count ), $count ),
    11881189                    'updated'
     
    12141215            'post_name__in'  => array( $this->request_type ),
    12151216            'posts_per_page' => $posts_per_page,
    1216             'offset'         => isset( $_REQUEST['paged'] ) ? max( 0, absint( $_REQUEST['paged'] ) - 1 ) * $posts_per_page: 0,
     1217            'offset'         => isset( $_REQUEST['paged'] ) ? max( 0, absint( $_REQUEST['paged'] ) - 1 ) * $posts_per_page : 0,
    12171218            'post_status'    => 'any',
    12181219            's'              => isset( $_REQUEST['s'] ) ? sanitize_text_field( $_REQUEST['s'] ) : '',
     
    13061307
    13071308        if ( $time_diff >= 0 && $time_diff < DAY_IN_SECONDS ) {
     1309            /* translators: human readable timestamp */
    13081310            return sprintf( __( '%s ago' ), human_time_diff( $timestamp ) );
    13091311        }
     
    14131415        $nonce           = wp_create_nonce( 'wp-privacy-export-personal-data-' . $request_id );
    14141416
    1415         $download_data_markup = '<div class="export_personal_data" ' .
     1417        $download_data_markup = '<div class="export-personal-data" ' .
    14161418            'data-exporters-count="' . esc_attr( $exporters_count ) . '" ' .
    14171419            'data-request-id="' . esc_attr( $request_id ) . '" ' .
     
    14191421            '">';
    14201422
    1421         $download_data_markup .= '<span class="export_personal_data_idle"><a href="#" >' . __( 'Download Personal Data' ) . '</a></span>' .
    1422             '<span style="display:none" class="export_personal_data_processing" >' . __( 'Downloading Data...' ) . '</span>' .
    1423             '<span style="display:none" class="export_personal_data_success"><a href="#" >' . __( 'Download Personal Data Again' ) . '</a></span>' .
    1424             '<span style="display:none" class="export_personal_data_failed">' . __( 'Download has failed.' ) . ' <a href="#" >' . __( 'Retry' ) . '</a></span>';
     1423        $download_data_markup .= '<span class="export-personal-data-idle"><button type="button" class="button-link export-personal-data-handle">' . __( 'Download Personal Data' ) . '</button></span>' .
     1424            '<span style="display:none" class="export-personal-data-processing" >' . __( 'Downloading Data...' ) . '</span>' .
     1425            '<span style="display:none" class="export-personal-data-success"><button type="button" class="button-link export-personal-data-handle">' . __( 'Download Personal Data Again' ) . '</button></span>' .
     1426            '<span style="display:none" class="export-personal-data-failed">' . __( 'Download has failed.' ) . ' <button type="button" class="button-link">' . __( 'Retry' ) . '</button></span>';
    14251427
    14261428        $download_data_markup .= '</div>';
    14271429
    14281430        $row_actions = array(
    1429             'download_data' => $download_data_markup,
     1431            'download-data' => $download_data_markup,
    14301432        );
    14311433
     
    14531455                $nonce           = wp_create_nonce( 'wp-privacy-export-personal-data-' . $request_id );
    14541456
    1455                 echo '<div class="export_personal_data" ' .
     1457                echo '<div class="export-personal-data" ' .
    14561458                    'data-send-as-email="1" ' .
    14571459                    'data-exporters-count="' . esc_attr( $exporters_count ) . '" ' .
     
    14611463
    14621464                ?>
    1463                 <span class="export_personal_data_idle"><a class="button" href="#" ><?php _e( 'Send Export Link' ); ?></a></span>
    1464                 <span style="display:none" class="export_personal_data_processing button updating-message" ><?php _e( 'Sending Email...' ); ?></span>
    1465                 <span style="display:none" class="export_personal_data_success success-message" ><?php _e( 'Email sent.' ); ?></span>
    1466                 <span style="display:none" class="export_personal_data_failed"><?php _e( 'Email could not be sent.' ); ?> <a class="button" href="#" ><?php _e( 'Retry' ); ?></a></span>
     1465                <span class="export-personal-data-idle"><button type="button" class="button export-personal-data-handle"><?php _e( 'Email Data' ); ?></button></span>
     1466                <span style="display:none" class="export-personal-data-processing button updating-message" ><?php _e( 'Sending Email...' ); ?></span>
     1467                <span style="display:none" class="export-personal-data-success success-message" ><?php _e( 'Email sent.' ); ?></span>
     1468                <span style="display:none" class="export-personal-data-failed"><?php _e( 'Email could not be sent.' ); ?> <button type="button" class="button export-personal-data-handle"><?php _e( 'Retry' ); ?></button></span>
    14671469                <?php
    14681470
     
    14741476            case 'request-completed':
    14751477                echo '<a href="' . esc_url( wp_nonce_url( add_query_arg( array(
    1476                     'action' => 'delete',
    1477                     'request_id' => array( $item->ID )
    1478                 ), admin_url( 'tools.php?page=export_personal_data' ) ), 'bulk-privacy_requests' ) ) . '">' . esc_html__( 'Remove request' ) . '</a>';
     1478                    'action'     => 'delete',
     1479                    'request_id' => array( $item->ID ),
     1480                ), admin_url( 'tools.php?page=export_personal_data' ) ), 'bulk-privacy_requests' ) ) . '" class="button">' . esc_html__( 'Remove request' ) . '</a>';
    14791481                break;
    14801482        }
     
    15251527            $nonce         = wp_create_nonce( 'wp-privacy-erase-personal-data-' . $request_id );
    15261528
    1527             $remove_data_markup = '<div class="remove_personal_data force_remove_personal_data" ' .
     1529            $remove_data_markup = '<div class="remove-personal-data force-remove-personal-data" ' .
    15281530                'data-erasers-count="' . esc_attr( $erasers_count ) . '" ' .
    15291531                'data-request-id="' . esc_attr( $request_id ) . '" ' .
     
    15311533                '">';
    15321534
    1533             $remove_data_markup .= '<span class="remove_personal_data_idle"><a href="#" >' . __( 'Force Erase Personal Data' ) . '</a></span>' .
    1534                 '<span style="display:none" class="remove_personal_data_processing" >' . __( 'Erasing Data...' ) . '</span>' .
    1535                 '<span style="display:none" class="remove_personal_data_failed">' . __( 'Force Erase has failed.' ) . ' <a href="#" >' . __( 'Retry' ) . '</a></span>';
     1535            $remove_data_markup .= '<span class="remove-personal-data-idle"><button type="button" class="button-link remove-personal-data-handle">' . __( 'Force Erase Personal Data' ) . '</button></span>' .
     1536                '<span style="display:none" class="remove-personal-data-processing" >' . __( 'Erasing Data...' ) . '</span>' .
     1537                '<span style="display:none" class="remove-personal-data-failed">' . __( 'Force Erase has failed.' ) . ' <button type="button" class="button-link remove-personal-data-handle">' . __( 'Retry' ) . '</button></span>';
    15361538
    15371539            $remove_data_markup .= '</div>';
    15381540
    15391541            $row_actions = array(
    1540                 'remove_data' => $remove_data_markup,
     1542                'remove-data' => $remove_data_markup,
    15411543            );
    15421544        }
     
    15651567                $nonce         = wp_create_nonce( 'wp-privacy-erase-personal-data-' . $request_id );
    15661568
    1567                 echo '<div class="remove_personal_data" ' .
     1569                echo '<div class="remove-personal-data" ' .
    15681570                    'data-force-erase="1" ' .
    15691571                    'data-erasers-count="' . esc_attr( $erasers_count ) . '" ' .
     
    15731575
    15741576                ?>
    1575                 <span class="remove_personal_data_idle"><a class="button" href="#" ><?php _e( 'Erase Personal Data' ); ?></a></span>
    1576                 <span style="display:none" class="remove_personal_data_processing button updating-message" ><?php _e( 'Erasing Data...' ); ?></span>
    1577                 <span style="display:none" class="remove_personal_data_failed"><?php _e( 'Erasing Data has failed.' ); ?> <a class="button" href="#" ><?php _e( 'Retry' ); ?></a></span>
     1577                <span class="remove-personal-data-idle"><button type="button" class="button remove-personal-data-handle"><?php _e( 'Erase Personal Data' ); ?></button></span>
     1578                <span style="display:none" class="remove-personal-data-processing button updating-message" ><?php _e( 'Erasing Data...' ); ?></span>
     1579                <span style="display:none" class="remove-personal-data-failed"><?php _e( 'Erasing Data has failed.' ); ?> <button type="button" class="button remove-personal-data-handle"><?php _e( 'Retry' ); ?></button></span>
    15781580                <?php
    15791581
     
    15861588            case 'request-completed':
    15871589                echo '<a href="' . esc_url( wp_nonce_url( add_query_arg( array(
    1588                     'action' => 'delete',
     1590                    'action'     => 'delete',
    15891591                    'request_id' => array( $item->ID ),
    1590                 ), admin_url( 'tools.php?page=remove_personal_data' ) ), 'bulk-privacy_requests' ) ) . '">' . esc_html__( 'Remove request' ) . '</a>';
     1592                ), admin_url( 'tools.php?page=remove_personal_data' ) ), 'bulk-privacy_requests' ) ) . '" class="button">' . esc_html__( 'Remove request' ) . '</a>';
    15911593                break;
    15921594        }
  • trunk/src/wp-admin/js/xfn.js

    r43184 r43212  
    2626    var strings = window.privacyToolsL10n || {};
    2727
    28     function set_action_state( $action, state ) {
     28    function setActionState( $action, state ) {
    2929        $action.children().hide();
    3030        $action.children( '.' + state ).show();
     
    3838
    3939    function appendResultsAfterRow( $requestRow, classes, summaryMessage, additionalMessages ) {
     40        var itemList = '';
     41
    4042        clearResultsAfterRow( $requestRow );
    4143
    42         var itemList = '';
    4344        if ( additionalMessages.length ) {
    4445            $.each( additionalMessages, function( index, value ) {
    4546                itemList = itemList + '<li>' + value + '</li>';
    46             } );
     47            });
    4748            itemList = '<ul>' + itemList + '</ul>';
    4849        }
     
    5657                '</td>' +
    5758                '</tr>';
    58         } );
     59        });
    5960    }
    6061
    61     $( '.export_personal_data a' ).click( function( event ) {
     62    $( '.export-personal-data-handle' ).click( function( event ) {
     63
     64        var $this          = $( this ),
     65            $action        = $this.parents( '.export-personal-data' ),
     66            $requestRow    = $this.parents( 'tr' ),
     67            requestID      = $action.data( 'request-id' ),
     68            nonce          = $action.data( 'nonce' ),
     69            exportersCount = $action.data( 'exporters-count' ),
     70            sendAsEmail    = $action.data( 'send-as-email' ) ? true : false;
     71
    6272        event.preventDefault();
    6373        event.stopPropagation();
    6474
    65         var $this          = $( this );
    66         var $action        = $this.parents( '.export_personal_data' );
    67         var $requestRow    = $this.parents( 'tr' );
    68         var requestID      = $action.data( 'request-id' );
    69         var nonce          = $action.data( 'nonce' );
    70         var exportersCount = $action.data( 'exporters-count' );
    71         var sendAsEmail    = $action.data( 'send-as-email' ) ? true : false;
    72 
    7375        $action.blur();
    7476        clearResultsAfterRow( $requestRow );
    7577
    76         function on_export_done_success( zipUrl ) {
    77             set_action_state( $action, 'export_personal_data_success' );
     78        function onExportDoneSuccess( zipUrl ) {
     79            setActionState( $action, 'export-personal-data-success' );
    7880            if ( 'undefined' !== typeof zipUrl ) {
    7981                window.location = zipUrl;
    8082            } else if ( ! sendAsEmail ) {
    81                 on_export_failure( strings.noExportFile );
    82             }
    83         }
    84 
    85         function on_export_failure( errorMessage ) {
    86             set_action_state( $action, 'export_personal_data_failed' );
     83                onExportFailure( strings.noExportFile );
     84            }
     85        }
     86
     87        function onExportFailure( errorMessage ) {
     88            setActionState( $action, 'export-personal-data-failed' );
    8789            if ( errorMessage ) {
    8890                appendResultsAfterRow( $requestRow, 'notice-error', strings.exportError, [ errorMessage ] );
     
    9092        }
    9193
    92         function do_next_export( exporterIndex, pageIndex ) {
     94        function doNextExport( exporterIndex, pageIndex ) {
    9395            $.ajax(
    9496                {
     
    105107                }
    106108            ).done( function( response ) {
     109                var responseData = response.data;
     110
    107111                if ( ! response.success ) {
     112
    108113                    // e.g. invalid request ID
    109                     on_export_failure( response.data );
     114                    onExportFailure( response.data );
    110115                    return;
    111116                }
    112                 var responseData = response.data;
     117
    113118                if ( ! responseData.done ) {
    114                     setTimeout( do_next_export( exporterIndex, pageIndex + 1 ) );
     119                    setTimeout( doNextExport( exporterIndex, pageIndex + 1 ) );
    115120                } else {
    116121                    if ( exporterIndex < exportersCount ) {
    117                         setTimeout( do_next_export( exporterIndex + 1, 1 ) );
     122                        setTimeout( doNextExport( exporterIndex + 1, 1 ) );
    118123                    } else {
    119                         on_export_done_success( responseData.url );
     124                        onExportDoneSuccess( responseData.url );
    120125                    }
    121126                }
    122             } ).fail( function( jqxhr, textStatus, error ) {
     127            }).fail( function( jqxhr, textStatus, error ) {
     128
    123129                // e.g. Nonce failure
    124                 on_export_failure( error );
    125             } );
     130                onExportFailure( error );
     131            });
    126132        }
    127133
    128134        // And now, let's begin
    129         set_action_state( $action, 'export_personal_data_processing' );
    130         do_next_export( 1, 1 );
    131     } );
    132 
    133     $( '.remove_personal_data a' ).click( function( event ) {
    134         event.preventDefault();
     135        setActionState( $action, 'export-personal-data-processing' );
     136        doNextExport( 1, 1 );
     137    });
     138
     139    $( '.remove-personal-data-handle' ).click( function( event ) {
     140
     141        var $this         = $( this ),
     142            $action       = $this.parents( '.remove-personal-data' ),
     143            $requestRow   = $this.parents( 'tr' ),
     144            requestID     = $action.data( 'request-id' ),
     145            nonce         = $action.data( 'nonce' ),
     146            erasersCount  = $action.data( 'erasers-count' ),
     147            hasRemoved    = false,
     148            hasRetained   = false,
     149            messages      = [];
     150
    135151        event.stopPropagation();
    136 
    137         var $this         = $( this );
    138         var $action       = $this.parents( '.remove_personal_data' );
    139         var $requestRow   = $this.parents( 'tr' );
    140         var requestID     = $action.data( 'request-id' );
    141         var nonce         = $action.data( 'nonce' );
    142         var erasersCount  = $action.data( 'erasers-count' );
    143 
    144         var hasRemoved    = false;
    145         var hasRetained   = false;
    146         var messages      = [];
    147152
    148153        $action.blur();
    149154        clearResultsAfterRow( $requestRow );
    150155
    151         function on_erasure_done_success() {
    152             set_action_state( $action, 'remove_personal_data_idle' );
     156        function onErasureDoneSuccess() {
    153157            var summaryMessage = strings.noDataFound;
    154158            var classes = 'notice-success';
     159
     160            setActionState( $action, 'remove-personal-data-idle' );
     161
    155162            if ( false === hasRemoved ) {
    156163                if ( false === hasRetained ) {
     
    171178        }
    172179
    173         function on_erasure_failure() {
    174             set_action_state( $action, 'remove_personal_data_failed' );
     180        function onErasureFailure() {
     181            setActionState( $action, 'remove-personal-data-failed' );
    175182            appendResultsAfterRow( $requestRow, 'notice-error', strings.removalError, [] );
    176183        }
    177184
    178         function do_next_erasure( eraserIndex, pageIndex ) {
    179             $.ajax( {
     185        function doNextErasure( eraserIndex, pageIndex ) {
     186            $.ajax({
    180187                url: window.ajaxurl,
    181188                data: {
     
    187194                },
    188195                method: 'post'
    189             } ).done( function( response ) {
     196            }).done( function( response ) {
     197                var responseData = response.data;
     198
    190199                if ( ! response.success ) {
    191                     on_erasure_failure();
     200                    onErasureFailure();
    192201                    return;
    193202                }
    194                 var responseData = response.data;
    195203                if ( responseData.items_removed ) {
    196204                    hasRemoved = hasRemoved || responseData.items_removed;
     
    203211                }
    204212                if ( ! responseData.done ) {
    205                     setTimeout( do_next_erasure( eraserIndex, pageIndex + 1 ) );
     213                    setTimeout( doNextErasure( eraserIndex, pageIndex + 1 ) );
    206214                } else {
    207215                    if ( eraserIndex < erasersCount ) {
    208                         setTimeout( do_next_erasure( eraserIndex + 1, 1 ) );
     216                        setTimeout( doNextErasure( eraserIndex + 1, 1 ) );
    209217                    } else {
    210                         on_erasure_done_success();
     218                        onErasureDoneSuccess();
    211219                    }
    212220                }
    213             } ).fail( function() {
    214                 on_erasure_failure();
    215             } );
     221            }).fail( function() {
     222                onErasureFailure();
     223            });
    216224        }
    217225
    218226        // And now, let's begin
    219         set_action_state( $action, 'remove_personal_data_processing' );
    220 
    221         do_next_erasure( 1, 1 );
    222     } );
    223 } );
     227        setActionState( $action, 'remove-personal-data-processing' );
     228
     229        doNextErasure( 1, 1 );
     230    });
     231});
    224232
    225233( function( $ ) {
     234
    226235    // Privacy policy page, copy button.
    227236    $( document ).on( 'click', function( event ) {
     
    254263    });
    255264
    256 } )( jQuery );
     265} ( jQuery ) );
  • trunk/src/wp-includes/user.php

    r43211 r43212  
    30793079
    30803080    if ( $request && in_array( $request->action_name, _wp_privacy_action_request_types(), true ) ) {
    3081         $message = '<p class="message">' . __( 'Action has been confirmed.' ) . '</p>';
     3081        $message  = '<p class="message">' . __( 'Action has been confirmed.' ) . '</p>';
    30823082        $message .= __( 'The site administrator has been notified and will fulfill your request as soon as possible.' );
    30833083    }
     
    31123112
    31133113    $user    = get_user_by( 'email', $email_address );
    3114     $user_id = $user && ! is_wp_error( $user ) ? $user->ID: 0;
     3114    $user_id = $user && ! is_wp_error( $user ) ? $user->ID : 0;
    31153115
    31163116    // Check for duplicates.
Note: See TracChangeset for help on using the changeset viewer.