File "class-wc-admin-importers.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/woocommerce/includes/admin/class-wc-admin-importers.php
File size: 8.65 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

use Automattic\Jetpack\Constants;
defined('ABSPATH') || exit;
class WC_Admin_Importers
{
    protected $importers = array();
    public function __construct()
    {
        if (!$this->import_allowed()) {
            return;
        }
        add_action('admin_menu', array($this, 'add_to_menus'));
        add_action('admin_init', array($this, 'register_importers'));
        add_action('admin_head', array($this, 'hide_from_menus'));
        add_action('admin_enqueue_scripts', array($this, 'admin_scripts'));
        add_action('wp_ajax_woocommerce_do_ajax_product_import', array($this, 'do_ajax_product_import'));
        $this->importers['product_importer'] = array('menu' => 'edit.php?post_type=product', 'name' => __('Product Import', 'woocommerce'), 'capability' => 'import', 'callback' => array($this, 'product_importer'));
    }
    protected function import_allowed()
    {
        return current_user_can('edit_products') && current_user_can('import');
    }
    public function add_to_menus()
    {
        foreach ($this->importers as $id => $importer) {
            add_submenu_page($importer['menu'], $importer['name'], $importer['name'], $importer['capability'], $id, $importer['callback']);
        }
    }
    public function hide_from_menus()
    {
        global $submenu;
        foreach ($this->importers as $id => $importer) {
            if (isset($submenu[$importer['menu']])) {
                foreach ($submenu[$importer['menu']] as $key => $menu) {
                    if ($id === $menu[2]) {
                        unset($submenu[$importer['menu']][$key]);
                    }
                }
            }
        }
    }
    public function admin_scripts()
    {
        $suffix = Constants::is_true('SCRIPT_DEBUG') ? '' : '.min';
        $version = Constants::get_constant('WC_VERSION');
        wp_register_script('wc-product-import', WC()->plugin_url() . '/assets/js/admin/wc-product-import' . $suffix . '.js', array('jquery'), $version, true);
    }
    public function product_importer()
    {
        if (Constants::is_defined('WP_LOAD_IMPORTERS')) {
            wp_safe_redirect(admin_url('edit.php?post_type=product&page=product_importer'));
            exit;
        }
        include_once WC_ABSPATH . 'includes/import/class-wc-product-csv-importer.php';
        include_once WC_ABSPATH . 'includes/admin/importers/class-wc-product-csv-importer-controller.php';
        $importer = new WC_Product_CSV_Importer_Controller();
        $importer->dispatch();
    }
    public function register_importers()
    {
        if (Constants::is_defined('WP_LOAD_IMPORTERS')) {
            add_action('import_start', array($this, 'post_importer_compatibility'));
            register_importer('woocommerce_product_csv', __('WooCommerce products (CSV)', 'woocommerce'), __('Import <strong>products</strong> to your store via a csv file.', 'woocommerce'), array($this, 'product_importer'));
            register_importer('woocommerce_tax_rate_csv', __('WooCommerce tax rates (CSV)', 'woocommerce'), __('Import <strong>tax rates</strong> to your store via a csv file.', 'woocommerce'), array($this, 'tax_rates_importer'));
        }
    }
    public function tax_rates_importer()
    {
        require_once ABSPATH . 'wp-admin/includes/import.php';
        if (!class_exists('WP_Importer')) {
            $class_wp_importer = ABSPATH . 'wp-admin/includes/class-wp-importer.php';
            if (file_exists($class_wp_importer)) {
                require $class_wp_importer;
            }
        }
        require dirname(__FILE__) . '/importers/class-wc-tax-rate-importer.php';
        $importer = new WC_Tax_Rate_Importer();
        $importer->dispatch();
    }
    public function post_importer_compatibility()
    {
        global $wpdb;
        if (empty($_POST['import_id']) || !class_exists('WXR_Parser')) {
            return;
        }
        $id = absint($_POST['import_id']);
        $file = get_attached_file($id);
        $parser = new WXR_Parser();
        $import_data = $parser->parse($file);
        if (isset($import_data['posts']) && !empty($import_data['posts'])) {
            foreach ($import_data['posts'] as $post) {
                if ('product' === $post['post_type'] && !empty($post['terms'])) {
                    foreach ($post['terms'] as $term) {
                        if (strstr($term['domain'], 'pa_')) {
                            if (!taxonomy_exists($term['domain'])) {
                                $attribute_name = wc_attribute_taxonomy_slug($term['domain']);
                                if (!in_array($attribute_name, wc_get_attribute_taxonomies(), true)) {
                                    wc_create_attribute(array('name' => $attribute_name, 'slug' => $attribute_name, 'type' => 'select', 'order_by' => 'menu_order', 'has_archives' => false));
                                }
                                register_taxonomy($term['domain'], apply_filters('woocommerce_taxonomy_objects_' . $term['domain'], array('product')), apply_filters('woocommerce_taxonomy_args_' . $term['domain'], array('hierarchical' => true, 'show_ui' => false, 'query_var' => true, 'rewrite' => false)));
                            }
                        }
                    }
                }
            }
        }
    }
    public function do_ajax_product_import()
    {
        global $wpdb;
        check_ajax_referer('wc-product-import', 'security');
        if (!$this->import_allowed() || !isset($_POST['file'])) {
            wp_send_json_error(array('message' => __('Insufficient privileges to import products.', 'woocommerce')));
        }
        include_once WC_ABSPATH . 'includes/admin/importers/class-wc-product-csv-importer-controller.php';
        include_once WC_ABSPATH . 'includes/import/class-wc-product-csv-importer.php';
        $file = wc_clean(wp_unslash($_POST['file']));
        $params = array('delimiter' => !empty($_POST['delimiter']) ? wc_clean(wp_unslash($_POST['delimiter'])) : ',', 'start_pos' => isset($_POST['position']) ? absint($_POST['position']) : 0, 'mapping' => isset($_POST['mapping']) ? (array) wc_clean(wp_unslash($_POST['mapping'])) : array(), 'update_existing' => isset($_POST['update_existing']) ? (bool) $_POST['update_existing'] : false, 'lines' => apply_filters('woocommerce_product_import_batch_size', 30), 'parse' => true);
        if (0 !== $params['start_pos']) {
            $error_log = array_filter((array) get_user_option('product_import_error_log'));
        } else {
            $error_log = array();
        }
        $importer = WC_Product_CSV_Importer_Controller::get_importer($file, $params);
        $results = $importer->import();
        $percent_complete = $importer->get_percent_complete();
        $error_log = array_merge($error_log, $results['failed'], $results['skipped']);
        update_user_option(get_current_user_id(), 'product_import_error_log', $error_log);
        if (100 === $percent_complete) {
            $wpdb->delete($wpdb->postmeta, array('meta_key' => '_original_id'));
            $wpdb->delete($wpdb->posts, array('post_type' => 'product', 'post_status' => 'importing'));
            $wpdb->delete($wpdb->posts, array('post_type' => 'product_variation', 'post_status' => 'importing'));
            $wpdb->query("\n\t\t\t\tDELETE {$wpdb->posts}.* FROM {$wpdb->posts}\n\t\t\t\tLEFT JOIN {$wpdb->posts} wp ON wp.ID = {$wpdb->posts}.post_parent\n\t\t\t\tWHERE wp.ID IS NULL AND {$wpdb->posts}.post_type = 'product_variation'\n\t\t\t");
            $wpdb->query("\n\t\t\t\tDELETE {$wpdb->postmeta}.* FROM {$wpdb->postmeta}\n\t\t\t\tLEFT JOIN {$wpdb->posts} wp ON wp.ID = {$wpdb->postmeta}.post_id\n\t\t\t\tWHERE wp.ID IS NULL\n\t\t\t");
            $wpdb->query("\n\t\t\t\tDELETE tr.* FROM {$wpdb->term_relationships} tr\n\t\t\t\tLEFT JOIN {$wpdb->posts} wp ON wp.ID = tr.object_id\n\t\t\t\tLEFT JOIN {$wpdb->term_taxonomy} tt ON tr.term_taxonomy_id = tt.term_taxonomy_id\n\t\t\t\tWHERE wp.ID IS NULL\n\t\t\t\tAND tt.taxonomy IN ( '" . implode("','", array_map('esc_sql', get_object_taxonomies('product'))) . "' )\n\t\t\t");
            wp_send_json_success(array('position' => 'done', 'percentage' => 100, 'url' => add_query_arg(array('_wpnonce' => wp_create_nonce('woocommerce-csv-importer')), admin_url('edit.php?post_type=product&page=product_importer&step=done')), 'imported' => count($results['imported']), 'failed' => count($results['failed']), 'updated' => count($results['updated']), 'skipped' => count($results['skipped'])));
        } else {
            wp_send_json_success(array('position' => $importer->get_file_position(), 'percentage' => $percent_complete, 'imported' => count($results['imported']), 'failed' => count($results['failed']), 'updated' => count($results['updated']), 'skipped' => count($results['skipped'])));
        }
    }
}
new WC_Admin_Importers();