File indexing completed on 2024-05-12 06:02:11

0001 <?php
0002 
0003 /**
0004  *  ocs-webserver
0005  *
0006  *  Copyright 2016 by pling GmbH.
0007  *
0008  *    This file is part of ocs-webserver.
0009  *
0010  *    This program is free software: you can redistribute it and/or modify
0011  *    it under the terms of the GNU Affero General Public License as
0012  *    published by the Free Software Foundation, either version 3 of the
0013  *    License, or (at your option) any later version.
0014  *
0015  *    This program is distributed in the hope that it will be useful,
0016  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
0017  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0018  *    GNU Affero General Public License for more details.
0019  *
0020  *    You should have received a copy of the GNU Affero General Public License
0021  *    along with this program.  If not, see <http://www.gnu.org/licenses/>.
0022  **/
0023 class Local_Validate_EmailUnique extends Zend_Validate_Abstract
0024 {
0025     const NOT_UNIQUE = 'mail_not_unique';
0026 
0027     protected $_messageTemplates = array(
0028         self::NOT_UNIQUE => 'mail address already exists.'
0029     );
0030 
0031     public function isValid($value, $context = null)
0032     {
0033         $value = (string)$value;
0034         $this->_setValue($value);
0035 
0036         return $this->isEmailUnique($value, $context);
0037     }
0038 
0039     /**
0040      * @param $mail
0041      *
0042      * @return bool
0043      * @throws Zend_Db_Statement_Exception
0044      */
0045     private function isEmailUnique($mail, $context)
0046     {
0047         $sql = "
0048         SELECT `mail`, COUNT(*) AS `amount`
0049         FROM `member` AS `m`
0050         WHERE `m`.`is_active` = 1 AND `m`.`is_deleted` = 0 
0051         AND lower(`mail`) = lower(:mail)
0052         GROUP BY lower(`mail`)
0053         HAVING COUNT(*) > 1
0054         ";
0055 
0056         $result = Zend_Db_Table::getDefaultAdapter()->query($sql, array('mail' => $mail))->fetch();
0057 
0058         if ((false === empty($result)) AND $result['amount'] > 1) {
0059             $this->_error(self::NOT_UNIQUE);
0060 
0061             return false;
0062         }
0063 
0064         return true;
0065     }
0066 
0067 }