* @version 0.0.0 * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Core Developer Team * @license GNU GPL 3.0 or any newer version * @link http://www.shipsimu.org * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ class EmailValidatorFilter extends BaseFilter implements Filterable { /** * Protected constructor * * @return void */ protected function __construct () { // Call parent constructor parent::__construct(__CLASS__); } /** * Creates an instance of this filter class * * @return $filterInstance An instance of this filter class */ public static final function createEmailValidatorFilter () { // Get a new instance $filterInstance = new EmailValidatorFilter(); // Return the instance return $filterInstance; } /** * Executes the filter with given request and response objects * * @param $requestInstance An instance of a class with an Requestable interface * @param $responseInstance An instance of a class with an Responseable interface * @return void * @throws FilterChainException If this filter fails to operate */ public function execute (Requestable $requestInstance, Responseable $responseInstance) { // Get Email from request $email = $requestInstance->getRequestElement('email'); // Is the Email set? if ((is_null($email)) || ($this->getConfigInstance()->getConfigEntry('register_email_unique') == 'Y')) { // Try it again $email1 = $requestInstance->getRequestElement('email1'); $email2 = $requestInstance->getRequestElement('email2'); // Is the email still not set? if ((is_null($email1)) || (is_null($email2))) { // Not found in form so stop the filtering process $requestInstance->requestIsValid(FALSE); // Add a message to the response $responseInstance->addFatalMessage('email_unset'); // Abort here throw new FilterChainException($this, self::EXCEPTION_FILTER_CHAIN_INTERCEPTED); } elseif ((empty($email1)) || (empty($email2))) { // Email is empty $requestInstance->requestIsValid(FALSE); // Is the email empty? if (empty($email1)) { // Add a message to the response $responseInstance->addFatalMessage('email1_empty'); } // END - if // Is the confirmation empty? if (empty($email2)) { // Add a message to the response $responseInstance->addFatalMessage('email2_empty'); } // END - if // Abort here throw new FilterChainException($this, self::EXCEPTION_FILTER_CHAIN_INTERCEPTED); } elseif ($this->ifEmailIsTaken($email1)) { // Email is already taken $requestInstance->requestIsValid(FALSE); // Add a message to the response $responseInstance->addFatalMessage('email_taken'); // Abort here throw new FilterChainException($this, self::EXCEPTION_FILTER_CHAIN_INTERCEPTED); } elseif ($email1 != $email2) { // Emails didn't match $requestInstance->requestIsValid(FALSE); // Add a message to the response $responseInstance->addFatalMessage('emails_mismatch'); // Abort here throw new FilterChainException($this, self::EXCEPTION_FILTER_CHAIN_INTERCEPTED); } // END - elseif } elseif (empty($email)) { // Empty field! $requestInstance->requestIsValid(FALSE); // Add a message to the response $responseInstance->addFatalMessage('email_empty'); // Abort here throw new FilterChainException($this, self::EXCEPTION_FILTER_CHAIN_INTERCEPTED); } // END - elseif } /** * Check whether the email as already been taken * * @param $email Email to check for existence * @return $alreadyTaken Whether the email has been taken */ private function ifEmailIsTaken ($email) { // Default is already taken $alreadyTaken = TRUE; // Initialize instance $userInstance = NULL; // Get a registry instance $registry = Registry::getRegistry(); // Is the user already there? if ($registry->instanceExists('user')) { // Use the instance for checking for the email $userInstance = $registry->getInstance('user'); $userInstance->setEmailAddress($email); } else { // If this instance is created then the username *does* exist $userInstance = call_user_func_array(array($this->getConfigInstance()->getConfigEntry('user_class'), 'createMemberByEmail'), array($email)); // Remember this user instance in our registry for later usage $registry->addInstance('user', $userInstance); } // Does the email exist? if ($userInstance->ifEmailAddressExists() === FALSE) { // This email has not being used yet $alreadyTaken = FALSE; } // Return the result return $alreadyTaken; } } // [EOF] ?>