PluginProbe
Packeta / 1.5.2
Packeta v1.5.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 / Order / Controller.php

Controller.php in Packeta 1.5.2, at src/Packetery/Module/Order/Controller.php

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