diff options
Diffstat (limited to 'public/system/library/squareup/exception.php')
-rw-r--r-- | public/system/library/squareup/exception.php | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/public/system/library/squareup/exception.php b/public/system/library/squareup/exception.php new file mode 100644 index 0000000..27943cc --- /dev/null +++ b/public/system/library/squareup/exception.php @@ -0,0 +1,93 @@ +<?php + +namespace Squareup; + +class Exception extends \Exception { + const ERR_CODE_ACCESS_TOKEN_REVOKED = 'ACCESS_TOKEN_REVOKED'; + const ERR_CODE_ACCESS_TOKEN_EXPIRED = 'ACCESS_TOKEN_EXPIRED'; + + private $config; + private $log; + private $language; + private $errors; + private $isCurlError; + + private $overrideFields = array( + 'billing_address.country', + 'shipping_address.country', + 'email_address', + 'phone_number' + ); + + public function __construct($registry, $errors, $is_curl_error = false) { + $this->errors = $errors; + $this->isCurlError = $is_curl_error; + $this->config = $registry->get('config'); + $this->log = $registry->get('log'); + $this->language = $registry->get('language'); + + $message = $this->concatErrors(); + + if ($this->config->get('config_error_log')) { + $this->log->write($message); + } + + parent::__construct($message); + } + + public function isCurlError() { + return $this->isCurlError; + } + + public function isAccessTokenRevoked() { + return $this->errorCodeExists(self::ERR_CODE_ACCESS_TOKEN_REVOKED); + } + + public function isAccessTokenExpired() { + return $this->errorCodeExists(self::ERR_CODE_ACCESS_TOKEN_EXPIRED); + } + + protected function errorCodeExists($code) { + if (is_array($this->errors)) { + foreach ($this->errors as $error) { + if ($error['code'] == $code) { + return true; + } + } + } + + return false; + } + + protected function overrideError($field) { + return $this->language->get('squareup_override_error_' . $field); + } + + protected function parseError($error) { + if (!empty($error['field']) && in_array($error['field'], $this->overrideFields)) { + return $this->overrideError($error['field']); + } + + $message = $error['detail']; + + if (!empty($error['field'])) { + $message .= sprintf($this->language->get('squareup_error_field'), $error['field']); + } + + return $message; + } + + protected function concatErrors() { + $messages = array(); + + if (is_array($this->errors)) { + foreach ($this->errors as $error) { + $messages[] = $this->parseError($error); + } + } else { + $messages[] = $this->errors; + } + + return implode(' ', $messages); + } +}
\ No newline at end of file |