Privacy: add means to erase personal data by username or email address. First run.

Props allendav, coreymckrill, ericdaams, azaozz.
See #43637, #43602.
Built from https://develop.svn.wordpress.org/trunk@42986


git-svn-id: http://core.svn.wordpress.org/trunk@42815 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Andrew Ozz
2018-04-18 22:30:22 +00:00
parent 8d9e4937f8
commit b4fdb9ebf2
7 changed files with 453 additions and 58 deletions

View File

@@ -20,3 +20,124 @@ jQuery( document ).ready(function( $ ) {
$( '#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 '<tr class="request-results"><td colspan="5"><div class="notice inline notice-alt ' + classes + '"><p>' +
summaryMessage +
'</p></div></td></tr>';
} );
}
$( '.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 );
} )
} );

View File

@@ -1 +1 @@
jQuery(document).ready(function(a){a("#link_rel").prop("readonly",!0),a("#linkxfndiv input").bind("click keyup",function(){var b=a("#me").is(":checked"),c="";a("input.valinp").each(function(){b?a(this).prop("disabled",!0).parent().addClass("disabled"):(a(this).removeAttr("disabled").parent().removeClass("disabled"),a(this).is(":checked")&&""!==a(this).val()&&(c+=a(this).val()+" "))}),a("#link_rel").val(b?"me":c.substr(0,c.length-1))})});
jQuery(document).ready(function(a){a("#link_rel").prop("readonly",!0),a("#linkxfndiv input").bind("click keyup",function(){var b=a("#me").is(":checked"),c="";a("input.valinp").each(function(){b?a(this).prop("disabled",!0).parent().addClass("disabled"):(a(this).removeAttr("disabled").parent().removeClass("disabled"),a(this).is(":checked")&&""!==a(this).val()&&(c+=a(this).val()+" "))}),a("#link_rel").val(b?"me":c.substr(0,c.length-1))})}),jQuery(document).ready(function(a){function b(a,b){a.children().hide(),a.children("."+b).show()}function c(a){a.next().hasClass("request-results")&&a.next().remove()}function d(a,b,d,e){c(a),e.length,a.after(function(){return'<tr class="request-results"><td colspan="5"><div class="notice inline notice-alt '+b+'"><p>'+d+"</p></div></td></tr>"})}var e=window.privacyToolsL10n||{};a(".remove_personal_data a").click(function(f){function g(){b(k,"remove_personal_data_idle");var a=e.noDataFound,c="notice-success";0==p?0==q?a=e.noDataFound:(a=e.noneRemoved,c="notice-warning"):0==q?a=e.foundAndRemoved:(a=e.someNotRemoved,c="notice-warning"),d(l,"notice-success",a,[])}function h(a,c){b(k,"remove_personal_data_failed"),d(l,"notice-error",e.anErrorOccurred,[])}function i(b,c){a.ajax({url:ajaxurl,data:{action:"wp-privacy-erase-personal-data",eraser:b,id:m,page:c,security:n},method:"post"}).done(function(a){if(!a.success)return void h("error",a.data);var d=a.data;d.num_items_removed&&(p+=d.num_items_removed),d.num_items_retained&&(q+=d.num_items_removed),d.messages&&(r=r.concat(d.messages)),d.done?b<o?setTimeout(i(b+1,1)):g():setTimeout(i(b,c+1))}).fail(function(a,b,c){h(b,c)})}f.preventDefault(),f.stopPropagation();var j=a(this),k=j.parents(".remove_personal_data"),l=j.parents("tr"),m=k.data("request-id"),n=k.data("nonce"),o=k.data("erasers-count"),p=0,q=0,r=[];k.blur(),c(l),b(k,"remove_personal_data_processing"),i(1,1)})});