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

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

Download   Open   Edit   Advanced Editor   Back

<?php

use Automattic\Jetpack\Constants;
if (!defined('ABSPATH')) {
    exit;
}
class WC_Admin_Exporters
{
    protected $exporters = array();
    public function __construct()
    {
        if (!$this->export_allowed()) {
            return;
        }
        add_action('admin_menu', array($this, 'add_to_menus'));
        add_action('admin_head', array($this, 'hide_from_menus'));
        add_action('admin_enqueue_scripts', array($this, 'admin_scripts'));
        add_action('admin_init', array($this, 'download_export_file'));
        add_action('wp_ajax_woocommerce_do_ajax_product_export', array($this, 'do_ajax_product_export'));
        $this->exporters['product_exporter'] = array('menu' => 'edit.php?post_type=product', 'name' => __('Product Export', 'woocommerce'), 'capability' => 'export', 'callback' => array($this, 'product_exporter'));
    }
    protected function export_allowed()
    {
        return current_user_can('edit_products') && current_user_can('export');
    }
    public function add_to_menus()
    {
        foreach ($this->exporters as $id => $exporter) {
            add_submenu_page($exporter['menu'], $exporter['name'], $exporter['name'], $exporter['capability'], $id, $exporter['callback']);
        }
    }
    public function hide_from_menus()
    {
        global $submenu;
        foreach ($this->exporters as $id => $exporter) {
            if (isset($submenu[$exporter['menu']])) {
                foreach ($submenu[$exporter['menu']] as $key => $menu) {
                    if ($id === $menu[2]) {
                        unset($submenu[$exporter['menu']][$key]);
                    }
                }
            }
        }
    }
    public function admin_scripts()
    {
        $suffix = Constants::is_true('SCRIPT_DEBUG') ? '' : '.min';
        $version = Constants::get_constant('WC_VERSION');
        wp_register_script('wc-product-export', WC()->plugin_url() . '/assets/js/admin/wc-product-export' . $suffix . '.js', array('jquery'), $version);
        wp_localize_script('wc-product-export', 'wc_product_export_params', array('export_nonce' => wp_create_nonce('wc-product-export')));
    }
    public function product_exporter()
    {
        include_once WC_ABSPATH . 'includes/export/class-wc-product-csv-exporter.php';
        include_once dirname(__FILE__) . '/views/html-admin-page-product-export.php';
    }
    public function download_export_file()
    {
        if (isset($_GET['action'], $_GET['nonce']) && wp_verify_nonce(wp_unslash($_GET['nonce']), 'product-csv') && 'download_product_csv' === wp_unslash($_GET['action'])) {
            include_once WC_ABSPATH . 'includes/export/class-wc-product-csv-exporter.php';
            $exporter = new WC_Product_CSV_Exporter();
            if (!empty($_GET['filename'])) {
                $exporter->set_filename(wp_unslash($_GET['filename']));
            }
            $exporter->export();
        }
    }
    public function do_ajax_product_export()
    {
        check_ajax_referer('wc-product-export', 'security');
        if (!$this->export_allowed()) {
            wp_send_json_error(array('message' => __('Insufficient privileges to export products.', 'woocommerce')));
        }
        include_once WC_ABSPATH . 'includes/export/class-wc-product-csv-exporter.php';
        $step = isset($_POST['step']) ? absint($_POST['step']) : 1;
        $exporter = new WC_Product_CSV_Exporter();
        if (!empty($_POST['columns'])) {
            $exporter->set_column_names(wp_unslash($_POST['columns']));
        }
        if (!empty($_POST['selected_columns'])) {
            $exporter->set_columns_to_export(wp_unslash($_POST['selected_columns']));
        }
        if (!empty($_POST['export_meta'])) {
            $exporter->enable_meta_export(true);
        }
        if (!empty($_POST['export_types'])) {
            $exporter->set_product_types_to_export(wp_unslash($_POST['export_types']));
        }
        if (!empty($_POST['export_category']) && is_array($_POST['export_category'])) {
            $exporter->set_product_category_to_export(wp_unslash(array_values($_POST['export_category'])));
        }
        if (!empty($_POST['filename'])) {
            $exporter->set_filename(wp_unslash($_POST['filename']));
        }
        $exporter->set_page($step);
        $exporter->generate_file();
        $query_args = apply_filters('woocommerce_export_get_ajax_query_args', array('nonce' => wp_create_nonce('product-csv'), 'action' => 'download_product_csv', 'filename' => $exporter->get_filename()));
        if (100 === $exporter->get_percent_complete()) {
            wp_send_json_success(array('step' => 'done', 'percentage' => 100, 'url' => add_query_arg($query_args, admin_url('edit.php?post_type=product&page=product_exporter'))));
        } else {
            wp_send_json_success(array('step' => ++$step, 'percentage' => $exporter->get_percent_complete(), 'columns' => $exporter->get_column_names()));
        }
    }
    public static function get_product_types()
    {
        $product_types = wc_get_product_types();
        $product_types['variation'] = __('Product variations', 'woocommerce');
        return apply_filters('woocommerce_exporter_product_types', $product_types);
    }
}
new WC_Admin_Exporters();