275 lines
4.8 KiB
PHP
275 lines
4.8 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Order Item Object.
|
||
|
*
|
||
|
* @package EDD
|
||
|
* @subpackage Orders
|
||
|
* @copyright Copyright (c) 2018, Easy Digital Downloads, LLC
|
||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
||
|
* @since 3.0
|
||
|
*/
|
||
|
namespace EDD\Orders;
|
||
|
|
||
|
use EDD\Refundable_Item;
|
||
|
|
||
|
// Exit if accessed directly
|
||
|
defined( 'ABSPATH' ) || exit;
|
||
|
|
||
|
/**
|
||
|
* Order_Item Class.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
*
|
||
|
* @property int $id
|
||
|
* @property int $parent
|
||
|
* @property int $order_id
|
||
|
* @property int $product_id
|
||
|
* @property string $product_name
|
||
|
* @property int|null $price_id
|
||
|
* @property int $cart_index
|
||
|
* @property string $type
|
||
|
* @property string $status
|
||
|
* @property int $quantity
|
||
|
* @property int $amount
|
||
|
* @property float $subtotal
|
||
|
* @property float $tax
|
||
|
* @property float $discount
|
||
|
* @property float $total
|
||
|
* @property float $rate
|
||
|
* @property string $date_created
|
||
|
* @property string $date_modified
|
||
|
* @property Order_Adjustment[] $adjustments
|
||
|
*/
|
||
|
class Order_Item extends \EDD\Database\Rows\Order_Item {
|
||
|
|
||
|
use Refundable_Item;
|
||
|
|
||
|
/**
|
||
|
* Order Item ID.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
* @var int
|
||
|
*/
|
||
|
protected $id;
|
||
|
|
||
|
/**
|
||
|
* Parent ID. This is only used for order items attached to refunds. The ID references the
|
||
|
* original order item that was refunded.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
* @var int
|
||
|
*/
|
||
|
protected $parent;
|
||
|
|
||
|
/**
|
||
|
* Order ID.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
* @var int
|
||
|
*/
|
||
|
protected $order_id;
|
||
|
|
||
|
/**
|
||
|
* Product ID.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
* @var int
|
||
|
*/
|
||
|
protected $product_id;
|
||
|
|
||
|
/**
|
||
|
* Product Name.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $product_name;
|
||
|
|
||
|
/**
|
||
|
* Price ID.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
* @var int|null
|
||
|
*/
|
||
|
protected $price_id;
|
||
|
|
||
|
/**
|
||
|
* Cart index.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
* @var int
|
||
|
*/
|
||
|
protected $cart_index;
|
||
|
|
||
|
/**
|
||
|
* Item type.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $type;
|
||
|
|
||
|
/**
|
||
|
* Item status.
|
||
|
*/
|
||
|
protected $status;
|
||
|
|
||
|
/**
|
||
|
* Item quantity.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
* @var int
|
||
|
*/
|
||
|
protected $quantity;
|
||
|
|
||
|
/**
|
||
|
* Item amount.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
* @var float
|
||
|
*/
|
||
|
protected $amount;
|
||
|
|
||
|
/**
|
||
|
* Item subtotal.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
* @var float
|
||
|
*/
|
||
|
protected $subtotal;
|
||
|
|
||
|
/**
|
||
|
* Item tax.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
* @var float
|
||
|
*/
|
||
|
protected $tax;
|
||
|
|
||
|
/**
|
||
|
* Item discount.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
* @var float
|
||
|
*/
|
||
|
protected $discount;
|
||
|
|
||
|
/**
|
||
|
* Item total.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
* @var float
|
||
|
*/
|
||
|
protected $total;
|
||
|
|
||
|
/**
|
||
|
* Date created.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $date_created;
|
||
|
|
||
|
/**
|
||
|
* Date modified.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $date_modified;
|
||
|
|
||
|
/**
|
||
|
* Order item adjustments.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
* @var \EDD\Orders\Order_Adjustment[]
|
||
|
*/
|
||
|
protected $adjustments = null;
|
||
|
|
||
|
/**
|
||
|
* Magic getter for immutability.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
*
|
||
|
* @param string $key
|
||
|
*
|
||
|
* @return mixed
|
||
|
*/
|
||
|
public function __get( $key = '' ) {
|
||
|
if ( 'adjustments' === $key && null === $this->adjustments ) {
|
||
|
$this->adjustments = edd_get_order_adjustments( array(
|
||
|
'object_id' => $this->id,
|
||
|
'object_type' => 'order_item',
|
||
|
'no_found_rows' => true,
|
||
|
'order' => 'ASC',
|
||
|
) );
|
||
|
}
|
||
|
|
||
|
return parent::__get( $key );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Retrieve fees applied to this order item.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
*
|
||
|
* @return array $fees Fees applied to this item.
|
||
|
*/
|
||
|
public function get_fees() {
|
||
|
return edd_get_order_adjustments( array(
|
||
|
'object_id' => $this->id,
|
||
|
'object_type' => 'order_item',
|
||
|
'type' => 'fee',
|
||
|
'order' => 'ASC',
|
||
|
) );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get an order item name, including any price ID name appended to the end.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
*
|
||
|
* @return string The product name including any price ID name.
|
||
|
*/
|
||
|
public function get_order_item_name() {
|
||
|
if ( is_admin() && ( function_exists( 'edd_doing_ajax' ) && ! edd_doing_ajax() ) ) {
|
||
|
/**
|
||
|
* Allow the product name to be filtered within the admin.
|
||
|
* @since 3.0
|
||
|
* @param string $product_name The order item name.
|
||
|
* @param EDD\Orders\Order_Item The order item object.
|
||
|
*/
|
||
|
return apply_filters( 'edd_order_details_item_name', $this->product_name, $this );
|
||
|
}
|
||
|
|
||
|
return $this->product_name;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Retrieves order item records that were refunded from this original order item.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
*
|
||
|
* @return Order_Item[]|false
|
||
|
*/
|
||
|
public function get_refunded_items() {
|
||
|
if ( null !== $this->refunded_items ) {
|
||
|
return $this->refunded_items;
|
||
|
}
|
||
|
|
||
|
return edd_get_order_items( array(
|
||
|
'parent' => $this->id
|
||
|
) );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Checks the order item status to determine whether assets can be delivered.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function is_deliverable() {
|
||
|
return in_array( $this->status, edd_get_deliverable_order_item_statuses(), true );
|
||
|
}
|
||
|
}
|