123 lines
3.5 KiB
PHP
123 lines
3.5 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Class WC_Order_Refund_Data_Store_CPT file.
|
||
|
*
|
||
|
* @package WooCommerce\DataStores
|
||
|
*/
|
||
|
|
||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* WC Order Refund Data Store: Stored in CPT.
|
||
|
*
|
||
|
* @version 3.0.0
|
||
|
*/
|
||
|
class WC_Order_Refund_Data_Store_CPT extends Abstract_WC_Order_Data_Store_CPT implements WC_Object_Data_Store_Interface, WC_Order_Refund_Data_Store_Interface {
|
||
|
|
||
|
/**
|
||
|
* Data stored in meta keys, but not considered "meta" for an order.
|
||
|
*
|
||
|
* @since 3.0.0
|
||
|
* @var array
|
||
|
*/
|
||
|
protected $internal_meta_keys = array(
|
||
|
'_order_currency',
|
||
|
'_cart_discount',
|
||
|
'_refund_amount',
|
||
|
'_refunded_by',
|
||
|
'_refunded_payment',
|
||
|
'_refund_reason',
|
||
|
'_cart_discount_tax',
|
||
|
'_order_shipping',
|
||
|
'_order_shipping_tax',
|
||
|
'_order_tax',
|
||
|
'_order_total',
|
||
|
'_order_version',
|
||
|
'_prices_include_tax',
|
||
|
'_payment_tokens',
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
* Delete a refund - no trash is supported.
|
||
|
*
|
||
|
* @param WC_Order $order Order object.
|
||
|
* @param array $args Array of args to pass to the delete method.
|
||
|
*/
|
||
|
public function delete( &$order, $args = array() ) {
|
||
|
$id = $order->get_id();
|
||
|
$parent_order_id = $order->get_parent_id();
|
||
|
$refund_cache_key = WC_Cache_Helper::get_cache_prefix( 'orders' ) . 'refunds' . $parent_order_id;
|
||
|
|
||
|
if ( ! $id ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
wp_delete_post( $id );
|
||
|
wp_cache_delete( $refund_cache_key, 'orders' );
|
||
|
$order->set_id( 0 );
|
||
|
do_action( 'woocommerce_delete_order_refund', $id );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Read refund data. Can be overridden by child classes to load other props.
|
||
|
*
|
||
|
* @param WC_Order_Refund $refund Refund object.
|
||
|
* @param object $post_object Post object.
|
||
|
* @since 3.0.0
|
||
|
*/
|
||
|
protected function read_order_data( &$refund, $post_object ) {
|
||
|
parent::read_order_data( $refund, $post_object );
|
||
|
$id = $refund->get_id();
|
||
|
$refund->set_props(
|
||
|
array(
|
||
|
'amount' => get_post_meta( $id, '_refund_amount', true ),
|
||
|
'refunded_by' => metadata_exists( 'post', $id, '_refunded_by' ) ? get_post_meta( $id, '_refunded_by', true ) : absint( $post_object->post_author ),
|
||
|
'refunded_payment' => wc_string_to_bool( get_post_meta( $id, '_refunded_payment', true ) ),
|
||
|
'reason' => metadata_exists( 'post', $id, '_refund_reason' ) ? get_post_meta( $id, '_refund_reason', true ) : $post_object->post_excerpt,
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Helper method that updates all the post meta for an order based on it's settings in the WC_Order class.
|
||
|
*
|
||
|
* @param WC_Order_Refund $refund Refund object.
|
||
|
* @since 3.0.0
|
||
|
*/
|
||
|
protected function update_post_meta( &$refund ) {
|
||
|
parent::update_post_meta( $refund );
|
||
|
|
||
|
$updated_props = array();
|
||
|
$meta_key_to_props = array(
|
||
|
'_refund_amount' => 'amount',
|
||
|
'_refunded_by' => 'refunded_by',
|
||
|
'_refunded_payment' => 'refunded_payment',
|
||
|
'_refund_reason' => 'reason',
|
||
|
);
|
||
|
|
||
|
$props_to_update = $this->get_props_to_update( $refund, $meta_key_to_props );
|
||
|
foreach ( $props_to_update as $meta_key => $prop ) {
|
||
|
$value = $refund->{"get_$prop"}( 'edit' );
|
||
|
update_post_meta( $refund->get_id(), $meta_key, $value );
|
||
|
$updated_props[] = $prop;
|
||
|
}
|
||
|
|
||
|
do_action( 'woocommerce_order_refund_object_updated_props', $refund, $updated_props );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get a title for the new post type.
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
protected function get_post_title() {
|
||
|
return sprintf(
|
||
|
/* translators: %s: Order date */
|
||
|
__( 'Refund – %s', 'woocommerce' ),
|
||
|
strftime( _x( '%b %d, %Y @ %I:%M %p', 'Order date parsed by strftime', 'woocommerce' ) ) // phpcs:ignore WordPress.WP.I18n.MissingTranslatorsComment, WordPress.WP.I18n.UnorderedPlaceholdersText
|
||
|
);
|
||
|
}
|
||
|
}
|