Make unsetting the email pattern work as expected.

When set to `null`, only `filter_var()` should be used. This is a
partial backport of #5111
This commit is contained in:
ndm2 2014-11-09 16:33:57 +01:00
parent c151ea585d
commit f0b6657113
2 changed files with 27 additions and 5 deletions

View file

@ -553,7 +553,9 @@ class CakeEmail {
/** /**
* EmailPattern setter/getter * EmailPattern setter/getter
* *
* @param string $regex for email address validation * @param string|bool|null $regex The pattern to use for email address validation,
* null to unset the pattern and make use of filter_var() instead, false or
* nothing to return the current value
* @return string|$this * @return string|$this
*/ */
public function emailPattern($regex = false) { public function emailPattern($regex = false) {
@ -602,10 +604,11 @@ class CakeEmail {
* @throws SocketException If email address does not validate * @throws SocketException If email address does not validate
*/ */
protected function _validateEmail($email) { protected function _validateEmail($email) {
if ($this->_emailPattern === null && filter_var($email, FILTER_VALIDATE_EMAIL)) { if ($this->_emailPattern === null) {
return; if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
} return;
if (preg_match($this->_emailPattern, $email)) { }
} elseif (preg_match($this->_emailPattern, $email)) {
return; return;
} }
throw new SocketException(__d('cake_dev', 'Invalid email: "%s"', $email)); throw new SocketException(__d('cake_dev', 'Invalid email: "%s"', $email));

View file

@ -386,6 +386,25 @@ class CakeEmailTest extends CakeTestCase {
), $this->CakeEmail->to()); ), $this->CakeEmail->to());
} }
/**
* Tests that it is possible to unset the email pattern and make use of filter_var() instead.
*
* @return void
*
* @expectedException SocketException
* @expectedExceptionMessage Invalid email: "fail.@example.com"
*/
public function testUnsetEmailPattern() {
$email = new CakeEmail();
$this->assertSame(CakeEmail::EMAIL_PATTERN, $email->emailPattern());
$email->emailPattern(null);
$this->assertNull($email->emailPattern());
$email->to('pass@example.com');
$email->to('fail.@example.com');
}
/** /**
* testFormatAddress method * testFormatAddress method
* *