WordPress.org

Make WordPress Core

Ticket #43929: 43929.5.diff

File 43929.5.diff, 16.7 KB (added by desrosj, 19 months ago)
  • src/wp-admin/includes/user.php

     
    760760                'posts_per_page' => -1,
    761761                'post_status'    => 'request-pending',
    762762                'fields'         => 'ids',
    763                 'date_query' => array(
     763                'date_query'     => array(
    764764                        array(
    765765                                'column' => 'post_modified_gmt',
    766766                                'before' => $expires . ' seconds ago',
     
    11511151        public function process_bulk_action() {
    11521152                $action      = $this->current_action();
    11531153                $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;
     1154                $count       = 0;
    11551155
    11561156                if ( $request_ids ) {
    11571157                        check_admin_referer( 'bulk-privacy_requests' );
     
    11681168                                add_settings_error(
    11691169                                        'bulk_action',
    11701170                                        'bulk_action',
     1171                                        /* translators: %d: number of requests */
    11711172                                        sprintf( _n( 'Deleted %d request', 'Deleted %d requests', $count ), $count ),
    11721173                                        'updated'
    11731174                                );
     
    11841185                                add_settings_error(
    11851186                                        'bulk_action',
    11861187                                        'bulk_action',
     1188                                        /* translators: %d: number of requests */
    11871189                                        sprintf( _n( 'Re-sent %d request', 'Re-sent %d requests', $count ), $count ),
    11881190                                        'updated'
    11891191                                );
     
    13051307                $time_diff = current_time( 'timestamp', true ) - $timestamp;
    13061308
    13071309                if ( $time_diff >= 0 && $time_diff < DAY_IN_SECONDS ) {
     1310                        /* translators: human readable timestamp */
    13081311                        return sprintf( __( '%s ago' ), human_time_diff( $timestamp ) );
    13091312                }
    13101313
     
    14121415                $request_id      = $item->ID;
    14131416                $nonce           = wp_create_nonce( 'wp-privacy-export-personal-data-' . $request_id );
    14141417
    1415                 $download_data_markup = '<div class="export_personal_data" ' .
     1418                $download_data_markup = '<div class="export-personal-data" ' .
    14161419                        'data-exporters-count="' . esc_attr( $exporters_count ) . '" ' .
    14171420                        'data-request-id="' . esc_attr( $request_id ) . '" ' .
    14181421                        'data-nonce="' . esc_attr( $nonce ) .
    14191422                        '">';
    14201423
    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>';
     1424                $download_data_markup .= '<span class="export-personal-data-idle"><button type="button" class="button-link export-personal-data-handle">' . __( 'Download Personal Data' ) . '</button></span>' .
     1425                        '<span style="display:none" class="export-personal-data-processing" >' . __( 'Downloading Data...' ) . '</span>' .
     1426                        '<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>' .
     1427                        '<span style="display:none" class="export-personal-data-failed">' . __( 'Download has failed.' ) . ' <button type="button" class="button-link">' . __( 'Retry' ) . '</button></span>';
    14251428
    14261429                $download_data_markup .= '</div>';
    14271430
    14281431                $row_actions = array(
    1429                         'download_data' => $download_data_markup,
     1432                        'download-data' => $download_data_markup,
    14301433                );
    14311434
    14321435                return sprintf( '<a href="%1$s">%2$s</a> %3$s', esc_url( 'mailto:' . $item->email ), $item->email, $this->row_actions( $row_actions ) );
     
    14521455                                $request_id      = $item->ID;
    14531456                                $nonce           = wp_create_nonce( 'wp-privacy-export-personal-data-' . $request_id );
    14541457
    1455                                 echo '<div class="export_personal_data" ' .
     1458                                echo '<div class="export-personal-data" ' .
    14561459                                        'data-send-as-email="1" ' .
    14571460                                        'data-exporters-count="' . esc_attr( $exporters_count ) . '" ' .
    14581461                                        'data-request-id="' . esc_attr( $request_id ) . '" ' .
     
    14601463                                        '">';
    14611464
    14621465                                ?>
    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>
     1466                                <span class="export-personal-data-idle"><button type="button" class="button export-personal-data-handle"><?php _e( 'Email Data' ); ?></button></span>
     1467                                <span style="display:none" class="export-personal-data-processing button updating-message" ><?php _e( 'Sending Email...' ); ?></span>
     1468                                <span style="display:none" class="export-personal-data-success success-message" ><?php _e( 'Email sent.' ); ?></span>
     1469                                <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>
    14671470                                <?php
    14681471
    14691472                                echo '</div>';
     
    14731476                                break;
    14741477                        case 'request-completed':
    14751478                                echo '<a href="' . esc_url( wp_nonce_url( add_query_arg( array(
    1476                                         'action' => 'delete',
     1479                                        'action'     => 'delete',
    14771480                                        'request_id' => array( $item->ID )
    1478                                 ), admin_url( 'tools.php?page=export_personal_data' ) ), 'bulk-privacy_requests' ) ) . '">' . esc_html__( 'Remove request' ) . '</a>';
     1481                                ), admin_url( 'tools.php?page=export_personal_data' ) ), 'bulk-privacy_requests' ) ) . '" class="button">' . esc_html__( 'Remove request' ) . '</a>';
    14791482                                break;
    14801483                }
    14811484        }
     
    15241527                        $request_id    = $item->ID;
    15251528                        $nonce         = wp_create_nonce( 'wp-privacy-erase-personal-data-' . $request_id );
    15261529
    1527                         $remove_data_markup = '<div class="remove_personal_data force_remove_personal_data" ' .
     1530                        $remove_data_markup = '<div class="remove-personal-data force-remove-personal-data" ' .
    15281531                                'data-erasers-count="' . esc_attr( $erasers_count ) . '" ' .
    15291532                                'data-request-id="' . esc_attr( $request_id ) . '" ' .
    15301533                                'data-nonce="' . esc_attr( $nonce ) .
    15311534                                '">';
    15321535
    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>';
     1536                        $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>' .
     1537                                '<span style="display:none" class="remove-personal-data-processing" >' . __( 'Erasing Data...' ) . '</span>' .
     1538                                '<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>';
    15361539
    15371540                        $remove_data_markup .= '</div>';
    15381541
    15391542                        $row_actions = array(
    1540                                 'remove_data' => $remove_data_markup,
     1543                                'remove-data' => $remove_data_markup,
    15411544                        );
    15421545                }
    15431546
     
    15641567                                $request_id    = $item->ID;
    15651568                                $nonce         = wp_create_nonce( 'wp-privacy-erase-personal-data-' . $request_id );
    15661569
    1567                                 echo '<div class="remove_personal_data" ' .
     1570                                echo '<div class="remove-personal-data" ' .
    15681571                                        'data-force-erase="1" ' .
    15691572                                        'data-erasers-count="' . esc_attr( $erasers_count ) . '" ' .
    15701573                                        'data-request-id="' . esc_attr( $request_id ) . '" ' .
     
    15721575                                        '">';
    15731576
    15741577                                ?>
    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>
     1578                                <span class="remove-personal-data-idle"><button type="button" class="button remove-personal-data-handle"><?php _e( 'Erase Personal Data' ); ?></button></span>
     1579                                <span style="display:none" class="remove-personal-data-processing button updating-message" ><?php _e( 'Erasing Data...' ); ?></span>
     1580                                <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>
    15781581                                <?php
    15791582
    15801583                                echo '</div>';
     
    15851588                                break;
    15861589                        case 'request-completed':
    15871590                                echo '<a href="' . esc_url( wp_nonce_url( add_query_arg( array(
    1588                                         'action' => 'delete',
     1591                                        'action'     => 'delete',
    15891592                                        'request_id' => array( $item->ID ),
    1590                                 ), admin_url( 'tools.php?page=remove_personal_data' ) ), 'bulk-privacy_requests' ) ) . '">' . esc_html__( 'Remove request' ) . '</a>';
     1593                                ), admin_url( 'tools.php?page=remove_personal_data' ) ), 'bulk-privacy_requests' ) ) . '" class="button">' . esc_html__( 'Remove request' ) . '</a>';
    15911594                                break;
    15921595                }
    15931596        }
  • src/wp-admin/js/xfn.js

     
    2525jQuery( document ).ready( function( $ ) {
    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();
    3131        }
     
    3737        }
    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                }
    4950
     
    5556                                '</div>' +
    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 );
     83                                onExportFailure( strings.noExportFile );
    8284                        }
    8385                }
    8486
    85                 function on_export_failure( errorMessage ) {
    86                         set_action_state( $action, 'export_personal_data_failed' );
     87                function onExportFailure( errorMessage ) {
     88                        setActionState( $action, 'export-personal-data-failed' );
    8789                        if ( errorMessage ) {
    8890                                appendResultsAfterRow( $requestRow, 'notice-error', strings.exportError, [ errorMessage ] );
    8991                        }
    9092                }
    9193
    92                 function do_next_export( exporterIndex, pageIndex ) {
     94                function doNextExport( exporterIndex, pageIndex ) {
    9395                        $.ajax(
    9496                                {
    9597                                        url: window.ajaxurl,
     
    104106                                        method: 'post'
    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         } );
     135                setActionState( $action, 'export-personal-data-processing' );
     136                doNextExport( 1, 1 );
     137        });
    132138
    133         $( '.remove_personal_data a' ).click( function( event ) {
    134                 event.preventDefault();
    135                 event.stopPropagation();
     139        $( '.remove-personal-data-handle' ).click( function( event ) {
    136140
    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' );
     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      = [];
    143150
    144                 var hasRemoved    = false;
    145                 var hasRetained   = false;
    146                 var messages      = [];
     151                event.stopPropagation();
    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 ) {
    157164                                        summaryMessage = strings.noDataFound;
     
    170177                        appendResultsAfterRow( $requestRow, 'notice-success', summaryMessage, messages );
    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: {
    182189                                        action: 'wp-privacy-erase-personal-data',
     
    186193                                        security: nonce
    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;
    197205                                }
     
    202210                                        messages = messages.concat( responseData.messages );
    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' );
     227        setActionState( $action, 'remove-personal-data-processing' );
    220228
    221                 do_next_erasure( 1, 1 );
    222         } );
     229        doNextErasure( 1, 1 );
     230        });
    223231} );
    224232
    225233( function( $ ) {