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 / OrderController.php

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

204 lines 5.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Class OrderController
4 *
5 * @package Packetery
6 */
7
8 declare( strict_types=1 );
9
10 namespace Packetery\Module\Api\Internal;
11
12 use Packetery\Core;
13 use Packetery\Core\Entity\Size;
14 use Packetery\Core\Validator;
15 use Packetery\Module\Exception\InvalidCarrierException;
16 use Packetery\Module\Order;
17 use Packetery\Module\Order\GridExtender;
18 use WP_Error;
19 use WP_REST_Controller;
20 use WP_REST_Request;
21 use WP_REST_Response;
22 use WP_REST_Server;
23
24 /**
25 * Class OrderController
26 *
27 * @package Packetery
28 */
29 final class OrderController extends WP_REST_Controller {
30
31 /**
32 * Router.
33 *
34 * @var OrderRouter
35 */
36 private $router;
37
38 /**
39 * Order modal.
40 *
41 * @var Order\Modal
42 */
43 private $orderModal;
44
45 /**
46 * Order repository.
47 *
48 * @var Order\Repository
49 */
50 private $orderRepository;
51
52 /**
53 * Grid extender service.
54 *
55 * @var GridExtender
56 */
57 private $gridExtender;
58
59 /**
60 * Order validator.
61 *
62 * @var Validator\Order
63 */
64 private $orderValidator;
65
66 /**
67 * Helper.
68 *
69 * @var Core\Helper
70 */
71 private $helper;
72
73 /**
74 * Controller constructor.
75 *
76 * @param OrderRouter $router Router.
77 * @param Order\Modal $orderModal Modal.
78 * @param Order\Repository $orderRepository Order repository.
79 * @param GridExtender $gridExtender Grid extender.
80 * @param Validator\Order $orderValidator Order validator.
81 * @param Core\Helper $helper Helper.
82 */
83 public function __construct(
84 OrderRouter $router,
85 Order\Modal $orderModal,
86 Order\Repository $orderRepository,
87 GridExtender $gridExtender,
88 Validator\Order $orderValidator,
89 Core\Helper $helper
90 ) {
91 $this->orderModal = $orderModal;
92 $this->orderRepository = $orderRepository;
93 $this->gridExtender = $gridExtender;
94 $this->orderValidator = $orderValidator;
95 $this->helper = $helper;
96 $this->router = $router;
97 }
98
99 /**
100 * Register the routes of the controller.
101 *
102 * @return void
103 */
104 public function registerRoutes(): void {
105 $this->router->registerRoute(
106 OrderRouter::PATH_SAVE_MODAL,
107 [
108 [
109 'methods' => WP_REST_Server::EDITABLE,
110 'callback' => [ $this, 'saveModal' ],
111 'permission_callback' => function () {
112 return current_user_can( 'edit_posts' );
113 },
114 ],
115 ]
116 );
117 }
118
119 /**
120 * Update one item from the collection
121 *
122 * @param WP_REST_Request $request Full data about the request.
123 *
124 * @return WP_REST_Response|WP_Error
125 */
126 public function saveModal( WP_REST_Request $request ) {
127 $data = [];
128 $parameters = $request->get_body_params();
129 $packeteryWeight = $parameters['packeteryWeight'];
130 $packeteryOriginalWeight = $parameters['packeteryOriginalWeight'];
131 $packeteryWidth = $parameters['packeteryWidth'];
132 $packeteryLength = $parameters['packeteryLength'];
133 $packeteryHeight = $parameters['packeteryHeight'];
134 $packeteryDeliverOn = $parameters['packeteryDeliverOn'];
135 $orderId = (int) $parameters['orderId'];
136
137 $form = $this->orderModal->createForm();
138 $form->setValues(
139 [
140 'packetery_weight' => $packeteryWeight,
141 'packetery_original_weight' => $packeteryOriginalWeight,
142 'packetery_width' => $packeteryWidth,
143 'packetery_length' => $packeteryLength,
144 'packetery_height' => $packeteryHeight,
145 'packetery_deliver_on' => $packeteryDeliverOn,
146 ]
147 );
148
149 if ( false === $form->isValid() ) {
150 return new WP_Error( 'form_invalid', implode( ', ', $form->getErrors() ), 400 );
151 }
152
153 try {
154 $order = $this->orderRepository->getById( $orderId );
155 } catch ( InvalidCarrierException $exception ) {
156 return new WP_Error( 'order_not_loaded', $exception->getMessage(), 400 );
157 }
158 if ( null === $order ) {
159 return new WP_Error( 'order_not_loaded', __( 'Order could not be loaded.', 'packeta' ), 400 );
160 }
161
162 $values = $form->getValues( 'array' );
163
164 if ( ! is_numeric( $values['packetery_weight'] ) ) {
165 $order->setWeight( null );
166 } elseif ( (float) $values['packetery_weight'] !== (float) $values['packetery_original_weight'] ) {
167 $order->setWeight( (float) $values['packetery_weight'] );
168 }
169
170 foreach ( [ 'packetery_length', 'packetery_width', 'packetery_height' ] as $sizeKey ) {
171 if ( ! is_numeric( $values[ $sizeKey ] ) ) {
172 $values[ $sizeKey ] = null;
173 }
174 }
175
176 $size = new Size(
177 $values['packetery_length'],
178 $values['packetery_width'],
179 $values['packetery_height']
180 );
181
182 $order->setSize( $size );
183 $order->setDeliverOn( $this->helper->getDateTimeFromString( $packeteryDeliverOn ) );
184 $this->orderRepository->save( $order );
185
186 $data['message'] = __( 'Success', 'packeta' );
187 $data['data'] = [
188 'fragments' => [
189 sprintf( '[data-packetery-order-id="%d"][data-packetery-order-grid-cell-weight]', $orderId ) => $this->gridExtender->getWeightCellContent( $order ),
190 ],
191 'packetery_weight' => $order->getFinalWeight(),
192 'packetery_length' => $order->getLength(),
193 'packetery_width' => $order->getWidth(),
194 'packetery_height' => $order->getHeight(),
195 'packetery_deliver_on' => $this->helper->getStringFromDateTime( $order->getDeliverOn(), Core\Helper::DATEPICKER_FORMAT ),
196 'orderIsSubmittable' => $this->orderValidator->isValid( $order ),
197 'hasOrderManualWeight' => $order->hasManualWeight(),
198 ];
199
200 return new WP_REST_Response( $data, 200 );
201 }
202
203 }
204