PluginProbe
Packeta / 1.6.2
Packeta v1.6.2
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 / Api / Internal / CheckoutController.php

CheckoutController.php in Packeta 1.6.2, at src/Packetery/Module/Api/Internal/CheckoutController.php

161 lines 3.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Class CheckoutController
4 *
5 * @package Packetery
6 */
7
8 declare( strict_types=1 );
9
10 namespace Packetery\Module\Api\Internal;
11
12 use Packetery\Module\Checkout;
13 use Packetery\Module\Order\Attribute;
14 use WP_REST_Controller;
15 use WP_REST_Request;
16 use WP_REST_Response;
17 use WP_REST_Server;
18
19 /**
20 * Class CheckoutController. Input is validated in Checkout. We use transient because WC session is not yet loaded.
21 *
22 * @package Packetery
23 */
24 final class CheckoutController extends WP_REST_Controller {
25
26 private const RATE_ID = 'packetery_rate_id';
27
28 /**
29 * Router.
30 *
31 * @var CheckoutRouter
32 */
33 private $router;
34
35 /**
36 * Checkout.
37 *
38 * @var Checkout
39 */
40 private $checkout;
41
42 /**
43 * Constructor.
44 *
45 * @param CheckoutRouter $router Router.
46 * @param Checkout $checkout Router.
47 */
48 public function __construct( CheckoutRouter $router, Checkout $checkout ) {
49 $this->router = $router;
50 $this->checkout = $checkout;
51 }
52
53 /**
54 * Register the routes of the controller. Endpoints are public.
55 *
56 * @return void
57 */
58 public function registerRoutes(): void {
59 $this->router->registerRoute(
60 CheckoutRouter::PATH_SAVE_SELECTED_PICKUP_POINT,
61 [
62 [
63 'methods' => WP_REST_Server::EDITABLE,
64 'callback' => [ $this, 'saveSelectedPickupPoint' ],
65 'permission_callback' => '__return_true',
66 ],
67 ]
68 );
69 $this->router->registerRoute(
70 CheckoutRouter::PATH_SAVE_VALIDATED_ADDRESS,
71 [
72 [
73 'methods' => WP_REST_Server::EDITABLE,
74 'callback' => [ $this, 'saveValidatedAddress' ],
75 'permission_callback' => '__return_true',
76 ],
77 ]
78 );
79 $this->router->registerRoute(
80 CheckoutRouter::PATH_REMOVE_SAVED_DATA,
81 [
82 [
83 'methods' => WP_REST_Server::EDITABLE,
84 'callback' => [ $this, 'removeSavedData' ],
85 'permission_callback' => '__return_true',
86 ],
87 ]
88 );
89 }
90
91 /**
92 * Save selected pickup point.
93 *
94 * @param WP_REST_Request $request Full data about the request.
95 *
96 * @return WP_REST_Response
97 */
98 public function saveSelectedPickupPoint( WP_REST_Request $request ): WP_REST_Response {
99 $parameters = $request->get_body_params();
100 $savedData = get_transient( $this->checkout->getTransientNamePacketaCheckoutData() );
101 if ( ! is_array( $savedData ) ) {
102 $savedData = [];
103 }
104
105 $rateId = $parameters[ self::RATE_ID ];
106 foreach ( Attribute::$pickupPointAttrs as $attribute ) {
107 $savedData[ $rateId ][ $attribute['name'] ] = $parameters[ $attribute['name'] ];
108 }
109
110 set_transient(
111 $this->checkout->getTransientNamePacketaCheckoutData(),
112 $savedData,
113 DAY_IN_SECONDS
114 );
115
116 return new WP_REST_Response( [], 200 );
117 }
118
119 /**
120 * Save validated address.
121 *
122 * @param WP_REST_Request $request Full data about the request.
123 *
124 * @return WP_REST_Response
125 */
126 public function saveValidatedAddress( WP_REST_Request $request ): WP_REST_Response {
127 $parameters = $request->get_body_params();
128 $savedData = get_transient( $this->checkout->getTransientNamePacketaCheckoutData() );
129 if ( ! is_array( $savedData ) ) {
130 $savedData = [];
131 }
132
133 $rateId = $parameters[ self::RATE_ID ];
134 foreach ( Attribute::$homeDeliveryAttrs as $attribute ) {
135 $savedData[ $rateId ][ $attribute['name'] ] = $parameters[ $attribute['name'] ];
136 }
137
138 set_transient(
139 $this->checkout->getTransientNamePacketaCheckoutData(),
140 $savedData,
141 DAY_IN_SECONDS
142 );
143
144 return new WP_REST_Response( [], 200 );
145 }
146
147 /**
148 * Removes saved selected pickup point or validated address.
149 *
150 * @param WP_REST_Request $request Full data about the request.
151 *
152 * @return WP_REST_Response
153 */
154 public function removeSavedData( WP_REST_Request $request ): WP_REST_Response {
155 delete_transient( $this->checkout->getTransientNamePacketaCheckoutData() );
156
157 return new WP_REST_Response( [], 200 );
158 }
159
160 }
161