File "class-wc-shipping-zone.php"
Full path: /home/kosmetik/public_html/wp-content/plugins/woocommerce/includes/class-wc-shipping-zone.php
File
size: 9.57 B
MIME-type: text/x-php
Charset: utf-8
Download Open Edit Advanced Editor Back
<?php
defined('ABSPATH') || exit;
require_once __DIR__ . '/legacy/class-wc-legacy-shipping-zone.php';
class WC_Shipping_Zone extends WC_Legacy_Shipping_Zone
{
protected $id = null;
protected $object_type = 'shipping_zone';
protected $data = array('zone_name' => '', 'zone_order' => 0, 'zone_locations' => array());
public function __construct($zone = null)
{
if (is_numeric($zone) && !empty($zone)) {
$this->set_id($zone);
} elseif (is_object($zone)) {
$this->set_id($zone->zone_id);
} elseif (0 === $zone || '0' === $zone) {
$this->set_id(0);
} else {
$this->set_object_read(true);
}
$this->data_store = WC_Data_Store::load('shipping-zone');
if (false === $this->get_object_read()) {
$this->data_store->read($this);
}
}
public function get_zone_name($context = 'view')
{
return $this->get_prop('zone_name', $context);
}
public function get_zone_order($context = 'view')
{
return $this->get_prop('zone_order', $context);
}
public function get_zone_locations($context = 'view')
{
return $this->get_prop('zone_locations', $context);
}
public function get_formatted_location($max = 10, $context = 'view')
{
$location_parts = array();
$all_continents = WC()->countries->get_continents();
$all_countries = WC()->countries->get_countries();
$all_states = WC()->countries->get_states();
$locations = $this->get_zone_locations($context);
$continents = array_filter($locations, array($this, 'location_is_continent'));
$countries = array_filter($locations, array($this, 'location_is_country'));
$states = array_filter($locations, array($this, 'location_is_state'));
$postcodes = array_filter($locations, array($this, 'location_is_postcode'));
foreach ($continents as $location) {
$location_parts[] = $all_continents[$location->code]['name'];
}
foreach ($countries as $location) {
$location_parts[] = $all_countries[$location->code];
}
foreach ($states as $location) {
$location_codes = explode(':', $location->code);
$location_parts[] = $all_states[$location_codes[0]][$location_codes[1]];
}
foreach ($postcodes as $location) {
$location_parts[] = $location->code;
}
$location_parts = array_map('html_entity_decode', $location_parts);
if (count($location_parts) > $max) {
$remaining = count($location_parts) - $max;
return sprintf(_n('%s and %d other region', '%s and %d other regions', $remaining, 'woocommerce'), implode(', ', array_splice($location_parts, 0, $max)), $remaining);
} elseif (!empty($location_parts)) {
return implode(', ', $location_parts);
} else {
return __('Everywhere', 'woocommerce');
}
}
public function get_shipping_methods($enabled_only = false, $context = 'admin')
{
if (null === $this->get_id()) {
return array();
}
$raw_methods = $this->data_store->get_methods($this->get_id(), $enabled_only);
$wc_shipping = WC_Shipping::instance();
$allowed_classes = $wc_shipping->get_shipping_method_class_names();
$methods = array();
foreach ($raw_methods as $raw_method) {
if (in_array($raw_method->method_id, array_keys($allowed_classes), true)) {
$class_name = $allowed_classes[$raw_method->method_id];
$instance_id = $raw_method->instance_id;
if (is_object($class_name)) {
$class_name_of_instance = get_class($class_name);
$methods[$instance_id] = new $class_name_of_instance($instance_id);
} else {
if (is_string($class_name) && class_exists($class_name)) {
$methods[$instance_id] = new $class_name($instance_id);
}
}
if (is_object($methods[$instance_id])) {
$methods[$instance_id]->method_order = absint($raw_method->method_order);
$methods[$instance_id]->enabled = $raw_method->is_enabled ? 'yes' : 'no';
$methods[$instance_id]->has_settings = $methods[$instance_id]->has_settings();
$methods[$instance_id]->settings_html = $methods[$instance_id]->supports('instance-settings-modal') ? $methods[$instance_id]->get_admin_options_html() : false;
$methods[$instance_id]->method_description = wp_kses_post(wpautop($methods[$instance_id]->method_description));
}
if ('json' === $context) {
$methods[$instance_id] = (object) get_object_vars($methods[$instance_id]);
unset($methods[$instance_id]->instance_form_fields, $methods[$instance_id]->form_fields);
}
}
}
uasort($methods, 'wc_shipping_zone_method_order_uasort_comparison');
return apply_filters('woocommerce_shipping_zone_shipping_methods', $methods, $raw_methods, $allowed_classes, $this);
}
public function set_zone_name($set)
{
$this->set_prop('zone_name', wc_clean($set));
}
public function set_zone_order($set)
{
$this->set_prop('zone_order', absint($set));
}
public function set_zone_locations($locations)
{
if (0 !== $this->get_id()) {
$this->set_prop('zone_locations', $locations);
}
}
public function save()
{
if (!$this->get_zone_name()) {
$this->set_zone_name($this->generate_zone_name());
}
if (!$this->data_store) {
return $this->get_id();
}
do_action('woocommerce_before_' . $this->object_type . '_object_save', $this, $this->data_store);
if (null !== $this->get_id()) {
$this->data_store->update($this);
} else {
$this->data_store->create($this);
}
do_action('woocommerce_after_' . $this->object_type . '_object_save', $this, $this->data_store);
return $this->get_id();
}
protected function generate_zone_name()
{
$zone_name = $this->get_formatted_location();
if (empty($zone_name)) {
$zone_name = __('Zone', 'woocommerce');
}
return $zone_name;
}
private function location_is_continent($location)
{
return 'continent' === $location->type;
}
private function location_is_country($location)
{
return 'country' === $location->type;
}
private function location_is_state($location)
{
return 'state' === $location->type;
}
private function location_is_postcode($location)
{
return 'postcode' === $location->type;
}
public function is_valid_location_type($type)
{
return in_array($type, apply_filters('woocommerce_valid_location_types', array('postcode', 'state', 'country', 'continent')), true);
}
public function add_location($code, $type)
{
if (0 !== $this->get_id() && $this->is_valid_location_type($type)) {
if ('postcode' === $type) {
$code = trim(strtoupper(str_replace(chr(226) . chr(128) . chr(166), '...', $code)));
}
$location = array('code' => wc_clean($code), 'type' => wc_clean($type));
$zone_locations = $this->get_prop('zone_locations', 'edit');
$zone_locations[] = (object) $location;
$this->set_prop('zone_locations', $zone_locations);
}
}
public function clear_locations($types = array('postcode', 'state', 'country', 'continent'))
{
if (!is_array($types)) {
$types = array($types);
}
$zone_locations = $this->get_prop('zone_locations', 'edit');
foreach ($zone_locations as $key => $values) {
if (in_array($values->type, $types, true)) {
unset($zone_locations[$key]);
}
}
$zone_locations = array_values($zone_locations);
$this->set_prop('zone_locations', $zone_locations);
}
public function set_locations($locations = array())
{
$this->clear_locations();
foreach ($locations as $location) {
$this->add_location($location['code'], $location['type']);
}
}
public function add_shipping_method($type)
{
if (null === $this->get_id()) {
$this->save();
}
$instance_id = 0;
$wc_shipping = WC_Shipping::instance();
$allowed_classes = $wc_shipping->get_shipping_method_class_names();
$count = $this->data_store->get_method_count($this->get_id());
if (in_array($type, array_keys($allowed_classes), true)) {
$instance_id = $this->data_store->add_method($this->get_id(), $type, $count + 1);
}
if ($instance_id) {
do_action('woocommerce_shipping_zone_method_added', $instance_id, $type, $this->get_id());
}
WC_Cache_Helper::get_transient_version('shipping', true);
return $instance_id;
}
public function delete_shipping_method($instance_id)
{
if (null === $this->get_id()) {
return false;
}
$method = $this->data_store->get_method($instance_id);
if ($method) {
$this->data_store->delete_method($instance_id);
do_action('woocommerce_shipping_zone_method_deleted', $instance_id, $method->method_id, $this->get_id());
}
WC_Cache_Helper::get_transient_version('shipping', true);
return true;
}
}