function woo_ce_escape_csv_array( $array = array(), $child = false, $escape = true ) { global $export; $output = ''; if( !empty( $array ) ) { foreach( $array as $key => $value ) { $size = count( $value ); if( is_array( $value ) && $size > 1 ) { $output .= '[' . $key . '] '; foreach( $value as $child_key => $child_value ) { $output .= $child_key . ': ' . woo_ce_escape_csv_array( $child_value, false, false ) . $export->category_separator; } $output .= $export->category_separator; } else { if( is_array( $value ) && $size == 1 ) { $keys = array_keys( $value ); if( count( $keys ) == 1 ) $value = $value[$keys[0]]; unset( $keys ); } else if( is_array( $value ) && empty( $value ) ) { $value = ''; } $output .= '[' . $key . '] ' . $value . $export->category_separator; } } $output = substr( $output, 0, -1 ); } $output = woo_ce_escape_csv_value( $output, $export->delimiter, $export->escape_formatting ); return $output; }
function woo_cd_export_dataset($datatype = null, $export = null) { global $wpdb, $export; include_once WOO_CE_PATH . 'includes/formatting.php'; include_once WOO_CD_PATH . 'includes/formatting.php'; $csv = ''; $separator = $export->delimiter; switch ($datatype) { case 'orders': $fields = woo_ce_get_order_fields('summary'); if ($export->fields = array_intersect_assoc($fields, $export->fields)) { foreach ($export->fields as $key => $field) { $export->columns[] = woo_ce_get_order_field($key); } } if ($export->args['order_items'] == 'unique') { $export->fields = woo_cd_add_unique_order_item_fields($export->fields); $export->columns = woo_cd_add_unique_order_item_columns($export->columns); } $export->data_memory_start = woo_ce_current_memory_usage(); if ($orders = woo_cd_get_orders('orders', $export->args)) { $export->total_columns = $size = count($export->columns); $i = 0; foreach ($export->columns as $column) { if ($i == $size - 1) { $csv .= woo_ce_escape_csv_value($column, $export->delimiter, $export->escape_formatting) . "\n"; } else { $csv .= woo_ce_escape_csv_value($column, $export->delimiter, $export->escape_formatting) . $separator; } $i++; } unset($export->columns); foreach ($orders as $order) { if ($export->args['order_items'] == 'combined' || $export->args['order_items'] == 'unique') { /* Order items formatting: SPECK-IPHONE|INCASE-NANO|- */ foreach ($export->fields as $key => $field) { if (isset($order->{$key})) { if (is_array($field)) { foreach ($field as $array_key => $array_value) { if (!is_array($array_value)) { $csv .= woo_ce_escape_csv_value($array_value, $export->delimiter, $export->escape_formatting); } } } else { $csv .= woo_ce_escape_csv_value($order->{$key}, $export->delimiter, $export->escape_formatting); } } $csv .= $separator; } $csv = substr($csv, 0, -1) . "\n"; } else { if ($export->args['order_items'] == 'individual') { /* Order items formatting: SPECK-IPHONE<br />INCASE-NANO<br />- */ $order->order_items_count = 0; foreach ($order->order_items as $order_item) { $order->order_items_product_id = ''; $order->order_items_variation_id = ''; $order->order_items_sku = ''; $order->order_items_name = ''; $order->order_items_variation = ''; $order->order_items_tax_class = ''; $order->order_items_quantity = ''; $order->order_items_total = ''; $order->order_items_subtotal = ''; $order->order_items_tax = ''; $order->order_items_tax_subtotal = ''; $order->order_items_type = ''; $order->order_items_category = ''; $order->order_items_tag = ''; if (empty($order_item->sku)) { $order_item->sku = '-'; } $order->order_items_product_id .= $order_item->product_id; $order->order_items_variation_id .= $order_item->variation_id; $order->order_items_sku .= $order_item->sku; $order->order_items_name .= $order_item->name; $order->order_items_variation .= $order_item->variation; $order->order_items_tax_class .= $order_item->tax_class; $order->order_items_quantity .= $order_item->quantity; $order->order_items_total .= $order_item->total; $order->order_items_subtotal .= $order_item->subtotal; $order->order_items_tax .= $order_item->tax; $order->order_items_tax_subtotal .= $order_item->tax_subtotal; $order->order_items_type .= $order_item->type; $order->order_items_category .= $order_item->category; $order->order_items_tag .= $order_item->tag; $order = apply_filters('woo_cd_order_items_individual', $order, $order_item); foreach ($export->fields as $key => $field) { if (isset($order->{$key})) { if (is_array($field)) { foreach ($field as $array_key => $array_value) { if (!is_array($array_value)) { $csv .= woo_ce_escape_csv_value($array_value, $export->delimiter, $export->escape_formatting); } } } else { $csv .= woo_ce_escape_csv_value($order->{$key}, $export->delimiter, $export->escape_formatting); } } $csv .= $separator; } $csv = substr($csv, 0, -1) . "\n"; } } } } unset($orders, $order); } $export->data_memory_end = woo_ce_current_memory_usage(); unset($export->fields); break; case 'customers': $fields = woo_ce_get_customer_fields('summary'); if ($export->fields = array_intersect_assoc($fields, $export->fields)) { foreach ($export->fields as $key => $field) { $export->columns[] = woo_ce_get_customer_field($key); } } $export->data_memory_start = woo_ce_current_memory_usage(); if ($customers = woo_cd_get_orders('customers', $export->args)) { $size = count($export->columns); $export->total_rows = $wpdb->num_rows; $export->total_columns = $size = count($export->columns); for ($i = 0; $i < $size; $i++) { if ($i == $size - 1) { $csv .= woo_ce_escape_csv_value($export->columns[$i], $export->delimiter, $export->escape_formatting) . "\n"; } else { $csv .= woo_ce_escape_csv_value($export->columns[$i], $export->delimiter, $export->escape_formatting) . $separator; } } foreach ($customers as $customer) { foreach ($export->fields as $key => $field) { if (isset($customer->{$key})) { $csv .= woo_ce_escape_csv_value($customer->{$key}, $export->delimiter, $export->escape_formatting); } $csv .= $separator; } $csv = substr($csv, 0, -1) . "\n"; } unset($customers, $customer); } $export->data_memory_end = woo_ce_current_memory_usage(); unset($export->fields); break; case 'coupons': $fields = woo_ce_get_coupon_fields('summary'); if ($export->fields = array_intersect_assoc($fields, $export->fields)) { foreach ($export->fields as $key => $field) { $export->columns[] = woo_ce_get_coupon_field($key); } } $export->data_memory_start = woo_ce_current_memory_usage(); if ($coupons = woo_cd_get_coupons()) { // $export->total_rows = count( $coupons ); $export->total_columns = $size = count($export->columns); for ($i = 0; $i < $size; $i++) { if ($i == $size - 1) { $csv .= woo_ce_escape_csv_value($export->columns[$i], $export->delimiter, $export->escape_formatting) . "\n"; } else { $csv .= woo_ce_escape_csv_value($export->columns[$i], $export->delimiter, $export->escape_formatting) . $separator; } } foreach ($coupons as $coupon) { foreach ($export->fields as $key => $field) { if (isset($coupon->{$key})) { $csv .= woo_ce_escape_csv_value($coupon->{$key}, $export->delimiter, $export->escape_formatting); } $csv .= $separator; } $csv = substr($csv, 0, -1) . "\n"; } unset($coupons, $coupon); } $export->data_memory_end = woo_ce_current_memory_usage(); unset($export->fields); break; } return $csv; }
function woo_ce_export_dataset($export_type = null, &$output = null) { global $export; $separator = $export->delimiter; $export->columns = array(); $export->total_rows = 0; $export->total_columns = 0; $troubleshooting_url = 'http://www.visser.com.au/documentation/store-exporter-deluxe/usage/'; set_transient(WOO_CE_PREFIX . '_running', time(), woo_ce_get_option('timeout', MINUTE_IN_SECONDS)); // Load up the fatal error notice if we 500 Internal Server Error (memory), hit a server timeout or encounter a fatal PHP error add_action('shutdown', 'woo_ce_fatal_error'); // Drop in our content filters here add_filter('sanitize_key', 'woo_ce_sanitize_key'); switch ($export_type) { // Products case 'product': $fields = woo_ce_get_product_fields('summary'); if ($export->fields = array_intersect_assoc((array) $export->fields, $fields)) { foreach ($export->fields as $key => $field) { $export->columns[] = woo_ce_get_product_field($key); } } $export->total_columns = $size = count($export->columns); $export->data_memory_start = woo_ce_current_memory_usage(); if ($products = woo_ce_get_products($export->args)) { $export->total_rows = count($products); // Generate the export headers if (in_array($export->export_format, array('csv'))) { for ($i = 0; $i < $size; $i++) { if ($i == $size - 1) { $output .= woo_ce_escape_csv_value($export->columns[$i], $export->delimiter, $export->escape_formatting) . "\n"; } else { $output .= woo_ce_escape_csv_value($export->columns[$i], $export->delimiter, $export->escape_formatting) . $separator; } } } $weight_unit = get_option('woocommerce_weight_unit'); $dimension_unit = get_option('woocommerce_dimension_unit'); $height_unit = $dimension_unit; $width_unit = $dimension_unit; $length_unit = $dimension_unit; if (!empty($export->fields)) { foreach ($products as $product) { $product = woo_ce_get_product_data($product, $export->args); foreach ($export->fields as $key => $field) { if (isset($product->{$key})) { if (is_array($field)) { foreach ($field as $array_key => $array_value) { if (!is_array($array_value)) { if (in_array($export->export_format, array('csv'))) { $output .= woo_ce_escape_csv_value($array_value, $export->delimiter, $export->escape_formatting); } } } } else { if (in_array($export->export_format, array('csv'))) { $output .= woo_ce_escape_csv_value($product->{$key}, $export->delimiter, $export->escape_formatting); } } } if (in_array($export->export_format, array('csv'))) { $output .= $separator; } } if (in_array($export->export_format, array('csv'))) { $output = substr($output, 0, -1) . "\n"; } } } unset($products, $product); } $export->data_memory_end = woo_ce_current_memory_usage(); break; // Categories // Categories case 'category': $fields = woo_ce_get_category_fields('summary'); if ($export->fields = array_intersect_assoc((array) $export->fields, $fields)) { foreach ($export->fields as $key => $field) { $export->columns[] = woo_ce_get_category_field($key); } } $export->total_columns = $size = count($export->columns); $export->data_memory_start = woo_ce_current_memory_usage(); $category_args = array('orderby' => isset($export->args['category_orderby']) ? $export->args['category_orderby'] : 'ID', 'order' => isset($export->args['category_order']) ? $export->args['category_order'] : 'ASC'); if ($categories = woo_ce_get_product_categories($category_args)) { $export->total_rows = count($categories); // Generate the export headers if (in_array($export->export_format, array('csv'))) { for ($i = 0; $i < $size; $i++) { if ($i == $size - 1) { $output .= woo_ce_escape_csv_value($export->columns[$i], $export->delimiter, $export->escape_formatting) . "\n"; } else { $output .= woo_ce_escape_csv_value($export->columns[$i], $export->delimiter, $export->escape_formatting) . $separator; } } } if (!empty($export->fields)) { foreach ($categories as $category) { foreach ($export->fields as $key => $field) { if (isset($category->{$key})) { if (in_array($export->export_format, array('csv'))) { $output .= woo_ce_escape_csv_value($category->{$key}, $export->delimiter, $export->escape_formatting); } } if (in_array($export->export_format, array('csv'))) { $output .= $separator; } } if (in_array($export->export_format, array('csv'))) { $output = substr($output, 0, -1) . "\n"; } } } unset($categories, $category); } $export->data_memory_end = woo_ce_current_memory_usage(); break; // Tags // Tags case 'tag': $fields = woo_ce_get_tag_fields('summary'); if ($export->fields = array_intersect_assoc((array) $export->fields, $fields)) { foreach ($export->fields as $key => $field) { $export->columns[] = woo_ce_get_tag_field($key); } } $export->total_columns = $size = count($export->columns); $export->data_memory_start = woo_ce_current_memory_usage(); $tag_args = array('orderby' => isset($export->args['tag_orderby']) ? $export->args['tag_orderby'] : 'ID', 'order' => isset($export->args['tag_order']) ? $export->args['tag_order'] : 'ASC'); if ($tags = woo_ce_get_product_tags($tag_args)) { $export->total_rows = count($tags); // Generate the export headers if (in_array($export->export_format, array('csv'))) { for ($i = 0; $i < $size; $i++) { if ($i == $size - 1) { $output .= woo_ce_escape_csv_value($export->columns[$i], $export->delimiter, $export->escape_formatting) . "\n"; } else { $output .= woo_ce_escape_csv_value($export->columns[$i], $export->delimiter, $export->escape_formatting) . $separator; } } } if (!empty($export->fields)) { foreach ($tags as $tag) { foreach ($export->fields as $key => $field) { if (isset($tag->{$key})) { if (in_array($export->export_format, array('csv'))) { $output .= woo_ce_escape_csv_value($tag->{$key}, $export->delimiter, $export->escape_formatting); } } if (in_array($export->export_format, array('csv'))) { $output .= $separator; } } if (in_array($export->export_format, array('csv'))) { $output = substr($output, 0, -1) . "\n"; } } } unset($tags, $tag); } $export->data_memory_end = woo_ce_current_memory_usage(); break; // Users // Users case 'user': $fields = woo_ce_get_user_fields('summary'); if ($export->fields = array_intersect_assoc((array) $export->fields, $fields)) { foreach ($export->fields as $key => $field) { $export->columns[] = woo_ce_get_user_field($key); } } $export->total_columns = $size = count($export->columns); $export->data_memory_start = woo_ce_current_memory_usage(); if ($users = woo_ce_get_users($export->args)) { // Generate the export headers if (in_array($export->export_format, array('csv'))) { $i = 0; foreach ($export->columns as $column) { if ($i == $size - 1) { $output .= woo_ce_escape_csv_value($column, $export->delimiter, $export->escape_formatting) . "\n"; } else { $output .= woo_ce_escape_csv_value($column, $export->delimiter, $export->escape_formatting) . $separator; } $i++; } } if (!empty($export->fields)) { foreach ($users as $user) { $user = woo_ce_get_user_data($user, $export->args); foreach ($export->fields as $key => $field) { if (isset($user->{$key})) { if (in_array($export->export_format, array('csv'))) { $output .= woo_ce_escape_csv_value($user->{$key}, $export->delimiter, $export->escape_formatting); } } if (in_array($export->export_format, array('csv'))) { $output .= $separator; } } if (in_array($export->export_format, array('csv'))) { $output = substr($output, 0, -1) . "\n"; } } } unset($users, $user); } $export->data_memory_end = woo_ce_current_memory_usage(); break; } // Remove our content filters here to play nice with other Plugins remove_filter('sanitize_key', 'woo_ce_sanitize_key'); // Remove our fatal error notice so not to conflict with the CRON or scheduled export engine remove_action('shutdown', 'woo_ce_fatal_error'); // Export completed successfully delete_transient(WOO_CE_PREFIX . '_running'); // Check that the export file is populated, export columns have been assigned and rows counted if ($output && $export->total_rows && $export->total_columns) { if (in_array($export->export_format, array('csv'))) { $output = woo_ce_file_encoding($output); if ($export->export_format == 'csv' && $export->bom && WOO_CE_DEBUG == false) { $output = "" . $output; } } if (WOO_CE_DEBUG && !$export->cron) { $response = set_transient(WOO_CE_PREFIX . '_debug_log', base64_encode($output), woo_ce_get_option('timeout', MINUTE_IN_SECONDS)); if ($response !== true) { $message = __('The export contents were too large to store in a single WordPress transient, use the Volume offset / Limit volume options to reduce the size of your export and try again.', 'woo_ce') . ' (<a href="' . $troubleshooting_url . '" target="_blank">' . __('Need help?', 'woo_ce') . '</a>)'; if (function_exists('woo_ce_admin_notice')) { woo_ce_admin_notice($message, 'error'); } else { error_log(sprintf('[store-exporter] woo_ce_export_dataset() - %s', $message)); } } } else { return $output; } } }
function woo_ce_export_dataset($dataset, $args = array()) { global $wpdb, $woo_ce, $export; $csv = ''; if ($export->bom) { $csv .= chr(239) . chr(187) . chr(191) . ''; } $separator = $export->delimiter; $export->args = $args; foreach ($dataset as $datatype) { $csv = ''; switch ($datatype) { /* Products */ case 'products': $fields = woo_ce_get_product_fields('summary'); $export->fields = array_intersect_assoc($fields, $export->fields); if ($export->fields) { foreach ($export->fields as $key => $field) { $export->columns[] = woo_ce_get_product_field($key); } } $products = woo_ce_get_products($export->args); if ($products) { $size = count($export->columns); for ($i = 0; $i < $size; $i++) { if ($i == $size - 1) { $csv .= woo_ce_escape_csv_value($export->columns[$i], $export->delimiter, $export->escape_formatting) . "\n"; } else { $csv .= woo_ce_escape_csv_value($export->columns[$i], $export->delimiter, $export->escape_formatting) . $separator; } } $weight_unit = get_option('woocommerce_weight_unit'); $dimension_unit = get_option('woocommerce_dimension_unit'); $height_unit = $dimension_unit; $width_unit = $dimension_unit; $length_unit = $dimension_unit; foreach ($products as $product) { foreach ($export->fields as $key => $field) { if (isset($product->{$key})) { if (is_array($field)) { foreach ($field as $array_key => $array_value) { if (!is_array($array_value)) { $csv .= woo_ce_escape_csv_value($array_value, $export->delimiter, $export->escape_formatting); } } } else { $csv .= woo_ce_escape_csv_value($product->{$key}, $export->delimiter, $export->escape_formatting); } } $csv .= $separator; } $csv = substr($csv, 0, -1) . "\n"; } unset($products, $product); } break; /* Categories */ /* Categories */ case 'categories': $columns = array(__('Category', 'woo_ce')); $size = count($columns); for ($i = 0; $i < $size; $i++) { if ($i == $size - 1) { $csv .= woo_ce_escape_csv_value($columns[$i], $export->delimiter, $export->escape_formatting) . "\n"; } else { $csv .= woo_ce_escape_csv_value($columns[$i], $export->delimiter, $export->escape_formatting) . $separator; } } $categories = woo_ce_get_product_categories(); if ($categories) { foreach ($categories as $category) { $csv .= $category->name . "\n"; } unset($categories, $category); } break; /* Tags */ /* Tags */ case 'tags': $columns = array(__('Tags', 'woo_ce')); $size = count($columns); for ($i = 0; $i < $size; $i++) { if ($i == $size - 1) { $csv .= woo_ce_escape_csv_value($columns[$i], $export->delimiter, $export->escape_formatting) . "\n"; } else { $csv .= woo_ce_escape_csv_value($columns[$i], $export->delimiter, $export->escape_formatting) . $separator; } } $tags = woo_ce_get_product_tags(); if ($tags) { foreach ($tags as $tag) { $csv .= $tag->name . "\n"; } unset($tags, $tag); } break; /* Orders */ /* Orders */ case 'orders': /* Customers */ /* Customers */ case 'customers': /* Coupons */ /* Coupons */ case 'coupons': $csv = apply_filters('woo_ce_export_dataset', $datatype, $export); break; } if ($csv) { $csv = utf8_decode($csv); if (isset($woo_ce['debug']) && $woo_ce['debug']) { $woo_ce['debug_log'] = $csv; } else { return $csv; } } else { return false; } } }
function woo_ce_export_dataset($dataset, $args = array()) { global $wpdb, $export; $csv = ''; if ($export->bom) { // $csv .= chr(239) . chr(187) . chr(191) . ''; $csv .= ""; } $separator = $export->delimiter; $export->args = $args; set_transient(WOO_CE_PREFIX . '_running', time(), woo_ce_get_option('timeout', MINUTE_IN_SECONDS)); $csv = ''; switch ($dataset) { // Products case 'products': $fields = woo_ce_get_product_fields('summary'); if ($export->fields = array_intersect_assoc($fields, $export->fields)) { foreach ($export->fields as $key => $field) { $export->columns[] = woo_ce_get_product_field($key); } } $export->data_memory_start = woo_ce_current_memory_usage(); if ($products = woo_ce_get_products($export->args)) { $export->total_rows = count($products); $size = count($export->columns); $export->total_columns = $size; for ($i = 0; $i < $size; $i++) { if ($i == $size - 1) { $csv .= woo_ce_escape_csv_value($export->columns[$i], $export->delimiter, $export->escape_formatting) . "\n"; } else { $csv .= woo_ce_escape_csv_value($export->columns[$i], $export->delimiter, $export->escape_formatting) . $separator; } } unset($export->columns); $weight_unit = get_option('woocommerce_weight_unit'); $dimension_unit = get_option('woocommerce_dimension_unit'); $height_unit = $dimension_unit; $width_unit = $dimension_unit; $length_unit = $dimension_unit; foreach ($products as $product) { foreach ($export->fields as $key => $field) { if (isset($product->{$key})) { if (is_array($field)) { foreach ($field as $array_key => $array_value) { if (!is_array($array_value)) { $csv .= woo_ce_escape_csv_value($array_value, $export->delimiter, $export->escape_formatting); } } } else { $csv .= woo_ce_escape_csv_value($product->{$key}, $export->delimiter, $export->escape_formatting); } } $csv .= $separator; } $csv = substr($csv, 0, -1) . "\n"; } unset($products, $product); } $export->data_memory_end = woo_ce_current_memory_usage(); break; // Categories // Categories case 'categories': $fields = woo_ce_get_category_fields('summary'); if ($export->fields = array_intersect_assoc($fields, $export->fields)) { foreach ($export->fields as $key => $field) { $export->columns[] = woo_ce_get_category_field($key); } } $export->data_memory_start = woo_ce_current_memory_usage(); if ($categories = woo_ce_get_product_categories($export->args)) { $export->total_rows = count($categories); $size = count($export->columns); $export->total_columns = $size; for ($i = 0; $i < $size; $i++) { if ($i == $size - 1) { $csv .= woo_ce_escape_csv_value($export->columns[$i], $export->delimiter, $export->escape_formatting) . "\n"; } else { $csv .= woo_ce_escape_csv_value($export->columns[$i], $export->delimiter, $export->escape_formatting) . $separator; } } unset($export->columns); foreach ($categories as $category) { foreach ($export->fields as $key => $field) { if (isset($category->{$key})) { $csv .= woo_ce_escape_csv_value($category->{$key}, $export->delimiter, $export->escape_formatting); } $csv .= $separator; } $csv = substr($csv, 0, -1) . "\n"; } unset($categories, $category); } $export->data_memory_end = woo_ce_current_memory_usage(); break; // Tags // Tags case 'tags': $fields = woo_ce_get_tag_fields('summary'); if ($export->fields = array_intersect_assoc($fields, $export->fields)) { foreach ($export->fields as $key => $field) { $export->columns[] = woo_ce_get_tag_field($key); } } $export->data_memory_start = woo_ce_current_memory_usage(); if ($tags = woo_ce_get_product_tags($export->args)) { $export->total_rows = count($tags); $size = count($export->columns); $export->total_columns = $size; for ($i = 0; $i < $size; $i++) { if ($i == $size - 1) { $csv .= woo_ce_escape_csv_value($export->columns[$i], $export->delimiter, $export->escape_formatting) . "\n"; } else { $csv .= woo_ce_escape_csv_value($export->columns[$i], $export->delimiter, $export->escape_formatting) . $separator; } } unset($export->columns); foreach ($tags as $tag) { foreach ($export->fields as $key => $field) { if (isset($tag->{$key})) { $csv .= woo_ce_escape_csv_value($tag->{$key}, $export->delimiter, $export->escape_formatting); } $csv .= $separator; } $csv = substr($csv, 0, -1) . "\n"; } unset($tags, $tag); } $export->data_memory_end = woo_ce_current_memory_usage(); break; // Orders // Orders case 'orders': // Customers // Customers case 'customers': // Coupons // Coupons case 'coupons': $csv = apply_filters('woo_ce_export_dataset', $export->type, $export); break; } if ($csv) { $csv = woo_ce_file_encoding($csv); if (WOO_CE_DEBUG) { set_transient(WOO_CE_PREFIX . '_debug_log', base64_encode($csv), woo_ce_get_option('timeout', MINUTE_IN_SECONDS)); } else { return $csv; } } // Export completed successfully delete_transient(WOO_CE_PREFIX . '_running'); }