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