public static function build_file($settings, $make_mode, $output_mode, $offset = false, $limit = false, $filename = '') { global $wpdb; if ($output_mode == 'browser') { $filename = 'php://output'; while (@ob_end_clean()) { } // remove ob_xx } else { $filename = !empty($filename) ? $filename : tempnam("/tmp", $settings['format']); } //add_filter("woe_csv_output_filter",array($this,'testfilter'),10,2); $formater = self::init_formater($make_mode, $settings, $filename, $labels, $static_vals); $format = strtolower($settings['format']); if ($make_mode == 'finish') { if ($format != 'xls') { $formater->finish(); } return $filename; } //get IDs $sql = WC_Order_Export_Data_Extractor::sql_get_order_ids($settings); if ($make_mode == 'preview') { $sql .= " ORDER BY order_id DESC LIMIT 1"; } elseif ($make_mode != 'estimate') { $sql .= " ORDER BY order_id ASC"; } //UNUSED ajax get partial orders if ($make_mode == 'partial') { $offset = intval($offset); $limit = intval($limit); $sql .= " LIMIT {$offset},{$limit}"; } $order_ids = $wpdb->get_col($sql); //$order_ids = array(387); // prepare for XLS/CSV $csv_max['coupons'] = $csv_max['products'] = 1; if ($format == 'xls' or $format == 'csv') { if (@$settings['order_fields']['products']['repeat'] == 'columns') { $csv_max['products'] = WC_Order_Export_Data_Extractor::get_max_order_items("line_item", $order_ids); } if (@$settings['order_fields']['coupons']['repeat'] == 'columns') { $csv_max['coupons'] = WC_Order_Export_Data_Extractor::get_max_order_items("coupon", $order_ids); } } // try to optimize calls $filters_active = array('order' => self::check_filters($settings['order_fields'], $format, 'order'), 'products' => self::check_filters($settings['order_product_fields'], $format, 'order_product'), 'coupons' => self::check_filters($settings['order_coupon_fields'], $format, 'order_coupon')); // check it once $export['products'] = $settings['order_fields']['products']['checked']; $export['coupons'] = $settings['order_fields']['coupons']['checked']; $get_coupon_meta = ($export['coupons'] and array_diff(array_keys($labels['coupons']), array('code', 'discount_amount', 'discount_amount_tax'))); // 0 $header = ($format == 'xls' or $format == 'csv') ? self::make_header_csv($labels, $csv_max) : ''; $options = array(); if ($format == 'xls' and @$settings['format_xls_populate_other_columns_product_rows'] or $format == 'csv' and @$settings['format_csv_populate_other_columns_product_rows']) { $options['populate_other_columns_product_rows'] = 1; } if ($make_mode != 'partial') { $formater->start($header); } elseif ($format == 'json' and $offset > 0) { $formater->prev_added = true; } if ($make_mode == 'estimate') { //if estimate return total count return $wpdb->get_var(str_replace('ID as order_id', 'COUNT(ID) as order_count', $sql)); } WC_Order_Export_Data_Extractor::prepare_for_export(); foreach ($order_ids as $order_id) { $rows = WC_Order_Export_Data_Extractor::fetch_order_data($order_id, $labels, $format, $filters_active, $csv_max, $export, $get_coupon_meta, $static_vals, $options); foreach ($rows as $row) { $formater->output($row); } } if ($make_mode != 'partial' or $format == 'xls') { $formater->finish(); } return $filename; }