Sindbad~EG File Manager
<?php
namespace WPForms\Pro\Admin\Entries\Export;
/**
* Entries Export.
*
* @since 1.5.5
*/
class Export {
/**
* ActionScheduler task name for cleaning up orphaned export files.
*
* @since 1.6.5
*/
const TASK_CLEANUP = 'wpforms_pro_admin_entries_export_remove_old_export_files';
/**
* Configuration.
*
* @since 1.5.5
*
* @var array
*/
public $configuration = [
'request_data_ttl' => DAY_IN_SECONDS, // Export request and a temp file TTL value.
'entries_per_step' => 5000, // Number of entries in a chunk that are retrieved and saved into a temp file per one iteration.
'csv_export_separator' => ',', // Columns separator.
'disallowed_fields' => [ // Disallowed fields array.
'captcha',
'entry-preview',
'divider',
'html',
'pagebreak',
'internal-information',
'content',
'layout',
],
];
/**
* Translatable strings for JS responses.
*
* @since 1.5.5
*
* @var array
*/
public $i18n = [];
/**
* Error messages.
*
* @since 1.5.5
*
* @var array
*/
public $errors = [];
/**
* Additional Information checkboxes.
*
* @since 1.5.5
*
* @var array
*/
public $additional_info_fields = [];
/**
* Type checkboxes.
*
* @since 1.6.5
*
* @var array
*/
public $export_options_fields = [];
/**
* Array for store/read some data.
*
* @since 1.5.5
*
* @var array
*/
public $data = [];
/**
* Instance of Admin Object.
*
* @since 1.5.5
*
* @var Admin
*/
public $admin;
/**
* Instance of Ajax Object.
*
* @since 1.5.5
*
* @var Ajax
*/
public $ajax;
/**
* Instance of File Object.
*
* @since 1.5.5
*
* @var File
*/
public $file;
/**
* Initialize.
*
* @since 1.6.1
*/
public function init() {
if ( ! wpforms_current_user_can( 'view_entries' ) && ! wp_doing_cron() ) {
return;
}
if (
! $this->is_entries_export_ajax() &&
! wpforms_is_admin_page( 'tools' ) &&
! wp_doing_cron()
) {
return;
}
$this->init_args();
$this->init_settings();
$this->init_form_data();
$this->admin = new Admin( $this );
$this->file = new File( $this );
$this->ajax = new Ajax( $this );
}
/**
* Init data.
*
* @since 1.5.5
*/
protected function init_settings() {
// Additional information fields.
$this->additional_info_fields = [
'entry_id' => esc_html__( 'Entry ID', 'wpforms' ),
'date' => esc_html__( 'Entry Date', 'wpforms' ),
'notes' => esc_html__( 'Entry Notes', 'wpforms' ),
'status' => esc_html__( 'Entry Status', 'wpforms' ),
'viewed' => esc_html__( 'Viewed', 'wpforms' ),
'starred' => esc_html__( 'Starred', 'wpforms' ),
'user_agent' => esc_html__( 'User Agent', 'wpforms' ),
'ip_address' => esc_html__( 'User IP', 'wpforms' ),
'user_uuid' => esc_html__( 'Unique Generated User ID', 'wpforms' ),
'pstatus' => esc_html__( 'Payment Status', 'wpforms' ),
'pginfo' => esc_html__( 'Payment Gateway Information', 'wpforms' ),
'del_fields' => esc_html__( 'Include data of previously deleted fields', 'wpforms' ),
];
if ( function_exists( 'wpforms_geolocation' ) ) {
$this->additional_info_fields['geodata'] = esc_html__( 'Geolocation Details', 'wpforms' );
}
/**
* Additional information fields for entries export.
*
* @since 1.5.5.1
*
* @param array $fields Additional info fields.
*/
$this->additional_info_fields = apply_filters(
'wpforms_pro_admin_entries_export_additional_info_fields',
$this->additional_info_fields
);
// This option should be available only if zip PHP extension is loaded.
if ( class_exists( 'ZipArchive' ) ) {
$this->export_options_fields['xlsx'] = esc_html__( 'Export in Microsoft Excel (.xlsx)', 'wpforms' );
}
// Export options fields.
$this->export_options_fields = apply_filters(
'wpforms_pro_admin_entries_export_options_fields',
$this->export_options_fields
);
// Error strings.
$this->errors = [
'common' => esc_html__( 'There were problems while preparing your export file. Please recheck export settings and try again.', 'wpforms' ),
'security' => esc_html__( 'You don\'t have enough capabilities to complete this request.', 'wpforms' ),
'unknown_form_id' => esc_html__( 'Incorrect form ID has been specified.', 'wpforms' ),
'unknown_entry_id' => esc_html__( 'Incorrect entry ID has been specified.', 'wpforms' ),
'form_data' => esc_html__( 'Specified form seems to be broken.', 'wpforms' ),
'unknown_request' => esc_html__( 'Unknown request.', 'wpforms' ),
'file_not_readable' => esc_html__( 'Export file cannot be retrieved from a file system.', 'wpforms' ),
'file_empty' => esc_html__( 'Export file is empty.', 'wpforms' ),
'form_empty' => esc_html__( 'The form does not have any fields for export.', 'wpforms' ),
'file_system_not_configured' => esc_html__( 'File system is not configured.', 'wpforms' ),
];
// Strings to localize.
$this->i18n = [
'error_prefix' => $this->errors['common'],
'error_form_empty' => $this->errors['form_empty'],
'label_select_all' => esc_html__( 'Select All', 'wpforms' ),
'prc_1_filtering' => esc_html__( 'Generating a list of entries according to your filters.', 'wpforms' ),
'prc_1_please_wait' => esc_html__( 'This can take a while. Please wait.', 'wpforms' ),
'prc_2_no_entries' => esc_html__( 'No entries found after applying your filters.', 'wpforms' ),
'prc_3_done' => esc_html__( 'The file was generated successfully.', 'wpforms' ),
'prc_3_download' => esc_html__( 'If the download does not start automatically', 'wpforms' ),
'prc_3_click_here' => esc_html__( 'click here', 'wpforms' ),
];
// Keeping default configuration data.
$default_configuration = $this->configuration;
// Applying deprecated filters.
if ( has_filter( 'wpforms_export_fields_allowed' ) ) {
// We need this because otherwise files can't be downloaded due to 'filter deprecated' notice.
// Notice will be shown only on the WPForms > Tools > Export page.
if (
'wpforms_tools_entries_export_download' === $this->data['get_args']['action'] ||
'wpforms_tools_single_entry_export_download' === $this->data['get_args']['action']
) {
ini_set( 'display_errors', 0 ); // phpcs:ignore
}
require_once WPFORMS_PLUGIN_DIR . 'pro/includes/admin/entries/class-entries-export.php';
$old_export = new \WPForms_Entries_Export();
$all_fields = $old_export->all_fields();
$allowed_fields = $old_export->allowed_fields();
$disallowed_fields = array_diff( $all_fields, $allowed_fields );
$this->configuration['disallowed_fields'] = array_unique( array_merge( $this->configuration['disallowed_fields'], $disallowed_fields ) );
}
if ( has_filter( 'wpforms_csv_export_separator' ) ) {
if (
'wpforms_tools_entries_export_download' === $this->data['get_args']['action'] ||
'wpforms_tools_single_entry_export_download' === $this->data['get_args']['action']
) {
ini_set( 'display_errors', 0 ); // phpcs:ignore
}
$this->configuration['csv_export_separator'] = (string) apply_filters_deprecated(
'wpforms_csv_export_separator',
[ $this->configuration['csv_export_separator'] ],
'1.5.5 of the WPForms plugin',
'wpforms_pro_admin_entries_export_configuration'
);
}
// Apply filter to config parameters.
$this->configuration = (array) apply_filters( 'wpforms_pro_admin_entries_export_configuration', $this->configuration );
$this->configuration['disallowed_fields'] = (array) $this->configuration['disallowed_fields'];
$this->configuration = wp_parse_args( $this->configuration, $default_configuration );
}
/**
* Get localized data.
*
* @since 1.5.5
*/
public function get_localized_data() {
return [
'nonce' => wp_create_nonce( 'wpforms-tools-entries-export-nonce' ),
'lang_code' => sanitize_key( wpforms_get_language_code() ),
'export_page' => esc_url( admin_url( 'admin.php?page=wpforms-tools&view=export' ) ),
'i18n' => $this->i18n,
'form_id' => ! empty( $this->data['form_data'] ) ? $this->data['get_args']['form_id'] : 0,
'dates' => $this->data['get_args']['dates'],
];
}
/**
* Init GET or POST args.
*
* @since 1.5.5
*
* @param string $method GET|POST.
*/
public function init_args( $method = 'GET' ) {
$args = [];
$method = $method === 'GET' ? 'GET' : 'POST';
$req = $method === 'GET' ? $_GET : $_POST; // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing
// Action.
$args['action'] = '';
if ( ! empty( $req['action'] ) ) {
$args['action'] = sanitize_text_field( wp_unslash( $req['action'] ) );
}
// Nonce.
$args['nonce'] = '';
if ( ! empty( $req['nonce'] ) ) {
$args['nonce'] = sanitize_text_field( wp_unslash( $req['nonce'] ) );
}
// Form ID.
$args['form_id'] = 0;
if ( ! empty( $req['form'] ) ) {
$args['form_id'] = (int) $req['form'];
}
// Entry ID.
$args['entry_id'] = 0;
if ( ! empty( $req['entry_id'] ) ) {
$args['entry_id'] = (int) $req['entry_id'];
}
// Fields.
$args['fields'] = [];
if ( ! empty( $req['fields'] ) ) {
$args['fields'] = array_map( 'intval', wp_unslash( $req['fields'] ) );
}
// Additional Information.
$args['additional_info'] = [];
if ( ! empty( $req['additional_info'] ) ) {
$args['additional_info'] = array_map( 'sanitize_text_field', wp_unslash( $req['additional_info'] ) );
}
// Export Options Information.
$args['export_options'] = [];
if ( ! empty( $req['export_options'] ) ) {
$args['export_options'] = array_map( 'sanitize_text_field', wp_unslash( $req['export_options'] ) );
}
// Date range.
$args['dates'] = [];
if ( ! empty( $req['date'] ) ) {
$dates = explode( ' - ', sanitize_text_field( wp_unslash( $req['date'] ) ) );
switch ( count( $dates ) ) {
case 1:
$args['dates'] = sanitize_text_field( $req['date'] );
break;
case 2:
$args['dates'] = array_map( 'sanitize_text_field', $dates );
break;
}
}
// Search.
$args['search'] = [
'field' => 'any',
'comparison' => 'contains',
'term' => '',
];
if ( isset( $req['search'] ) ) {
if ( isset( $req['search']['field'] ) ) {
$args['search']['field'] = sanitize_key( $req['search']['field'] );
}
if ( ! empty( $req['search']['comparison'] ) ) {
$args['search']['comparison'] = sanitize_key( $req['search']['comparison'] );
}
if ( ! empty( $req['search']['term'] ) ) {
$args['search']['term'] = sanitize_text_field( $req['search']['term'] );
}
}
// Request ID.
$args['request_id'] = '';
if ( ! empty( $req['request_id'] ) ) {
$args['request_id'] = sanitize_text_field( wp_unslash( $req['request_id'] ) );
}
$this->data[ strtolower( $method ) . '_args' ] = $args;
}
/**
* Init selected form data.
*
* @since 1.5.5
*/
protected function init_form_data() {
$this->data['form_data'] = wpforms()->form->get(
$this->data['get_args']['form_id'],
[
'content_only' => true,
'cap' => 'view_entries_form_single',
]
);
}
/**
* Check if current page request meets requirements for Export tool.
*
* @since 1.5.5
* @deprecated 1.7.6
*
* @return bool
*/
public function is_tools_export_page() {
_deprecated_function( __METHOD__, '1.7.6 of the WPForms plugin' );
// Only proceed for the Tools > Export.
if ( ! wpforms_is_admin_page( 'tools', 'export' ) ) {
return false;
}
return true;
}
/**
* Helper function to determine if it is entries export ajax request.
*
* @since 1.6.1
*
* @return bool
*/
public function is_entries_export_ajax() { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh
if ( ! wp_doing_ajax() ) {
return false;
}
$ref = wp_get_raw_referer();
if ( ! $ref ) {
return false;
}
$query = wp_parse_url( $ref, PHP_URL_QUERY );
wp_parse_str( $query, $query_vars );
if ( empty( $query_vars['page'] ) || $query_vars['page'] !== 'wpforms-tools' ) {
return false;
}
// phpcs:disable WordPress.Security.NonceVerification.Recommended
if (
empty( $_REQUEST['action'] ) ||
empty( $_REQUEST['nonce'] ) ||
( empty( $_REQUEST['form'] ) && empty( $_REQUEST['request_id'] ) )
) {
return false;
}
if (
$_REQUEST['action'] !== 'wpforms_tools_entries_export_form_data' &&
$_REQUEST['action'] !== 'wpforms_tools_entries_export_step'
) {
return false;
}
// phpcs:enable WordPress.Security.NonceVerification.Recommended
return true;
}
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists