PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.19.4
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.19.4
4.7.1 4.7.0 4.6.6 4.6.5 4.6.4 4.6.3 4.6.2 4.6.1 4.6.0 4.5.1 4.5.0 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 2 years ago ErrorsService.php 4 years ago ErrorsServiceProvider.php 4 years ago ErrorsTranslationService.php 2 years ago
ErrorsTranslationService.php
181 lines
1 <?php
2
3 namespace SureCart\Support\Errors;
4
5 use SureCart\Support\Currency;
6
7 /**
8 * Handles error translations from the API.
9 */
10 class ErrorsTranslationService {
11 /**
12 * Translate based on specific error code.
13 *
14 * @param string $code The error code.
15 * @return string|false The translated error message or false if not found.
16 */
17 public function codeTranslation( $code = '' ) {
18 if ( ! $code ) {
19 return false;
20 }
21
22 // very specific.
23 $code_translations = include 'Translations/codes.php';
24 if ( ! empty( $code_translations[ $code ] ) ) {
25 return $code_translations[ $code ];
26 }
27
28 return false;
29 }
30
31 /**
32 * Replaceable attribute translation
33 *
34 * @param string $attribute Attribute name.
35 * @param string $type Type of validation.
36 *
37 * @return string|false
38 */
39 public function attributeTranslation( $attribute, $type, $options = [] ) {
40 // if both are empty, return.
41 if ( empty( $attribute ) && empty( $type ) ) {
42 return false;
43 }
44
45 if ( ! empty( $options ) ) {
46 $special = $this->attributeOptionsTranslation( $attribute, $type, $options );
47 if ( $special ) {
48 return $special;
49 }
50 }
51
52 $attribute_translations = include 'Translations/attributes.php';
53 $type_translations_replaceable = include 'Translations/types-replaceable.php';
54
55 // we have an attribute.
56 if ( ! empty( $attribute_translations[ $attribute ] ) ) {
57 // we have a type.
58 if ( ! empty( $type_translations_replaceable[ $type ] ) ) {
59 return sprintf( $type_translations_replaceable[ $type ], $attribute_translations[ $attribute ] );
60 }
61 // translators: field name.
62 return sprintf( __( '%s is invalid.', 'surecart' ), $attribute_translations[ $attribute ] );
63 }
64
65 return false;
66 }
67
68 public function attributeOptionsTranslation( $attribute, $type, $options ) {
69 if ( 'line_items.ad_hoc_amount' === $attribute && 'outside_range' === $type ) {
70 return sprintf( __( 'You must enter an amount between %1$s and %2$s', 'surecart' ), $options['min'] / 100, $options['max'] / 100 );
71 }
72
73 if ( 'line_items.quantity' === $attribute && 'greater_than_or_equal_to' === $type ) {
74 if ( $options['value'] < 1 ) {
75 return __( 'The product is out of stock. Please remove it from your cart.', 'surecart' );
76 }
77
78 return sprintf( __( 'You must enter a quantity greater than or equal to %s', 'surecart' ), $options['value'] );
79 }
80
81 if ( 'coupon' === $attribute && 'less_than_min_subtotal_amount' === $type ) {
82 $store_currency = \SureCart::account()->currency ?? 'usd';
83 return sprintf( __( 'You must spend at least %1$s to use this coupon.', 'surecart' ), Currency::format( $options['coupon_min_subtotal_amount'], $options['currency'] ?? $store_currency ) );
84 }
85
86 return false;
87 }
88
89 /**
90 * Translate just the type field
91 *
92 * @param string $type Type sting.
93 * @return string|false
94 */
95 public function typeTranslation( $type = '' ) {
96 if ( ! $type ) {
97 return false;
98 }
99
100 // we have no attribute.
101 $type_translations = include 'Translations/types.php';
102
103 if ( ! empty( $type_translations[ $type ] ) ) {
104 return $type_translations[ $type ];
105 }
106
107 return false;
108 }
109
110 /**
111 * Translate a specific error response
112 *
113 * @param array $response Error response.
114 * @return \WP_Error
115 */
116 public function translateErrorMessage( $response, $fallback = null ) {
117 // translate specific error code.
118 $translated = $this->codeTranslation( $response['code'] ?? '' );
119 if ( $translated ) {
120 return apply_filters( 'surecart/translated_error', $translated, $response );
121 }
122
123 // translate attribute.
124 $translated = $this->attributeTranslation( $response['attribute'] ?? '', $response['type'] ?? '', $response['options'] ?? [] );
125 if ( $translated ) {
126 return apply_filters( 'surecart/translated_error', $translated, $response );
127 }
128
129 // translate type.
130 $translated = $this->typeTranslation( $response['type'] ?? '' );
131 if ( $translated ) {
132 return apply_filters( 'surecart/translated_error', $translated, $response );
133 }
134
135 // fallback.
136 return $fallback ?? __( 'Error.', 'surecart' );
137 }
138
139 /**
140 * Translate Errors
141 *
142 * @param array $response Response from platform.
143 * @param integer $code Status code.
144 *
145 * @return \WP_Error
146 */
147 public function translate( $response = null, $code = null ) {
148 // fallback.
149 if ( empty( $response['message'] ) ) {
150 error_log( print_r( $response, 1 ) );
151 return new \WP_Error( 'error', __( 'Error.', 'surecart' ) );
152 }
153
154 $formatted = new \WP_Error(
155 $response['code'] ?? '',
156 $this->translateErrorMessage( $response, $response['message'] ?? '' ),
157 [
158 'status' => $code,
159 'type' => $response['type'] ?? '',
160 'http_status' => $response['http_status'] ?? '',
161 ]
162 );
163
164 if ( ! empty( $response['validation_errors'] ) ) {
165 foreach ( $response['validation_errors'] as $error ) {
166 $formatted->add(
167 $error['code'] ?? 'invalid',
168 $this->translateErrorMessage( $error, $error['message'] ),
169 [
170 'attribute' => $error['attribute'] ?? '',
171 'type' => $error['type'] ?? '',
172 'options' => $error['options'] ?? [],
173 ]
174 );
175 }
176 }
177
178 return apply_filters( 'surecart/translated_errors', $formatted );
179 }
180 }
181