class-wc-order-refund-data-store-cpt.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. /**
  3. * Class WC_Order_Refund_Data_Store_CPT file.
  4. *
  5. * @package WooCommerce\DataStores
  6. */
  7. if ( ! defined( 'ABSPATH' ) ) {
  8. exit;
  9. }
  10. /**
  11. * WC Order Refund Data Store: Stored in CPT.
  12. *
  13. * @version 3.0.0
  14. */
  15. 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 {
  16. /**
  17. * Data stored in meta keys, but not considered "meta" for an order.
  18. *
  19. * @since 3.0.0
  20. * @var array
  21. */
  22. protected $internal_meta_keys = array(
  23. '_order_currency',
  24. '_cart_discount',
  25. '_refund_amount',
  26. '_refunded_by',
  27. '_refunded_payment',
  28. '_refund_reason',
  29. '_cart_discount_tax',
  30. '_order_shipping',
  31. '_order_shipping_tax',
  32. '_order_tax',
  33. '_order_total',
  34. '_order_version',
  35. '_prices_include_tax',
  36. '_payment_tokens',
  37. );
  38. /**
  39. * Delete a refund - no trash is supported.
  40. *
  41. * @param WC_Order $order Order object.
  42. * @param array $args Array of args to pass to the delete method.
  43. */
  44. public function delete( &$order, $args = array() ) {
  45. $id = $order->get_id();
  46. if ( ! $id ) {
  47. return;
  48. }
  49. wp_delete_post( $id );
  50. $order->set_id( 0 );
  51. do_action( 'woocommerce_delete_order_refund', $id );
  52. }
  53. /**
  54. * Read refund data. Can be overridden by child classes to load other props.
  55. *
  56. * @param WC_Order $refund Refund object.
  57. * @param object $post_object Post object.
  58. * @since 3.0.0
  59. */
  60. protected function read_order_data( &$refund, $post_object ) {
  61. parent::read_order_data( $refund, $post_object );
  62. $id = $refund->get_id();
  63. $refund->set_props(
  64. array(
  65. 'amount' => get_post_meta( $id, '_refund_amount', true ),
  66. 'refunded_by' => metadata_exists( 'post', $id, '_refunded_by' ) ? get_post_meta( $id, '_refunded_by', true ) : absint( $post_object->post_author ),
  67. 'refunded_payment' => wc_string_to_bool( get_post_meta( $id, '_refunded_payment', true ) ),
  68. 'reason' => metadata_exists( 'post', $id, '_refund_reason' ) ? get_post_meta( $id, '_refund_reason', true ): $post_object->post_excerpt,
  69. )
  70. );
  71. }
  72. /**
  73. * Helper method that updates all the post meta for an order based on it's settings in the WC_Order class.
  74. *
  75. * @param WC_Order $refund Refund object.
  76. * @since 3.0.0
  77. */
  78. protected function update_post_meta( &$refund ) {
  79. parent::update_post_meta( $refund );
  80. $updated_props = array();
  81. $meta_key_to_props = array(
  82. '_refund_amount' => 'amount',
  83. '_refunded_by' => 'refunded_by',
  84. '_refunded_payment' => 'refunded_payment',
  85. '_refund_reason' => 'reason',
  86. );
  87. $props_to_update = $this->get_props_to_update( $refund, $meta_key_to_props );
  88. foreach ( $props_to_update as $meta_key => $prop ) {
  89. $value = $refund->{"get_$prop"}( 'edit' );
  90. update_post_meta( $refund->get_id(), $meta_key, $value );
  91. $updated_props[] = $prop;
  92. }
  93. do_action( 'woocommerce_order_refund_object_updated_props', $refund, $updated_props );
  94. }
  95. /**
  96. * Get a title for the new post type.
  97. *
  98. * @return string
  99. */
  100. protected function get_post_title() {
  101. return sprintf(
  102. /* translators: %s: Order date */
  103. __( 'Refund &ndash; %s', 'woocommerce' ),
  104. strftime( _x( '%b %d, %Y @ %I:%M %p', 'Order date parsed by strftime', 'woocommerce' ) ) // phpcs:ignore WordPress.WP.I18n.MissingTranslatorsComment, WordPress.WP.I18n.UnorderedPlaceholdersText
  105. );
  106. }
  107. }