예제 #1
0
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;
        }
    }
}
예제 #2
0
 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');
 }