PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 1.2.1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v1.2.1
4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / Support / Errors / ErrorsTranslationService.php
surecart / app / src / Support / Errors Last commit date
Translations 3 years ago ErrorsService.php 3 years ago ErrorsServiceProvider.php 3 years ago ErrorsTranslationService.php 3 years ago
ErrorsTranslationService.php
166 lines
1 <?php
2
3 namespace SureCart\Support\Errors;
4
5 /**
6 * Handles error translations from the API.
7 */
8 class ErrorsTranslationService {
9 /**
10 * Translate based on specific error code.
11 *
12 * @param string $code The error code.
13 * @return string|false The translated error message or false if not found.
14 */
15 public function codeTranslation( $code = '' ) {
16 if ( ! $code ) {
17 return false;
18 }
19
20 // very specific.
21 $code_translations = include 'Translations/codes.php';
22 if ( ! empty( $code_translations[ $code ] ) ) {
23 return $code_translations[ $code ];
24 }
25
26 return false;
27 }
28
29 /**
30 * Replaceable attribute translation
31 *
32 * @param string $attribute Attribute name.
33 * @param string $type Type of validation.
34 *
35 * @return string|false
36 */
37 public function attributeTranslation( $attribute, $type, $options = [] ) {
38 // if both are empty, return.
39 if ( empty( $attribute ) && empty( $type ) ) {
40 return false;
41 }
42
43 if ( ! empty( $options ) ) {
44 $special = $this->attributeOptionsTranslation( $attribute, $type, $options );
45 if ( $special ) {
46 return $special;
47 }
48 }
49
50 $attribute_translations = include 'Translations/attributes.php';
51 $type_translations_replaceable = include 'Translations/types-replaceable.php';
52
53 // we have an attribute.
54 if ( ! empty( $attribute_translations[ $attribute ] ) ) {
55 // we have a type.
56 if ( ! empty( $type_translations_replaceable[ $type ] ) ) {
57 return sprintf( $type_translations_replaceable[ $type ], $attribute_translations[ $attribute ] );
58 }
59 // translators: field name.
60 return sprintf( __( '%s is invalid.', 'surecart' ), $attribute_translations[ $attribute ] );
61 }
62
63 return false;
64 }
65
66 public function attributeOptionsTranslation( $attribute, $type, $options ) {
67 if ( 'line_items.ad_hoc_amount' === $attribute && 'outside_range' === $type ) {
68 return sprintf( __( 'You must enter an amount between %1$s and %2$s', 'surecart' ), $options['min'] / 100, $options['max'] / 100 );
69 }
70
71 return false;
72 }
73
74 /**
75 * Translate just the type field
76 *
77 * @param string $type Type sting.
78 * @return string|false
79 */
80 public function typeTranslation( $type = '' ) {
81 if ( ! $type ) {
82 return false;
83 }
84
85 // we have no attribute.
86 $type_translations = include 'Translations/types.php';
87
88 if ( ! empty( $type_translations[ $type ] ) ) {
89 return $type_translations[ $type ];
90 }
91
92 return false;
93 }
94
95 /**
96 * Translate a specific error response
97 *
98 * @param array $response Error response.
99 * @return \WP_Error
100 */
101 public function translateErrorMessage( $response, $fallback = null ) {
102 // translate specific error code.
103 $translated = $this->codeTranslation( $response['code'] ?? '' );
104 if ( $translated ) {
105 return $translated;
106 }
107
108 // translate attribute.
109 $translated = $this->attributeTranslation( $response['attribute'] ?? '', $response['type'] ?? '', $response['options'] ?? [] );
110 if ( $translated ) {
111 return $translated;
112 }
113
114 // translate type.
115 $translated = $this->typeTranslation( $response['type'] ?? '' );
116 if ( $translated ) {
117 return $translated;
118 }
119
120 // fallback.
121 return $fallback ?? __( 'Error.', 'surecart' );
122 }
123
124 /**
125 * Translate Errors
126 *
127 * @param array $response Response from platform.
128 * @param integer $code Status code.
129 *
130 * @return \WP_Error
131 */
132 public function translate( $response = null, $code = null ) {
133 // fallback.
134 if ( empty( $response['message'] ) ) {
135 error_log( print_r( $response, 1 ) );
136 return new \WP_Error( 'error', __( 'Error.', 'surecart' ) );
137 }
138
139 $formatted = new \WP_Error(
140 $response['code'] ?? '',
141 $this->translateErrorMessage( $response, $response['message'] ?? '' ),
142 [
143 'status' => $code,
144 'type' => $response['type'] ?? '',
145 'http_status' => $response['http_status'] ?? '',
146 ]
147 );
148
149 if ( ! empty( $response['validation_errors'] ) ) {
150 foreach ( $response['validation_errors'] as $error ) {
151 $formatted->add(
152 $error['code'] ?? 'invalid',
153 $this->translateErrorMessage( $error, $error['message'] ),
154 [
155 'attribute' => $error['attribute'] ?? '',
156 'type' => $error['type'] ?? '',
157 'options' => $error['options'] ?? [],
158 ]
159 );
160 }
161 }
162
163 return $formatted;
164 }
165 }
166