BladeOne.php
2 years ago
CSV.php
9 months ago
Calculations.php
2 years ago
Currency.php
8 months ago
Device.php
1 year ago
Device_Cache.php
2 years ago
Dir.php
5 months ago
Format.php
5 months ago
Link_Validator.php
6 months ago
Number_Formatter.php
5 months ago
Obj.php
6 months ago
Request.php
11 months ago
Salt.php
1 year ago
Security.php
1 year ago
Server.php
2 years ago
Singleton.php
2 years ago
String_Util.php
2 years ago
Timezone.php
5 months ago
URL.php
6 months ago
WP_Async_Request.php
1 year ago
Link_Validator.php
88 lines
| 1 | <?php |
| 2 | |
| 3 | namespace IAWP\Utils; |
| 4 | |
| 5 | use IAWP\Click_Tracking; |
| 6 | use IAWPSCOPED\Illuminate\Support\Str; |
| 7 | use IAWPSCOPED\League\Uri\Uri; |
| 8 | /** @internal */ |
| 9 | class Link_Validator |
| 10 | { |
| 11 | public static function error_messages() |
| 12 | { |
| 13 | return ['empty-name' => \__('Name cannot be empty.', 'independent-analytics'), 'empty-value' => \__('Value cannot be empty.', 'independent-analytics'), 'invalid-type' => \__('Invalid type.', 'independent-analytics'), 'class-number' => \__('Class cannot start with a number or special character.', 'independent-analytics'), 'class-space' => \__('Class cannot contain spaces.', 'independent-analytics'), 'class-characters' => \__('Class cannot contain special characters besides "-" and "_".', 'independent-analytics'), 'id-number' => \__('ID cannot start with a number or special character.', 'independent-analytics'), 'id-space' => \__('ID cannot contain spaces.', 'independent-analytics'), 'id-characters' => \__('ID cannot contain special characters besides "-" and "_".', 'independent-analytics'), 'invalid-extension' => \__('Invalid Extension.', 'independent-analytics'), 'invalid-protocol' => \__('Invalid Protocol.', 'independent-analytics'), 'invalid-domain' => \__('Invalid domain.', 'independent-analytics'), 'invalid-subdirectory' => \__('Invalid characters in subdirectory.', 'independent-analytics')]; |
| 14 | } |
| 15 | public static function validate(string $property, string $value, string $type) |
| 16 | { |
| 17 | if ($property == 'name') { |
| 18 | if (\trim($value) == '') { |
| 19 | return 'empty-name'; |
| 20 | } |
| 21 | } elseif ($property == 'type') { |
| 22 | if (!\array_key_exists($value, Click_Tracking::types())) { |
| 23 | return 'invalid-type'; |
| 24 | } |
| 25 | } elseif ($property == 'value') { |
| 26 | if ($type === 'external') { |
| 27 | // There is no value for the external type |
| 28 | return \false; |
| 29 | } |
| 30 | if (\trim($value) == '') { |
| 31 | return 'empty-value'; |
| 32 | } |
| 33 | if ($type == 'class') { |
| 34 | if (!\preg_match('/[a-zA-Z]/', \substr($value, 0, 1))) { |
| 35 | return 'class-number'; |
| 36 | } elseif (\preg_match('/\\s/', $value)) { |
| 37 | return 'class-space'; |
| 38 | } elseif (\preg_match('/[^a-zA-Z0-9_-]/', $value)) { |
| 39 | return 'class-characters'; |
| 40 | } |
| 41 | } elseif ($type == 'id') { |
| 42 | if (!\preg_match('/[a-zA-Z]/', \substr($value, 0, 1))) { |
| 43 | return 'id-number'; |
| 44 | } elseif (\preg_match('/\\s/', $value)) { |
| 45 | return 'id-space'; |
| 46 | } elseif (\preg_match('/[^a-zA-Z0-9_-]/', $value)) { |
| 47 | return 'id-characters'; |
| 48 | } |
| 49 | } elseif ($type == 'extension') { |
| 50 | if (!\in_array($value, Click_Tracking::extensions())) { |
| 51 | return 'invalid-extension'; |
| 52 | } |
| 53 | } elseif ($type == 'protocol') { |
| 54 | if (!\in_array($value, Click_Tracking::protocols())) { |
| 55 | return 'invalid-protocol'; |
| 56 | } |
| 57 | } elseif ($type == 'domain') { |
| 58 | if (!self::is_valid_domain($value)) { |
| 59 | return 'invalid-domain'; |
| 60 | } |
| 61 | } elseif ($type == 'subdirectory') { |
| 62 | if (\preg_match("/[^A-Za-z0-9-._~!\$&'()*+,;=:@\\/]/", $value)) { |
| 63 | return 'invalid-subdirectory'; |
| 64 | } |
| 65 | } |
| 66 | } |
| 67 | return \false; |
| 68 | } |
| 69 | public static function is_valid_domain(string $domain) |
| 70 | { |
| 71 | return \preg_match('/^(http[s]?\\:\\/\\/)?((\\w+)\\.)?(([\\w-]+)+)(\\.[\\w-]+){1,2}$/', $domain); |
| 72 | } |
| 73 | public static function sanitize_domain($domain) |
| 74 | { |
| 75 | $domain = \strpos($domain, 'http') !== 0 ? "http://{$domain}" : $domain; |
| 76 | $components = Uri::createFromString($domain); |
| 77 | $host = $components->getHost(); |
| 78 | if (Str::startsWith($host, 'www.')) { |
| 79 | $host = Str::after($host, 'www.'); |
| 80 | } |
| 81 | return $host; |
| 82 | } |
| 83 | public static function sanitize_subdirectory($subdirectory) |
| 84 | { |
| 85 | return \sanitize_text_field(\trim($subdirectory, '/')); |
| 86 | } |
| 87 | } |
| 88 |