Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/wp-admin/includes
File: privacy-tools.php
* If an archive has already been generated, then remove it and reuse the filename,
[500] Fix | Delete
* to avoid breaking any URLs that may have been previously sent via email.
[501] Fix | Delete
*/
[502] Fix | Delete
$error = false;
[503] Fix | Delete
[504] Fix | Delete
// This meta value is used from version 5.5.
[505] Fix | Delete
$archive_filename = get_post_meta( $request_id, '_export_file_name', true );
[506] Fix | Delete
[507] Fix | Delete
// This one stored an absolute path and is used for backward compatibility.
[508] Fix | Delete
$archive_pathname = get_post_meta( $request_id, '_export_file_path', true );
[509] Fix | Delete
[510] Fix | Delete
// If a filename meta exists, use it.
[511] Fix | Delete
if ( ! empty( $archive_filename ) ) {
[512] Fix | Delete
$archive_pathname = $exports_dir . $archive_filename;
[513] Fix | Delete
} elseif ( ! empty( $archive_pathname ) ) {
[514] Fix | Delete
// If a full path meta exists, use it and create the new meta value.
[515] Fix | Delete
$archive_filename = basename( $archive_pathname );
[516] Fix | Delete
[517] Fix | Delete
update_post_meta( $request_id, '_export_file_name', $archive_filename );
[518] Fix | Delete
[519] Fix | Delete
// Remove the back-compat meta values.
[520] Fix | Delete
delete_post_meta( $request_id, '_export_file_url' );
[521] Fix | Delete
delete_post_meta( $request_id, '_export_file_path' );
[522] Fix | Delete
} else {
[523] Fix | Delete
// If there's no filename or full path stored, create a new file.
[524] Fix | Delete
$archive_filename = $file_basename . '.zip';
[525] Fix | Delete
$archive_pathname = $exports_dir . $archive_filename;
[526] Fix | Delete
[527] Fix | Delete
update_post_meta( $request_id, '_export_file_name', $archive_filename );
[528] Fix | Delete
}
[529] Fix | Delete
[530] Fix | Delete
$archive_url = $exports_url . $archive_filename;
[531] Fix | Delete
[532] Fix | Delete
if ( ! empty( $archive_pathname ) && file_exists( $archive_pathname ) ) {
[533] Fix | Delete
wp_delete_file( $archive_pathname );
[534] Fix | Delete
}
[535] Fix | Delete
[536] Fix | Delete
$zip = new ZipArchive();
[537] Fix | Delete
if ( true === $zip->open( $archive_pathname, ZipArchive::CREATE ) ) {
[538] Fix | Delete
if ( ! $zip->addFile( $json_report_pathname, 'export.json' ) ) {
[539] Fix | Delete
$error = __( 'Unable to archive the personal data export file (JSON format).' );
[540] Fix | Delete
}
[541] Fix | Delete
[542] Fix | Delete
if ( ! $zip->addFile( $html_report_pathname, 'index.html' ) ) {
[543] Fix | Delete
$error = __( 'Unable to archive the personal data export file (HTML format).' );
[544] Fix | Delete
}
[545] Fix | Delete
[546] Fix | Delete
$zip->close();
[547] Fix | Delete
[548] Fix | Delete
if ( ! $error ) {
[549] Fix | Delete
/**
[550] Fix | Delete
* Fires right after all personal data has been written to the export file.
[551] Fix | Delete
*
[552] Fix | Delete
* @since 4.9.6
[553] Fix | Delete
* @since 5.4.0 Added the `$json_report_pathname` parameter.
[554] Fix | Delete
*
[555] Fix | Delete
* @param string $archive_pathname The full path to the export file on the filesystem.
[556] Fix | Delete
* @param string $archive_url The URL of the archive file.
[557] Fix | Delete
* @param string $html_report_pathname The full path to the HTML personal data report on the filesystem.
[558] Fix | Delete
* @param int $request_id The export request ID.
[559] Fix | Delete
* @param string $json_report_pathname The full path to the JSON personal data report on the filesystem.
[560] Fix | Delete
*/
[561] Fix | Delete
do_action( 'wp_privacy_personal_data_export_file_created', $archive_pathname, $archive_url, $html_report_pathname, $request_id, $json_report_pathname );
[562] Fix | Delete
}
[563] Fix | Delete
} else {
[564] Fix | Delete
$error = __( 'Unable to open personal data export file (archive) for writing.' );
[565] Fix | Delete
}
[566] Fix | Delete
[567] Fix | Delete
// Remove the JSON file.
[568] Fix | Delete
unlink( $json_report_pathname );
[569] Fix | Delete
[570] Fix | Delete
// Remove the HTML file.
[571] Fix | Delete
unlink( $html_report_pathname );
[572] Fix | Delete
[573] Fix | Delete
if ( $error ) {
[574] Fix | Delete
wp_send_json_error( $error );
[575] Fix | Delete
}
[576] Fix | Delete
}
[577] Fix | Delete
[578] Fix | Delete
/**
[579] Fix | Delete
* Send an email to the user with a link to the personal data export file
[580] Fix | Delete
*
[581] Fix | Delete
* @since 4.9.6
[582] Fix | Delete
*
[583] Fix | Delete
* @param int $request_id The request ID for this personal data export.
[584] Fix | Delete
* @return true|WP_Error True on success or `WP_Error` on failure.
[585] Fix | Delete
*/
[586] Fix | Delete
function wp_privacy_send_personal_data_export_email( $request_id ) {
[587] Fix | Delete
// Get the request.
[588] Fix | Delete
$request = wp_get_user_request( $request_id );
[589] Fix | Delete
[590] Fix | Delete
if ( ! $request || 'export_personal_data' !== $request->action_name ) {
[591] Fix | Delete
return new WP_Error( 'invalid_request', __( 'Invalid request ID when sending personal data export email.' ) );
[592] Fix | Delete
}
[593] Fix | Delete
[594] Fix | Delete
// Localize message content for user; fallback to site default for visitors.
[595] Fix | Delete
if ( ! empty( $request->user_id ) ) {
[596] Fix | Delete
$switched_locale = switch_to_user_locale( $request->user_id );
[597] Fix | Delete
} else {
[598] Fix | Delete
$switched_locale = switch_to_locale( get_locale() );
[599] Fix | Delete
}
[600] Fix | Delete
[601] Fix | Delete
/** This filter is documented in wp-includes/functions.php */
[602] Fix | Delete
$expiration = apply_filters( 'wp_privacy_export_expiration', 3 * DAY_IN_SECONDS );
[603] Fix | Delete
$expiration_date = date_i18n( get_option( 'date_format' ), time() + $expiration );
[604] Fix | Delete
[605] Fix | Delete
$exports_url = wp_privacy_exports_url();
[606] Fix | Delete
$export_file_name = get_post_meta( $request_id, '_export_file_name', true );
[607] Fix | Delete
$export_file_url = $exports_url . $export_file_name;
[608] Fix | Delete
[609] Fix | Delete
$site_name = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
[610] Fix | Delete
$site_url = home_url();
[611] Fix | Delete
[612] Fix | Delete
/**
[613] Fix | Delete
* Filters the recipient of the personal data export email notification.
[614] Fix | Delete
* Should be used with great caution to avoid sending the data export link to wrong emails.
[615] Fix | Delete
*
[616] Fix | Delete
* @since 5.3.0
[617] Fix | Delete
*
[618] Fix | Delete
* @param string $request_email The email address of the notification recipient.
[619] Fix | Delete
* @param WP_User_Request $request The request that is initiating the notification.
[620] Fix | Delete
*/
[621] Fix | Delete
$request_email = apply_filters( 'wp_privacy_personal_data_email_to', $request->email, $request );
[622] Fix | Delete
[623] Fix | Delete
$email_data = array(
[624] Fix | Delete
'request' => $request,
[625] Fix | Delete
'expiration' => $expiration,
[626] Fix | Delete
'expiration_date' => $expiration_date,
[627] Fix | Delete
'message_recipient' => $request_email,
[628] Fix | Delete
'export_file_url' => $export_file_url,
[629] Fix | Delete
'sitename' => $site_name,
[630] Fix | Delete
'siteurl' => $site_url,
[631] Fix | Delete
);
[632] Fix | Delete
[633] Fix | Delete
/* translators: Personal data export notification email subject. %s: Site title. */
[634] Fix | Delete
$subject = sprintf( __( '[%s] Personal Data Export' ), $site_name );
[635] Fix | Delete
[636] Fix | Delete
/**
[637] Fix | Delete
* Filters the subject of the email sent when an export request is completed.
[638] Fix | Delete
*
[639] Fix | Delete
* @since 5.3.0
[640] Fix | Delete
*
[641] Fix | Delete
* @param string $subject The email subject.
[642] Fix | Delete
* @param string $sitename The name of the site.
[643] Fix | Delete
* @param array $email_data {
[644] Fix | Delete
* Data relating to the account action email.
[645] Fix | Delete
*
[646] Fix | Delete
* @type WP_User_Request $request User request object.
[647] Fix | Delete
* @type int $expiration The time in seconds until the export file expires.
[648] Fix | Delete
* @type string $expiration_date The localized date and time when the export file expires.
[649] Fix | Delete
* @type string $message_recipient The address that the email will be sent to. Defaults
[650] Fix | Delete
* to the value of `$request->email`, but can be changed
[651] Fix | Delete
* by the `wp_privacy_personal_data_email_to` filter.
[652] Fix | Delete
* @type string $export_file_url The export file URL.
[653] Fix | Delete
* @type string $sitename The site name sending the mail.
[654] Fix | Delete
* @type string $siteurl The site URL sending the mail.
[655] Fix | Delete
* }
[656] Fix | Delete
*/
[657] Fix | Delete
$subject = apply_filters( 'wp_privacy_personal_data_email_subject', $subject, $site_name, $email_data );
[658] Fix | Delete
[659] Fix | Delete
/* translators: Do not translate EXPIRATION, LINK, SITENAME, SITEURL: those are placeholders. */
[660] Fix | Delete
$email_text = __(
[661] Fix | Delete
'Howdy,
[662] Fix | Delete
[663] Fix | Delete
Your request for an export of personal data has been completed. You may
[664] Fix | Delete
download your personal data by clicking on the link below. For privacy
[665] Fix | Delete
and security, we will automatically delete the file on ###EXPIRATION###,
[666] Fix | Delete
so please download it before then.
[667] Fix | Delete
[668] Fix | Delete
###LINK###
[669] Fix | Delete
[670] Fix | Delete
Regards,
[671] Fix | Delete
All at ###SITENAME###
[672] Fix | Delete
###SITEURL###'
[673] Fix | Delete
);
[674] Fix | Delete
[675] Fix | Delete
/**
[676] Fix | Delete
* Filters the text of the email sent with a personal data export file.
[677] Fix | Delete
*
[678] Fix | Delete
* The following strings have a special meaning and will get replaced dynamically:
[679] Fix | Delete
* ###EXPIRATION### The date when the URL will be automatically deleted.
[680] Fix | Delete
* ###LINK### URL of the personal data export file for the user.
[681] Fix | Delete
* ###SITENAME### The name of the site.
[682] Fix | Delete
* ###SITEURL### The URL to the site.
[683] Fix | Delete
*
[684] Fix | Delete
* @since 4.9.6
[685] Fix | Delete
* @since 5.3.0 Introduced the `$email_data` array.
[686] Fix | Delete
*
[687] Fix | Delete
* @param string $email_text Text in the email.
[688] Fix | Delete
* @param int $request_id The request ID for this personal data export.
[689] Fix | Delete
* @param array $email_data {
[690] Fix | Delete
* Data relating to the account action email.
[691] Fix | Delete
*
[692] Fix | Delete
* @type WP_User_Request $request User request object.
[693] Fix | Delete
* @type int $expiration The time in seconds until the export file expires.
[694] Fix | Delete
* @type string $expiration_date The localized date and time when the export file expires.
[695] Fix | Delete
* @type string $message_recipient The address that the email will be sent to. Defaults
[696] Fix | Delete
* to the value of `$request->email`, but can be changed
[697] Fix | Delete
* by the `wp_privacy_personal_data_email_to` filter.
[698] Fix | Delete
* @type string $export_file_url The export file URL.
[699] Fix | Delete
* @type string $sitename The site name sending the mail.
[700] Fix | Delete
* @type string $siteurl The site URL sending the mail.
[701] Fix | Delete
*/
[702] Fix | Delete
$content = apply_filters( 'wp_privacy_personal_data_email_content', $email_text, $request_id, $email_data );
[703] Fix | Delete
[704] Fix | Delete
$content = str_replace( '###EXPIRATION###', $expiration_date, $content );
[705] Fix | Delete
$content = str_replace( '###LINK###', sanitize_url( $export_file_url ), $content );
[706] Fix | Delete
$content = str_replace( '###EMAIL###', $request_email, $content );
[707] Fix | Delete
$content = str_replace( '###SITENAME###', $site_name, $content );
[708] Fix | Delete
$content = str_replace( '###SITEURL###', sanitize_url( $site_url ), $content );
[709] Fix | Delete
[710] Fix | Delete
$headers = '';
[711] Fix | Delete
[712] Fix | Delete
/**
[713] Fix | Delete
* Filters the headers of the email sent with a personal data export file.
[714] Fix | Delete
*
[715] Fix | Delete
* @since 5.4.0
[716] Fix | Delete
*
[717] Fix | Delete
* @param string|array $headers The email headers.
[718] Fix | Delete
* @param string $subject The email subject.
[719] Fix | Delete
* @param string $content The email content.
[720] Fix | Delete
* @param int $request_id The request ID.
[721] Fix | Delete
* @param array $email_data {
[722] Fix | Delete
* Data relating to the account action email.
[723] Fix | Delete
*
[724] Fix | Delete
* @type WP_User_Request $request User request object.
[725] Fix | Delete
* @type int $expiration The time in seconds until the export file expires.
[726] Fix | Delete
* @type string $expiration_date The localized date and time when the export file expires.
[727] Fix | Delete
* @type string $message_recipient The address that the email will be sent to. Defaults
[728] Fix | Delete
* to the value of `$request->email`, but can be changed
[729] Fix | Delete
* by the `wp_privacy_personal_data_email_to` filter.
[730] Fix | Delete
* @type string $export_file_url The export file URL.
[731] Fix | Delete
* @type string $sitename The site name sending the mail.
[732] Fix | Delete
* @type string $siteurl The site URL sending the mail.
[733] Fix | Delete
* }
[734] Fix | Delete
*/
[735] Fix | Delete
$headers = apply_filters( 'wp_privacy_personal_data_email_headers', $headers, $subject, $content, $request_id, $email_data );
[736] Fix | Delete
[737] Fix | Delete
$mail_success = wp_mail( $request_email, $subject, $content, $headers );
[738] Fix | Delete
[739] Fix | Delete
if ( $switched_locale ) {
[740] Fix | Delete
restore_previous_locale();
[741] Fix | Delete
}
[742] Fix | Delete
[743] Fix | Delete
if ( ! $mail_success ) {
[744] Fix | Delete
return new WP_Error( 'privacy_email_error', __( 'Unable to send personal data export email.' ) );
[745] Fix | Delete
}
[746] Fix | Delete
[747] Fix | Delete
return true;
[748] Fix | Delete
}
[749] Fix | Delete
[750] Fix | Delete
/**
[751] Fix | Delete
* Intercept personal data exporter page Ajax responses in order to assemble the personal data export file.
[752] Fix | Delete
*
[753] Fix | Delete
* @since 4.9.6
[754] Fix | Delete
*
[755] Fix | Delete
* @see 'wp_privacy_personal_data_export_page'
[756] Fix | Delete
*
[757] Fix | Delete
* @param array $response The response from the personal data exporter for the given page.
[758] Fix | Delete
* @param int $exporter_index The index of the personal data exporter. Begins at 1.
[759] Fix | Delete
* @param string $email_address The email address of the user whose personal data this is.
[760] Fix | Delete
* @param int $page The page of personal data for this exporter. Begins at 1.
[761] Fix | Delete
* @param int $request_id The request ID for this personal data export.
[762] Fix | Delete
* @param bool $send_as_email Whether the final results of the export should be emailed to the user.
[763] Fix | Delete
* @param string $exporter_key The slug (key) of the exporter.
[764] Fix | Delete
* @return array The filtered response.
[765] Fix | Delete
*/
[766] Fix | Delete
function wp_privacy_process_personal_data_export_page( $response, $exporter_index, $email_address, $page, $request_id, $send_as_email, $exporter_key ) {
[767] Fix | Delete
/* Do some simple checks on the shape of the response from the exporter.
[768] Fix | Delete
* If the exporter response is malformed, don't attempt to consume it - let it
[769] Fix | Delete
* pass through to generate a warning to the user by default Ajax processing.
[770] Fix | Delete
*/
[771] Fix | Delete
if ( ! is_array( $response ) ) {
[772] Fix | Delete
return $response;
[773] Fix | Delete
}
[774] Fix | Delete
[775] Fix | Delete
if ( ! array_key_exists( 'done', $response ) ) {
[776] Fix | Delete
return $response;
[777] Fix | Delete
}
[778] Fix | Delete
[779] Fix | Delete
if ( ! array_key_exists( 'data', $response ) ) {
[780] Fix | Delete
return $response;
[781] Fix | Delete
}
[782] Fix | Delete
[783] Fix | Delete
if ( ! is_array( $response['data'] ) ) {
[784] Fix | Delete
return $response;
[785] Fix | Delete
}
[786] Fix | Delete
[787] Fix | Delete
// Get the request.
[788] Fix | Delete
$request = wp_get_user_request( $request_id );
[789] Fix | Delete
[790] Fix | Delete
if ( ! $request || 'export_personal_data' !== $request->action_name ) {
[791] Fix | Delete
wp_send_json_error( __( 'Invalid request ID when merging personal data to export.' ) );
[792] Fix | Delete
}
[793] Fix | Delete
[794] Fix | Delete
$export_data = array();
[795] Fix | Delete
[796] Fix | Delete
// First exporter, first page? Reset the report data accumulation array.
[797] Fix | Delete
if ( 1 === $exporter_index && 1 === $page ) {
[798] Fix | Delete
update_post_meta( $request_id, '_export_data_raw', $export_data );
[799] Fix | Delete
} else {
[800] Fix | Delete
$accumulated_data = get_post_meta( $request_id, '_export_data_raw', true );
[801] Fix | Delete
[802] Fix | Delete
if ( $accumulated_data ) {
[803] Fix | Delete
$export_data = $accumulated_data;
[804] Fix | Delete
}
[805] Fix | Delete
}
[806] Fix | Delete
[807] Fix | Delete
// Now, merge the data from the exporter response into the data we have accumulated already.
[808] Fix | Delete
$export_data = array_merge( $export_data, $response['data'] );
[809] Fix | Delete
update_post_meta( $request_id, '_export_data_raw', $export_data );
[810] Fix | Delete
[811] Fix | Delete
// If we are not yet on the last page of the last exporter, return now.
[812] Fix | Delete
/** This filter is documented in wp-admin/includes/ajax-actions.php */
[813] Fix | Delete
$exporters = apply_filters( 'wp_privacy_personal_data_exporters', array() );
[814] Fix | Delete
$is_last_exporter = count( $exporters ) === $exporter_index;
[815] Fix | Delete
$exporter_done = $response['done'];
[816] Fix | Delete
if ( ! $is_last_exporter || ! $exporter_done ) {
[817] Fix | Delete
return $response;
[818] Fix | Delete
}
[819] Fix | Delete
[820] Fix | Delete
// Last exporter, last page - let's prepare the export file.
[821] Fix | Delete
[822] Fix | Delete
// First we need to re-organize the raw data hierarchically in groups and items.
[823] Fix | Delete
$groups = array();
[824] Fix | Delete
foreach ( (array) $export_data as $export_datum ) {
[825] Fix | Delete
$group_id = $export_datum['group_id'];
[826] Fix | Delete
$group_label = $export_datum['group_label'];
[827] Fix | Delete
[828] Fix | Delete
$group_description = '';
[829] Fix | Delete
if ( ! empty( $export_datum['group_description'] ) ) {
[830] Fix | Delete
$group_description = $export_datum['group_description'];
[831] Fix | Delete
}
[832] Fix | Delete
[833] Fix | Delete
if ( ! array_key_exists( $group_id, $groups ) ) {
[834] Fix | Delete
$groups[ $group_id ] = array(
[835] Fix | Delete
'group_label' => $group_label,
[836] Fix | Delete
'group_description' => $group_description,
[837] Fix | Delete
'items' => array(),
[838] Fix | Delete
);
[839] Fix | Delete
}
[840] Fix | Delete
[841] Fix | Delete
$item_id = $export_datum['item_id'];
[842] Fix | Delete
if ( ! array_key_exists( $item_id, $groups[ $group_id ]['items'] ) ) {
[843] Fix | Delete
$groups[ $group_id ]['items'][ $item_id ] = array();
[844] Fix | Delete
}
[845] Fix | Delete
[846] Fix | Delete
$old_item_data = $groups[ $group_id ]['items'][ $item_id ];
[847] Fix | Delete
$merged_item_data = array_merge( $export_datum['data'], $old_item_data );
[848] Fix | Delete
$groups[ $group_id ]['items'][ $item_id ] = $merged_item_data;
[849] Fix | Delete
}
[850] Fix | Delete
[851] Fix | Delete
// Then save the grouped data into the request.
[852] Fix | Delete
delete_post_meta( $request_id, '_export_data_raw' );
[853] Fix | Delete
update_post_meta( $request_id, '_export_data_grouped', $groups );
[854] Fix | Delete
[855] Fix | Delete
/**
[856] Fix | Delete
* Generate the export file from the collected, grouped personal data.
[857] Fix | Delete
*
[858] Fix | Delete
* @since 4.9.6
[859] Fix | Delete
*
[860] Fix | Delete
* @param int $request_id The export request ID.
[861] Fix | Delete
*/
[862] Fix | Delete
do_action( 'wp_privacy_personal_data_export_file', $request_id );
[863] Fix | Delete
[864] Fix | Delete
// Clear the grouped data now that it is no longer needed.
[865] Fix | Delete
delete_post_meta( $request_id, '_export_data_grouped' );
[866] Fix | Delete
[867] Fix | Delete
// If the destination is email, send it now.
[868] Fix | Delete
if ( $send_as_email ) {
[869] Fix | Delete
$mail_success = wp_privacy_send_personal_data_export_email( $request_id );
[870] Fix | Delete
if ( is_wp_error( $mail_success ) ) {
[871] Fix | Delete
wp_send_json_error( $mail_success->get_error_message() );
[872] Fix | Delete
}
[873] Fix | Delete
[874] Fix | Delete
// Update the request to completed state when the export email is sent.
[875] Fix | Delete
_wp_privacy_completed_request( $request_id );
[876] Fix | Delete
} else {
[877] Fix | Delete
// Modify the response to include the URL of the export file so the browser can fetch it.
[878] Fix | Delete
$exports_url = wp_privacy_exports_url();
[879] Fix | Delete
$export_file_name = get_post_meta( $request_id, '_export_file_name', true );
[880] Fix | Delete
$export_file_url = $exports_url . $export_file_name;
[881] Fix | Delete
[882] Fix | Delete
if ( ! empty( $export_file_url ) ) {
[883] Fix | Delete
$response['url'] = $export_file_url;
[884] Fix | Delete
}
[885] Fix | Delete
}
[886] Fix | Delete
[887] Fix | Delete
return $response;
[888] Fix | Delete
}
[889] Fix | Delete
[890] Fix | Delete
/**
[891] Fix | Delete
* Mark erasure requests as completed after processing is finished.
[892] Fix | Delete
*
[893] Fix | Delete
* This intercepts the Ajax responses to personal data eraser page requests, and
[894] Fix | Delete
* monitors the status of a request. Once all of the processing has finished, the
[895] Fix | Delete
* request is marked as completed.
[896] Fix | Delete
*
[897] Fix | Delete
* @since 4.9.6
[898] Fix | Delete
*
[899] Fix | Delete
* @see 'wp_privacy_personal_data_erasure_page'
[900] Fix | Delete
*
[901] Fix | Delete
* @param array $response The response from the personal data eraser for
[902] Fix | Delete
* the given page.
[903] Fix | Delete
* @param int $eraser_index The index of the personal data eraser. Begins
[904] Fix | Delete
* at 1.
[905] Fix | Delete
* @param string $email_address The email address of the user whose personal
[906] Fix | Delete
* data this is.
[907] Fix | Delete
* @param int $page The page of personal data for this eraser.
[908] Fix | Delete
* Begins at 1.
[909] Fix | Delete
* @param int $request_id The request ID for this personal data erasure.
[910] Fix | Delete
* @return array The filtered response.
[911] Fix | Delete
*/
[912] Fix | Delete
function wp_privacy_process_personal_data_erasure_page( $response, $eraser_index, $email_address, $page, $request_id ) {
[913] Fix | Delete
/*
[914] Fix | Delete
* If the eraser response is malformed, don't attempt to consume it; let it
[915] Fix | Delete
* pass through, so that the default Ajax processing will generate a warning
[916] Fix | Delete
* to the user.
[917] Fix | Delete
*/
[918] Fix | Delete
if ( ! is_array( $response ) ) {
[919] Fix | Delete
return $response;
[920] Fix | Delete
}
[921] Fix | Delete
[922] Fix | Delete
if ( ! array_key_exists( 'done', $response ) ) {
[923] Fix | Delete
return $response;
[924] Fix | Delete
}
[925] Fix | Delete
[926] Fix | Delete
if ( ! array_key_exists( 'items_removed', $response ) ) {
[927] Fix | Delete
return $response;
[928] Fix | Delete
}
[929] Fix | Delete
[930] Fix | Delete
if ( ! array_key_exists( 'items_retained', $response ) ) {
[931] Fix | Delete
return $response;
[932] Fix | Delete
}
[933] Fix | Delete
[934] Fix | Delete
if ( ! array_key_exists( 'messages', $response ) ) {
[935] Fix | Delete
return $response;
[936] Fix | Delete
}
[937] Fix | Delete
[938] Fix | Delete
// Get the request.
[939] Fix | Delete
$request = wp_get_user_request( $request_id );
[940] Fix | Delete
[941] Fix | Delete
if ( ! $request || 'remove_personal_data' !== $request->action_name ) {
[942] Fix | Delete
wp_send_json_error( __( 'Invalid request ID when processing personal data to erase.' ) );
[943] Fix | Delete
}
[944] Fix | Delete
[945] Fix | Delete
/** This filter is documented in wp-admin/includes/ajax-actions.php */
[946] Fix | Delete
$erasers = apply_filters( 'wp_privacy_personal_data_erasers', array() );
[947] Fix | Delete
$is_last_eraser = count( $erasers ) === $eraser_index;
[948] Fix | Delete
$eraser_done = $response['done'];
[949] Fix | Delete
[950] Fix | Delete
if ( ! $is_last_eraser || ! $eraser_done ) {
[951] Fix | Delete
return $response;
[952] Fix | Delete
}
[953] Fix | Delete
[954] Fix | Delete
_wp_privacy_completed_request( $request_id );
[955] Fix | Delete
[956] Fix | Delete
/**
[957] Fix | Delete
* Fires immediately after a personal data erasure request has been marked completed.
[958] Fix | Delete
*
[959] Fix | Delete
* @since 4.9.6
[960] Fix | Delete
*
[961] Fix | Delete
* @param int $request_id The privacy request post ID associated with this request.
[962] Fix | Delete
*/
[963] Fix | Delete
do_action( 'wp_privacy_personal_data_erased', $request_id );
[964] Fix | Delete
[965] Fix | Delete
return $response;
[966] Fix | Delete
}
[967] Fix | Delete
[968] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function