WordPress.org

Make WordPress Core

Ticket #43929: 43929.diff

File 43929.diff, 16.4 KB (added by xkon, 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',
     
    10161016                }
    10171017
    10181018                $query = "
    1019                         SELECT post_status, COUNT( * ) AS num_posts 
    1020                         FROM {$wpdb->posts} 
     1019                        SELECT post_status, COUNT( * ) AS num_posts
     1020                        FROM {$wpdb->posts}
    10211021                        WHERE post_type = %s
    10221022                        AND post_name = %s
    10231023                        GROUP BY post_status";
     
    10831083        public function process_bulk_action() {
    10841084                $action      = $this->current_action();
    10851085                $request_ids = isset( $_REQUEST['request_id'] ) ? wp_parse_id_list( wp_unslash( $_REQUEST['request_id'] ) ) : array(); // WPCS: input var ok, CSRF ok.
    1086                 $count = 0;
     1086                $count       = 0;
    10871087
    10881088                if ( $request_ids ) {
    10891089                        check_admin_referer( 'bulk-privacy_requests' );
     
    11001100                                add_settings_error(
    11011101                                        'bulk_action',
    11021102                                        'bulk_action',
     1103                                        // translators: number of requests
    11031104                                        sprintf( _n( 'Deleted %d request', 'Deleted %d requests', $count ), $count ),
    11041105                                        'updated'
    11051106                                );
     
    11161117                                add_settings_error(
    11171118                                        'bulk_action',
    11181119                                        'bulk_action',
     1120                                        // translators: number of requests
    11191121                                        sprintf( _n( 'Re-sent %d request', 'Re-sent %d requests', $count ), $count ),
    11201122                                        'updated'
    11211123                                );
     
    12371239                $time_diff = current_time( 'timestamp', true ) - $timestamp;
    12381240
    12391241                if ( $time_diff >= 0 && $time_diff < DAY_IN_SECONDS ) {
     1242                        // translators: human readable timestamp
    12401243                        return sprintf( __( '%s ago' ), human_time_diff( $timestamp ) );
    12411244                }
    12421245
     
    13441347                $request_id      = $item->ID;
    13451348                $nonce           = wp_create_nonce( 'wp-privacy-export-personal-data-' . $request_id );
    13461349
    1347                 $download_data_markup = '<div class="export_personal_data" ' .
     1350                $download_data_markup = '<div class="export-personal-data" ' .
    13481351                        'data-exporters-count="' . esc_attr( $exporters_count ) . '" ' .
    13491352                        'data-request-id="' . esc_attr( $request_id ) . '" ' .
    13501353                        'data-nonce="' . esc_attr( $nonce ) .
    13511354                        '">';
    13521355
    1353                 $download_data_markup .= '<span class="export_personal_data_idle"><a href="#" >' . __( 'Download Personal Data' ) . '</a></span>' .
    1354                         '<span style="display:none" class="export_personal_data_processing" >' . __( 'Downloading Data...' ) . '</span>' .
    1355                         '<span style="display:none" class="export_personal_data_success"><a href="#" >' . __( 'Download Personal Data Again' ) . '</a></span>' .
    1356                         '<span style="display:none" class="export_personal_data_failed">' . __( 'Download has failed.' ) . ' <a href="#" >' . __( 'Retry' ) . '</a></span>';
     1356                $download_data_markup .= '<span class="export-personal-data-idle"><a href="#" class="export-personal-data-handle">' . __( 'Download Personal Data' ) . '</a></span>' .
     1357                        '<span style="display:none" class="export-personal-data-processing" >' . __( 'Downloading Data...' ) . '</span>' .
     1358                        '<span style="display:none" class="export-personal-data-success"><a href="#" >' . __( 'Download Personal Data Again' ) . '</a></span>' .
     1359                        '<span style="display:none" class="export-personal-data-failed">' . __( 'Download has failed.' ) . ' <a href="#" >' . __( 'Retry' ) . '</a></span>';
    13571360
    13581361                $download_data_markup .= '</div>';
    13591362
    13601363                $row_actions = array(
    1361                         'download_data' => $download_data_markup,
     1364                        'download-data' => $download_data_markup,
    13621365                );
    13631366
    13641367                return sprintf( '<a href="%1$s">%2$s</a> %3$s', esc_url( 'mailto:' . $item->email ), $item->email, $this->row_actions( $row_actions ) );
     
    13841387                                $request_id      = $item->ID;
    13851388                                $nonce           = wp_create_nonce( 'wp-privacy-export-personal-data-' . $request_id );
    13861389
    1387                                 echo '<div class="export_personal_data" ' .
     1390                                echo '<div class="export-personal-data" ' .
    13881391                                        'data-send-as-email="1" ' .
    13891392                                        'data-exporters-count="' . esc_attr( $exporters_count ) . '" ' .
    13901393                                        'data-request-id="' . esc_attr( $request_id ) . '" ' .
     
    13921395                                        '">';
    13931396
    13941397                                ?>
    1395                                 <span class="export_personal_data_idle"><a class="button" href="#" ><?php _e( 'Email Data' ); ?></a></span>
    1396                                 <span style="display:none" class="export_personal_data_processing button updating-message" ><?php _e( 'Sending Email...' ); ?></span>
    1397                                 <span style="display:none" class="export_personal_data_success success-message" ><?php _e( 'Email sent.' ); ?></span>
    1398                                 <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>
     1398                                <span class="export-personal-data-idle"><button class="button export-personal-data-handle"><?php _e( 'Email Data' ); ?></button></span>
     1399                                <span style="display:none" class="export-personal-data-processing button updating-message" ><?php _e( 'Sending Email...' ); ?></span>
     1400                                <span style="display:none" class="export-personal-data-success success-message" ><?php _e( 'Email sent.' ); ?></span>
     1401                                <span style="display:none" class="export-personal-data-failed"><?php _e( 'Email could not be sent.' ); ?> <button class="button export-personal-data-handle"><?php _e( 'Retry' ); ?></button></span>
    13991402                                <?php
    14001403
    14011404                                echo '</div>';
     
    14051408                                break;
    14061409                        case 'request-completed':
    14071410                                echo '<a href="' . esc_url( wp_nonce_url( add_query_arg( array(
    1408                                         'action' => 'delete',
     1411                                        'action'     => 'delete',
    14091412                                        'request_id' => array( $item->ID )
    14101413                                ), admin_url( 'tools.php?page=export_personal_data' ) ), 'bulk-privacy_requests' ) ) . '">' . esc_html__( 'Remove request' ) . '</a>';
    14111414                                break;
     
    14561459                        $request_id    = $item->ID;
    14571460                        $nonce         = wp_create_nonce( 'wp-privacy-erase-personal-data-' . $request_id );
    14581461
    1459                         $remove_data_markup = '<div class="remove_personal_data force_remove_personal_data" ' .
     1462                        $remove_data_markup = '<div class="remove-personal-data force-remove-personal-data" ' .
    14601463                                'data-erasers-count="' . esc_attr( $erasers_count ) . '" ' .
    14611464                                'data-request-id="' . esc_attr( $request_id ) . '" ' .
    14621465                                'data-nonce="' . esc_attr( $nonce ) .
    14631466                                '">';
    14641467
    1465                         $remove_data_markup .= '<span class="remove_personal_data_idle"><a href="#" >' . __( 'Force Remove Personal Data' ) . '</a></span>' .
    1466                                 '<span style="display:none" class="remove_personal_data_processing" >' . __( 'Removing Data...' ) . '</span>' .
    1467                                 '<span style="display:none" class="remove_personal_data_failed">' . __( 'Force Remove has failed.' ) . ' <a href="#" >' . __( 'Retry' ) . '</a></span>';
     1468                        $remove_data_markup .= '<span class="remove-personal-data-idle"><a href="#" class="remove-personal-data-handle">' . __( 'Force Remove Personal Data' ) . '</a></span>' .
     1469                                '<span style="display:none" class="remove-personal-data-processing" >' . __( 'Removing Data...' ) . '</span>' .
     1470                                '<span style="display:none" class="remove-personal-data-failed">' . __( 'Force Remove has failed.' ) . ' <a href="#" class="remove-personal-data-handle">' . __( 'Retry' ) . '</a></span>';
    14681471
    14691472                        $remove_data_markup .= '</div>';
    14701473
    14711474                        $row_actions = array(
    1472                                 'remove_data' => $remove_data_markup,
     1475                                'remove-data' => $remove_data_markup,
    14731476                        );
    14741477                }
    14751478
     
    14961499                                $request_id    = $item->ID;
    14971500                                $nonce         = wp_create_nonce( 'wp-privacy-erase-personal-data-' . $request_id );
    14981501
    1499                                 echo '<div class="remove_personal_data" ' .
     1502                                echo '<div class="remove-personal-data" ' .
    15001503                                        'data-force-erase="1" ' .
    15011504                                        'data-erasers-count="' . esc_attr( $erasers_count ) . '" ' .
    15021505                                        'data-request-id="' . esc_attr( $request_id ) . '" ' .
     
    15041507                                        '">';
    15051508
    15061509                                ?>
    1507                                 <span class="remove_personal_data_idle"><a class="button" href="#" ><?php _e( 'Remove Personal Data' ); ?></a></span>
    1508                                 <span style="display:none" class="remove_personal_data_processing button updating-message" ><?php _e( 'Removing Data...' ); ?></span>
    1509                                 <span style="display:none" class="remove_personal_data_failed"><?php _e( 'Removing Data has failed.' ); ?> <a class="button" href="#" ><?php _e( 'Retry' ); ?></a></span>
     1510                                <span class="remove-personal-data-idle"><button class="button remove-personal-data-handle"><?php _e( 'Remove Personal Data' ); ?></button></span>
     1511                                <span style="display:none" class="remove-personal-data-processing button updating-message" ><?php _e( 'Removing Data...' ); ?></span>
     1512                                <span style="display:none" class="remove-personal-data-failed"><?php _e( 'Removing Data has failed.' ); ?> <button class="button remove-personal-data-handle"><?php _e( 'Retry' ); ?></button></span>
    15101513                                <?php
    15111514
    15121515                                echo '</div>';
     
    15171520                                break;
    15181521                        case 'request-completed':
    15191522                                echo '<a href="' . esc_url( wp_nonce_url( add_query_arg( array(
    1520                                         'action' => 'delete',
     1523                                        'action'     => 'delete',
    15211524                                        'request_id' => array( $item->ID ),
    15221525                                ), admin_url( 'tools.php?page=remove_personal_data' ) ), 'bulk-privacy_requests' ) ) . '">' . esc_html__( 'Remove request' ) . '</a>';
    15231526                                break;
  • 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 ) {
     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
    134151                event.preventDefault();
    135152                event.stopPropagation();
    136153
    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      = [];
    147 
    148154                $action.blur();
    149155                clearResultsAfterRow( $requestRow );
    150156
    151                 function on_erasure_done_success() {
    152                         set_action_state( $action, 'remove_personal_data_idle' );
     157                function onErasureDoneSuccess() {
    153158                        var summaryMessage = strings.noDataFound;
    154159                        var classes = 'notice-success';
     160
     161                        setActionState( $action, 'remove-personal-data-idle' );
     162
    155163                        if ( false === hasRemoved ) {
    156164                                if ( false === hasRetained ) {
    157165                                        summaryMessage = strings.noDataFound;
     
    170178                        appendResultsAfterRow( $requestRow, 'notice-success', summaryMessage, messages );
    171179                }
    172180
    173                 function on_erasure_failure() {
    174                         set_action_state( $action, 'remove_personal_data_failed' );
     181                function onErasureFailure() {
     182                        setActionState( $action, 'remove-personal-data-failed' );
    175183                        appendResultsAfterRow( $requestRow, 'notice-error', strings.removalError, [] );
    176184                }
    177185
    178                 function do_next_erasure( eraserIndex, pageIndex ) {
    179                         $.ajax( {
     186                function doNextErasure( eraserIndex, pageIndex ) {
     187                        $.ajax({
    180188                                url: window.ajaxurl,
    181189                                data: {
    182190                                        action: 'wp-privacy-erase-personal-data',
     
    186194                                        security: nonce
    187195                                },
    188196                                method: 'post'
    189                         } ).done( function( response ) {
     197                        }).done( function( response ) {
     198                                var responseData = response.data;
     199
    190200                                if ( ! response.success ) {
    191                                         on_erasure_failure();
     201                                        onErasureFailure();
    192202                                        return;
    193203                                }
    194                                 var responseData = response.data;
    195204                                if ( responseData.items_removed ) {
    196205                                        hasRemoved = hasRemoved || responseData.items_removed;
    197206                                }
     
    202211                                        messages = messages.concat( responseData.messages );
    203212                                }
    204213                                if ( ! responseData.done ) {
    205                                         setTimeout( do_next_erasure( eraserIndex, pageIndex + 1 ) );
     214                                        setTimeout( doNextErasure( eraserIndex, pageIndex + 1 ) );
    206215                                } else {
    207216                                        if ( eraserIndex < erasersCount ) {
    208                                                 setTimeout( do_next_erasure( eraserIndex + 1, 1 ) );
     217                                                setTimeout( doNextErasure( eraserIndex + 1, 1 ) );
    209218                                        } else {
    210                                                 on_erasure_done_success();
     219                                                onErasureDoneSuccess();
    211220                                        }
    212221                                }
    213                         } ).fail( function() {
    214                                 on_erasure_failure();
    215                         } );
     222                        }).fail( function() {
     223                                onErasureFailure();
     224                        });
    216225                }
    217226
    218227                // And now, let's begin
    219                 set_action_state( $action, 'remove_personal_data_processing' );
     228                setActionState( $action, 'remove-personal-data-processing' );
    220229
    221                 do_next_erasure( 1, 1 );
    222         } );
    223 } );
     230                doNextErasure( 1, 1 );
     231        });
     232});