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 +160 -179 3.0.24.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,20 +44,29 @@
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.
64 + *
65 + * @return void
49 66 */
50 - public function register_routes(): void {
51 - $this->logger->log_info( 'Hook executed', __FUNCTION__, __CLASS__ );
67 + public function register_routes() {
68 + $this->logger->log_debug( 'Hook executed', __FUNCTION__, __CLASS__ );
52 69 $store_id_args = array( self::PARAM_STORE_ID => $this->get_arg_string() );
53 70 $general_args = array_merge(
54 71 $store_id_args,
55 72 array(
@@ -65,12 +82,9 @@
65 82 'required' => false,
66 83 'validate_callback' => array( $this, 'validate_array_of_product_cat' ),
67 84 'sanitize_callback' => array( $this, 'sanitize_array_of_ids' ),
68 85 ),
69 - self::PARAM_ENABLED_FOR_SERVICES => $this->get_arg_bool( false, false ),
70 - self::PARAM_ALLOW_FIRST_SERVICE_PAYMENT_DELAY => $this->get_arg_bool( false, true ),
71 - self::PARAM_ALLOW_SERVICE_REG_ITEMS => $this->get_arg_bool( false, true ),
72 - 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' ) ),
73 87 )
74 88 );
75 89
76 90 $store_id = $this->url_param_pattern( self::PARAM_STORE_ID );
@@ -95,19 +109,14 @@
95 109 *
96 110 * @return WP_REST_Response|WP_Error
97 111 */
98 112 public function get_current_store() {
99 - $response = null;
100 - try {
101 - $response = AdminAPI::get()
102 - ->store( (string) get_current_blog_id() )
103 - ->getCurrentStore()
104 - ->toArray();
105 - } catch ( \Throwable $e ) {
106 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
107 - $response = new WP_Error( 'error', $e->getMessage() );
108 - }
109 - 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 );
110 119 }
111 120
112 121 /**
113 122 * GET version.
@@ -116,19 +125,16 @@
116 125 *
117 126 * @return WP_REST_Response|WP_Error
118 127 */
119 128 public function get_version( WP_REST_Request $request ) {
120 - $response = null;
121 - try {
122 - $response = AdminAPI::get()
123 - ->integration( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
124 - ->getVersion()
125 - ->toArray();
126 - } catch ( \Throwable $e ) {
127 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
128 - $response = new WP_Error( 'error', $e->getMessage() );
129 - }
130 - 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 );
131 137 }
132 138
133 139 /**
134 140 * GET stores.
@@ -137,19 +143,16 @@
137 143 *
138 144 * @return WP_REST_Response|WP_Error
139 145 */
140 146 public function get_stores( WP_REST_Request $request ) {
141 - $response = null;
142 - try {
143 - $response = AdminAPI::get()
144 - ->store( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
145 - ->getStores()
146 - ->toArray();
147 - } catch ( \Throwable $e ) {
148 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
149 - $response = new WP_Error( 'error', $e->getMessage() );
150 - }
151 - 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 );
152 155 }
153 156
154 157 /**
155 158 * GET state.
@@ -158,19 +161,16 @@
158 161 *
159 162 * @return WP_REST_Response|WP_Error
160 163 */
161 164 public function get_state( WP_REST_Request $request ) {
162 - $response = null;
163 - try {
164 - $response = AdminAPI::get()
165 - ->integration( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
166 - ->getUIState( true ) // Pass false if the Onboarding does not configure widgets.
167 - ->toArray();
168 - } catch ( \Throwable $e ) {
169 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
170 - $response = new WP_Error( 'error', $e->getMessage() );
171 - }
172 - 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 );
173 173 }
174 174
175 175 /**
176 176 * GET general settings.
@@ -179,19 +179,16 @@
179 179 *
180 180 * @return WP_REST_Response|WP_Error
181 181 */
182 182 public function get_general( WP_REST_Request $request ) {
183 - $response = null;
184 - try {
185 - $response = AdminAPI::get()
186 - ->generalSettings( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
187 - ->getGeneralSettings()
188 - ->toArray();
189 - } catch ( \Throwable $e ) {
190 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
191 - $response = new WP_Error( 'error', $e->getMessage() );
192 - }
193 - 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 );
194 191 }
195 192
196 193 /**
197 194 * GET general settings.
@@ -200,19 +197,16 @@
200 197 *
201 198 * @return WP_REST_Response|WP_Error
202 199 */
203 200 public function get_shop_name( WP_REST_Request $request ) {
204 - $response = null;
205 - try {
206 - $response = AdminAPI::get()
207 - ->integration( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
208 - ->getShopName()
209 - ->toArray();
210 - } catch ( \Throwable $e ) {
211 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
212 - $response = new WP_Error( 'error', $e->getMessage() );
213 - }
214 - 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 );
215 209 }
216 210
217 211 /**
218 212 * Save general settings.
@@ -222,31 +216,25 @@
222 216 *
223 217 * @return WP_REST_Response|WP_Error
224 218 */
225 219 public function save_general( WP_REST_Request $request ) {
226 - $response = null;
227 - try {
228 - $response = AdminAPI::get()
229 - ->generalSettings( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
230 - ->saveGeneralSettings(
231 - new General_Settings_Request(
232 - (bool) $request->get_param( self::PARAM_SEND_ORDER_REPORTS_PERIODICALLY_TO_SEQURA ),
233 - (bool) $request->get_param( self::PARAM_SHOW_SEQURA_CHECKOUT_AS_HOSTED_PAGE ),
234 - (array) $request->get_param( self::PARAM_ALLOWED_IP_ADDRESSES ),
235 - (array) $request->get_param( self::PARAM_EXCLUDED_PRODUCTS ),
236 - (array) $request->get_param( self::PARAM_EXCLUDED_CATEGORIES ),
237 - (bool) $request->get_param( self::PARAM_ENABLED_FOR_SERVICES ),
238 - (bool) $request->get_param( self::PARAM_ALLOW_FIRST_SERVICE_PAYMENT_DELAY ),
239 - (bool) $request->get_param( self::PARAM_ALLOW_SERVICE_REG_ITEMS ),
240 - strval( $request->get_param( self::PARAM_DEFAULT_SERVICES_END_DATE ) )
241 - )
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 ) )
242 234 )
243 - ->toArray();
244 - } catch ( \Throwable $e ) {
245 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
246 - $response = new WP_Error( 'error', $e->getMessage() );
247 - }
248 - return rest_ensure_response( $response );
235 + );
236 + return $this->build_response( $response );
249 237 }
250 238
251 239 /**
252 240 * GET shop categories.
@@ -255,19 +243,16 @@
255 243 *
256 244 * @return WP_REST_Response|WP_Error
257 245 */
258 246 public function get_shop_categories( WP_REST_Request $request ) {
259 - $response = null;
260 - try {
261 - $response = AdminAPI::get()
262 - ->generalSettings( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
263 - ->getShopCategories()
264 - ->toArray();
265 - } catch ( \Throwable $e ) {
266 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
267 - $response = new WP_Error( 'error', $e->getMessage() );
268 - }
269 - 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 );
270 255 }
271 256
272 257 /**
273 258 * GET Order Status List.
@@ -276,19 +261,16 @@
276 261 *
277 262 * @return WP_REST_Response|WP_Error
278 263 */
279 264 public function get_list_order_status( WP_REST_Request $request ) {
280 - $response = null;
281 - try {
282 - $response = AdminAPI::get()
283 - ->orderStatusSettings( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
284 - ->getShopOrderStatuses()
285 - ->toArray();
286 - } catch ( \Throwable $e ) {
287 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
288 - $response = new WP_Error( 'error', $e->getMessage() );
289 - }
290 - 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 );
291 273 }
292 274
293 275 /**
294 276 * GET Order Status settings.
@@ -297,19 +279,16 @@
297 279 *
298 280 * @return WP_REST_Response|WP_Error
299 281 */
300 282 public function get_order_status( WP_REST_Request $request ) {
301 - $response = null;
302 - try {
303 - $response = AdminAPI::get()
304 - ->orderStatusSettings( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
305 - ->getOrderStatusSettings()
306 - ->toArray();
307 - } catch ( \Throwable $e ) {
308 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
309 - $response = new WP_Error( 'error', $e->getMessage() );
310 - }
311 - 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 );
312 291 }
313 292
314 293 /**
315 294 * POST Order Status settings.
@@ -321,22 +300,21 @@
321 300 public function save_order_status( WP_REST_Request $request ) {
322 301 if ( ! $this->validate_order_status( $request ) ) {
323 302 return new WP_REST_Response( 'Invalid data', 400 );
324 303 }
325 -
326 - $response = null;
327 - try {
328 - $response = AdminAPI::get()
329 - ->orderStatusSettings( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
330 - ->saveOrderStatusSettings(
331 - new OrderStatusSettingsRequest( (array) json_decode( $request->get_body(), true ) )
332 - )
333 - ->toArray();
334 - } catch ( \Throwable $e ) {
335 - $this->logger->log_throwable( $e, __FUNCTION__, __CLASS__ );
336 - $response = new WP_Error( 'error', $e->getMessage() );
337 - }
338 - 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 );
339 317 }
340 318
341 319 /**
342 320 * Validate if the parameter is a boolean.
@@ -383,33 +361,36 @@
383 361 *
384 362 * @param WP_REST_Request $request The request.
385 363 */
386 364 public function validate_order_status( WP_REST_Request $request ): bool {
387 - try {
388 - $data = json_decode( $request->get_body(), true );
389 - 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 + ) {
390 391 return false;
391 392 }
392 - $allowed_shop_statuses = AdminAPI::get()
393 - ->orderStatusSettings( strval( $request->get_param( self::PARAM_STORE_ID ) ) )
394 - ->getShopOrderStatuses()
395 - ->toArray();
396 - $allowed_shop_statuses = array_column( $allowed_shop_statuses, 'id' );
397 - $allowed_sequra_statuses = OrderStates::toArray();
398 -
399 - foreach ( $data as $status_map ) {
400 - if ( ! isset( $status_map['sequraStatus'] )
401 - || ! isset( $status_map['shopStatus'] )
402 - || ! is_string( $status_map['sequraStatus'] )
403 - || ! is_string( $status_map['shopStatus'] )
404 - || ! in_array( $status_map['sequraStatus'], $allowed_sequra_statuses, true )
405 - || ! in_array( $status_map['shopStatus'], $allowed_shop_statuses, true )
406 - ) {
407 - return false;
408 - }
409 - }
410 - } catch ( \Throwable $e ) {
411 - return false;
412 393 }
413 394 return true;
414 395 }
415 396