File "class-wc-order-item.php"

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

Download   Open   Edit   Advanced Editor   Back

<?php

defined('ABSPATH') || exit;
class WC_Order_Item extends WC_Data implements ArrayAccess
{
    protected $data = array('order_id' => 0, 'name' => '');
    protected $cache_group = 'order-items';
    protected $meta_type = 'order_item';
    protected $object_type = 'order_item';
    public function __construct($item = 0)
    {
        parent::__construct($item);
        if ($item instanceof WC_Order_Item) {
            $this->set_id($item->get_id());
        } elseif (is_numeric($item) && $item > 0) {
            $this->set_id($item);
        } else {
            $this->set_object_read(true);
        }
        $type = 'line_item' === $this->get_type() ? 'product' : $this->get_type();
        $this->data_store = WC_Data_Store::load('order-item-' . $type);
        if ($this->get_id() > 0) {
            $this->data_store->read($this);
        }
    }
    public function apply_changes()
    {
        if (function_exists('array_replace')) {
            $this->data = array_replace($this->data, $this->changes);
        } else {
            foreach ($this->changes as $key => $change) {
                $this->data[$key] = $change;
            }
        }
        $this->changes = array();
    }
    public function get_order_id($context = 'view')
    {
        return $this->get_prop('order_id', $context);
    }
    public function get_name($context = 'view')
    {
        return $this->get_prop('name', $context);
    }
    public function get_type()
    {
        return '';
    }
    public function get_quantity()
    {
        return 1;
    }
    public function get_tax_status()
    {
        return 'taxable';
    }
    public function get_tax_class()
    {
        return '';
    }
    public function get_order()
    {
        return wc_get_order($this->get_order_id());
    }
    public function set_order_id($value)
    {
        $this->set_prop('order_id', absint($value));
    }
    public function set_name($value)
    {
        $this->set_prop('name', wp_check_invalid_utf8($value));
    }
    public function is_type($type)
    {
        return is_array($type) ? in_array($this->get_type(), $type, true) : $type === $this->get_type();
    }
    public function calculate_taxes($calculate_tax_for = array())
    {
        if (!isset($calculate_tax_for['country'], $calculate_tax_for['state'], $calculate_tax_for['postcode'], $calculate_tax_for['city'])) {
            return false;
        }
        if ('0' !== $this->get_tax_class() && 'taxable' === $this->get_tax_status() && wc_tax_enabled()) {
            $calculate_tax_for['tax_class'] = $this->get_tax_class();
            $tax_rates = WC_Tax::find_rates($calculate_tax_for);
            $taxes = WC_Tax::calc_tax($this->get_total(), $tax_rates, false);
            if (method_exists($this, 'get_subtotal')) {
                $subtotal_taxes = WC_Tax::calc_tax($this->get_subtotal(), $tax_rates, false);
                $this->set_taxes(array('total' => $taxes, 'subtotal' => $subtotal_taxes));
            } else {
                $this->set_taxes(array('total' => $taxes));
            }
        } else {
            $this->set_taxes(false);
        }
        do_action('woocommerce_order_item_after_calculate_taxes', $this, $calculate_tax_for);
        return true;
    }
    public function get_formatted_meta_data($hideprefix = '_', $include_all = false)
    {
        $formatted_meta = array();
        $meta_data = $this->get_meta_data();
        $hideprefix_length = !empty($hideprefix) ? strlen($hideprefix) : 0;
        $product = is_callable(array($this, 'get_product')) ? $this->get_product() : false;
        $order_item_name = $this->get_name();
        foreach ($meta_data as $meta) {
            if (empty($meta->id) || '' === $meta->value || !is_scalar($meta->value) || $hideprefix_length && substr($meta->key, 0, $hideprefix_length) === $hideprefix) {
                continue;
            }
            $meta->key = rawurldecode((string) $meta->key);
            $meta->value = rawurldecode((string) $meta->value);
            $attribute_key = str_replace('attribute_', '', $meta->key);
            $display_key = wc_attribute_label($attribute_key, $product);
            $display_value = wp_kses_post($meta->value);
            if (taxonomy_exists($attribute_key)) {
                $term = get_term_by('slug', $meta->value, $attribute_key);
                if (!is_wp_error($term) && is_object($term) && $term->name) {
                    $display_value = $term->name;
                }
            }
            if (!$include_all && $product && $product->is_type('variation') && wc_is_attribute_in_product_name($display_value, $order_item_name)) {
                continue;
            }
            $formatted_meta[$meta->id] = (object) array('key' => $meta->key, 'value' => $meta->value, 'display_key' => apply_filters('woocommerce_order_item_display_meta_key', $display_key, $meta, $this), 'display_value' => wpautop(make_clickable(apply_filters('woocommerce_order_item_display_meta_value', $display_value, $meta, $this))));
        }
        return apply_filters('woocommerce_order_item_get_formatted_meta_data', $formatted_meta, $this);
    }
    public function offsetSet($offset, $value)
    {
        if ('item_meta_array' === $offset) {
            foreach ($value as $meta_id => $meta) {
                $this->update_meta_data($meta->key, $meta->value, $meta_id);
            }
            return;
        }
        if (array_key_exists($offset, $this->data)) {
            $setter = "set_{$offset}";
            if (is_callable(array($this, $setter))) {
                $this->{$setter}($value);
            }
            return;
        }
        $this->update_meta_data($offset, $value);
    }
    public function offsetUnset($offset)
    {
        $this->maybe_read_meta_data();
        if ('item_meta_array' === $offset || 'item_meta' === $offset) {
            $this->meta_data = array();
            return;
        }
        if (array_key_exists($offset, $this->data)) {
            unset($this->data[$offset]);
        }
        if (array_key_exists($offset, $this->changes)) {
            unset($this->changes[$offset]);
        }
        $this->delete_meta_data($offset);
    }
    public function offsetExists($offset)
    {
        $this->maybe_read_meta_data();
        if ('item_meta_array' === $offset || 'item_meta' === $offset || array_key_exists($offset, $this->data)) {
            return true;
        }
        return array_key_exists($offset, wp_list_pluck($this->meta_data, 'value', 'key')) || array_key_exists('_' . $offset, wp_list_pluck($this->meta_data, 'value', 'key'));
    }
    public function offsetGet($offset)
    {
        $this->maybe_read_meta_data();
        if ('item_meta_array' === $offset) {
            $return = array();
            foreach ($this->meta_data as $meta) {
                $return[$meta->id] = $meta;
            }
            return $return;
        }
        $meta_values = wp_list_pluck($this->meta_data, 'value', 'key');
        if ('item_meta' === $offset) {
            return $meta_values;
        } elseif ('type' === $offset) {
            return $this->get_type();
        } elseif (array_key_exists($offset, $this->data)) {
            $getter = "get_{$offset}";
            if (is_callable(array($this, $getter))) {
                return $this->{$getter}();
            }
        } elseif (array_key_exists('_' . $offset, $meta_values)) {
            return $meta_values['_' . $offset];
        } elseif (array_key_exists($offset, $meta_values)) {
            return $meta_values[$offset];
        }
        return null;
    }
}