File "class-wc-data-store.php"

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

Download   Open   Edit   Advanced Editor   Back

<?php

defined('ABSPATH') || exit;
class WC_Data_Store
{
    private $instance = null;
    private $stores = array('coupon' => 'WC_Coupon_Data_Store_CPT', 'customer' => 'WC_Customer_Data_Store', 'customer-download' => 'WC_Customer_Download_Data_Store', 'customer-download-log' => 'WC_Customer_Download_Log_Data_Store', 'customer-session' => 'WC_Customer_Data_Store_Session', 'order' => 'WC_Order_Data_Store_CPT', 'order-refund' => 'WC_Order_Refund_Data_Store_CPT', 'order-item' => 'WC_Order_Item_Data_Store', 'order-item-coupon' => 'WC_Order_Item_Coupon_Data_Store', 'order-item-fee' => 'WC_Order_Item_Fee_Data_Store', 'order-item-product' => 'WC_Order_Item_Product_Data_Store', 'order-item-shipping' => 'WC_Order_Item_Shipping_Data_Store', 'order-item-tax' => 'WC_Order_Item_Tax_Data_Store', 'payment-token' => 'WC_Payment_Token_Data_Store', 'product' => 'WC_Product_Data_Store_CPT', 'product-grouped' => 'WC_Product_Grouped_Data_Store_CPT', 'product-variable' => 'WC_Product_Variable_Data_Store_CPT', 'product-variation' => 'WC_Product_Variation_Data_Store_CPT', 'shipping-zone' => 'WC_Shipping_Zone_Data_Store', 'webhook' => 'WC_Webhook_Data_Store');
    private $current_class_name = '';
    private $object_type = '';
    public function __construct($object_type)
    {
        $this->object_type = $object_type;
        $this->stores = apply_filters('woocommerce_data_stores', $this->stores);
        if (!array_key_exists($object_type, $this->stores)) {
            $pieces = explode('-', $object_type);
            $object_type = $pieces[0];
        }
        if (array_key_exists($object_type, $this->stores)) {
            $store = apply_filters('woocommerce_' . $object_type . '_data_store', $this->stores[$object_type]);
            if (is_object($store)) {
                if (!$store instanceof WC_Object_Data_Store_Interface) {
                    throw new Exception(__('Invalid data store.', 'woocommerce'));
                }
                $this->current_class_name = get_class($store);
                $this->instance = $store;
            } else {
                if (!class_exists($store)) {
                    throw new Exception(__('Invalid data store.', 'woocommerce'));
                }
                $this->current_class_name = $store;
                $this->instance = new $store();
            }
        } else {
            throw new Exception(__('Invalid data store.', 'woocommerce'));
        }
    }
    public function __sleep()
    {
        return array('object_type');
    }
    public function __wakeup()
    {
        $this->__construct($this->object_type);
    }
    public static function load($object_type)
    {
        return new WC_Data_Store($object_type);
    }
    public function get_current_class_name()
    {
        return $this->current_class_name;
    }
    public function read(&$data)
    {
        $this->instance->read($data);
    }
    public function create(&$data)
    {
        $this->instance->create($data);
    }
    public function update(&$data)
    {
        $this->instance->update($data);
    }
    public function delete(&$data, $args = array())
    {
        $this->instance->delete($data, $args);
    }
    public function __call($method, $parameters)
    {
        if (is_callable(array($this->instance, $method))) {
            $object = array_shift($parameters);
            $parameters = array_merge(array(&$object), $parameters);
            return $this->instance->{$method}(...$parameters);
        }
    }
}