diff --git a/includes/class-integration.php b/includes/abstract-integration.php similarity index 91% rename from includes/class-integration.php rename to includes/abstract-integration.php index 7a0d33d62dff128a8b725b443508c2b89061f1bb..471eb86dc83e2f04a54b4880e7c2e93ed9e0fea9 100644 --- a/includes/class-integration.php +++ b/includes/abstract-integration.php @@ -46,7 +46,7 @@ abstract class Integration extends Singleton $response = Wpct_Http_Client::post_multipart($endpoint, $payload, $attachments); } - $success = $success && !is_wp_error($response); + $success = $success && !is_wp_error($response) && apply_filters('_wpct_erp_forms_validate_rpc_response', true, $response); } if (!$success) { @@ -115,7 +115,13 @@ abstract class Integration extends Singleton ]; }, $models); - return $this->submit($requests); + $validation = fn ($result, $res) => $this->rpc_response_validation($res); + add_filter('_wpct_erp_forms_validate_rpc_response', $validation, 2, 10); + + $result = $this->submit($requests); + + remove_filter('_wpct_erp_forms_validate_rpc_response', $validation, 2, 10); + return $result; } private function submit_rest($endpoints, $payload, $attachments, $form_data) @@ -225,6 +231,9 @@ abstract class Integration extends Singleton } $login = (array) json_decode($res['body'], true); + if (isset($login['error'])) { + throw new Exception('RPC login error'); + } $user_id = $login['result']; return [$session_id, $user_id]; } @@ -242,4 +251,14 @@ abstract class Integration extends Singleton ], ]; } + + private function rpc_response_validation($res) + { + $payload = (array) json_decode($res['body'], true); + if (isset($payload['error'])) { + return false; + } + + return true; + } } diff --git a/wpct-erp-forms.php b/wpct-erp-forms.php index 3877499b7b5e082b7e783c42ddf3a56d027215c4..7044d949c660ebd414d723765615b49c14682ad3 100755 --- a/wpct-erp-forms.php +++ b/wpct-erp-forms.php @@ -31,7 +31,7 @@ require_once 'abstracts/class-settings.php'; require_once 'wpct-http-bridge/wpct-http-bridge.php'; require_once 'wpct-i18n/wpct-i18n.php'; -require_once 'includes/class-integration.php'; +require_once 'includes/abstract-integration.php'; require_once 'includes/class-menu.php'; require_once 'includes/class-settings.php';