File "class-wc-settings-shipping.php"

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

Download   Open   Edit   Advanced Editor   Back

<?php

use Automattic\Jetpack\Constants;
defined('ABSPATH') || exit;
if (class_exists('WC_Settings_Shipping', false)) {
    return new WC_Settings_Shipping();
}
class WC_Settings_Shipping extends WC_Settings_Page
{
    public function __construct()
    {
        $this->id = 'shipping';
        $this->label = __('Shipping', 'woocommerce');
        parent::__construct();
    }
    public function add_settings_page($pages)
    {
        return wc_shipping_enabled() ? parent::add_settings_page($pages) : $pages;
    }
    protected function get_own_sections()
    {
        $sections = array('' => __('Shipping zones', 'woocommerce'), 'options' => __('Shipping options', 'woocommerce'), 'classes' => __('Shipping classes', 'woocommerce'));
        if (!$this->wc_is_installing()) {
            $shipping_methods = $this->get_shipping_methods();
            foreach ($shipping_methods as $method) {
                if (!$method->has_settings()) {
                    continue;
                }
                $title = empty($method->method_title) ? ucfirst($method->id) : $method->method_title;
                $sections[strtolower($method->id)] = esc_html($title);
            }
        }
        return $sections;
    }
    protected function wc_is_installing()
    {
        return Constants::is_defined('WC_INSTALLING');
    }
    protected function get_shipping_methods()
    {
        return WC()->shipping()->get_shipping_methods();
    }
    protected function get_settings_for_default_section()
    {
        return $this->get_settings_for_options_section();
    }
    protected function get_settings_for_options_section()
    {
        $settings = array(array('title' => __('Shipping options', 'woocommerce'), 'type' => 'title', 'id' => 'shipping_options'), array('title' => __('Calculations', 'woocommerce'), 'desc' => __('Enable the shipping calculator on the cart page', 'woocommerce'), 'id' => 'woocommerce_enable_shipping_calc', 'default' => 'yes', 'type' => 'checkbox', 'checkboxgroup' => 'start', 'autoload' => false), array('desc' => __('Hide shipping costs until an address is entered', 'woocommerce'), 'id' => 'woocommerce_shipping_cost_requires_address', 'default' => 'no', 'type' => 'checkbox', 'checkboxgroup' => 'end'), array('title' => __('Shipping destination', 'woocommerce'), 'desc' => __('This controls which shipping address is used by default.', 'woocommerce'), 'id' => 'woocommerce_ship_to_destination', 'default' => 'billing', 'type' => 'radio', 'options' => array('shipping' => __('Default to customer shipping address', 'woocommerce'), 'billing' => __('Default to customer billing address', 'woocommerce'), 'billing_only' => __('Force shipping to the customer billing address', 'woocommerce')), 'autoload' => false, 'desc_tip' => true, 'show_if_checked' => 'option'), array('title' => __('Debug mode', 'woocommerce'), 'desc' => __('Enable debug mode', 'woocommerce'), 'desc_tip' => __('Enable shipping debug mode to show matching shipping zones and to bypass shipping rate cache.', 'woocommerce'), 'id' => 'woocommerce_shipping_debug_mode', 'default' => 'no', 'type' => 'checkbox'), array('type' => 'sectionend', 'id' => 'shipping_options'));
        return apply_filters('woocommerce_shipping_settings', $settings);
    }
    public function output()
    {
        global $current_section, $hide_save_button;
        $shipping_methods = $this->get_shipping_methods();
        if ('' === $current_section) {
            $this->output_zones_screen();
        } elseif ('classes' === $current_section) {
            $hide_save_button = true;
            $this->output_shipping_class_screen();
        } else {
            $is_shipping_method = false;
            foreach ($shipping_methods as $method) {
                if (in_array($current_section, array($method->id, sanitize_title(get_class($method))), true) && $method->has_settings()) {
                    $is_shipping_method = true;
                    $method->admin_options();
                }
            }
            if (!$is_shipping_method) {
                parent::output();
            }
        }
    }
    public function save()
    {
        global $current_section;
        switch ($current_section) {
            case 'options':
                $this->save_settings_for_current_section();
                $this->do_update_options_action();
                break;
            case 'classes':
                $this->do_update_options_action();
                break;
            case '':
                break;
            default:
                $is_shipping_method = false;
                foreach ($this->get_shipping_methods() as $method_id => $method) {
                    if (in_array($current_section, array($method->id, sanitize_title(get_class($method))), true)) {
                        $is_shipping_method = true;
                        $this->do_update_options_action($method->id);
                    }
                }
                if (!$is_shipping_method) {
                    $this->save_settings_for_current_section();
                }
                break;
        }
        WC_Cache_Helper::get_transient_version('shipping', true);
    }
    protected function output_zones_screen()
    {
        global $hide_save_button;
        if (isset($_REQUEST['zone_id'])) {
            $hide_save_button = true;
            $this->zone_methods_screen(wc_clean(wp_unslash($_REQUEST['zone_id'])));
        } elseif (isset($_REQUEST['instance_id'])) {
            $this->instance_settings_screen(absint(wp_unslash($_REQUEST['instance_id'])));
        } else {
            $hide_save_button = true;
            $this->zones_screen();
        }
    }
    protected function zone_methods_screen($zone_id)
    {
        if ('new' === $zone_id) {
            $zone = new WC_Shipping_Zone();
        } else {
            $zone = WC_Shipping_Zones::get_zone(absint($zone_id));
        }
        if (!$zone) {
            wp_die(esc_html__('Zone does not exist!', 'woocommerce'));
        }
        $allowed_countries = WC()->countries->get_shipping_countries();
        $shipping_continents = WC()->countries->get_shipping_continents();
        $locations = array();
        $postcodes = array();
        foreach ($zone->get_zone_locations() as $location) {
            if ('postcode' === $location->type) {
                $postcodes[] = $location->code;
            } else {
                $locations[] = $location->type . ':' . $location->code;
            }
        }
        wp_localize_script('wc-shipping-zone-methods', 'shippingZoneMethodsLocalizeScript', array('methods' => $zone->get_shipping_methods(false, 'json'), 'zone_name' => $zone->get_zone_name(), 'zone_id' => $zone->get_id(), 'wc_shipping_zones_nonce' => wp_create_nonce('wc_shipping_zones_nonce'), 'strings' => array('unload_confirmation_msg' => __('Your changed data will be lost if you leave this page without saving.', 'woocommerce'), 'save_changes_prompt' => __('Do you wish to save your changes first? Your changed data will be discarded if you choose to cancel.', 'woocommerce'), 'save_failed' => __('Your changes were not saved. Please retry.', 'woocommerce'), 'add_method_failed' => __('Shipping method could not be added. Please retry.', 'woocommerce'), 'yes' => __('Yes', 'woocommerce'), 'no' => __('No', 'woocommerce'), 'default_zone_name' => __('Zone', 'woocommerce'))));
        wp_enqueue_script('wc-shipping-zone-methods');
        include_once dirname(__FILE__) . '/views/html-admin-page-shipping-zone-methods.php';
    }
    protected function zones_screen()
    {
        $method_count = wc_get_shipping_method_count(false, true);
        wp_localize_script('wc-shipping-zones', 'shippingZonesLocalizeScript', array('zones' => WC_Shipping_Zones::get_zones('json'), 'default_zone' => array('zone_id' => 0, 'zone_name' => '', 'zone_order' => null), 'wc_shipping_zones_nonce' => wp_create_nonce('wc_shipping_zones_nonce'), 'strings' => array('unload_confirmation_msg' => __('Your changed data will be lost if you leave this page without saving.', 'woocommerce'), 'delete_confirmation_msg' => __('Are you sure you want to delete this zone? This action cannot be undone.', 'woocommerce'), 'save_failed' => __('Your changes were not saved. Please retry.', 'woocommerce'), 'no_shipping_methods_offered' => __('No shipping methods offered to this zone.', 'woocommerce'))));
        wp_enqueue_script('wc-shipping-zones');
        include_once dirname(__FILE__) . '/views/html-admin-page-shipping-zones.php';
    }
    protected function instance_settings_screen($instance_id)
    {
        $zone = WC_Shipping_Zones::get_zone_by('instance_id', $instance_id);
        $shipping_method = WC_Shipping_Zones::get_shipping_method($instance_id);
        if (!$shipping_method) {
            wp_die(esc_html__('Invalid shipping method!', 'woocommerce'));
        }
        if (!$zone) {
            wp_die(esc_html__('Zone does not exist!', 'woocommerce'));
        }
        if (!$shipping_method->has_settings()) {
            wp_die(esc_html__('This shipping method does not have any settings to configure.', 'woocommerce'));
        }
        if (!empty($_POST['save'])) {
            if (empty($_REQUEST['_wpnonce']) || !wp_verify_nonce(wp_unslash($_REQUEST['_wpnonce']), 'woocommerce-settings')) {
                echo '<div class="updated error"><p>' . esc_html__('Edit failed. Please try again.', 'woocommerce') . '</p></div>';
            }
            $shipping_method->process_admin_options();
            $shipping_method->display_errors();
        }
        include_once dirname(__FILE__) . '/views/html-admin-page-shipping-zones-instance.php';
    }
    protected function output_shipping_class_screen()
    {
        $wc_shipping = WC_Shipping::instance();
        wp_localize_script('wc-shipping-classes', 'shippingClassesLocalizeScript', array('classes' => $wc_shipping->get_shipping_classes(), 'default_shipping_class' => array('term_id' => 0, 'name' => '', 'description' => ''), 'wc_shipping_classes_nonce' => wp_create_nonce('wc_shipping_classes_nonce'), 'strings' => array('unload_confirmation_msg' => __('Your changed data will be lost if you leave this page without saving.', 'woocommerce'), 'save_failed' => __('Your changes were not saved. Please retry.', 'woocommerce'))));
        wp_enqueue_script('wc-shipping-classes');
        $shipping_class_columns = apply_filters('woocommerce_shipping_classes_columns', array('wc-shipping-class-name' => __('Shipping class', 'woocommerce'), 'wc-shipping-class-slug' => __('Slug', 'woocommerce'), 'wc-shipping-class-description' => __('Description', 'woocommerce'), 'wc-shipping-class-count' => __('Product count', 'woocommerce')));
        include_once dirname(__FILE__) . '/views/html-admin-page-shipping-classes.php';
    }
}
return new WC_Settings_Shipping();