Files
wy/ZeedFramework/library/Com/Model/Code.php
2026-01-07 11:40:41 +08:00

164 lines
4.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* iNewS Project
*
* LICENSE
*
* http://www.inews.com.cn/license/inews
*
* @category Com
* @package Com_Model
* @subpackage Com_Model_Code
* @copyright Copyright (c) 2008 Zeed Technologies PRC Inc. (http://www.inews.com.cn)
* @author Nroe ( GTalk: gnroed@gmail.com )
* @since Apr 8, 2010
* @version SVN: $Id: User.php 5368 2010-06-22 02:33:51Z nroe $
*/
class Com_Model_Code extends Zeed_Db_Model
{
const CODE_EXPIRED = 1;
const CODE_AVAILABLE = 0;
/*
* @var string The table name.
*/
protected $_name = 'code';
/**
* @var integer Primary key.
*/
protected $_primary = 'code';
/**
* @var string Table prefix.
*/
protected $_prefix = 'os_';
/**
* 添加一个验证码
*
* @param Com_Entity_User|BigInteger $userID
* @param Com_Entity_Code|false $code
*
* @throws Zeed_Exception
*/
public function add($userID, Com_Entity_Code $code)
{
if ($userID instanceof Com_Entity_User) {
$user = $userID;
} else {
$data = array(
'userid' => $userID);
$user = Zeed_Object::instance()->Com_Entity_User()->fromArray($data);
}
$userIntID = $user->userid;
$code->userid = $userIntID;
$code->code = Zeed_Util_UUID::generate();
$code->ctime = date('Y-m-d H:i:s', time());
try {
$this->insert($code->toArray());
return $code;
}
catch (Exception $e) {
throw new Zeed_Exception($e->getMessage());
}
return false;
}
/**
* 判断验证码是否有效
*
* @param Com_Entity_Code $code
* @param boolean $returnCode 如果设置为 true 返回一个匹配的 Com_Entity_Code 对象
*
* @return boolean|Com_Entity_Code
*/
public function isValid(Com_Entity_Code $code, $returnCode = true)
{
if ($code->isEmpty()) {
return false;
}
if (empty($code->code) || $code->code instanceof Zeed_Object_Null) {
return false;
}
$db = $this->getAdapter();
$select = $db->select()->from($this->getTable())->where('code = ?', $code->code)->where('type = ?', $code->type)->limit(1);
$mailConfig = Zeed_Config::loadGroup('mail');
if ($mailConfig && $mailConfig['mail_code_lifetime'] > 0) {
$select->where('ctime >= ?', date('Y-m-d H:i:s', time() - intval($mailConfig['mail_code_lifetime'])));
}
if (! $code->userid instanceof Zeed_Object_Null) {
$select->where('userid = ?', $code->userid);
}
if (! $code->email instanceof Zeed_Object_Null) {
$select->where('email = ?', $code->email);
}
$result = $db->fetchRow($select);
if ($result) {
if ($returnCode) {
$code->fromArray($result);
return $code;
} else {
return true;
}
}
return false;
}
/**
* 删除一个验证码
*
* @param Com_Entity_Code $code
* @param BigInteger $userID 如果设置则检测用户 userid
* @param string $email 如果设置则检测邮箱地址
*/
public function deleteCode(Com_Entity_Code $code)
{
if ($code->isEmpty()) {
return true;
}
$deleteWhere = array(
'type = ?' => $code->type);
if (! empty($code->code) && ! $code->code instanceof Zeed_Object_Null) {
$deleteWhere['code = ?'] = $code->code;
}
if (! $code->userid instanceof Zeed_Object_Null) {
$deleteWhere['userid = ?'] = $code->userid;
}
if (! $code->email instanceof Zeed_Object_Null) {
$deleteWhere['email = ?'] = $code->email;
}
return $this->getAdapter()->delete($this->getTable(), $deleteWhere);
}
/**
* @return Com_Model_Code
*/
public static function instance()
{
return parent::_instance(__CLASS__);
}
}
// End ^ LF ^ encoding