PluginProbe
seQura / 4.1.0
seQura v4.1.0
4.3.4 4.3.3 4.3.2 4.3.1 trunk 2.0.0 2.0.10 2.0.11 2.0.12 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 3.0.0 3.0.2 3.0.5 3.0.6 3.0.7 3.1.0 3.1.1 3.2.0 3.2.1 3.2.2 4.0.0 All 30 releases
← All changes | src/Controllers/Rest/class-general-settings-rest-controller.php +157 -178 3.0.64.1.0 View file →
@@ -8,12 +8,16 @@
8 8
9 9 namespace SeQura\WC\Controllers\Rest;
10 10
11 11 use SeQura\Core\BusinessLogic\AdminAPI\AdminAPI;
12 +use SeQura\Core\BusinessLogic\AdminAPI\GeneralSettings\Requests\GeneralSettingsRequest;
12 13 use SeQura\Core\BusinessLogic\AdminAPI\OrderStatusSettings\Requests\OrderStatusSettingsRequest;
14 +use SeQura\Core\BusinessLogic\AdminAPI\Response\Response;
15 +use SeQura\Core\BusinessLogic\Domain\GeneralSettings\Models\GeneralSettings;
16 +use SeQura\Core\BusinessLogic\Domain\Multistore\StoreContext;
13 17 use SeQura\Core\BusinessLogic\Domain\Order\OrderStates;
14 -use SeQura\WC\Core\Extension\BusinessLogic\AdminAPI\GeneralSettings\Requests\General_Settings_Request;
15 -use SeQura\WC\Services\Interface_Logger_Service;
18 +use SeQura\WC\Services\Log\Interface_Logger_Service;
19 +use SeQura\Core\Infrastructure\Utility\RegexProvider;
16 20 use WP_Error;
17 21 use WP_REST_Request;
18 22 use WP_REST_Response;
19 23
@@ -21,17 +25,21 @@
21 25 * REST Settings Controller
22 26 */
23 27 class General_Settings_REST_Controller extends REST_Controller {
24 28
25 - const PARAM_SEND_ORDER_REPORTS_PERIODICALLY_TO_SEQURA = 'sendOrderReportsPeriodicallyToSeQura';
26 - const PARAM_SHOW_SEQURA_CHECKOUT_AS_HOSTED_PAGE = 'showSeQuraCheckoutAsHostedPage';
27 - const PARAM_ALLOWED_IP_ADDRESSES = 'allowedIPAddresses';
28 - const PARAM_EXCLUDED_PRODUCTS = 'excludedProducts';
29 - const PARAM_EXCLUDED_CATEGORIES = 'excludedCategories';
30 - const PARAM_ENABLED_FOR_SERVICES = 'enabledForServices';
31 - const PARAM_ALLOW_FIRST_SERVICE_PAYMENT_DELAY = 'allowFirstServicePaymentDelay';
32 - const PARAM_ALLOW_SERVICE_REG_ITEMS = 'allowServiceRegItems';
33 - const PARAM_DEFAULT_SERVICES_END_DATE = 'defaultServicesEndDate';
29 + private const PARAM_SEND_ORDER_REPORTS_PERIODICALLY_TO_SEQURA = 'sendOrderReportsPeriodicallyToSeQura';
30 + private const PARAM_SHOW_SEQURA_CHECKOUT_AS_HOSTED_PAGE = 'showSeQuraCheckoutAsHostedPage';
31 + private const PARAM_ALLOWED_IP_ADDRESSES = 'allowedIPAddresses';
32 + private const PARAM_EXCLUDED_PRODUCTS = 'excludedProducts';
33 + private const PARAM_EXCLUDED_CATEGORIES = 'excludedCategories';
34 + private const PARAM_DEFAULT_SERVICES_END_DATE = 'defaultServicesEndDate';
35 +
36 + /**
37 + * Store context
38 + *
39 + * @var StoreContext
40 + */
41 + private $store_context;
34 42
35 43 /**
36 44 * Constructor.
37 45 *
@@ -36,13 +44,20 @@
36 44 * Constructor.
37 45 *
38 46 * @param string $rest_namespace The namespace.
39 47 * @param Interface_Logger_Service $logger The logger service.
48 + * @param RegexProvider $regex The regex provider.
40 49 */
41 - public function __construct( $rest_namespace, Interface_Logger_Service $logger ) {
42 - parent::__construct( $logger );
43 - $this->namespace = $rest_namespace;
44 - $this->rest_base = '/settings';
50 + public function __construct(
51 + $rest_namespace,
52 + Interface_Logger_Service $logger,
53 + RegexProvider $regex,
54 + StoreContext $store_context
55 + ) {
56 + parent::__construct( $logger, $regex );
57 + $this->namespace = $rest_namespace;
58 + $this->rest_base = '/settings';
59 + $this->store_context = $store_context;
45 60 }
46 61
47 62 /**
48 63 * Register the API endpoints.
@@ -49,9 +64,9 @@
49 64 *
50 65 * @return void
51 66 */
52 67 public function register_routes() {
53 - $this->logger->log_info( 'Hook executed', __FUNCTION__, __CLASS__ );
68 + $this->logger->log_debug( 'Hook executed', __FUNCTION__, __CLASS__ );
54 69 $store_id_args = array( self::PARAM_STORE_ID => $this->get_arg_string() );
55 70 $general_args = array_merge(
56 71 $store_id_args,
57 72 array(
@@ -67,12 +82,9 @@
67 82 'required' => false,
68 83 'validate_callback' => array( $this, 'validate_array_of_product_cat' ),
69 84 'sanitize_callback' => array( $this, 'sanitize_array_of_ids' ),
70 85 ),
71 - self::PARAM_ENABLED_FOR_SERVICES => $this->get_arg_bool( false, false ),
72 - self::PARAM_ALLOW_FIRST_SERVICE_PAYMENT_DELAY => $this->get_arg_bool( false, true ),
73 - self::PARAM_ALLOW_SERVICE_REG_ITEMS => $this->get_arg_bool( false, true ),
74 - self::PARAM_DEFAULT_SERVICES_END_DATE => $this->get_arg_string( false, 'P1Y', array( $this, 'validate_time_duration' ) ),
86 + self::PARAM_DEFAULT_SERVICES_END_DATE => $this->get_arg_string( false, GeneralSettings::DEFAULT_SERVICE_END_DATE, array( $this, 'validate_time_duration' ) ),
75 87 )
76 88 );
77 89
78 90 $store_id = $this->url_param_pattern( self::PARAM_STORE_ID );
@@ -97,19 +109,14 @@
97 109 *
98 110 * @return WP_REST_Response|WP_Error
99 111 */
100 112 public function get_current_store() {
101 - $response = null;
102 - try {
103 - $response = AdminAPI::get()
104 - ->store( (string) get_current_blog_id() )
105 - ->getCurrentStore()
106 - ->toArray();
107 - } catch ( \Throwable $e ) {
108 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
109 - $response = new WP_Error( 'error', $e->getMessage() );
110 - }
111 - return \rest_ensure_response( $response );
113 + /**
114 + * Response
115 + *
116 + * @var Response $response */
117 + $response = AdminAPI::get()->store( $this->store_context->getStoreId() )->getCurrentStore();
118 + return $this->build_response( $response );
112 119 }
113 120
114 121 /**
115 122 * GET version.
@@ -118,19 +125,16 @@
118 125 *
119 126 * @return WP_REST_Response|WP_Error
120 127 */
121 128 public function get_version( WP_REST_Request $request ) {
122 - $response = null;
123 - try {
124 - $response = AdminAPI::get()
125 - ->integration( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
126 - ->getVersion()
127 - ->toArray();
128 - } catch ( \Throwable $e ) {
129 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
130 - $response = new WP_Error( 'error', $e->getMessage() );
131 - }
132 - return \rest_ensure_response( $response );
129 + /**
130 + * Response
131 + *
132 + * @var Response $response */
133 + $response = AdminAPI::get()
134 + ->integration( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
135 + ->getVersion();
136 + return $this->build_response( $response );
133 137 }
134 138
135 139 /**
136 140 * GET stores.
@@ -139,19 +143,16 @@
139 143 *
140 144 * @return WP_REST_Response|WP_Error
141 145 */
142 146 public function get_stores( WP_REST_Request $request ) {
143 - $response = null;
144 - try {
145 - $response = AdminAPI::get()
146 - ->store( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
147 - ->getStores()
148 - ->toArray();
149 - } catch ( \Throwable $e ) {
150 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
151 - $response = new WP_Error( 'error', $e->getMessage() );
152 - }
153 - return \rest_ensure_response( $response );
147 + /**
148 + * Response
149 + *
150 + * @var Response $response */
151 + $response = AdminAPI::get()
152 + ->store( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
153 + ->getStores();
154 + return $this->build_response( $response );
154 155 }
155 156
156 157 /**
157 158 * GET state.
@@ -160,19 +161,16 @@
160 161 *
161 162 * @return WP_REST_Response|WP_Error
162 163 */
163 164 public function get_state( WP_REST_Request $request ) {
164 - $response = null;
165 - try {
166 - $response = AdminAPI::get()
167 - ->integration( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
168 - ->getUIState( true ) // Pass false if the Onboarding does not configure widgets.
169 - ->toArray();
170 - } catch ( \Throwable $e ) {
171 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
172 - $response = new WP_Error( 'error', $e->getMessage() );
173 - }
174 - return \rest_ensure_response( $response );
165 + /**
166 + * Response
167 + *
168 + * @var Response $response */
169 + $response = AdminAPI::get()
170 + ->integration( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
171 + ->getUIState( true ); // Pass false if the Onboarding does not configure widgets.
172 + return $this->build_response( $response );
175 173 }
176 174
177 175 /**
178 176 * GET general settings.
@@ -181,19 +179,16 @@
181 179 *
182 180 * @return WP_REST_Response|WP_Error
183 181 */
184 182 public function get_general( WP_REST_Request $request ) {
185 - $response = null;
186 - try {
187 - $response = AdminAPI::get()
188 - ->generalSettings( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
189 - ->getGeneralSettings()
190 - ->toArray();
191 - } catch ( \Throwable $e ) {
192 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
193 - $response = new WP_Error( 'error', $e->getMessage() );
194 - }
195 - return \rest_ensure_response( $response );
183 + /**
184 + * Response
185 + *
186 + * @var Response $response */
187 + $response = AdminAPI::get()
188 + ->generalSettings( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
189 + ->getGeneralSettings();
190 + return $this->build_response( $response );
196 191 }
197 192
198 193 /**
199 194 * GET general settings.
@@ -202,19 +197,16 @@
202 197 *
203 198 * @return WP_REST_Response|WP_Error
204 199 */
205 200 public function get_shop_name( WP_REST_Request $request ) {
206 - $response = null;
207 - try {
208 - $response = AdminAPI::get()
209 - ->integration( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
210 - ->getShopName()
211 - ->toArray();
212 - } catch ( \Throwable $e ) {
213 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
214 - $response = new WP_Error( 'error', $e->getMessage() );
215 - }
216 - return \rest_ensure_response( $response );
201 + /**
202 + * Response
203 + *
204 + * @var Response $response */
205 + $response = AdminAPI::get()
206 + ->integration( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
207 + ->getShopName();
208 + return $this->build_response( $response );
217 209 }
218 210
219 211 /**
220 212 * Save general settings.
@@ -224,31 +216,25 @@
224 216 *
225 217 * @return WP_REST_Response|WP_Error
226 218 */
227 219 public function save_general( WP_REST_Request $request ) {
228 - $response = null;
229 - try {
230 - $response = AdminAPI::get()
231 - ->generalSettings( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
232 - ->saveGeneralSettings(
233 - new General_Settings_Request(
234 - (bool) $request->get_param( self::PARAM_SEND_ORDER_REPORTS_PERIODICALLY_TO_SEQURA ),
235 - (bool) $request->get_param( self::PARAM_SHOW_SEQURA_CHECKOUT_AS_HOSTED_PAGE ),
236 - (array) $request->get_param( self::PARAM_ALLOWED_IP_ADDRESSES ),
237 - (array) $request->get_param( self::PARAM_EXCLUDED_PRODUCTS ),
238 - (array) $request->get_param( self::PARAM_EXCLUDED_CATEGORIES ),
239 - (bool) $request->get_param( self::PARAM_ENABLED_FOR_SERVICES ),
240 - (bool) $request->get_param( self::PARAM_ALLOW_FIRST_SERVICE_PAYMENT_DELAY ),
241 - (bool) $request->get_param( self::PARAM_ALLOW_SERVICE_REG_ITEMS ),
242 - strval( $request->get_param( self::PARAM_DEFAULT_SERVICES_END_DATE ) )
243 - )
220 + /**
221 + * Response
222 + *
223 + * @var Response $response */
224 + $response = AdminAPI::get()
225 + ->generalSettings( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
226 + ->saveGeneralSettings(
227 + new GeneralSettingsRequest(
228 + (bool) $request->get_param( self::PARAM_SEND_ORDER_REPORTS_PERIODICALLY_TO_SEQURA ),
229 + (bool) $request->get_param( self::PARAM_SHOW_SEQURA_CHECKOUT_AS_HOSTED_PAGE ),
230 + (array) $request->get_param( self::PARAM_ALLOWED_IP_ADDRESSES ),
231 + (array) $request->get_param( self::PARAM_EXCLUDED_PRODUCTS ),
232 + (array) $request->get_param( self::PARAM_EXCLUDED_CATEGORIES ),
233 + strval( $request->get_param( self::PARAM_DEFAULT_SERVICES_END_DATE ) )
244 234 )
245 - ->toArray();
246 - } catch ( \Throwable $e ) {
247 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
248 - $response = new WP_Error( 'error', $e->getMessage() );
249 - }
250 - return \rest_ensure_response( $response );
235 + );
236 + return $this->build_response( $response );
251 237 }
252 238
253 239 /**
254 240 * GET shop categories.
@@ -257,19 +243,16 @@
257 243 *
258 244 * @return WP_REST_Response|WP_Error
259 245 */
260 246 public function get_shop_categories( WP_REST_Request $request ) {
261 - $response = null;
262 - try {
263 - $response = AdminAPI::get()
264 - ->generalSettings( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
265 - ->getShopCategories()
266 - ->toArray();
267 - } catch ( \Throwable $e ) {
268 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
269 - $response = new WP_Error( 'error', $e->getMessage() );
270 - }
271 - return \rest_ensure_response( $response );
247 + /**
248 + * Response
249 + *
250 + * @var Response $response */
251 + $response = AdminAPI::get()
252 + ->generalSettings( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
253 + ->getShopCategories();
254 + return $this->build_response( $response );
272 255 }
273 256
274 257 /**
275 258 * GET Order Status List.
@@ -278,19 +261,16 @@
278 261 *
279 262 * @return WP_REST_Response|WP_Error
280 263 */
281 264 public function get_list_order_status( WP_REST_Request $request ) {
282 - $response = null;
283 - try {
284 - $response = AdminAPI::get()
285 - ->orderStatusSettings( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
286 - ->getShopOrderStatuses()
287 - ->toArray();
288 - } catch ( \Throwable $e ) {
289 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
290 - $response = new WP_Error( 'error', $e->getMessage() );
291 - }
292 - return \rest_ensure_response( $response );
265 + /**
266 + * Response
267 + *
268 + * @var Response $response */
269 + $response = AdminAPI::get()
270 + ->orderStatusSettings( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
271 + ->getShopOrderStatuses();
272 + return $this->build_response( $response );
293 273 }
294 274
295 275 /**
296 276 * GET Order Status settings.
@@ -299,19 +279,16 @@
299 279 *
300 280 * @return WP_REST_Response|WP_Error
301 281 */
302 282 public function get_order_status( WP_REST_Request $request ) {
303 - $response = null;
304 - try {
305 - $response = AdminAPI::get()
306 - ->orderStatusSettings( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
307 - ->getOrderStatusSettings()
308 - ->toArray();
309 - } catch ( \Throwable $e ) {
310 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
311 - $response = new WP_Error( 'error', $e->getMessage() );
312 - }
313 - return \rest_ensure_response( $response );
283 + /**
284 + * Response
285 + *
286 + * @var Response $response */
287 + $response = AdminAPI::get()
288 + ->orderStatusSettings( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
289 + ->getOrderStatusSettings();
290 + return $this->build_response( $response );
314 291 }
315 292
316 293 /**
317 294 * POST Order Status settings.
@@ -323,22 +300,21 @@
323 300 public function save_order_status( WP_REST_Request $request ) {
324 301 if ( ! $this->validate_order_status( $request ) ) {
325 302 return new WP_REST_Response( 'Invalid data', 400 );
326 303 }
327 -
328 - $response = null;
329 - try {
330 - $response = AdminAPI::get()
331 - ->orderStatusSettings( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
332 - ->saveOrderStatusSettings(
333 - new OrderStatusSettingsRequest( (array) json_decode( $request->get_body(), true ) )
334 - )
335 - ->toArray();
336 - } catch ( \Throwable $e ) {
337 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
338 - $response = new WP_Error( 'error', $e->getMessage() );
339 - }
340 - return \rest_ensure_response( $response );
304 + /**
305 + * Order status mappings.
306 + *
307 + * @var array<string> $order_status_mappings */
308 + $order_status_mappings = (array) json_decode( $request->get_body(), true );
309 + /**
310 + * Response
311 + *
312 + * @var Response $response */
313 + $response = AdminAPI::get()
314 + ->orderStatusSettings( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
315 + ->saveOrderStatusSettings( new OrderStatusSettingsRequest( $order_status_mappings ) );
316 + return $this->build_response( $response );
341 317 }
342 318
343 319 /**
344 320 * Validate if the parameter is a boolean.
@@ -385,33 +361,36 @@
385 361 *
386 362 * @param WP_REST_Request $request The request.
387 363 */
388 364 public function validate_order_status( WP_REST_Request $request ): bool {
389 - try {
390 - $data = json_decode( $request->get_body(), true );
391 - if ( ! is_array( $data ) ) {
365 + $data = json_decode( $request->get_body(), true );
366 + if ( ! is_array( $data ) ) {
367 + return false;
368 + }
369 + /**
370 + * Response
371 + *
372 + * @var Response $response */
373 + $response = AdminAPI::get()
374 + ->orderStatusSettings( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
375 + ->getShopOrderStatuses();
376 +
377 + if ( ! $response->isSuccessful() ) {
378 + return false;
379 + }
380 + $allowed_shop_statuses = array_column( $response->toArray(), 'id' );
381 + $allowed_sequra_statuses = OrderStates::toArray();
382 +
383 + foreach ( $data as $status_map ) {
384 + if ( ! isset( $status_map['sequraStatus'] )
385 + || ! isset( $status_map['shopStatus'] )
386 + || ! is_string( $status_map['sequraStatus'] )
387 + || ! is_string( $status_map['shopStatus'] )
388 + || ! in_array( $status_map['sequraStatus'], $allowed_sequra_statuses, true )
389 + || ! in_array( $status_map['shopStatus'], $allowed_shop_statuses, true )
390 + ) {
392 391 return false;
393 392 }
394 - $allowed_shop_statuses = AdminAPI::get()
395 - ->orderStatusSettings( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
396 - ->getShopOrderStatuses()
397 - ->toArray();
398 - $allowed_shop_statuses = array_column( $allowed_shop_statuses, 'id' );
399 - $allowed_sequra_statuses = OrderStates::toArray();
400 -
401 - foreach ( $data as $status_map ) {
402 - if ( ! isset( $status_map['sequraStatus'] )
403 - || ! isset( $status_map['shopStatus'] )
404 - || ! is_string( $status_map['sequraStatus'] )
405 - || ! is_string( $status_map['shopStatus'] )
406 - || ! in_array( $status_map['sequraStatus'], $allowed_sequra_statuses, true )
407 - || ! in_array( $status_map['shopStatus'], $allowed_shop_statuses, true )
408 - ) {
409 - return false;
410 - }
411 - }
412 - } catch ( \Throwable $e ) {
413 - return false;
414 393 }
415 394 return true;
416 395 }
417 396