Current File : /home/pacjaorg/public_html/cop29/wp-content/plugins/optinmonster/OMAPI/WooCommerce/Order.php |
<?php
/**
* WooCommerce Order class.
*
* @since 2.13.8
*
* @package OMAPI
* @author Justin Sternberg
*/
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* WooCommerce Order class.
*
* @since 2.13.8
*/
class OMAPI_WooCommerce_Order {
/**
* Holds instances of this order object.
*
* @since 2.13.8
*
* @var OMAPI_WooCommerce_Order[]
*/
protected static $instances = array();
/**
* Holds the ID of the order.
*
* @since 2.13.8
*
* @var string
*/
protected $id;
/**
* Holds the order object.
*
* @since 2.13.8
*
* @var WC_Order
*/
protected $order;
/**
* Get instance of the OMAPI_WooCommerce_Order and cache it.
*
* @since 2.13.8
*
* @param string $id The order ID.
* @param boolean $cached Whether to use the cached instance or not.
*
* @return self
*/
public static function get( $id = '', $cached = true ) {
if ( empty( $id ) ) {
return new self( $id );
}
if ( $id instanceof WC_Order || $id instanceof WC_Abstract_Order ) {
$order = $id;
$id = (int) $order->get_id();
if ( ! isset( self::$instances[ $id ] ) ) {
new self( $id );
}
self::$instances[ $id ]->set_order( $order );
} elseif ( ! empty( $id->ID ) ) {
$id = (int) $id->ID;
} else {
$id = (int) $id;
}
if ( ! $cached || ! isset( self::$instances[ $id ] ) ) {
$me = new self( $id );
$me->fetch_and_set_order();
}
return self::$instances[ $id ];
}
/**
* Class constructor.
*
* @since 2.13.8
*
* @param string $id The order ID.
*/
protected function __construct( $id = '' ) {
// If no data has been passed, don't setup anything. Maybe we are in test or create mode?
if ( empty( $id ) ) {
return;
}
// Prepare properties.
$this->id = $id;
self::$instances[ $id ] = $this;
}
/**
* Fetches the order object and sets it.
*
* @since 2.13.8
*
* @return self
*/
protected function fetch_and_set_order() {
$this->set_order( wc_get_order( $this->id ) );
return $this;
}
/**
* Sets the order object.
*
* @since 2.13.8
*
* @param WC_Order $order The order object.
*
* @return self
*/
protected function set_order( $order ) {
$this->order = $order;
return $this;
}
/**
* Checks if the order exists/is valid.
*
* @since 2.13.8
*
* @return boolean
*/
public function is() {
if ( empty( $this->order ) ) {
return false;
}
$id = $this->order->get_id();
return ! empty( $id );
}
/**
* Gets order meta, use HPOS API when possible.
*
* @since 2.13.8
*
* @param string $key Meta Key.
* @param bool $single return first found meta with key, or all with $key.
* @param string $context What the value is for. Valid values are view and edit.
* @return mixed
*/
public function get_meta( $key = '', $single = true, $context = 'edit' ) {
return ! empty( $this->order ) && method_exists( $this->order, 'get_meta' )
? $this->order->get_meta( $key, $single, $context )
: get_post_meta( $this->id, $key, $single );
}
/**
* Updates order meta, use HPOS API when possible.
*
* If using HPOS, can pass $save = false to not save the order (for bulk updates).
*
* @since 2.13.8
*
* @param string $key The meta key.
* @param mixed $value The meta value.
* @param bool $save Whether to save the order after meta update (if using HPOS).
*
* @return boolean
*/
public function update_meta_data( $key, $value, $save = true ) {
if ( ! empty( $this->order ) && method_exists( $this->order, 'update_meta_data' ) ) {
$this->order->update_meta_data( $key, $value );
return $save ? $this->order->save() : false;
}
return update_post_meta( $this->id, $key, $value );
}
/**
* Proxy calls to the order object.
*
* @since 2.13.8
*
* @param string $method The method name.
* @param array $args The method arguments.
*
* @return mixed
*/
public function __call( $method, $args ) {
return $this->order
? call_user_func_array( array( $this->order, $method ), $args )
: null;
}
}