PluginProbe
Packeta / 1.6.0
Packeta v1.6.0
2.3.2 2.3.1 trunk 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3.0 1.3.1 1.3.2 1.4 1.4.1 1.4.2 1.4.3 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 All 56 releases
packeta / src / Packetery / Module / Order / ApiExtender.php

ApiExtender.php in Packeta 1.6.0, at src/Packetery/Module/Order/ApiExtender.php

100 lines 2.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Class ApiExtender.
4 *
5 * @package Packetery
6 */
7
8 declare( strict_types=1 );
9
10 namespace Packetery\Module\Order;
11
12 use Packetery\Module\Exception\InvalidCarrierException;
13 use WC_Data;
14 use WC_Order;
15 use WP_REST_Response;
16
17 /**
18 * Class ApiExtender.
19 */
20 class ApiExtender {
21
22 /**
23 * Order repository.
24 *
25 * @var Repository
26 */
27 private $orderRepository;
28
29 /**
30 * Constructor.
31 *
32 * @param Repository $orderRepository Order repository.
33 */
34 public function __construct( Repository $orderRepository ) {
35 $this->orderRepository = $orderRepository;
36 }
37
38 /**
39 * Registers service.
40 *
41 * @return void
42 */
43 public function register(): void {
44 add_filter( 'woocommerce_rest_prepare_shop_order_object', [ $this, 'extendResponse' ], 20, 2 );
45 }
46
47 /**
48 * Extends WooCommerce API response with plugin data.
49 *
50 * @param WP_REST_Response $response Response.
51 * @param WC_Data $object Object.
52 *
53 * @return object
54 */
55 public function extendResponse( WP_REST_Response $response, WC_Data $object ): object {
56 if ( ! $object instanceof WC_Order ) {
57 return $response;
58 }
59
60 try {
61 $order = $this->orderRepository->getByWcOrder( $object );
62 } catch ( InvalidCarrierException $invalidCarrierException ) {
63 return $response;
64 }
65
66 if ( null === $order ) {
67 return $response;
68 }
69
70 $this->addMetaDataItem( $response, '_packetery_carrier_id', $order->getCarrier()->getId() );
71 if ( null !== $order->getPickupPoint() && null !== $order->getPickupPoint()->getId() ) {
72 $this->addMetaDataItem( $response, '_packetery_point_id', $order->getPickupPoint()->getId() );
73 }
74 if ( null !== $order->getCarrierNumber() ) {
75 $this->addMetaDataItem( $response, '_packetery_carrier_number', $order->getCarrierNumber() );
76 }
77 if ( null !== $order->getPacketId() ) {
78 $this->addMetaDataItem( $response, '_packetery_packet_id', $order->getPacketId() );
79 }
80
81 return $response;
82 }
83
84 /**
85 * Adds metadata item to response.
86 *
87 * @param WP_REST_Response $response Response.
88 * @param string $key Key.
89 * @param string $value Value.
90 *
91 * @return void
92 */
93 private function addMetaDataItem( WP_REST_Response $response, string $key, string $value ): void {
94 $response->data['meta_data'][] = [
95 'key' => $key,
96 'value' => $value,
97 ];
98 }
99 }
100