PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.2
GiveWP – Donation Plugin and Fundraising Platform v4.16.2
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 / DonationForms / Rules / CurrencyRule.php
give / src / DonationForms / Rules Last commit date
ArrayRule.php 2 years ago AuthenticationRule.php 2 years ago BillingAddressCityRule.php 2 years ago BillingAddressStateRule.php 2 years ago BillingAddressZipRule.php 2 years ago CurrencyRule.php 9 months ago DonationTypeRule.php 2 years ago GatewayRule.php 2 years ago HoneyPotRule.php 1 year ago Max.php 2 years ago Min.php 2 years ago PhoneIntlInputRule.php 2 years ago Size.php 2 years ago SubscriptionFrequencyRule.php 2 years ago SubscriptionInstallmentsRule.php 2 years ago SubscriptionPeriodRule.php 2 years ago
CurrencyRule.php
77 lines
1 <?php
2
3 namespace Give\DonationForms\Rules;
4
5 use Closure;
6 use Give\Framework\Support\Currencies\GiveCurrencies;
7 use Give\Vendors\StellarWP\Validation\Contracts\ValidationRule;
8 use Money\Currency;
9
10 /**
11 * Custom currency validation rule that uses GiveWP's currency list and filter.
12 * Replaces the generic stellar validation library currency rule to ensure consistency
13 * with GiveWP's configured currencies and filters.
14 *
15 * @since 4.10.0
16 */
17 class CurrencyRule implements ValidationRule
18 {
19 /**
20 * @since 4.10.0
21 */
22 public static function id(): string
23 {
24 return 'giveCurrency';
25 }
26
27 /**
28 * @since 4.10.0
29 */
30 public static function fromString(string $options = null): ValidationRule
31 {
32 return new self();
33 }
34
35 /**
36 * Validates that the currency code is in GiveWP's supported currency list.
37 * Uses give_get_currencies_list() to get the current supported currencies
38 * and provides clear error messages with valid currency options.
39 *
40 * @since 4.10.0
41 */
42 public function __invoke($value, Closure $fail, string $key, array $values)
43 {
44 // Check format first for better error messaging
45 if (!$this->isValidFormat($value)) {
46 $fail(
47 sprintf(
48 __('%s must be a valid 3-letter currency code in uppercase format (example: USD)', 'give'),
49 '{field}'
50 )
51 );
52 } elseif (!give(GiveCurrencies::class)->contains(new Currency($value))) {
53 $fail(
54 sprintf(
55 __('%s must be a valid currency. Provided: %s', 'give'),
56 '{field}',
57 $value
58 )
59 );
60 }
61 }
62
63 /**
64 * Checks if a currency code is in the correct ISO 4217 format.
65 * Valid format: exactly 3 uppercase alphabetic characters (not empty).
66 *
67 * @since 4.10.0
68 *
69 * @param mixed $value The currency code to validate
70 * @return bool True if the format is valid, false otherwise
71 */
72 private function isValidFormat($value): bool
73 {
74 return is_string($value) && !empty($value) && strlen($value) === 3 && ctype_alpha($value) && $value === strtoupper($value);
75 }
76 }
77