laipower/wp-content/plugins/easy-digital-downloads/includes/orders/classes/class-order-item.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 );
}
}