PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.12.2
GiveWP – Donation Plugin and Fundraising Platform v3.12.2
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 2 years ago Frontend 2 years ago Gateways 4 years ago ArrayDataSet.php 4 years 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 2 years ago Language.php 2 years ago Table.php 4 years ago Utils.php 4 years ago
IntlTelInput.php
221 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 3.9.0
130 */
131 public static function getHtmlInput(string $value, string $id, string $class = '', string $name = ''): string
132 {
133 if (empty($name)) {
134 $name = $id;
135 }
136
137 ob_start();
138
139 ?>
140 <script src="<?php
141 echo self::getScriptUrl(); ?>">
142 </script>
143
144 <link rel="stylesheet" href="<?php
145 echo self::getCssUrl(); ?>">
146
147 <input id="<?php
148 echo $id . '--intl_tel_input'; ?>" class="<?php
149 echo $class; ?>" name="<?php
150 echo $name; ?>" value="<?php
151 echo $value; ?>" type='text'>
152
153 <span id="<?php
154 echo $id . '--error-msg'; ?>" class="give-intl-tel-input-hide" style="color:red;"></span>
155
156 <style>
157 .give-intl-tel-input-hide {
158 display: none !important;
159 }
160
161 .give-intl-tel-input-error {
162 border: 1px solid red !important;
163 }
164 </style>
165 <script>
166 if (document.readyState !== 'loading') {
167 readyHandler();
168 } else {
169 document.addEventListener('DOMContentLoaded', readyHandler);
170 }
171
172 function readyHandler() {
173 const input = document.querySelector("#<?php echo $id . '--intl_tel_input'; ?>");
174 const intl = window.intlTelInput(input, {
175 utilsScript: "<?php echo self::getUtilsScriptUrl(); ?>",
176 hiddenInput: function (telInputName) {
177 return {
178 phone: "<?php echo $id ?>",
179 };
180 },
181 initialCountry: "<?php echo self::getInitialCountry(); ?>",
182 showSelectedDialCode: Boolean(<?php echo self::getShowSelectedDialCode(); ?>),
183 useFullscreenPopup: Boolean(<?php echo self::getUseFullscreenPopup(); ?>),
184 strictMode: Boolean(<?php echo self::getStrictMode(); ?>),
185 i18n: <?php echo json_encode(self::getI18n()); ?>,
186 });
187
188 const errorMsg = document.querySelector("#<?php echo $id . '--error-msg'; ?>");
189 const errorMap = <?php echo json_encode(self::getErrorMap()); ?>;
190
191 const resetErrorMessage = () => {
192 input.classList.remove("give-intl-tel-input-error");
193 errorMsg.innerHTML = "";
194 errorMsg.classList.add("give-intl-tel-input-hide");
195 };
196
197 const showErrorMessage = (msg) => {
198 input.classList.add("give-intl-tel-input-error");
199 errorMsg.innerHTML = msg;
200 errorMsg.classList.remove("give-intl-tel-input-hide");
201 };
202
203 input.addEventListener('change', resetErrorMessage);
204 input.addEventListener('keyup', resetErrorMessage);
205 input.form.addEventListener("submit", function (e) {
206 if (input.value.trim() && !intl.isValidNumber()) {
207 e.preventDefault();
208 const errorCode = intl.getValidationError();
209 const msg = errorMap[errorCode] || errorMap[0];
210 showErrorMessage(msg);
211 return false;
212 }
213 });
214 }
215 </script>
216 <?php
217
218 return ob_get_clean();
219 }
220 }
221