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;
}
}