Files
carpseeds.pl/wp-content/plugins/flexible-shipping/classes/wp-wpdesk-fs-shipment/rest-api/class-rest-api-order-response-data-appender.php
2024-07-15 11:28:08 +02:00

70 lines
2.0 KiB
PHP

<?php
use FSVendor\WPDesk\PluginBuilder\Plugin\Hookable;
/**
* Can append shipments data to WooCommerce REST API Order response.
*/
class WPDesk_Flexible_Shipping_Rest_Api_Order_Response_Data_Appender implements Hookable {
const REST_API_DATA_KEY = 'fs_shipping_lines';
/**
* Hooks.
*/
public function hooks() {
add_filter( 'woocommerce_rest_prepare_shop_order_object', array( $this, 'maybe_append_shipment_to_order_data' ), 10, 3 );
}
/**
* Appends shipment data if exists to order in REST API response.
*
* @param WP_REST_Response $response .
* @param WC_Order $order .
* @param WP_REST_Request $request .
*
* @return WP_REST_Response
*/
public function maybe_append_shipment_to_order_data( $response, $order, $request ) {
$shipments = fs_get_order_shipments( $order->get_id() );
if ( ! empty( $shipments ) ) {
return $this->append_shipment_to_order_data( $response, $order, $request, $shipments );
}
return $response;
}
/**
* Appends shipment data to order in REST API response.
*
* @param WP_REST_Response $response .
* @param WC_Order $order .
* @param WP_REST_Request $request .
* @param WPDesk_Flexible_Shipping_Shipment[] $shipments .
*
* @return WP_REST_Response
*/
private function append_shipment_to_order_data( $response, $order, $request, $shipments ) {
$response_data = $response->get_data();
if ( empty( $response_data[ self::REST_API_DATA_KEY ] ) ) {
$response_data[ self::REST_API_DATA_KEY ] = array();
}
$providers = WPDesk_Flexible_Shipping_Rest_Api_Order_Data_Providers_Factory::get_providers();
foreach ( $shipments as $shipment ) {
$integration = $shipment->get_integration();
$data_provider = $providers->get_provider_for_integration( $integration );
$response_data[ self::REST_API_DATA_KEY ][] = $data_provider->get_data_from_shipment( $shipment );
}
$response->set_data( $response_data );
return $response;
}
}