' .
+ '
' . __( 'Remove Personal Data' ) . '' .
+ '
' . __( 'Removing Data...' ) . '' .
+ '
' . __( 'Removing Data Failed!' ) . ' ' . __( 'Retry' ) . '';
+
+ echo $remove_data_markup;
+ break;
+ case 'request-failed':
+ submit_button( __( 'Retry' ), 'secondary', 'privacy_action_email_retry[' . $item['request_id'] . ']', false );
+ break;
+ case 'request-completed':
+ echo '
' . esc_html__( 'Remove request' ) . '';
+ break;
+ }
}
}
Index: src/wp-admin/js/xfn.js
===================================================================
--- src/wp-admin/js/xfn.js (revision 42985)
+++ src/wp-admin/js/xfn.js (working copy)
@@ -20,3 +20,124 @@
$( '#link_rel' ).val( ( isMe ) ? 'me' : inputs.substr( 0,inputs.length - 1 ) );
});
});
+
+// Privacy request action handling
+
+jQuery( document ).ready( function( $ ) {
+ var strings = window.privacyToolsL10n || {};
+
+ function set_action_state( $action, state ) {
+ $action.children().hide();
+ $action.children( '.' + state ).show();
+ }
+
+ function clearResultsAfterRow( $requestRow ) {
+ if ( $requestRow.next().hasClass( 'request-results' ) ) {
+ $requestRow.next().remove();
+ }
+ }
+
+ function appendResultsAfterRow( $requestRow, classes, summaryMessage, additionalMessages ) {
+ clearResultsAfterRow( $requestRow );
+ if ( additionalMessages.length ) {
+ // TODO - render additionalMessages after the summaryMessage
+ }
+
+ $requestRow.after( function() {
+ return '
' +
+ summaryMessage +
+ ' |
';
+ } );
+ }
+
+ $( '.remove_personal_data a' ).click( function( event ) {
+ event.preventDefault();
+ event.stopPropagation();
+
+ var $this = $( this );
+ var $action = $this.parents( '.remove_personal_data' );
+ var $requestRow = $this.parents( 'tr' );
+ var requestID = $action.data( 'request-id' );
+ var nonce = $action.data( 'nonce' );
+ var erasersCount = $action.data( 'erasers-count' );
+
+ var removedCount = 0;
+ var retainedCount = 0;
+ var messages = [];
+
+ $action.blur();
+ clearResultsAfterRow( $requestRow );
+
+ function on_erasure_done_success() {
+ set_action_state( $action, 'remove_personal_data_idle' );
+ var summaryMessage = strings.noDataFound;
+ var classes = 'notice-success';
+ if ( 0 == removedCount ) {
+ if ( 0 == retainedCount ) {
+ summaryMessage = strings.noDataFound;
+ } else {
+ summaryMessage = strings.noneRemoved;
+ classes = 'notice-warning';
+ }
+ } else {
+ if ( 0 == retainedCount ) {
+ summaryMessage = strings.foundAndRemoved;
+ } else {
+ summaryMessage = strings.someNotRemoved;
+ classes = 'notice-warning';
+ }
+ }
+ appendResultsAfterRow( $requestRow, 'notice-success', summaryMessage, [] );
+ }
+
+ function on_erasure_failure( textStatus, error ) {
+ set_action_state( $action, 'remove_personal_data_failed' );
+ appendResultsAfterRow( $requestRow, 'notice-error', strings.anErrorOccurred, [] );
+ }
+
+ function do_next_erasure( eraserIndex, pageIndex ) {
+ $.ajax( {
+ url: ajaxurl,
+ data: {
+ action: 'wp-privacy-erase-personal-data',
+ eraser: eraserIndex,
+ id: requestID,
+ page: pageIndex,
+ security: nonce,
+ },
+ method: 'post'
+ } ).done( function( response ) {
+ if ( ! response.success ) {
+ on_erasure_failure( 'error', response.data );
+ return;
+ }
+ var responseData = response.data;
+ if ( responseData.num_items_removed ) {
+ removedCount += responseData.num_items_removed;
+ }
+ if ( responseData.num_items_retained ) {
+ retainedCount += responseData.num_items_removed;
+ }
+ if ( responseData.messages ) {
+ messages = messages.concat( responseData.messages );
+ }
+ if ( ! responseData.done ) {
+ setTimeout( do_next_erasure( eraserIndex, pageIndex + 1 ) );
+ } else {
+ if ( eraserIndex < erasersCount ) {
+ setTimeout( do_next_erasure( eraserIndex + 1, 1 ) );
+ } else {
+ on_erasure_done_success();
+ }
+ }
+ } ).fail( function( jqxhr, textStatus, error ) {
+ on_erasure_failure( textStatus, error );
+ } );
+ }
+
+ // And now, let's begin
+ set_action_state( $action, 'remove_personal_data_processing' );
+
+ do_next_erasure( 1, 1 );
+ } )
+} );
Index: src/wp-includes/script-loader.php
===================================================================
--- src/wp-includes/script-loader.php (revision 42985)
+++ src/wp-includes/script-loader.php (working copy)
@@ -709,6 +709,15 @@
);
$scripts->add( 'xfn', "/wp-admin/js/xfn$suffix.js", array( 'jquery' ), false, 1 );
+ did_action( 'init' ) && $scripts->localize(
+ 'xfn', 'privacyToolsL10n', array(
+ 'noDataFound' => __( 'No personal data was found for this user.' ),
+ 'foundAndRemoved' => __( 'All of the personal data found for this user was removed.' ),
+ 'noneRemoved' => __( 'Personal data was found for this user but was not removed.' ),
+ 'someNotRemoved' => __( 'Personal data was found for this user but some of the personal data found was not removed.' ),
+ 'anErrorOccurred' => __( 'An error occurred while attempting to find and remove personal data.' ),
+ )
+ );
$scripts->add( 'postbox', "/wp-admin/js/postbox$suffix.js", array( 'jquery-ui-sortable' ), false, 1 );
did_action( 'init' ) && $scripts->localize(