Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Jetpack: Change responses export filename #28413

Merged
merged 4 commits into from
Jan 18, 2023
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions projects/plugins/jetpack/changelog/change-export-file-name
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Significance: minor
Type: enhancement

Improve file/spreadsheet naming when exporting form responses. [Site name] - Jetpack Form Responses - [form source] - [date]
35 changes: 33 additions & 2 deletions projects/plugins/jetpack/modules/contact-form/admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -1288,8 +1288,18 @@ public function export_to_gdrive() {
$sheet_data[] = $current_row;
}

$user_id = (int) get_current_user_id();
$spreadsheet_title = sprintf( '%s - %s', __( 'Responses', 'jetpack' ), gmdate( 'Y-m-d H:i' ) );
$user_id = (int) get_current_user_id();

if ( ! empty( $post_data['post'] ) && $post_data['post'] !== 'all' ) {
$spreadsheet_title = sprintf(
'%1$s - %2$s',
$this->get_export_filename( get_the_title( (int) $post_data['post'] ) ),
gmdate( 'Y-m-d H:i' )
);
} else {
$spreadsheet_title = sprintf( '%s - %s', $this->get_export_filename(), gmdate( 'Y-m-d H:i' ) );
}

require_once JETPACK__PLUGIN_DIR . '_inc/lib/class-jetpack-google-drive-helper.php';
$sheet = Jetpack_Google_Drive_Helper::create_sheet( $user_id, $spreadsheet_title, $sheet_data );

Expand Down Expand Up @@ -1456,6 +1466,27 @@ public function get_gdrive_export_button_markup() {
array( 'data-nonce-name' => $this->export_nonce_field_gdrive )
);
}

/**
* Get a filename for export tasks
*
* @param string $source The filtered source for exported data.
* @return string The filename without source nor date suffix.
*/
public function get_export_filename( $source = '' ) {
return $source === ''
? sprintf(
/* translators: Site title, used to craft the export filename, eg "MySite - Jetpack Form Responses" */
__( '%s - Jetpack Form Responses', 'jetpack' ),
sanitize_file_name( get_bloginfo( 'name' ) )
)
: sprintf(
/* translators: 1: Site title; 2: post title. Used to craft the export filename, eg "MySite - Jetpack Form Responses - Contact" */
__( '%1$s - Jetpack Form Responses - %2$s', 'jetpack' ),
sanitize_file_name( get_bloginfo( 'name' ) ),
sanitize_file_name( $source )
);
}
}

Grunion_admin::init();
Original file line number Diff line number Diff line change
Expand Up @@ -1854,23 +1854,29 @@ function ( $selected ) {
* Download exported data as CSV
*/
public function download_feedback_as_csv() {
$data = $this->get_feedback_entries_from_post();
// phpcs:ignore WordPress.Security.NonceVerification.Missing -- verification is done on get_feedback_entries_from_post function
$post_data = wp_unslash( $_POST );
$data = $this->get_feedback_entries_from_post();

if ( empty( $data ) ) {
return;
}

$filename = gmdate( 'Y-m-d' ) . '-feedback-export.csv';

// Check if we want to download all the feedbacks or just a certain contact form
// phpcs:ignore WordPress.Security.NonceVerification.Missing -- check is done on get_feedback_entries_from_post
if ( ! empty( $_POST['post'] ) && $_POST['post'] !== 'all' ) {
// phpcs:ignore WordPress.Security.NonceVerification.Missing -- check is done on get_feedback_entries_from_post
$filename = gmdate( 'Y-m-d' ) . '-' . str_replace( ' ', '-', get_the_title( (int) $_POST['post'] ) ) . '.csv';
if ( ! empty( $post_data['post'] ) && $post_data['post'] !== 'all' ) {
$filename = sprintf(
'%s - %s.csv',
Grunion_Admin::init()->get_export_filename( get_the_title( (int) $post_data['post'] ) ),
gmdate( 'Y-m-d H:i' )
);
} else {
$filename = sprintf(
'%s - %s.csv',
Grunion_Admin::init()->get_export_filename(),
gmdate( 'Y-m-d H:i' )
);
}

$filename = sanitize_file_name( $filename );

/**
* Extract field names from `$data` for later use.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -286,12 +286,15 @@ jQuery( function ( $ ) {
selected: selected,
[ nonceName ]: nonce,
},
function ( response ) {
function ( response, status, xhr ) {
var blob = new Blob( [ response ], { type: 'application/octetstream' } );

var a = document.createElement( 'a' );
a.href = window.URL.createObjectURL( blob );
a.download = 'feedback.csv';

// Get filename from backend headers
var contentDispositionHeader = xhr.getResponseHeader( 'content-disposition' );
a.download =
contentDispositionHeader.split( 'filename=' )[ 1 ] || 'Jetpack Form Responses.csv';

document.body.appendChild( a );
a.click();
Expand Down