855 lines
29 KiB
PHP
855 lines
29 KiB
PHP
<?php
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit; // Exit if accessed directly
|
|
}
|
|
|
|
class WC_Order_Export_Manage {
|
|
const settings_name_now = 'woocommerce-order-export-now';
|
|
const settings_name_cron = 'woocommerce-order-export-cron';
|
|
const settings_name_profiles = 'woocommerce-order-export-profiles';
|
|
const settings_name_actions = 'woocommerce-order-export-actions';
|
|
|
|
const EXPORT_NOW = 'now';
|
|
const EXPORT_PROFILE = 'profiles';
|
|
const EXPORT_SCHEDULE = 'cron';
|
|
const EXPORT_ORDER_ACTION = 'order-action';
|
|
|
|
public static $edit_existing_job = false;
|
|
|
|
static function get_days() {
|
|
return array(
|
|
'Sun' => __( 'Sun', 'woo-order-export-lite' ),
|
|
'Mon' => __( 'Mon', 'woo-order-export-lite' ),
|
|
'Tue' => __( 'Tue', 'woo-order-export-lite' ),
|
|
'Wed' => __( 'Wed', 'woo-order-export-lite' ),
|
|
'Thu' => __( 'Thu', 'woo-order-export-lite' ),
|
|
'Fri' => __( 'Fri', 'woo-order-export-lite' ),
|
|
'Sat' => __( 'Sat', 'woo-order-export-lite' ),
|
|
);
|
|
}
|
|
|
|
static function get_settings_name_for_mode( $mode ) {
|
|
$name = '';
|
|
if ( $mode == self::EXPORT_NOW ) {
|
|
$name = self::settings_name_now;
|
|
} elseif ( $mode == self::EXPORT_SCHEDULE ) {
|
|
$name = self::settings_name_cron;
|
|
} elseif ( $mode == self::EXPORT_PROFILE ) {
|
|
$name = self::settings_name_profiles;
|
|
} elseif ( $mode == self::EXPORT_ORDER_ACTION ) {
|
|
$name = self::settings_name_actions;
|
|
}
|
|
|
|
return apply_filters("woe_get_settings_name_for_mode", $name, $mode);
|
|
}
|
|
|
|
// arrays
|
|
static function get_export_settings_collection( $mode ) {
|
|
$name = self::get_settings_name_for_mode( $mode );
|
|
|
|
return get_option( $name, array() );
|
|
}
|
|
|
|
static function save_export_settings_collection( $mode, $jobs ) {
|
|
$name = self::get_settings_name_for_mode( $mode );
|
|
$result = update_option( $name, $jobs, false );
|
|
|
|
if ( $mode == self::EXPORT_SCHEDULE ) {
|
|
WC_Order_Export_Cron::try_install_job( true ); // must delete existing job!
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
|
|
static function use_ready_or_prepare_settings($in) {
|
|
if ($in['mode'] != 'frontend')
|
|
return self::make_new_settings($in);
|
|
|
|
// get ready settings from frontend page !
|
|
$settings = json_decode($in['settings'], true);
|
|
// use empty code if no permissions
|
|
if (!WC_Order_Export_Admin::user_can_add_custom_php())
|
|
$settings['custom_php_code'] = '';
|
|
|
|
return $settings;
|
|
}
|
|
|
|
static function make_new_settings( $in ) {
|
|
$new_settings = $in['settings'];
|
|
|
|
// use old PHP code if no permissions, just to stop trcky persons ;)
|
|
if ( ! WC_Order_Export_Admin::user_can_add_custom_php() ) {
|
|
unset( $new_settings['custom_php_code'] );
|
|
}
|
|
|
|
// UI don't pass empty multiselects
|
|
$multiselects = array(
|
|
'from_status',
|
|
'to_status',
|
|
'statuses',
|
|
'order_custom_fields',
|
|
'product_custom_fields',
|
|
'product_categories',
|
|
'product_vendors',
|
|
'products',
|
|
'exclude_products',
|
|
'shipping_locations',
|
|
'shipping_methods',
|
|
'user_roles',
|
|
'user_names',
|
|
'user_custom_fields',
|
|
'coupons',
|
|
'billing_locations',
|
|
'payment_methods',
|
|
'product_attributes',
|
|
'product_itemmeta',
|
|
'product_taxonomies',
|
|
'item_names',
|
|
'item_metadata',
|
|
);
|
|
foreach ( $multiselects as $m_select ) {
|
|
if ( ! isset( $new_settings[ $m_select ] ) ) {
|
|
$new_settings[ $m_select ] = array();
|
|
}
|
|
}
|
|
|
|
if ( ! isset( $in['mode'] ) ) {
|
|
$in['mode'] = null;
|
|
}
|
|
|
|
if ( ! isset( $in['id'] ) ) {
|
|
$in['id'] = null;
|
|
}
|
|
|
|
$settings = self::get( $in['mode'], $in['id'] );
|
|
$settings['id'] = (int) $in['id'];
|
|
$settings['duplicated_fields_settings'] = isset( $in['duplicated_fields_settings'] ) ? $in['duplicated_fields_settings'] : array();
|
|
|
|
// setup new values for same keys
|
|
foreach ( $new_settings as $key => $val ) {
|
|
$settings[ $key ] = $val;
|
|
}
|
|
|
|
$sections = array(
|
|
'orders' => 'order_fields',
|
|
);
|
|
|
|
if ( ! WC_Order_Export_Engine::is_plain_format( $new_settings['format'] ) ) {
|
|
$sections['products'] = 'order_product_fields';
|
|
$sections['coupons'] = 'order_coupon_fields';
|
|
}
|
|
|
|
foreach ( $sections as $section => $fieldset ) {
|
|
$section_fields = isset( $in[ $section ] ) ? $in[ $section ] : array();
|
|
$settings[ $fieldset ] = $section_fields;
|
|
}
|
|
|
|
return self::apply_defaults( $in['mode'], $settings );
|
|
}
|
|
|
|
static function get( $mode, $id = false ) {
|
|
|
|
$all_jobs = self::get_export_settings_collection( $mode );
|
|
|
|
if ( $mode == self::EXPORT_NOW ) { // one job
|
|
if ( ! isset( $all_jobs['version'] ) ) {
|
|
$all_jobs = self::convert_settings_to_version_2( $mode, $all_jobs );
|
|
}
|
|
|
|
return self::apply_defaults( $mode, $all_jobs );
|
|
} elseif ( $id === false ) {
|
|
if ( empty( $all_jobs ) OR ! is_array( $all_jobs ) ) {
|
|
return array();
|
|
}
|
|
|
|
return array_map( function ( $item ) use ( $mode ) {
|
|
|
|
if ( ! isset( $item['version'] ) ) {
|
|
$item = self::convert_settings_to_version_2( $mode, $item );
|
|
}
|
|
|
|
return WC_Order_Export_Manage::apply_defaults( $mode, $item );
|
|
}, $all_jobs );
|
|
}
|
|
|
|
$settings = isset( $all_jobs[ $id ] ) ? $all_jobs[ $id ] : array();
|
|
|
|
if ( ! isset( $settings['version'] ) ) {
|
|
$settings = self::convert_settings_to_version_2( $mode, $settings );
|
|
}
|
|
|
|
return self::apply_defaults( $mode, $settings );
|
|
}
|
|
|
|
|
|
public static function get_defaults_filters() {
|
|
|
|
return array(
|
|
'statuses' => array(),
|
|
'from_date' => '',
|
|
'to_date' => '',
|
|
'from_order_id' => '',
|
|
'to_order_id' => '',
|
|
'shipping_locations' => array(),
|
|
'shipping_methods' => array(),
|
|
'item_names' => array(),
|
|
'item_metadata' => array(),
|
|
'user_roles' => array(),
|
|
'user_names' => array(),
|
|
'user_custom_fields' => array(),
|
|
'billing_locations' => array(),
|
|
'payment_methods' => array(),
|
|
'any_coupon_used' => 0,
|
|
'coupons' => array(),
|
|
'order_custom_fields' => array(),
|
|
'product_categories' => array(),
|
|
'product_vendors' => array(),
|
|
'products' => array(),
|
|
'exclude_products' => array(),
|
|
'product_taxonomies' => array(),
|
|
'product_custom_fields' => array(),
|
|
'product_attributes' => array(),
|
|
'product_itemmeta' => array(),
|
|
);
|
|
}
|
|
|
|
private static function get_defaults( $mode ) {
|
|
$settings = WC_Order_Export_Main_Settings::get_settings();
|
|
return array(
|
|
'version' => '2.0',
|
|
'mode' => $mode,
|
|
'title' => '',
|
|
'skip_empty_file' => true,
|
|
'log_results' => false,
|
|
'from_status' => array(),
|
|
'to_status' => array(),
|
|
'change_order_status_to' => '',
|
|
'statuses' => ($mode == "now" OR $mode == "profiles") ? array("wc-pending","wc-processing","wc-on-hold","wc-completed") : array(),
|
|
'from_date' => '',
|
|
'to_date' => '',
|
|
'sub_start_from_date' => '',
|
|
'sub_start_to_date' => '',
|
|
'sub_end_from_date' => '',
|
|
'sub_end_to_date' => '',
|
|
'sub_next_paym_from_date' => '',
|
|
'sub_next_paym_to_date' => '',
|
|
'from_order_id' => '',
|
|
'to_order_id' => '',
|
|
'shipping_locations' => array(),
|
|
'shipping_methods' => array(),
|
|
'item_names' => array(),
|
|
'item_metadata' => array(),
|
|
'user_roles' => array(),
|
|
'user_names' => array(),
|
|
'user_custom_fields' => array(),
|
|
'billing_locations' => array(),
|
|
'payment_methods' => array(),
|
|
'any_coupon_used' => 0,
|
|
'coupons' => array(),
|
|
'order_custom_fields' => array(),
|
|
'product_categories' => array(),
|
|
'product_vendors' => array(),
|
|
'products' => array(),
|
|
'product_sku' => '',
|
|
'exclude_products' => array(),
|
|
'product_taxonomies' => array(),
|
|
'product_custom_fields' => array(),
|
|
'product_attributes' => array(),
|
|
'product_itemmeta' => array(),
|
|
'format' => 'XLS',
|
|
|
|
'format_xls_use_xls_format' => 0,
|
|
'format_xls_sheet_name' => __( 'Orders', 'woo-order-export-lite' ),
|
|
'format_xls_display_column_names' => 1,
|
|
'format_xls_auto_width' => 1,
|
|
'format_xls_direction_rtl' => 0,
|
|
'format_xls_force_general_format' => 0,
|
|
'format_xls_remove_emojis' => 0,
|
|
'format_xls_row_images_width' => 50,
|
|
'format_xls_row_images_height' => 50,
|
|
|
|
'format_csv_enclosure' => '"',
|
|
'format_csv_delimiter' => ',',
|
|
'format_csv_linebreak' => '\r\n',
|
|
'format_csv_display_column_names' => 1,
|
|
'format_csv_add_utf8_bom' => 0,
|
|
'format_csv_item_rows_start_from_new_line' => 0,
|
|
'format_csv_encoding' => 'UTF-8',
|
|
'format_csv_delete_linebreaks' => 0,
|
|
'format_csv_remove_linebreaks' => 0,
|
|
'format_csv_force_quotes' => 0,
|
|
|
|
'format_tsv_linebreak' => '\r\n',
|
|
'format_tsv_display_column_names' => 1,
|
|
'format_tsv_add_utf8_bom' => 0,
|
|
'format_tsv_item_rows_start_from_new_line' => 0,
|
|
'format_tsv_encoding' => 'UTF-8',
|
|
|
|
'format_xml_root_tag' => 'Orders',
|
|
'format_xml_order_tag' => 'Order',
|
|
'format_xml_product_tag' => 'Product',
|
|
'format_xml_coupon_tag' => 'Coupon',
|
|
'format_xml_prepend_raw_xml' => '',
|
|
'format_xml_append_raw_xml' => '',
|
|
'format_xml_self_closing_tags' => 1,
|
|
'format_xml_preview_format' => 0,
|
|
|
|
'format_json_start_tag' => '[',
|
|
'format_json_end_tag' => ']',
|
|
'format_json_unescaped_slashes' => 0,
|
|
'format_json_numeric_check' => 0,
|
|
'format_json_encode_unicode' => 0,
|
|
|
|
'format_pdf_display_column_names' => 1,
|
|
'format_pdf_repeat_header' => 1,
|
|
'format_pdf_direction_rtl' => 0,
|
|
'format_pdf_orientation' => 'L',
|
|
'format_pdf_page_size' => 'A4',
|
|
'format_pdf_font_size' => 8,
|
|
'format_pdf_header_text' => '',
|
|
'format_pdf_footer_text' => '',
|
|
'format_pdf_pagination' => 'C',
|
|
'format_pdf_fit_page_width' => 0,
|
|
'format_pdf_cols_width' => '25',
|
|
'format_pdf_cols_align' => 'L',
|
|
'format_pdf_cols_vertical_align' => 'T',
|
|
'format_pdf_page_header_text_color' => '#000000',
|
|
'format_pdf_page_footer_text_color' => '#000000',
|
|
'format_pdf_table_header_text_color' => '#000000',
|
|
'format_pdf_table_header_background_color' => '#FFFFFF',
|
|
'format_pdf_table_row_text_color' => '#000000',
|
|
'format_pdf_table_row_background_color' => '#FFFFFF',
|
|
'format_pdf_logo_source_id' => 0,
|
|
'format_pdf_logo_source' => '',
|
|
'format_pdf_logo_width' => 0,
|
|
'format_pdf_logo_height' => 15,
|
|
'format_pdf_logo_align' => 'R',
|
|
'format_pdf_row_images_width' => 15,
|
|
'format_pdf_row_images_height' => 15,
|
|
'format_pdf_row_images_add_link' => 0,
|
|
'format_pdf_row_dont_page_break_order_lines'=> 0,
|
|
|
|
'format_html_display_column_names' => 1,
|
|
'format_html_repeat_header_last_line' => 0,
|
|
'format_html_font_size' => 13,
|
|
'format_html_header_text' => '',
|
|
'format_html_footer_text' => '',
|
|
'format_html_cols_align' => 'L',
|
|
'format_html_header_text_color' => '#000000',
|
|
'format_html_footer_text_color' => '#000000',
|
|
'format_html_table_header_text_color' => '#000000',
|
|
'format_html_table_header_background_color' => '#FFFFFF',
|
|
'format_html_table_row_text_color' => '#000000',
|
|
'format_html_table_row_background_color' => '#FFFFFF',
|
|
'format_html_row_images_width' => 100,
|
|
'format_html_row_images_height' => 100,
|
|
'format_html_images_add_link' => 0,
|
|
'format_html_custom_css' => $settings['default_html_css'],
|
|
|
|
'all_products_from_order' => 1,
|
|
'skip_refunded_items' => 0,
|
|
'skip_suborders' => 0,
|
|
'export_refunds' => 0,
|
|
'export_matched_items' => 0,
|
|
'exclude_free_items' => 0,
|
|
'date_format' => 'Y-m-d',
|
|
'time_format' => 'H:i',
|
|
'sort_direction' => 'DESC',
|
|
'sort' => 'order_id',
|
|
'format_number_fields' => 0,
|
|
'export_all_comments' => 0,
|
|
'export_refund_notes' => 0,
|
|
'strip_tags_product_fields' => 0,
|
|
'strip_html_tags' => 0,
|
|
'round_item_tax_rate' => 0,
|
|
'cleanup_phone' => 0,
|
|
'convert_serialized_values' => 0,
|
|
'enable_debug' => 0,
|
|
'billing_details_for_shipping' => 0,
|
|
'custom_php' => 0,
|
|
'custom_php_code' => '',
|
|
'mark_exported_orders' => 0,
|
|
'export_unmarked_orders' => 0,
|
|
|
|
'summary_report_by_products' => 0,
|
|
'duplicated_fields_settings' => array(
|
|
'products' =>
|
|
array(
|
|
'repeat' => 'rows',
|
|
'populate_other_columns' => '1',
|
|
'max_cols' => '10',
|
|
'line_delimiter' => '\\n',
|
|
'group_by' => 'product',
|
|
),
|
|
'coupons' =>
|
|
array(
|
|
'repeat' => 'rows',
|
|
'max_cols' => '10',
|
|
'line_delimiter' => '\\n',
|
|
'group_by' => 'product',
|
|
),
|
|
),
|
|
'summary_report_by_customers' => 0,
|
|
'destination' => array (
|
|
'zapier_export_type'=>'order_items'
|
|
),
|
|
);
|
|
}
|
|
|
|
static function apply_defaults( $mode, $settings ) {
|
|
$settings = apply_filters( "woe_before_apply_default_settings", $settings, $mode );
|
|
|
|
$defaults = self::get_defaults( $mode );
|
|
|
|
if ( ! isset( $settings['format'] ) ) {
|
|
$settings['format'] = 'XLS';
|
|
}
|
|
|
|
if ( ! isset( $settings['export_rule_field'] ) AND $mode == WC_Order_Export_Manage::EXPORT_SCHEDULE ) {
|
|
$settings['export_rule_field'] = 'modified';
|
|
}
|
|
|
|
|
|
foreach ( array( 'order_fields', 'order_product_fields', 'order_coupon_fields' ) as $index ) {
|
|
if ( ! isset( $settings[ $index ] ) ) {
|
|
$additional_fields = self::move_fields_key( self::get_default_fields( $index, $settings['format'] ) );
|
|
self::remove_unchecked_fields( $additional_fields );
|
|
$settings[ $index ] = $additional_fields;
|
|
if ( 'order_fields' !== $index ) {
|
|
$map_segment = array(
|
|
'order_product_fields' => 'products',
|
|
'order_coupon_fields' => 'coupons',
|
|
);
|
|
$settings['order_fields'] = array_merge(
|
|
$settings['order_fields'],
|
|
array_map( function ( $value ) use ( $map_segment, $index ) {
|
|
$value['segment'] = $map_segment[ $index ];
|
|
$value['key'] = 'plain_' . $map_segment[ $index ] . '_' . $value['key'];
|
|
|
|
return $value;
|
|
}, $additional_fields )
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
// add parent fields if not exists
|
|
foreach ( array( 'products', 'coupons' ) as $main_field ) {
|
|
|
|
if ( in_array( $main_field, wp_list_pluck( $settings['order_fields'], 'key' ) ) ) {
|
|
continue;
|
|
}
|
|
|
|
$add = false;
|
|
|
|
// get correct structure
|
|
$default = self::move_fields_key( WC_Order_Export_Data_Extractor_UI::get_order_fields( $settings['format'], (array) $main_field ) );
|
|
self::remove_unchecked_fields( $default );
|
|
|
|
foreach ( $settings['order_fields'] as $num_index => $field ) {
|
|
if ( $main_field === $field['segment'] ) {
|
|
array_splice( $settings['order_fields'], $num_index, 0, $default );
|
|
$add = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( ! $add ) {
|
|
$settings['order_fields'][] = $default;
|
|
}
|
|
}
|
|
|
|
return array_merge( $defaults, $settings );
|
|
}
|
|
|
|
private static function get_default_fields( $index, $format ) {
|
|
$result = array();
|
|
switch ( $index ) {
|
|
case 'order_fields':
|
|
$result = WC_Order_Export_Data_Extractor_UI::get_order_fields( $format );
|
|
break;
|
|
case 'order_product_fields':
|
|
$result = array_merge(WC_Order_Export_Data_Extractor_UI::get_order_product_fields( $format ), WC_Order_Export_Data_Extractor_UI::get_order_fields_product_items());
|
|
break;
|
|
case 'order_coupon_fields':
|
|
$result = WC_Order_Export_Data_Extractor_UI::get_order_coupon_fields( $format );
|
|
break;
|
|
};
|
|
|
|
return $result;
|
|
}
|
|
|
|
private static function remove_unchecked_fields( &$fields ) {
|
|
foreach ( $fields as $key => $field ) {
|
|
if ( empty( $field['checked'] ) ) {
|
|
unset( $fields[ $key ] );
|
|
} elseif ( isset( $field['checked'] ) ) {
|
|
unset( $fields[ $key ]['checked'] );
|
|
}
|
|
}
|
|
$fields = array_values( $fields );
|
|
}
|
|
|
|
private static function move_fields_key( $fields ) {
|
|
|
|
return array_map( function ( $key, $value ) {
|
|
if ( ! key_exists( 'key', $value ) ) {
|
|
$value['key'] = $key;
|
|
}
|
|
|
|
return $value;
|
|
}, array_keys( $fields ), $fields );
|
|
}
|
|
|
|
public static function make_all_fields( $format ) {
|
|
$order_fields = array();
|
|
foreach ( array_keys( WC_Order_Export_Data_Extractor_UI::get_unselected_fields_segments() ) as $segment ) {
|
|
if ( 'products' == $segment ) {
|
|
$method = "get_order_product_fields";
|
|
$filter = "woe_get_order_product_fields";
|
|
} elseif ( 'coupons' == $segment ) {
|
|
$method = "get_order_coupon_fields";
|
|
$filter = "woe_get_order_coupon_fields";
|
|
} elseif ( 'misc' == $segment ) {
|
|
$method = "get_order_fields_misc";
|
|
$filter = "woe_get_order_fields"; //add ALL custom Order fields to last tab
|
|
} else {
|
|
$method = "get_order_fields_" . $segment;
|
|
$filter = "woe_get_order_fields_" . $segment;
|
|
}
|
|
|
|
// woe_get_order_fields_common filter
|
|
$segment_fields = array();
|
|
$default_segment_fields = array();
|
|
|
|
if ( method_exists( 'WC_Order_Export_Data_Extractor_UI', $method ) ) {
|
|
$default_segment_fields = WC_Order_Export_Data_Extractor_UI::$method( $format );
|
|
}
|
|
|
|
$default_segment_fields = array_merge(
|
|
$default_segment_fields,
|
|
apply_filters( $filter, array(), $format )
|
|
);
|
|
|
|
if ($segment == 'common') {
|
|
$settings = WC_Order_Export_Main_Settings::get_settings();
|
|
$type = isset($settings['post_type']) ? $settings['post_type'] : (isset($_GET['woe_post_type']) ? $_GET['woe_post_type'] : '');
|
|
if ( $type !== 'shop_order_refund' ) {
|
|
unset($default_segment_fields['orig_order_date']);
|
|
}
|
|
}
|
|
|
|
foreach ( $default_segment_fields as $key => $value ) {
|
|
$order_field = $value;
|
|
$order_field['colname'] = $value['label'];
|
|
$order_field['key'] = $key;
|
|
$order_field['default'] = 1;
|
|
unset( $order_field['checked'] );
|
|
$segment_fields[] = $order_field;
|
|
}
|
|
|
|
$order_fields[ $segment ] = $segment_fields;
|
|
}
|
|
|
|
return $order_fields;
|
|
}
|
|
|
|
static function save_export_settings( $mode, $id, $options ) {
|
|
$all_jobs = self::get_export_settings_collection( $mode );
|
|
if ( $mode == self::EXPORT_NOW ) {
|
|
$all_jobs = $options;// just replace
|
|
} elseif ( $mode == self::EXPORT_SCHEDULE ) {
|
|
if ( $id ) {
|
|
$options['schedule']['last_run'] = isset( $all_jobs[ $id ] ) ? $all_jobs[ $id ]['schedule']['last_run'] : current_time( "timestamp", 0 );
|
|
$options['schedule']['last_report_sent'] = isset( $all_jobs[ $id ] ) ? $all_jobs[ $id ]['schedule']['last_report_sent'] : current_time( "timestamp", 0 );
|
|
$options['schedule']['next_run'] = WC_Order_Export_Cron::next_event_timestamp_for_schedule( $options['schedule'], $id );
|
|
$all_jobs[ $id ] = $options;
|
|
} else {
|
|
$options['schedule']['last_run'] = current_time( "timestamp", 0 );
|
|
$options['schedule']['last_report_sent'] = current_time( "timestamp", 0 );
|
|
$options['schedule']['next_run'] = WC_Order_Export_Cron::next_event_timestamp_for_schedule( $options['schedule'] );
|
|
$all_jobs[] = $options; // new job
|
|
end( $all_jobs );
|
|
$id = key( $all_jobs );
|
|
}
|
|
} elseif ( $mode == self::EXPORT_PROFILE OR $mode == self::EXPORT_ORDER_ACTION ) {
|
|
if ( $id ) {
|
|
$all_jobs[ $id ] = $options;
|
|
} else {
|
|
$all_jobs[] = $options; // new job
|
|
end( $all_jobs );
|
|
$id = key( $all_jobs );
|
|
}
|
|
}
|
|
|
|
self::save_export_settings_collection( $mode, $all_jobs );
|
|
|
|
return $id;
|
|
}
|
|
|
|
static function set_correct_file_ext( &$settings ) {
|
|
if ( $settings['format'] == 'XLS' AND ! $settings['format_xls_use_xls_format'] ) {
|
|
$settings['format'] = 'XLSX';
|
|
}
|
|
}
|
|
|
|
static function import_settings( $data ) {
|
|
$allowed_options = array(
|
|
self::EXPORT_NOW,
|
|
self::EXPORT_SCHEDULE,
|
|
self::EXPORT_PROFILE,
|
|
self::EXPORT_ORDER_ACTION,
|
|
);
|
|
if ( isset( $data[ self::EXPORT_NOW ] ) ) { // import ALL
|
|
foreach ( $allowed_options as $key ) {
|
|
if ( isset( $data[ $key ] ) ) {
|
|
$setting_name = self::get_settings_name_for_mode( $key );
|
|
|
|
if ( isset( $data[ $key ]['mode'] ) ) {
|
|
$data[ $key ] = self::edit_import_data( $data[ $key ] );
|
|
} else {
|
|
foreach ( $data[ $key ] as $index => $import_single_data ) {
|
|
$data[ $key ][ $index ] = self::edit_import_data( $import_single_data );
|
|
}
|
|
}
|
|
|
|
update_option( $setting_name, $data[ $key ], false );
|
|
}
|
|
}
|
|
} elseif ( isset( $data["mode"] ) AND in_array( $data["mode"], $allowed_options ) ) { // OR import single ?
|
|
$setting_name = self::get_settings_name_for_mode( $data["mode"] );
|
|
if ( $setting_name == self::settings_name_now ) {
|
|
update_option( $setting_name, self::edit_import_data( $data ), false ); // rewrite
|
|
} else { // append!
|
|
$items = get_option( $setting_name, array() );
|
|
|
|
if ( empty( $items ) ) {
|
|
$items[1] = self::edit_import_data( $data );
|
|
} else {
|
|
$items[] = self::edit_import_data( $data );
|
|
}
|
|
|
|
update_option( $setting_name, $items, false );
|
|
}
|
|
}// if modes
|
|
}
|
|
|
|
private static function edit_import_data( $data ) {
|
|
|
|
$mode = $data['mode'];
|
|
if ( $mode != self::EXPORT_SCHEDULE ) {
|
|
unset( $data['export_rule'] );
|
|
unset( $data['schedule'] );
|
|
}
|
|
// don't allow to import PHP code if user has no permissions to add this code
|
|
if ( ! WC_Order_Export_Admin::user_can_add_custom_php() ) {
|
|
$data['custom_php'] = 0;
|
|
$data['custom_php_code'] = "";
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
//backup only existing settings
|
|
private static function backup_settings_before_version_2( $mode ) {
|
|
$name = self::get_settings_name_for_mode( $mode );
|
|
$current_settings = get_option( $name, array() );
|
|
$new_settings = get_option( $name . "-V1", array() );
|
|
// backup only once!
|
|
if ( ! empty( $current_settings ) AND empty( $new_settings ) ) {
|
|
update_option( $name . "-V1", $current_settings, false );
|
|
}
|
|
}
|
|
|
|
protected static function convert_settings_to_version_2( $mode, $settings ) {
|
|
|
|
if ( ! $settings ) {
|
|
return $settings;
|
|
}
|
|
self::backup_settings_before_version_2( $mode );
|
|
|
|
$is_flat_format = WC_Order_Export_Engine::is_plain_format( $settings['format'] );
|
|
$is_json_format = $settings['format'] === 'JSON';
|
|
|
|
$order_fields = array();
|
|
$order_coupon_fields = array();
|
|
$order_product_fields = array();
|
|
$duplicated_fields_settings = array();
|
|
|
|
if ( ! empty( $settings['order_fields']['products']['checked'] ) ) {
|
|
if ( isset( $settings['order_product_fields'] ) ) {
|
|
|
|
foreach ( $settings['order_product_fields'] as $key => $values ) {
|
|
|
|
if ( ! $values['checked'] ) {
|
|
continue;
|
|
}
|
|
|
|
$field = array(
|
|
'key' => $key,
|
|
'label' => $values['label'],
|
|
'colname' => $values['colname'],
|
|
'format' => isset( $values['format'] ) ? $values['format'] : 'string',
|
|
);
|
|
|
|
if ( $is_flat_format ) {
|
|
$field['key'] = 'plain_products_' . $key;
|
|
$field['segment'] = 'products';
|
|
}
|
|
|
|
// start FOR STATIC FIELDS
|
|
if ( isset( $values['value'] ) ) {
|
|
$field['value'] = $values['value'];
|
|
}
|
|
if ( preg_match( '/^custom_field_(\d+)/', $key, $matches ) ) {
|
|
$field['key'] = "static_field_" . $matches[1];
|
|
}
|
|
// end FOR STATIC FIELDS
|
|
|
|
|
|
$order_product_fields[] = $field;
|
|
}
|
|
}
|
|
} else {
|
|
$order_fields[] = array(
|
|
'key' => 'products',
|
|
'label' => __( 'Products', 'woo-order-export-lite' ),
|
|
'colname' => $is_json_format ? 'products' : 'Products',
|
|
'segment' => 'product',
|
|
'format' => 'string',
|
|
);
|
|
}
|
|
|
|
|
|
if ( ! empty( $settings['order_fields']['coupons']['checked'] ) ) {
|
|
if ( isset( $settings['order_coupon_fields'] ) ) {
|
|
foreach ( $settings['order_coupon_fields'] as $key => $values ) {
|
|
|
|
if ( ! $values['checked'] ) {
|
|
continue;
|
|
}
|
|
|
|
$field = array(
|
|
'key' => $key,
|
|
'label' => $values['label'],
|
|
'colname' => $values['colname'],
|
|
'format' => isset( $values['format'] ) ? $values['format'] : 'string',
|
|
);
|
|
|
|
if ( $is_flat_format ) {
|
|
$field['key'] = 'plain_coupons_' . $key;
|
|
$field['segment'] = 'coupons';
|
|
}
|
|
|
|
// start FOR STATIC FIELDS
|
|
if ( isset( $values['value'] ) ) {
|
|
$field['value'] = $values['value'];
|
|
}
|
|
if ( preg_match( '/^custom_field_(\d+)/', $key, $matches ) ) {
|
|
$field['key'] = "static_field_" . $matches[1];
|
|
}
|
|
// end FOR STATIC FIELDS
|
|
|
|
$order_coupon_fields[] = $field;
|
|
}
|
|
}
|
|
} else {
|
|
$order_fields[] = array(
|
|
'key' => 'coupons',
|
|
'label' => __( 'Coupons', 'woo-order-export-lite' ),
|
|
'colname' => $is_json_format ? 'coupons' : 'Coupons',
|
|
'segment' => 'coupon',
|
|
'format' => 'string',
|
|
);
|
|
}
|
|
|
|
|
|
if ( isset( $settings['format'] ) ) {
|
|
$old_populate_option_values = array(
|
|
isset( $settings['format_xls_populate_other_columns_product_rows'] ) && $settings['format_xls_populate_other_columns_product_rows'] == '1' && $settings['format'] == 'XLS',
|
|
isset( $settings['format_csv_populate_other_columns_product_rows'] ) && $settings['format_csv_populate_other_columns_product_rows'] == '1' && $settings['format'] == 'CSV',
|
|
isset( $settings['format_tsv_populate_other_columns_product_rows'] ) && $settings['format_tsv_populate_other_columns_product_rows'] == '1' && $settings['format'] == 'TSV',
|
|
);
|
|
|
|
$old_populate_option_values = array_filter( $old_populate_option_values );
|
|
|
|
$populate = ! empty( $old_populate_option_values );
|
|
} else {
|
|
// by default
|
|
$populate = true;
|
|
}
|
|
|
|
if ( isset( $settings['order_fields'] ) ) {
|
|
foreach ( $settings['order_fields'] as $key => $values ) {
|
|
|
|
if ( ! $values['checked'] ) {
|
|
continue;
|
|
}
|
|
if ( ! isset( $values['segment'] ) ) {
|
|
$values['segment'] = 'common';
|
|
}
|
|
$order_field = array(
|
|
'key' => $key,
|
|
'label' => $values['label'],
|
|
'colname' => $values['colname'],
|
|
'segment' => $values['segment'],
|
|
'format' => isset( $values['format'] ) ? $values['format'] : 'string',
|
|
);
|
|
|
|
// start FOR STATIC FIELDS
|
|
if ( isset( $values['value'] ) ) {
|
|
$order_field['value'] = $values['value'];
|
|
}
|
|
if ( preg_match( '/^custom_field_(\d+)/', $key, $matches ) ) {
|
|
$order_field['key'] = "static_field_" . $matches[1];
|
|
}
|
|
// end FOR STATIC FIELDS
|
|
|
|
$order_fields[] = $order_field;
|
|
|
|
|
|
if ( $key === 'products' && $is_flat_format ) {
|
|
$order_fields = array_merge( $order_fields, $order_product_fields );
|
|
}
|
|
|
|
if ( $key === 'coupons' && $is_flat_format ) {
|
|
$order_fields = array_merge( $order_fields, $order_coupon_fields );
|
|
}
|
|
|
|
if ( in_array( $key, array( 'products', 'coupons' ) ) ) {
|
|
$duplicated_fields_settings[ $key ] = array(
|
|
'repeat' => isset( $values['repeat'] ) ? $values['repeat'] : 'rows',
|
|
'max_cols' => isset( $values['max_cols'] ) ? $values['max_cols'] : '10',
|
|
'line_delimiter' => '\\n',
|
|
);
|
|
if ( $key == 'products' ) {
|
|
$duplicated_fields_settings[ $key ]['populate_other_columns'] = $populate ? '1' : '0';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( $duplicated_fields_settings ) {
|
|
$settings['duplicated_fields_settings'] = $duplicated_fields_settings;
|
|
}
|
|
|
|
$defaults = self::get_defaults( $settings['mode'] );
|
|
if ( ! isset( $duplicated_fields_settings['products'] ) ) {
|
|
$settings['duplicated_fields_settings']['products'] = $defaults['duplicated_fields_settings']['products'];
|
|
}
|
|
if ( ! isset( $duplicated_fields_settings['coupons'] ) ) {
|
|
$settings['duplicated_fields_settings']['coupons'] = $defaults['duplicated_fields_settings']['coupons'];
|
|
}
|
|
|
|
$settings['order_fields'] = $order_fields;
|
|
|
|
$settings['order_product_fields'] = $is_flat_format ? array() : $order_product_fields;
|
|
$settings['order_coupon_fields'] = $is_flat_format ? array() : $order_coupon_fields;
|
|
|
|
unset( $duplicated_fields_settings, $order_coupon_fields, $order_product_fields, $order_fields );
|
|
|
|
return $settings;
|
|
}
|
|
|
|
|
|
}
|