Completed
Push — master ( 0d2867...0c4b8c )
by Propa
02:09
created
src/PhoneValidator.php 2 patches
Indentation   +207 added lines, -207 removed lines patch added patch discarded remove patch
@@ -9,212 +9,212 @@
 block discarded – undo
9 9
 class PhoneValidator
10 10
 {
11 11
 
12
-    /**
13
-     * @var \libphonenumber\PhoneNumberUtil
14
-     */
15
-    protected $lib;
16
-
17
-    /**
18
-     * Whether the country should be auto-detected.
19
-     *
20
-     * @var bool
21
-     */
22
-    protected $autodetect = false;
23
-
24
-    /**
25
-     * Countries to validate against.
26
-     *
27
-     * @var array
28
-     */
29
-    protected $countries = [];
30
-
31
-    /**
32
-     * Transformed phone number types to validate against.
33
-     *
34
-     * @var array
35
-     */
36
-    protected $types = [];
37
-
38
-    /**
39
-     * PhoneValidator constructor.
40
-     */
41
-    public function __construct()
42
-    {
43
-        $this->lib = PhoneNumberUtil::getInstance();
44
-    }
45
-
46
-    /**
47
-     * Validates a phone number.
48
-     *
49
-     * @param  string $attribute
50
-     * @param  mixed  $value
51
-     * @param  array  $parameters
52
-     * @param  object $validator
53
-     * @return bool
54
-     * @throws \Propaganistas\LaravelPhone\Exceptions\InvalidParameterException
55
-     * @throws \Propaganistas\LaravelPhone\Exceptions\NoValidCountryFoundException
56
-     */
57
-    public function validatePhone($attribute, $value, array $parameters, $validator)
58
-    {
59
-        $this->assignParameters(array_map('strtoupper', $parameters));
60
-
61
-        $this->checkCountries($attribute, $validator);
62
-
63
-        // If autodetecting, let's first try without a country.
64
-        // Otherwise use provided countries as default.
65
-        if ($this->autodetect) {
66
-            array_unshift($this->countries, null);
67
-        }
68
-
69
-        foreach ($this->countries as $country) {
70
-            if ($this->isValidNumber($value, $country)) {
71
-                return true;
72
-            }
73
-        }
74
-
75
-        // All specified country validations have failed.
76
-        return false;
77
-    }
78
-
79
-    /**
80
-     * Checks the detected countries. Overrides countries if a country field is present.
81
-     * When using a country field, we should validate to false if country is empty so no exception
82
-     * will be thrown.
83
-     *
84
-     * @param $attribute
85
-     * @param $validator
86
-     * @throws \Propaganistas\LaravelPhone\Exceptions\NoValidCountryFoundException
87
-     */
88
-    protected function checkCountries($attribute, $validator)
89
-    {
90
-        $data = $validator->getData();
91
-        $countryField = $attribute . '_country';
92
-
93
-        if (isset($data[$countryField])) {
94
-            $this->countries = array($data[$countryField]);
95
-        } elseif (!$this->autodetect && empty($this->countries)) {
96
-            throw new NoValidCountryFoundException;
97
-        }
98
-    }
99
-
100
-    /**
101
-     * Performs the actual validation of the phone number.
102
-     *
103
-     * @param mixed $number
104
-     * @param null  $country
105
-     * @return bool
106
-     */
107
-    protected function isValidNumber($number, $country = null)
108
-    {
109
-        try {
110
-            // Throws NumberParseException if not parsed correctly against the supplied country.
111
-            // If no country was given, tries to discover the country code from the number itself.
112
-            $phoneNumber = $this->lib->parse($number, $country);
113
-
114
-            // For automatic detection, the number should have a country code.
115
-            // Check if type is allowed.
116
-            if ($phoneNumber->hasCountryCode() && (empty($this->types) || in_array($this->lib->getNumberType($phoneNumber), $this->types))) {
117
-
118
-                // Automatic detection:
119
-                if ($this->autodetect) {
120
-                    // Validate if the international phone number is valid for its contained country.
121
-                    return $this->lib->isValidNumber($phoneNumber);
122
-                }
123
-
124
-                // Validate number against the specified country.
125
-                return $this->lib->isValidNumberForRegion($phoneNumber, $country);
126
-            }
127
-
128
-        } catch (NumberParseException $e) {
129
-            // Proceed to default validation error.
130
-        }
131
-
132
-        return false;
133
-    }
134
-
135
-    /**
136
-     * Parses the supplied validator parameters.
137
-     *
138
-     * @param array $parameters
139
-     * @throws \Propaganistas\LaravelPhone\Exceptions\InvalidParameterException
140
-     */
141
-    protected function assignParameters(array $parameters)
142
-    {
143
-        $types = array();
144
-
145
-        foreach ($parameters as $parameter) {
146
-            if ($this->isPhoneCountry($parameter)) {
147
-                $this->countries[] = $parameter;
148
-            } elseif ($this->isPhoneType($parameter)) {
149
-                $types[] = $parameter;
150
-            } elseif ($parameter == 'AUTO') {
151
-                $this->autodetect = true;
152
-            } else {
153
-                // Force developers to write proper code.
154
-                throw new InvalidParameterException($parameter);
155
-            }
156
-        }
157
-
158
-        $this->types = $this->parseTypes($types);
159
-
160
-    }
161
-
162
-    /**
163
-     * Parses the supplied phone number types.
164
-     *
165
-     * @param array $types
166
-     * @return array
167
-     */
168
-    protected function parseTypes(array $types)
169
-    {
170
-        // Transform types to their namespaced class constant.
171
-        array_walk($types, function (&$type) {
172
-            $type = constant($this->constructPhoneTypeConstant($type));
173
-        });
174
-
175
-        // Add in the unsure number type if applicable.
176
-        if (array_intersect(['FIXED_LINE', 'MOBILE'], $types)) {
177
-            $types[] = PhoneNumberType::FIXED_LINE_OR_MOBILE;
178
-        }
179
-
180
-        return $types;
181
-    }
182
-
183
-    /**
184
-     * Checks if the supplied string is a valid country code using some arbitrary country validation.
185
-     * If using a package based on umpirsky/country-list, invalidate the option 'ZZ => Unknown or invalid region'.
186
-     *
187
-     * @param  string $country
188
-     * @return bool
189
-     */
190
-    public function isPhoneCountry($country)
191
-    {
192
-        return (strlen($country) === 2 && ctype_alpha($country) && ctype_upper($country) && $country != 'ZZ');
193
-    }
194
-
195
-    /**
196
-     * Checks if the supplied string is a valid phone number type.
197
-     *
198
-     * @param  string $type
199
-     * @return bool
200
-     */
201
-    public function isPhoneType($type)
202
-    {
203
-        // Legacy support.
204
-        $type = ($type == 'LANDLINE' ? 'FIXED_LINE' : $type);
205
-
206
-        return defined($this->constructPhoneTypeConstant($type));
207
-    }
208
-
209
-    /**
210
-     * Constructs the corresponding namespaced class constant for a phone number type.
211
-     *
212
-     * @param  string $type
213
-     * @return string
214
-     */
215
-    protected function constructPhoneTypeConstant($type)
216
-    {
217
-        return '\libphonenumber\PhoneNumberType::' . $type;
218
-    }
12
+	/**
13
+	 * @var \libphonenumber\PhoneNumberUtil
14
+	 */
15
+	protected $lib;
16
+
17
+	/**
18
+	 * Whether the country should be auto-detected.
19
+	 *
20
+	 * @var bool
21
+	 */
22
+	protected $autodetect = false;
23
+
24
+	/**
25
+	 * Countries to validate against.
26
+	 *
27
+	 * @var array
28
+	 */
29
+	protected $countries = [];
30
+
31
+	/**
32
+	 * Transformed phone number types to validate against.
33
+	 *
34
+	 * @var array
35
+	 */
36
+	protected $types = [];
37
+
38
+	/**
39
+	 * PhoneValidator constructor.
40
+	 */
41
+	public function __construct()
42
+	{
43
+		$this->lib = PhoneNumberUtil::getInstance();
44
+	}
45
+
46
+	/**
47
+	 * Validates a phone number.
48
+	 *
49
+	 * @param  string $attribute
50
+	 * @param  mixed  $value
51
+	 * @param  array  $parameters
52
+	 * @param  object $validator
53
+	 * @return bool
54
+	 * @throws \Propaganistas\LaravelPhone\Exceptions\InvalidParameterException
55
+	 * @throws \Propaganistas\LaravelPhone\Exceptions\NoValidCountryFoundException
56
+	 */
57
+	public function validatePhone($attribute, $value, array $parameters, $validator)
58
+	{
59
+		$this->assignParameters(array_map('strtoupper', $parameters));
60
+
61
+		$this->checkCountries($attribute, $validator);
62
+
63
+		// If autodetecting, let's first try without a country.
64
+		// Otherwise use provided countries as default.
65
+		if ($this->autodetect) {
66
+			array_unshift($this->countries, null);
67
+		}
68
+
69
+		foreach ($this->countries as $country) {
70
+			if ($this->isValidNumber($value, $country)) {
71
+				return true;
72
+			}
73
+		}
74
+
75
+		// All specified country validations have failed.
76
+		return false;
77
+	}
78
+
79
+	/**
80
+	 * Checks the detected countries. Overrides countries if a country field is present.
81
+	 * When using a country field, we should validate to false if country is empty so no exception
82
+	 * will be thrown.
83
+	 *
84
+	 * @param $attribute
85
+	 * @param $validator
86
+	 * @throws \Propaganistas\LaravelPhone\Exceptions\NoValidCountryFoundException
87
+	 */
88
+	protected function checkCountries($attribute, $validator)
89
+	{
90
+		$data = $validator->getData();
91
+		$countryField = $attribute . '_country';
92
+
93
+		if (isset($data[$countryField])) {
94
+			$this->countries = array($data[$countryField]);
95
+		} elseif (!$this->autodetect && empty($this->countries)) {
96
+			throw new NoValidCountryFoundException;
97
+		}
98
+	}
99
+
100
+	/**
101
+	 * Performs the actual validation of the phone number.
102
+	 *
103
+	 * @param mixed $number
104
+	 * @param null  $country
105
+	 * @return bool
106
+	 */
107
+	protected function isValidNumber($number, $country = null)
108
+	{
109
+		try {
110
+			// Throws NumberParseException if not parsed correctly against the supplied country.
111
+			// If no country was given, tries to discover the country code from the number itself.
112
+			$phoneNumber = $this->lib->parse($number, $country);
113
+
114
+			// For automatic detection, the number should have a country code.
115
+			// Check if type is allowed.
116
+			if ($phoneNumber->hasCountryCode() && (empty($this->types) || in_array($this->lib->getNumberType($phoneNumber), $this->types))) {
117
+
118
+				// Automatic detection:
119
+				if ($this->autodetect) {
120
+					// Validate if the international phone number is valid for its contained country.
121
+					return $this->lib->isValidNumber($phoneNumber);
122
+				}
123
+
124
+				// Validate number against the specified country.
125
+				return $this->lib->isValidNumberForRegion($phoneNumber, $country);
126
+			}
127
+
128
+		} catch (NumberParseException $e) {
129
+			// Proceed to default validation error.
130
+		}
131
+
132
+		return false;
133
+	}
134
+
135
+	/**
136
+	 * Parses the supplied validator parameters.
137
+	 *
138
+	 * @param array $parameters
139
+	 * @throws \Propaganistas\LaravelPhone\Exceptions\InvalidParameterException
140
+	 */
141
+	protected function assignParameters(array $parameters)
142
+	{
143
+		$types = array();
144
+
145
+		foreach ($parameters as $parameter) {
146
+			if ($this->isPhoneCountry($parameter)) {
147
+				$this->countries[] = $parameter;
148
+			} elseif ($this->isPhoneType($parameter)) {
149
+				$types[] = $parameter;
150
+			} elseif ($parameter == 'AUTO') {
151
+				$this->autodetect = true;
152
+			} else {
153
+				// Force developers to write proper code.
154
+				throw new InvalidParameterException($parameter);
155
+			}
156
+		}
157
+
158
+		$this->types = $this->parseTypes($types);
159
+
160
+	}
161
+
162
+	/**
163
+	 * Parses the supplied phone number types.
164
+	 *
165
+	 * @param array $types
166
+	 * @return array
167
+	 */
168
+	protected function parseTypes(array $types)
169
+	{
170
+		// Transform types to their namespaced class constant.
171
+		array_walk($types, function (&$type) {
172
+			$type = constant($this->constructPhoneTypeConstant($type));
173
+		});
174
+
175
+		// Add in the unsure number type if applicable.
176
+		if (array_intersect(['FIXED_LINE', 'MOBILE'], $types)) {
177
+			$types[] = PhoneNumberType::FIXED_LINE_OR_MOBILE;
178
+		}
179
+
180
+		return $types;
181
+	}
182
+
183
+	/**
184
+	 * Checks if the supplied string is a valid country code using some arbitrary country validation.
185
+	 * If using a package based on umpirsky/country-list, invalidate the option 'ZZ => Unknown or invalid region'.
186
+	 *
187
+	 * @param  string $country
188
+	 * @return bool
189
+	 */
190
+	public function isPhoneCountry($country)
191
+	{
192
+		return (strlen($country) === 2 && ctype_alpha($country) && ctype_upper($country) && $country != 'ZZ');
193
+	}
194
+
195
+	/**
196
+	 * Checks if the supplied string is a valid phone number type.
197
+	 *
198
+	 * @param  string $type
199
+	 * @return bool
200
+	 */
201
+	public function isPhoneType($type)
202
+	{
203
+		// Legacy support.
204
+		$type = ($type == 'LANDLINE' ? 'FIXED_LINE' : $type);
205
+
206
+		return defined($this->constructPhoneTypeConstant($type));
207
+	}
208
+
209
+	/**
210
+	 * Constructs the corresponding namespaced class constant for a phone number type.
211
+	 *
212
+	 * @param  string $type
213
+	 * @return string
214
+	 */
215
+	protected function constructPhoneTypeConstant($type)
216
+	{
217
+		return '\libphonenumber\PhoneNumberType::' . $type;
218
+	}
219 219
 
220 220
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -168,7 +168,7 @@
 block discarded – undo
168 168
     protected function parseTypes(array $types)
169 169
     {
170 170
         // Transform types to their namespaced class constant.
171
-        array_walk($types, function (&$type) {
171
+        array_walk($types, function(&$type) {
172 172
             $type = constant($this->constructPhoneTypeConstant($type));
173 173
         });
174 174
 
Please login to merge, or discard this patch.