From a159bf4e1630f134f86e42dd8df65edbcf1bfa2a Mon Sep 17 00:00:00 2001 From: Ian Dunn Date: Mon, 30 Apr 2018 21:03:31 +0000 Subject: [PATCH] Privacy: Add `wp_privacy_personal_data_export_file_created` filter. This runs immediately after the data export file has been successfully created, allowing plugins to introduce some workflow customizations. For example, a plugin could password-protect the export file, for peace of mind, even though the CSPRN in the filename makes brute force attacks nearly impossible. See #43546. git-svn-id: https://develop.svn.wordpress.org/trunk@43047 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/file.php | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/wp-admin/includes/file.php b/src/wp-admin/includes/file.php index 7fae227234..200f581da8 100644 --- a/src/wp-admin/includes/file.php +++ b/src/wp-admin/includes/file.php @@ -2122,22 +2122,42 @@ function wp_privacy_generate_personal_data_export_file( $request_id ) { fclose( $file ); // Now, generate the ZIP. + $error = false; $archive_filename = $file_basename . '.zip'; $archive_pathname = $exports_dir . $archive_filename; $archive_url = $exports_url . $archive_filename; $zip = new ZipArchive; + if ( true === $zip->open( $archive_pathname, ZipArchive::CREATE ) ) { + if ( ! $zip->addFile( $html_report_pathname, 'index.html' ) ) { + $error = __( 'Unable to add data to export file.' ); + } - if ( TRUE === $zip->open( $archive_pathname, ZipArchive::CREATE ) ) { - $zip->addFile( $html_report_pathname, 'index.html' ); $zip->close(); + + if ( ! $error ) { + /** + * Fires right after all personal data has been written to the export file. + * + * @since 4.9.6 + * + * @param string $archive_pathname The full path to the export file on the filesystem. + * @param string $archive_url The URL of the archive file. + * @param string $html_report_pathname The full path to the personal data report on the filesystem. + */ + do_action( 'wp_privacy_personal_data_export_file_created', $archive_pathname, $archive_url, $html_report_pathname ); + } } else { - wp_send_json_error( __( 'Unable to open export file (archive) for writing' ) ); + $error = __( 'Unable to open export file (archive) for writing.' ); } // And remove the HTML file. unlink( $html_report_pathname ); + if ( $error ) { + wp_send_json_error( $error ); + } + // Save the export file in the request. update_post_meta( $request_id, '_export_file_url', $archive_url ); update_post_meta( $request_id, '_export_file_path', $archive_pathname );