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, $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'); }