PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.4
GiveWP – Donation Plugin and Fundraising Platform v4.16.4
4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 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.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / Helpers / IntlTelInput.php
give / src / Helpers Last commit date
Form 5 months ago Frontend 2 years ago Gateways 4 years ago ArrayDataSet.php 1 year ago Call.php 3 years ago Date.php 4 years ago EnqueueScript.php 4 years ago Hooks.php 4 years ago Html.php 4 years ago IntlTelInput.php 1 week ago Language.php 8 months ago Table.php 4 years ago Utils.php 1 year ago
IntlTelInput.php
222 lines
1 <?php
2
3 namespace Give\Helpers;
4
5 /**
6 * @since 3.9.0
7 *
8 * @see https://github.com/jackocnr/intl-tel-input
9 */
10 class IntlTelInput
11 {
12 /**
13 * @since 3.9.0
14 */
15 public static function getCssUrl(): string
16 {
17 return 'https://cdn.jsdelivr.net/npm/intl-tel-input@21.2.4/build/css/intlTelInput.css';
18 }
19
20 /**
21 * @since 3.9.0
22 */
23 public static function getScriptUrl(): string
24 {
25 return 'https://cdn.jsdelivr.net/npm/intl-tel-input@21.2.4/build/js/intlTelInput.min.js';
26 }
27
28 /**
29 * @since 3.9.0
30 */
31 public static function getUtilsScriptUrl(): string
32 {
33 return 'https://cdn.jsdelivr.net/npm/intl-tel-input@21.2.4/build/js/utils.js';
34 }
35
36 /**
37 * @since 3.9.0
38 */
39 public static function getI18n(): array
40 {
41 $countryList = array_change_key_case(give_get_country_list());
42 array_shift($countryList); // Remove first empty item from the country list
43
44 $i18n = array_merge($countryList, [
45 // Aria label for the selected country element
46 'selectedCountryAriaLabel' => __('Selected country', 'give'),
47 // Screen reader text for when no country is selected
48 'noCountrySelected' => __('No country selected', 'give'),
49 // Aria label for the country list element
50 'countryListAriaLabel' => __('List of countries', 'give'),
51 // Placeholder for the search input in the dropdown (when countrySearch enabled)
52 'searchPlaceholder' => __('Search', 'give'),
53 // Screen reader text for when the search produces no results
54 'zeroSearchResults' => __('No results found', 'give'),
55 // Screen reader text for when the search produces 1 result
56 'oneSearchResult' => __('1 result found', 'give'),
57 // Screen reader text for when the search produces multiple results, where ${count} will be replaced by the count
58 'multipleSearchResults' => __('${count} results found', 'give'),
59 ]);
60
61 return $i18n;
62 }
63
64 /**
65 * @since 3.9.0
66 */
67 public static function getErrorMap(): array
68 {
69 return [
70 __('Invalid number.', 'give'),
71 __('Invalid country code.', 'give'),
72 __('Invalid number: too short.', 'give'),
73 __('Invalid number: too long.', 'give'),
74 __('Invalid number.', 'give'),
75 ];
76 }
77
78 /**
79 * @since 3.9.0
80 */
81 public static function getInitialCountry(): string
82 {
83 return strtolower(give_get_country());
84 }
85
86 /**
87 * @since 3.9.0
88 */
89 public static function getShowSelectedDialCode(): bool
90 {
91 return true;
92 }
93
94 /**
95 * @since 3.9.0
96 */
97 public static function getStrictMode(): bool
98 {
99 return true;
100 }
101
102 /**
103 * @since 3.9.0
104 */
105 public static function getUseFullscreenPopup(): bool
106 {
107 return false;
108 }
109
110 /**
111 * @since 3.9.0
112 */
113 public static function getSettings(): array
114 {
115 return [
116 'initialCountry' => self::getInitialCountry(),
117 'showSelectedDialCode' => self::getShowSelectedDialCode(),
118 'strictMode' => self::getStrictMode(),
119 'i18n' => self::getI18n(),
120 'cssUrl' => self::getCssUrl(),
121 'scriptUrl' => self::getScriptUrl(),
122 'utilsScriptUrl' => self::getUtilsScriptUrl(),
123 'errorMap' => self::getErrorMap(),
124 'useFullscreenPopup' => self::getUseFullscreenPopup(),
125 ];
126 }
127
128 /**
129 * @since 4.16.4 Escaped the value attribute output.
130 * @since 3.9.0
131 */
132 public static function getHtmlInput(string $value, string $id, string $class = '', string $name = ''): string
133 {
134 if (empty($name)) {
135 $name = $id;
136 }
137
138 ob_start();
139
140 ?>
141 <script src="<?php
142 echo self::getScriptUrl(); ?>">
143 </script>
144
145 <link rel="stylesheet" href="<?php
146 echo self::getCssUrl(); ?>">
147
148 <input id="<?php
149 echo $id . '--intl_tel_input'; ?>" class="<?php
150 echo $class; ?>" name="<?php
151 echo $name; ?>" value="<?php
152 echo esc_attr($value); ?>" type='text'>
153
154 <span id="<?php
155 echo $id . '--error-msg'; ?>" class="give-intl-tel-input-hide" style="color:red;"></span>
156
157 <style>
158 .give-intl-tel-input-hide {
159 display: none !important;
160 }
161
162 .give-intl-tel-input-error {
163 border: 1px solid red !important;
164 }
165 </style>
166 <script>
167 if (document.readyState !== 'loading') {
168 readyHandler();
169 } else {
170 document.addEventListener('DOMContentLoaded', readyHandler);
171 }
172
173 function readyHandler() {
174 const input = document.querySelector("#<?php echo $id . '--intl_tel_input'; ?>");
175 const intl = window.intlTelInput(input, {
176 utilsScript: "<?php echo self::getUtilsScriptUrl(); ?>",
177 hiddenInput: function (telInputName) {
178 return {
179 phone: "<?php echo $id ?>",
180 };
181 },
182 initialCountry: "<?php echo self::getInitialCountry(); ?>",
183 showSelectedDialCode: Boolean(<?php echo self::getShowSelectedDialCode(); ?>),
184 useFullscreenPopup: Boolean(<?php echo self::getUseFullscreenPopup(); ?>),
185 strictMode: Boolean(<?php echo self::getStrictMode(); ?>),
186 i18n: <?php echo json_encode(self::getI18n()); ?>,
187 });
188
189 const errorMsg = document.querySelector("#<?php echo $id . '--error-msg'; ?>");
190 const errorMap = <?php echo json_encode(self::getErrorMap()); ?>;
191
192 const resetErrorMessage = () => {
193 input.classList.remove("give-intl-tel-input-error");
194 errorMsg.innerHTML = "";
195 errorMsg.classList.add("give-intl-tel-input-hide");
196 };
197
198 const showErrorMessage = (msg) => {
199 input.classList.add("give-intl-tel-input-error");
200 errorMsg.innerHTML = msg;
201 errorMsg.classList.remove("give-intl-tel-input-hide");
202 };
203
204 input.addEventListener('change', resetErrorMessage);
205 input.addEventListener('keyup', resetErrorMessage);
206 input.form.addEventListener("submit", function (e) {
207 if (input.value.trim() && !intl.isValidNumber()) {
208 e.preventDefault();
209 const errorCode = intl.getValidationError();
210 const msg = errorMap[errorCode] || errorMap[0];
211 showErrorMessage(msg);
212 return false;
213 }
214 });
215 }
216 </script>
217 <?php
218
219 return ob_get_clean();
220 }
221 }
222