/
home
/
techb158
/
l2hypotheques.com
/
wp-content
/
plugins
/
wpforms
/
src
/
Pro
/
Admin
/
Entries
/
Export
/
/home/techb158/l2hypotheques.com/wp-content/plugins/wpforms/src/Pro/Admin/Entries/Export
mkdir
upload
Name
Size
Mode
Actions
Admin.php
12200
0644
edit
dl
rm
Ajax.php
20434
0644
edit
dl
rm
Export.php
12789
0644
edit
dl
rm
File.php
12894
0644
edit
dl
rm
Edit:
/home/techb158/l2hypotheques.com/wp-content/plugins/wpforms/src/Pro/Admin/Entries/Export/Ajax.php
(20434B)
<?php namespace WPForms\Pro\Admin\Entries\Export; use WPForms\Pro\Helpers\CSV; use WPForms\Helpers\Transient; use WPForms\Pro\Admin\Entries; /** * Ajax endpoints and data processing. * * @since 1.5.5 */ class Ajax { use Entries\FilterSearch; /** * Instance of Export Class. * * @since 1.5.5 * * @var Export */ protected $export; /** * CSV helper class instance. * * @since 1.7.7 * * @var CSV */ private $csv; /** * Request data. * * @since 1.5.5 * * @var array */ public $request_data; /** * Constructor. * * @since 1.5.5 * * @param Export $export Instance of Export. */ public function __construct( $export ) { $this->export = $export; $this->csv = new CSV(); $this->hooks(); } /** * Register hooks. * * @since 1.5.5 */ public function hooks() { add_action( 'wp_ajax_wpforms_tools_entries_export_form_data', [ $this, 'ajax_form_data' ] ); add_action( 'wp_ajax_wpforms_tools_entries_export_step', [ $this, 'ajax_export_step' ] ); } /** * Ajax endpoint. Send form fields. * * @since 1.5.5 * * @throws \Exception Try-catch. */ public function ajax_form_data() { try { // Run a security check. if ( ! check_ajax_referer( 'wpforms-tools-entries-export-nonce', 'nonce', false ) ) { throw new \Exception( $this->export->errors['security'] ); } if ( empty( $this->export->data['form_data'] ) ) { throw new \Exception( $this->export->errors['form_data'] ); } $fields = empty( $this->export->data['form_data']['fields'] ) ? [] : (array) $this->export->data['form_data']['fields']; $fields = array_map( static function ( $field ) { /* translators: %d - Field ID. */ $field['label'] = ! empty( $field['label'] ) ? trim( wp_strip_all_tags( $field['label'] ) ) : sprintf( esc_html__( 'Field #%d', 'wpforms' ), (int) $field['id'] ); return $field; }, $fields ); wp_send_json_success( [ 'fields' => $this->exclude_disallowed_fields( $fields ), ] ); } catch ( \Exception $e ) { $error = $this->export->errors['common'] . '<br>' . $e->getMessage(); if ( wpforms_debug() ) { $error .= '<br><b>WPFORMS DEBUG</b>: ' . $e->__toString(); } wp_send_json_error( [ 'error' => $error ] ); } } /** * Exclude disallowed fields from fields array. * * @since 1.6.6 * * @param array $fields Fields array. * * @return array */ private function exclude_disallowed_fields( $fields ) { $disallowed_fields = $this->export->configuration['disallowed_fields']; return array_filter( array_values( $fields ), static function ( $v ) use ( $disallowed_fields ) { return isset( $v['type'] ) && ! in_array( $v['type'], $disallowed_fields, true ); } ); } /** * Ajax endpoint. Entries export processing. * * @since 1.5.5 * * @throws \Exception Try-catch. */ public function ajax_export_step() {// phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh try { // Init arguments. $this->export->init_args( 'POST' ); $args = $this->export->data['post_args']; // Security checks. if ( ! check_ajax_referer( 'wpforms-tools-entries-export-nonce', 'nonce', false ) || empty( $args['nonce'] ) || empty( $args['action'] ) || ! wpforms_current_user_can( 'view_entries' ) ) { throw new \Exception( $this->export->errors['security'] ); } // Check for form_id at the first step. if ( empty( $args['form_id'] ) && empty( $args['request_id'] ) ) { throw new \Exception( $this->export->errors['unknown_form_id'] ); } // Unlimited execution time. wpforms_set_time_limit(); // Apply search by fields and advanced options. $this->process_filter_search(); $this->request_data = $this->get_request_data( $args ); if ( empty( $this->request_data ) ) { throw new \Exception( $this->export->errors['unknown_request'] ); } if ( $this->request_data['type'] === 'xlsx' ) { // Write to the .xlsx file. $this->export->file->write_xlsx( $this->request_data ); } else { // Writing to the .csv file. $this->export->file->write_csv( $this->request_data ); } // Prepare response. $response = $this->get_response_data(); // Store request data. Transient::set( 'wpforms-tools-entries-export-request-' . $this->request_data['request_id'], $this->request_data, $this->export->configuration['request_data_ttl'] ); wp_send_json_success( $response ); } catch ( \Exception $e ) { $error = $this->export->errors['common'] . '<br>' . $e->getMessage(); if ( wpforms_debug() ) { $error .= '<br><b>WPFORMS DEBUG</b>: ' . $e->__toString(); } wp_send_json_error( [ 'error' => $error ] ); } } /** * Get request data at first step. * * @since 1.5.5 * * @param array $args Arguments array. * * @return array Request data. */ public function get_request_data( $args ) { // Prepare arguments. $db_args = [ 'number' => 0, 'offset' => 0, 'form_id' => $args['form_id'], 'entry_id' => $args['entry_id'], 'is_filtered' => ! empty( $args['entry_id'] ), 'date' => $args['dates'], 'select' => 'entry_ids', ]; if ( $args['search']['term'] !== '' ) { $db_args['value'] = $args['search']['term']; $db_args['value_compare'] = $args['search']['comparison']; $db_args['field_id'] = $args['search']['field']; } $db_args['select'] = 'entry_ids'; // Count total entries. $count = wpforms()->get( 'entry' )->get_entries( $db_args, true ); // Retrieve form data. $form_data = wpforms()->get( 'form' )->get( $args['form_id'], [ 'content_only' => true, ] ); // Prepare get entries args for further steps. unset( $db_args['select'] ); $db_args['number'] = $this->export->configuration['entries_per_step']; $form_data['fields'] = empty( $form_data['fields'] ) ? [] : (array) $form_data['fields']; // Prepare `request data` for saving. $request_data = [ 'request_id' => md5( wp_json_encode( $db_args ) . microtime() ), 'form_data' => $form_data, 'db_args' => $db_args, 'fields' => empty( $args['entry_id'] ) ? $args['fields'] : wp_list_pluck( $this->exclude_disallowed_fields( $form_data['fields'] ), 'id' ), 'additional_info' => empty( $args['entry_id'] ) ? $args['additional_info'] : array_keys( $this->export->additional_info_fields ), 'count' => $count, 'total_steps' => (int) ceil( $count / $this->export->configuration['entries_per_step'] ), 'type' => ! empty( $args['export_options'] ) ? $args['export_options'][0] : 'csv', ]; $request_data['columns_row'] = $this->get_csv_cols( $request_data ); return $request_data; } /** * Get response data. * * @since 1.5.5 * * @return array Export data. */ protected function get_response_data() { return [ 'request_id' => $this->request_data['request_id'], 'count' => $this->request_data['count'], ]; } /** * Get CSV columns row. * * @since 1.5.5 * * @param array $request_data Request data array. * * @return array CSV columns (first row). */ public function get_csv_cols( $request_data ) { $columns_row = []; if ( ! empty( $request_data['form_data']['fields'] ) ) { $fields = array_map( static function ( $field ) { /* translators: %d - Field ID. */ $field['label'] = ! empty( $field['label'] ) ? trim( wp_strip_all_tags( $field['label'] ) ) : sprintf( esc_html__( 'Field #%d', 'wpforms' ), (int) $field['id'] ); return $field; }, $request_data['form_data']['fields'] ); $columns_labels = wp_list_pluck( $fields, 'label', 'id' ); foreach ( $request_data['fields'] as $field_id ) { if ( ! isset( $columns_labels[ $field_id ] ) ) { continue; } $columns_row[ $field_id ] = $columns_labels[ $field_id ]; } } else { $fields = []; } if ( ! empty( $request_data['additional_info'] ) ) { foreach ( $request_data['additional_info'] as $field_id ) { if ( $field_id === 'del_fields' ) { $columns_row = $columns_row + $this->get_deleted_fields_columns( $fields, $request_data ); } else { $columns_row[ $field_id ] = $this->export->additional_info_fields[ $field_id ]; } } } $columns_row = apply_filters_deprecated( 'wpforms_export_get_csv_cols', [ $columns_row, ! empty( $request_data['db_args']['entry_id'] ) ? (int) $request_data['db_args']['entry_id'] : 'all' ], '1.5.5 of the WPForms plugin', 'wpforms_pro_admin_entries_export_ajax_get_csv_cols' ); return apply_filters( 'wpforms_pro_admin_entries_export_ajax_get_csv_cols', $columns_row, $request_data ); } /** * Get single entry data. * * @since 1.6.5 * * @param array $entries Entries. * * @return \Generator */ public function get_entry_data( $entries ) { $no_fields = empty( $this->request_data['form_data']['fields'] ); $del_fields = in_array( 'del_fields', $this->request_data['additional_info'], true ); // Prepare entries data. foreach ( $entries as $entry ) { $fields = $this->get_entry_fields_data( $entry ); $row = []; foreach ( $this->request_data['columns_row'] as $col_id => $col_label ) { if ( is_numeric( $col_id ) ) { $row[ $col_id ] = isset( $fields[ $col_id ]['value'] ) ? $fields[ $col_id ]['value'] : ''; } elseif ( strpos( $col_id, 'del_field_' ) !== false ) { $f_id = str_replace( 'del_field_', '', $col_id ); $row[ $col_id ] = isset( $fields[ $f_id ]['value'] ) ? $fields[ $f_id ]['value'] : ''; } else { $row[ $col_id ] = $this->get_additional_info_value( $col_id, $entry, $this->request_data['form_data'] ); } $row[ $col_id ] = $this->csv->escape_value( $row[ $col_id ] ); } if ( $no_fields && ! $del_fields ) { continue; } $export_data = apply_filters_deprecated( 'wpforms_export_get_data', [ [ $entry->entry_id => $row ], ! empty( $this->request_data['db_args']['entry_id'] ) ? (int) $this->request_data['db_args']['entry_id'] : 'all' ], '1.5.5 of the WPForms plugin', 'wpforms_pro_admin_entries_export_get_entry_data' ); $export_data = apply_filters_deprecated( 'wpforms_pro_admin_entries_export_ajax_get_data', [ $export_data, $this->request_data ], '1.6.5 of the WPForms plugin', 'wpforms_pro_admin_entries_export_get_entry_data' ); yield apply_filters( 'wpforms_pro_admin_entries_export_ajax_get_entry_data', $export_data[ $entry->entry_id ], $this->request_data ); } } /** * Get value of additional information column. * * @since 1.5.5 * @since 1.5.9 Added $form_data parameter and Payment Status data processing. * * @param string $col_id Column id. * @param object $entry Entry object. * @param array $form_data Form data. * * @return string */ public function get_additional_info_value( $col_id, $entry, $form_data = [] ) { $entry = (array) $entry; switch ( $col_id ) { case 'date': $val = date_i18n( $this->date_format(), strtotime( $entry['date'] ) + $this->gmt_offset_sec() ); break; case 'notes': $val = $this->get_additional_info_notes_value( $entry ); break; case 'status': $val = $this->get_additional_info_status_value( $entry ); break; case 'geodata': $val = $this->get_additional_info_geodata_value( $entry ); break; case 'pstatus': $val = wpforms_has_payment( 'form', $form_data ) ? $this->get_additional_info_pstatus_value( $entry ) : ''; break; case 'pginfo': $val = wpforms_has_payment( 'form', $form_data ) ? $this->get_additional_info_pginfo_value( $entry ) : ''; break; case 'viewed': case 'starred': $val = (bool) $entry[ $col_id ] ? esc_html__( 'Yes', 'wpforms' ) : esc_html__( 'No', 'wpforms' ); break; default: $val = $entry[ $col_id ]; } /** * Modify value of additional information column. * * @since 1.5.5 * * @param string $val The value. * @param string $col_id Column id. * @param object $entry Entry object. */ return apply_filters( 'wpforms_pro_admin_entries_export_ajax_get_additional_info_value', $val, $col_id, $entry ); } /** * Get value of additional information notes. * * @since 1.5.5 * * @param array $entry Entry data. * * @return string */ public function get_additional_info_notes_value( $entry ) { $entry_notes = wpforms()->entry_meta->get_meta( [ 'entry_id' => $entry['entry_id'], 'type' => 'note', ] ); $val = ''; if ( empty( $entry_notes ) ) { return $val; } $val = array_reduce( $entry_notes, function ( $carry, $item ) { $item = (array) $item; $author = get_userdata( $item['user_id'] ); $author_name = ! empty( $author->first_name ) ? $author->first_name : $author->user_login; $author_name .= ! empty( $author->last_name ) ? ' ' . $author->last_name : ''; $carry .= date_i18n( $this->date_format(), strtotime( $item['date'] ) + $this->gmt_offset_sec() ) . ', '; $carry .= $author_name . ': '; $carry .= wp_strip_all_tags( $item['data'] ) . "\n"; return $carry; }, $val ); return $val; } /** * Get value of entry status (Additional Information). * * @since 1.7.3 * * @param array $entry Entry data. * * @return string */ public function get_additional_info_status_value( $entry ) { return in_array( $entry['status'], [ 'partial', 'abandoned' ], true ) ? ucwords( sanitize_text_field( $entry['status'] ) ) : esc_html__( 'Completed', 'wpforms' ); } /** * Get value of additional information geodata. * * @since 1.5.5 * * @param array $entry Entry data. * * @return string */ public function get_additional_info_geodata_value( $entry ) { $location = wpforms()->entry_meta->get_meta( [ 'entry_id' => $entry['entry_id'], 'type' => 'location', 'number' => 1, ] ); $val = ''; if ( empty( $location[0]->data ) ) { return $val; } $location = json_decode( $location[0]->data, true ); $loc_ary = []; $map_query_args = []; $loc = ''; if ( ! empty( $location['city'] ) ) { $map_query_args['q'] = $location['city']; $loc = $location['city']; } if ( ! empty( $location['region'] ) ) { if ( ! isset( $map_query_args['q'] ) ) { $map_query_args['q'] = ''; } $map_query_args['q'] .= empty( $map_query_args['q'] ) ? $location['region'] : ',' . $location['region']; $loc .= empty( $loc ) ? $location['region'] : ', ' . $location['region']; } if ( ! empty( $location['latitude'] ) && ! empty( $location['longitude'] ) ) { if ( ! isset( $map_query_args['ll'] ) ) { $map_query_args['ll'] = ''; } $map_query_args['ll'] .= $location['latitude'] . ',' . $location['longitude']; $loc_ary['latlong'] = [ 'label' => esc_html__( 'Lat/Long', 'wpforms' ), 'val' => $location['latitude'] . ', ' . $location['longitude'], ]; } if ( ! empty( $map_query_args ) ) { $map_query_args['z'] = apply_filters( 'wpforms_geolocation_map_zoom', '6' ); $map_query_args['output'] = 'embed'; $map = add_query_arg( $map_query_args, 'https://maps.google.com/maps' ); $loc_ary['map'] = [ 'label' => esc_html__( 'Map', 'wpforms' ), 'val' => $map, ]; } if ( ! empty( $loc ) ) { $loc_ary['loc'] = [ 'label' => esc_html__( 'Location', 'wpforms' ), 'val' => $loc, ]; } if ( ! empty( $location['postal'] ) ) { $loc_ary['zip'] = []; if ( ! empty( $location['country'] ) && $location['country'] === 'US' ) { $loc_ary['zip']['label'] = esc_html__( 'Zipcode', 'wpforms' ); } else { $loc_ary['zip']['label'] = esc_html__( 'Postal', 'wpforms' ); } $loc_ary['zip']['val'] = $location['postal']; } if ( ! empty( $location['country'] ) ) { $loc_ary['country'] = [ 'label' => esc_html__( 'Country', 'wpforms' ), 'val' => $location['country'], ]; } $val = array_reduce( $loc_ary, function ( $carry, $item ) { $item = (array) $item; $carry .= $item['label'] . ': ' . $item['val'] . "\n"; return $carry; }, $val ); return $val; } /** * Get the value of additional payment status information. * * @since 1.5.9 * * @param array $entry Entry array. * * @return string */ public function get_additional_info_pstatus_value( $entry ) { if ( $entry['type'] !== 'payment' ) { return ''; } if ( ! empty( $entry['status'] ) ) { $val = ucwords( sanitize_text_field( $entry['status'] ) ); } else { $val = esc_html__( 'Unknown', 'wpforms' ); } return $val; } /** * Get value of additional payment gateway information. * * @since 1.5.5 * * @param array $entry Entry array. * * @return string */ public function get_additional_info_pginfo_value( $entry ) { $payment = wpforms()->entry_meta->get_meta( [ 'entry_id' => $entry['entry_id'], 'type' => 'payment', 'number' => 1, ] ); $val = ''; if ( empty( $payment[0]->data ) ) { if ( empty( $entry['meta'] ) ) { return $val; } $payment = json_decode( $entry['meta'], true ); } else { $payment = json_decode( $payment[0]->data, true ); } $pginfo_labels = [ 'payment_type' => esc_html__( 'Payment gateway', 'wpforms' ), 'payment_recipient' => esc_html__( 'Recipient', 'wpforms' ), 'payment_transaction' => esc_html__( 'Transaction', 'wpforms' ), 'payment_total' => esc_html__( 'Total', 'wpforms' ), 'payment_currency' => esc_html__( 'Currency', 'wpforms' ), 'payment_mode' => esc_html__( 'Mode', 'wpforms' ), 'payment_subscription' => esc_html__( 'Subscription', 'wpforms' ), 'payment_customer' => esc_html__( 'Customer', 'wpforms' ), 'payment_period' => esc_html__( 'Period', 'wpforms' ), ]; $val = ''; array_walk( $payment, static function( $item, $key ) use ( $pginfo_labels, &$val ) { if ( strpos( $key, 'payment_' ) === false ) { return; } $val .= ! empty( $pginfo_labels[ $key ] ) ? $pginfo_labels[ $key ] . ': ' : ''; $val .= $item . "\n"; } ); return $val; } /** * Get deleted fields columns. * * @since 1.5.5 * * @param array $existing_fields Existing fields array. * @param array $request_data Request data array. * * @return array Deleted fields columns */ public function get_deleted_fields_columns( $existing_fields, $request_data ) { global $wpdb; $table_name = wpforms()->entry_fields->table_name; $sql = $wpdb->prepare( "SELECT DISTINCT field_id FROM `{$table_name}` WHERE `form_id` = %d AND `field_id` NOT IN ( " . implode( ',', wp_list_pluck( $existing_fields, 'id' ) ) . " )", // phpcs:ignore (int) $request_data['db_args']['form_id'] ); $deleted_fields_columns = []; $db_result = $wpdb->get_col( $sql ); // phpcs:ignore foreach ( $db_result as $id ) { /* translators: %d - deleted field ID. */ $deleted_fields_columns[ 'del_field_' . $id ] = sprintf( esc_html__( 'Deleted field #%d', 'wpforms' ), (int) $id ); } return $deleted_fields_columns; } /** * Get entry fields data. * * @since 1.5.5 * * @param object $entry Entry data. * * @return array Fields data by ID. */ public function get_entry_fields_data( $entry ) { $fields_by_id = []; if ( empty( $entry->fields ) ) { return $fields_by_id; } $fields = json_decode( $entry->fields, true ); if ( empty( $fields ) ) { return $fields_by_id; } foreach ( $fields as $field ) { if ( ! isset( $field['id'] ) ) { continue; } $fields_by_id[ $field['id'] ] = $field; } return $fields_by_id; } /** * Get date format. * * @since 1.5.5 */ public function date_format() { $this->export->data['date_format'] = empty( $this->export->data['date_format'] ) ? sprintf( '%s %s', get_option( 'date_format' ), get_option( 'time_format' ) ) : $this->export->data['date_format']; return $this->export->data['date_format']; } /** * Get GMT offset in seconds. * * @since 1.5.5 */ public function gmt_offset_sec() { $this->export->data['gmt_offset_sec'] = empty( $this->export->data['gmt_offset_sec'] ) ? get_option( 'gmt_offset' ) * 3600 : $this->export->data['gmt_offset_sec']; return $this->export->data['gmt_offset_sec']; } }
Save
cmd:
run