PluginProbe
Packeta / 2.1
Packeta v2.1
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
← All changes | src/Packetery/Module/Api/Internal/OrderController.php +181 -68 1.6.12.1 View file →
@@ -8,14 +8,21 @@
8 8 declare( strict_types=1 );
9 9
10 10 namespace Packetery\Module\Api\Internal;
11 11
12 -use Packetery\Core;
12 +use Packetery\Core\CoreHelper;
13 13 use Packetery\Core\Entity\Size;
14 14 use Packetery\Core\Validator;
15 15 use Packetery\Module\Exception\InvalidCarrierException;
16 +use Packetery\Module\Forms\FormData\OrderFormData;
17 +use Packetery\Module\Forms\StoredUntilFormFactory;
18 +use Packetery\Module\Options\OptionsProvider;
16 19 use Packetery\Module\Order;
20 +use Packetery\Module\Order\Form;
17 21 use Packetery\Module\Order\GridExtender;
22 +use Packetery\Module\Order\OrderValidatorFactory;
23 +use Packetery\Module\Order\PacketSetStoredUntil;
24 +use Packetery\Module\Order\Repository;
18 25 use WP_Error;
19 26 use WP_REST_Controller;
20 27 use WP_REST_Request;
21 28 use WP_REST_Response;
@@ -37,11 +44,11 @@
37 44
38 45 /**
39 46 * Order modal.
40 47 *
41 - * @var Order\Modal
48 + * @var Form
42 49 */
43 - private $orderModal;
50 + private $orderForm;
44 51
45 52 /**
46 53 * Order repository.
47 54 *
@@ -63,38 +70,68 @@
63 70 */
64 71 private $orderValidator;
65 72
66 73 /**
67 - * Helper.
74 + * CoreHelper.
68 75 *
69 - * @var Core\Helper
76 + * @var CoreHelper
70 77 */
71 - private $helper;
78 + private $coreHelper;
72 79
73 80 /**
81 + * Stored until Form Factory
82 + *
83 + * @var StoredUntilFormFactory
84 + */
85 + private $storedUntilFormFactory;
86 +
87 + /**
88 + * Packet Set Stored Until
89 + *
90 + * @var PacketSetStoredUntil
91 + */
92 + private $packetSetStoredUntil;
93 +
94 + /**
95 + * Options provider.
96 + *
97 + * @var OptionsProvider
98 + */
99 + private $optionsProvider;
100 +
101 + /**
74 102 * Controller constructor.
75 103 *
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.
104 + * @param OrderRouter $router Router.
105 + * @param Repository $orderRepository Order repository.
106 + * @param GridExtender $gridExtender Grid extender.
107 + * @param OrderValidatorFactory $orderValidatorFactory Order validator.
108 + * @param CoreHelper $coreHelper CoreHelper.
109 + * @param Form $orderForm Order form.
110 + * @param StoredUntilFormFactory $storedUntilFormFactory Stored until Form Factory.
111 + * @param PacketSetStoredUntil $packetSetStoredUntil Packet Set Stored Until.
112 + * @param OptionsProvider $optionsProvider Options provider.
82 113 */
83 114 public function __construct(
84 115 OrderRouter $router,
85 - Order\Modal $orderModal,
86 - Order\Repository $orderRepository,
116 + Repository $orderRepository,
87 117 GridExtender $gridExtender,
88 - Validator\Order $orderValidator,
89 - Core\Helper $helper
118 + OrderValidatorFactory $orderValidatorFactory,
119 + CoreHelper $coreHelper,
120 + Form $orderForm,
121 + StoredUntilFormFactory $storedUntilFormFactory,
122 + PacketSetStoredUntil $packetSetStoredUntil,
123 + OptionsProvider $optionsProvider
90 124 ) {
91 - $this->orderModal = $orderModal;
92 - $this->orderRepository = $orderRepository;
93 - $this->gridExtender = $gridExtender;
94 - $this->orderValidator = $orderValidator;
95 - $this->helper = $helper;
96 - $this->router = $router;
125 + $this->orderForm = $orderForm;
126 + $this->orderRepository = $orderRepository;
127 + $this->gridExtender = $gridExtender;
128 + $this->orderValidator = $orderValidatorFactory->create();
129 + $this->coreHelper = $coreHelper;
130 + $this->router = $router;
131 + $this->storedUntilFormFactory = $storedUntilFormFactory;
132 + $this->packetSetStoredUntil = $packetSetStoredUntil;
133 + $this->optionsProvider = $optionsProvider;
97 134 }
98 135
99 136 /**
100 137 * Register the routes of the controller.
@@ -113,41 +150,53 @@
113 150 },
114 151 ],
115 152 ]
116 153 );
154 +
155 + $this->router->registerRoute(
156 + OrderRouter::PATH_SAVE_STORED_UNTIL,
157 + [
158 + [
159 + 'methods' => WP_REST_Server::EDITABLE,
160 + 'callback' => [ $this, 'saveStoredUntil' ],
161 + 'permission_callback' => function () {
162 + return current_user_can( 'edit_posts' );
163 + },
164 + ],
165 + ]
166 + );
117 167 }
118 168
119 169 /**
120 - * Update one item from the collection
170 + * @param WP_REST_Request<string[]> $request
121 171 *
122 - * @param WP_REST_Request $request Full data about the request.
123 - *
124 172 * @return WP_REST_Response|WP_Error
125 173 */
174 + // phpcs:ignore Squiz.Commenting.FunctionComment.IncorrectTypeHint
126 175 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'];
176 + $data = [];
177 + $parameters = $request->get_body_params();
178 + $packeteryDeliverOn = $parameters['packeteryDeliverOn'] ?? null;
179 + $orderId = (int) $parameters['orderId'];
136 180
137 - $form = $this->orderModal->createForm();
181 + $form = $this->orderForm->create();
138 182 $form->setValues(
139 183 [
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,
184 + Form::FIELD_WEIGHT => $parameters['packeteryWeight'],
185 + Form::FIELD_ORIGINAL_WEIGHT => $parameters['packeteryOriginalWeight'],
186 + Form::FIELD_WIDTH => $parameters['packeteryWidth'] ?? null,
187 + Form::FIELD_LENGTH => $parameters['packeteryLength'] ?? null,
188 + Form::FIELD_HEIGHT => $parameters['packeteryHeight'] ?? null,
189 + Form::FIELD_ADULT_CONTENT => isset( $parameters['hasPacketeryAdultContent'] ) && $parameters['hasPacketeryAdultContent'] === 'true',
190 + Form::FIELD_COD => $parameters['packeteryCOD'] ?? null,
191 + Form::FIELD_CALCULATED_COD => $parameters['packeteryCalculatedCod'] ?? null,
192 + Form::FIELD_VALUE => $parameters['packeteryValue'] ?? null,
193 + Form::FIELD_CALCULATED_VALUE => $parameters['packeteryCalculatedValue'] ?? null,
194 + Form::FIELD_DELIVER_ON => $packeteryDeliverOn,
146 195 ]
147 196 );
148 197
149 - if ( false === $form->isValid() ) {
198 + if ( $form->isValid() === false ) {
150 199 return new WP_Error( 'form_invalid', implode( ', ', $form->getErrors() ), 400 );
151 200 }
152 201
153 202 try {
@@ -154,50 +203,114 @@
154 203 $order = $this->orderRepository->getById( $orderId );
155 204 } catch ( InvalidCarrierException $exception ) {
156 205 return new WP_Error( 'order_not_loaded', $exception->getMessage(), 400 );
157 206 }
158 - if ( null === $order ) {
207 + if ( $order === null ) {
159 208 return new WP_Error( 'order_not_loaded', __( 'Order could not be loaded.', 'packeta' ), 400 );
160 209 }
210 + /** @var OrderFormData $orderFormData */
211 + $orderFormData = $form->getValues( OrderFormData::class );
161 212
162 - $values = $form->getValues( 'array' );
213 + $size = new Size(
214 + $this->optionsProvider->getSanitizedDimensionValueInMm( $orderFormData->packeteryLength ),
215 + $this->optionsProvider->getSanitizedDimensionValueInMm( $orderFormData->packeteryWidth ),
216 + $this->optionsProvider->getSanitizedDimensionValueInMm( $orderFormData->packeteryHeight )
217 + );
163 218
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'] );
219 + if ( $orderFormData->packeteryWeight !== (float) $orderFormData->packeteryOriginalWeight ) {
220 + $order->setWeight( $orderFormData->packeteryWeight );
168 221 }
169 222
170 - foreach ( [ 'packetery_length', 'packetery_width', 'packetery_height' ] as $sizeKey ) {
171 - if ( ! is_numeric( $values[ $sizeKey ] ) ) {
172 - $values[ $sizeKey ] = null;
173 - }
223 + if ( $orderFormData->packeteryCOD !== (float) $orderFormData->packeteryCalculatedCod ) {
224 + $order->setManualCod( $orderFormData->packeteryCOD );
225 + } else {
226 + $order->setManualCod( null );
174 227 }
228 + $order->setAdultContent( $orderFormData->packeteryAdultContent );
229 + if ( $orderFormData->packeteryValue !== (float) $orderFormData->packeteryCalculatedValue ) {
230 + $order->setManualValue( $orderFormData->packeteryValue );
231 + } else {
232 + $order->setManualValue( null );
233 + }
234 + $order->setSize( $size );
235 + $order->setDeliverOn( $this->coreHelper->getDateTimeFromString( $packeteryDeliverOn ) );
175 236
176 - $size = new Size(
177 - $values['packetery_length'],
178 - $values['packetery_width'],
179 - $values['packetery_height']
237 + $this->orderRepository->save( $order );
238 +
239 + $data['message'] = __( 'Success', 'packeta' );
240 + $data['data'] = [
241 + 'fragments' => [
242 + sprintf( '[data-packetery-order-id="%d"][data-packetery-order-grid-cell-weight]', $orderId ) => $this->gridExtender->getWeightCellContent( $order ),
243 + ],
244 + Form::FIELD_WEIGHT => $order->getFinalWeight(),
245 + Form::FIELD_ORIGINAL_WEIGHT => $order->getCalculatedWeight(),
246 + Form::FIELD_LENGTH => CoreHelper::trimDecimalPlaces( $orderFormData->packeteryLength, $this->optionsProvider->getDimensionsNumberOfDecimals() ),
247 + Form::FIELD_WIDTH => CoreHelper::trimDecimalPlaces( $orderFormData->packeteryWidth, $this->optionsProvider->getDimensionsNumberOfDecimals() ),
248 + Form::FIELD_HEIGHT => CoreHelper::trimDecimalPlaces( $orderFormData->packeteryHeight, $this->optionsProvider->getDimensionsNumberOfDecimals() ),
249 + Form::FIELD_ADULT_CONTENT => $order->containsAdultContent(),
250 + Form::FIELD_COD => $order->getFinalCod(),
251 + Form::FIELD_CALCULATED_COD => $order->getCalculatedCod(),
252 + Form::FIELD_VALUE => $order->getFinalValue(),
253 + Form::FIELD_CALCULATED_VALUE => $order->getCalculatedValue(),
254 + Form::FIELD_DELIVER_ON => $this->coreHelper->getStringFromDateTime( $order->getDeliverOn(), CoreHelper::DATEPICKER_FORMAT ),
255 + 'orderIsSubmittable' => $this->orderValidator->isValid( $order ),
256 + 'orderWarningFields' => Form::getInvalidFieldsFromValidationResult( $this->orderValidator->validate( $order ) ),
257 + 'hasOrderManualWeight' => $order->hasManualWeight(),
258 + 'hasOrderManualCod' => $order->hasManualCod(),
259 + 'hasOrderManualValue' => $order->hasManualValue(),
260 + ];
261 +
262 + return new WP_REST_Response( $data, 200 );
263 + }
264 +
265 + /**
266 + * @param WP_REST_Request<string[]> $request
267 + *
268 + * @return WP_REST_Response|WP_Error
269 + */
270 + // phpcs:ignore Squiz.Commenting.FunctionComment.IncorrectTypeHint
271 + public function saveStoredUntil( WP_REST_Request $request ) {
272 + $data = [];
273 + $parameters = $request->get_body_params();
274 + $orderId = (int) $parameters['orderId'];
275 + $storedUntil = $parameters['packeteryStoredUntil'] ?? null;
276 +
277 + $form = $this->storedUntilFormFactory->createForm( sprintf( '%s_form', Order\StoredUntilModal::MODAL_ID ) );
278 + $form->setValues(
279 + [
280 + 'packetery_stored_until' => $storedUntil,
281 + ]
180 282 );
181 283
182 - $order->setSize( $size );
183 - $order->setDeliverOn( $this->helper->getDateTimeFromString( $packeteryDeliverOn ) );
284 + if ( $form->isValid() === false ) {
285 + return new WP_Error( 'form_invalid', implode( ', ', $form->getErrors() ), 400 );
286 + }
287 +
288 + try {
289 + $order = $this->orderRepository->getById( $orderId );
290 + } catch ( InvalidCarrierException $exception ) {
291 + return new WP_Error( 'order_not_loaded', $exception->getMessage(), 400 );
292 + }
293 + if ( $order === null ) {
294 + return new WP_Error( 'order_not_loaded', __( 'Order could not be loaded.', 'packeta' ), 400 );
295 + }
296 +
297 + $errorMessage = $this->packetSetStoredUntil->setStoredUntil( $order, $order->getPacketId(), $this->coreHelper->getDateTimeFromString( $storedUntil ) );
298 +
299 + if ( $errorMessage !== null ) {
300 + return new WP_Error( 'packetery_fault', $errorMessage, 400 );
301 + }
302 +
303 + $order->setStoredUntil( $this->coreHelper->getDateTimeFromString( $storedUntil ) );
304 +
184 305 $this->orderRepository->save( $order );
185 306
186 307 $data['message'] = __( 'Success', 'packeta' );
187 308 $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 ),
309 + 'packeteryStoredUntil' => $order->getStoredUntil(),
196 310 'orderIsSubmittable' => $this->orderValidator->isValid( $order ),
197 - 'hasOrderManualWeight' => $order->hasManualWeight(),
311 + 'orderWarningFields' => Form::getInvalidFieldsFromValidationResult( $this->orderValidator->validate( $order ) ),
198 312 ];
199 313
200 314 return new WP_REST_Response( $data, 200 );
201 315 }
202 -
203 316 }