Resource::urlExists()   B
last analyzed

Complexity

Conditions 9
Paths 18

Size

Total Lines 28
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 9
eloc 16
nc 18
nop 3
dl 0
loc 28
rs 8.0555
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * Quantum PHP Framework
5
 *
6
 * An open source software development framework for PHP
7
 *
8
 * @package Quantum
9
 * @author Arman Ag. <[email protected]>
10
 * @copyright Copyright (c) 2018 Softberg LLC (https://softberg.org)
11
 * @link http://quantum.softberg.org/
12
 * @since 2.4.0
13
 */
14
15
namespace Quantum\Libraries\Validation\Rules;
16
17
/**
18
 * Trait Resource
19
 * @package Quantum\Libraries\Validation\Rules
20
 */
21
trait Resource
22
{
23
24
    /**
25
     * Adds validation Error
26
     * @param string $field
27
     * @param string $rule
28
     * @param mixed|null $param
29
     */
30
    abstract protected function addError(string $field, string $rule, $param = null);
31
32
    /**
33
     * Checks for valid URL or subdomain
34
     * @param string $field
35
     * @param string $value
36
     * @param null|mixed $param
37
     */
38
    protected function url(string $field, string $value, $param = null)
39
    {
40
        if (!empty($value)) {
41
            if (filter_var($value, FILTER_VALIDATE_URL) === false) {
42
                $this->addError($field, 'url', $param);
43
            }
44
        }
45
    }
46
47
    /**
48
     * Checks to see if the url exists
49
     * @param string $field
50
     * @param string $value
51
     * @param null|mixed $param
52
     */
53
    protected function urlExists(string $field, string $value, $param = null)
54
    {
55
        if (!empty($value)) {
56
57
            $error = false;
58
59
            if (filter_var($value, FILTER_VALIDATE_URL) !== false) {
60
                $url = parse_url(strtolower($value));
61
62
                if (isset($url['host'])) {
63
                    $url = $url['host'];
64
                }
65
66
                if (function_exists('checkdnsrr') && function_exists('idn_to_ascii')) {
67
                    if (checkdnsrr(idn_to_ascii($url, 0, INTL_IDNA_VARIANT_UTS46), 'A') === false) {
68
                        $error = true;
69
                    }
70
                } else {
71
                    if (gethostbyname($url) == $url) {
72
                        $error = true;
73
                    }
74
                }
75
76
                if ($error) {
77
                    $this->addError($field, 'urlExists', $param);
78
                }
79
            } else {
80
                $this->addError($field, 'url', $param);
81
            }
82
        }
83
    }
84
85
    /**
86
     * Checks for valid IP address
87
     * @param string $field
88
     * @param string $value
89
     * @param null|mixed $param
90
     */
91
    protected function ip(string $field, string $value, $param = null)
92
    {
93
        if (!empty($value)) {
94
            if (filter_var($value, FILTER_VALIDATE_IP) === false) {
95
                $this->addError($field, 'ip', $param);
96
            }
97
        }
98
    }
99
100
    /**
101
     * Checks for valid IPv4 address
102
     * @param string $field
103
     * @param string $value
104
     * @param null|mixed $param
105
     */
106
    protected function ipv4(string $field, string $value, $param = null)
107
    {
108
        if (!empty($value)) {
109
            if (filter_var($value, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === false) {
110
                $this->addError($field, 'ipv4', $param);
111
            }
112
        }
113
    }
114
115
    /**
116
     * Check sfor valid IPv6 address
117
     * @param string $field
118
     * @param string $value
119
     * @param null|mixed $param
120
     */
121
    protected function ipv6(string $field, string $value, $param = null)
122
    {
123
        if (!empty($value)) {
124
            if (filter_var($value, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) {
125
                $this->addError($field, 'ipv6', $param);
126
            }
127
        }
128
    }
129
130
}