修改会员类和权限模块
This commit is contained in:
parent
8144c4412f
commit
ab9c5da415
|
@ -44,23 +44,23 @@ class AclAuthorize
|
||||||
{
|
{
|
||||||
$this->acl->deny($this->role->guest);
|
$this->acl->deny($this->role->guest);
|
||||||
|
|
||||||
$this->acl->allow($this->role->guest,'Application\Controller\Account',array('login','register','logout','forgotpassword','getpassword','captcha'));
|
$this->acl->allow($this->role->guest,'Member\Controller\Account',array('login','register','logout','forgotpassword','getpassword','captcha'));
|
||||||
$this->acl->allow($this->role->guest,'Application\Controller\Service',array('upload','thumb'));
|
$this->acl->allow($this->role->guest,'Application\Controller\Service',array('upload','thumb'));
|
||||||
|
|
||||||
$this->acl->allow($this->role->guest,'Application\Controller\Index');
|
$this->acl->allow($this->role->guest,'Application\Controller\Index');
|
||||||
$this->acl->allow($this->role->guest,'Application\Controller\Search');
|
$this->acl->allow($this->role->guest,'Application\Controller\Search');
|
||||||
$this->acl->allow($this->role->guest,'Article\Controller\Article',array('index','view'));
|
$this->acl->allow($this->role->guest,'Application\Controller\Post');
|
||||||
$this->acl->allow($this->role->guest,'Article\Controller\Category',array('index','list'));
|
|
||||||
|
|
||||||
$this->acl->allow($this->role->guest,'Metadata\Controller\Index');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function authorizestaff()
|
public function authorizestaff()
|
||||||
{
|
{
|
||||||
$this->acl->allow($this->role->staff,'Application\Controller\Index',array('index'));
|
$this->acl->allow($this->role->staff,'Application\Controller\Index',array('index'));
|
||||||
$this->acl->allow($this->role->staff,'Application\Controller\Account',array('index'));
|
|
||||||
$this->acl->allow($this->role->staff,'Application\Controller\Service',array('upload','delatt','thumb'));
|
$this->acl->allow($this->role->staff,'Application\Controller\Service',array('upload','delatt','thumb'));
|
||||||
|
|
||||||
|
$this->acl->allow($this->role->staff,'Member\Controller\Index');
|
||||||
|
$this->acl->allow($this->role->staff,'Member\Controller\Account',array('index'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function authorizeAdministrator()
|
public function authorizeAdministrator()
|
||||||
|
|
|
@ -19,16 +19,9 @@ class AclResource
|
||||||
//index
|
//index
|
||||||
'Application\Controller\Index',
|
'Application\Controller\Index',
|
||||||
'Application\Controller\Search',
|
'Application\Controller\Search',
|
||||||
|
'Application\Controller\Post' => array(
|
||||||
//account
|
'index',
|
||||||
'Application\Controller\Account' => array(
|
'create',
|
||||||
'login',
|
|
||||||
'logout',
|
|
||||||
'register',
|
|
||||||
'forgotpassword',
|
|
||||||
'getpassword',
|
|
||||||
'captcha',
|
|
||||||
'index'
|
|
||||||
),
|
),
|
||||||
|
|
||||||
//service
|
//service
|
||||||
|
@ -39,17 +32,17 @@ class AclResource
|
||||||
'bigthumb'
|
'bigthumb'
|
||||||
),
|
),
|
||||||
|
|
||||||
'Article\Controller\Article' => array(
|
'Member\Controller\Index',
|
||||||
'index',
|
//account
|
||||||
'view'
|
'Member\Controller\Account' => array(
|
||||||
|
'login',
|
||||||
|
'logout',
|
||||||
|
'register',
|
||||||
|
'forgotpassword',
|
||||||
|
'getpassword',
|
||||||
|
'captcha',
|
||||||
|
'index'
|
||||||
),
|
),
|
||||||
|
|
||||||
'Article\Controller\Category' => array(
|
|
||||||
'index',
|
|
||||||
'list'
|
|
||||||
),
|
|
||||||
|
|
||||||
'Metadata\Controller\Index',
|
|
||||||
);
|
);
|
||||||
|
|
||||||
function __construct(Acl &$acl)
|
function __construct(Acl &$acl)
|
||||||
|
|
|
@ -0,0 +1,115 @@
|
||||||
|
<?php
|
||||||
|
namespace Wbb\Vhome\Member\Account;
|
||||||
|
|
||||||
|
use Zend\EventManager\EventManagerInterface;
|
||||||
|
use Zend\EventManager\EventManager;
|
||||||
|
use Zend\EventManager\EventManagerAwareInterface;
|
||||||
|
use Zend\Authentication\AuthenticationService;
|
||||||
|
use Zend\Authentication\Storage\Session as SessionStorage;
|
||||||
|
use Sookon\Helpers\View as view;
|
||||||
|
use Sookon\Helpers\Config as GlobalConfig;
|
||||||
|
use Sookon\Helpers\PDO as Db;
|
||||||
|
use Sookon\Helpers\Db as Zend_Db;
|
||||||
|
use Sookon\User\Member;
|
||||||
|
use Wbb\Vhome\Member\Listener\MemberListener as Listener;
|
||||||
|
|
||||||
|
abstract class Account implements EventManagerAwareInterface
|
||||||
|
{
|
||||||
|
private $db;
|
||||||
|
protected $events = NULL; //事件
|
||||||
|
private $config;
|
||||||
|
private $conf;
|
||||||
|
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
$this->db = new Db();
|
||||||
|
$this->config = GlobalConfig::get();
|
||||||
|
$this->conf = Config::get();
|
||||||
|
|
||||||
|
$Listener = new Listener();
|
||||||
|
$this->getEventManager()->attachAggregate($Listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setEventManager(EventManagerInterface $events)
|
||||||
|
{
|
||||||
|
$events->setIdentifiers(array(
|
||||||
|
__CLASS__,
|
||||||
|
get_called_class(),
|
||||||
|
));
|
||||||
|
$this->events = $events;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getEventManager()
|
||||||
|
{
|
||||||
|
if (NULL === $this->events) {
|
||||||
|
$this->setEventManager(new EventManager());
|
||||||
|
}
|
||||||
|
return $this->events;
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取账号信息,数组
|
||||||
|
public function getAccountInfo($id = 0)
|
||||||
|
{
|
||||||
|
if($id == 0)
|
||||||
|
{
|
||||||
|
$id = view::User('id');
|
||||||
|
}
|
||||||
|
$sql = "SELECT * FROM {$this->conf->table->member} WHERE id=$id";
|
||||||
|
$rs = $this->db->query($sql);
|
||||||
|
return $rs->fetch();
|
||||||
|
}
|
||||||
|
|
||||||
|
//storeLogin
|
||||||
|
public function storeLogin($data,$md5 = true)
|
||||||
|
{
|
||||||
|
$auth = new AuthenticationService();
|
||||||
|
$auth->setStorage(new SessionStorage($this->config->session_namespace));
|
||||||
|
|
||||||
|
new Zend_Db($dbAdapter);
|
||||||
|
|
||||||
|
$authAdapter = new \Zend\Authentication\Adapter\DbTable(
|
||||||
|
$dbAdapter,
|
||||||
|
$this->conf->table->member,
|
||||||
|
$this->conf->field->uname,
|
||||||
|
$this->conf->field->pwd
|
||||||
|
);
|
||||||
|
|
||||||
|
if($md5 === true)
|
||||||
|
{
|
||||||
|
$password = md5($data[$this->conf->field->pwd]);
|
||||||
|
}else{
|
||||||
|
$password = $data[$this->conf->field->pwd];
|
||||||
|
}
|
||||||
|
|
||||||
|
$authAdapter
|
||||||
|
->setIdentity($data[$this->conf->field->uname])
|
||||||
|
->setCredential($password)
|
||||||
|
;
|
||||||
|
|
||||||
|
$result = $authAdapter->authenticate();
|
||||||
|
|
||||||
|
$user = $authAdapter->getResultRowObject(null,array($this->conf->field->pwd));
|
||||||
|
|
||||||
|
if(!$result->isValid())
|
||||||
|
{
|
||||||
|
return array("error"=>"用户信息验证失败");
|
||||||
|
}
|
||||||
|
|
||||||
|
$email = $user->email;
|
||||||
|
$results = $this->getEventManager()->trigger('login.success.createAvatar', $this, compact('email'));
|
||||||
|
$user->avatar = $results->last();
|
||||||
|
$auth->getStorage()->write($user);
|
||||||
|
|
||||||
|
$id = $user->id;
|
||||||
|
$results = $this->getEventManager()->trigger('login.success.updateStatus', $this, compact('id'));
|
||||||
|
|
||||||
|
return array('success'=>1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function cookieLogin($data)
|
||||||
|
{
|
||||||
|
return $this->storeLogin($data,false);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
<?php
|
||||||
|
namespace Wbb\Vhome\Member\Account;
|
||||||
|
|
||||||
|
class Config
|
||||||
|
{
|
||||||
|
public $conf;
|
||||||
|
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static function get()
|
||||||
|
{
|
||||||
|
$conf = new \stdClass();
|
||||||
|
|
||||||
|
$conf->ck = 'DT0xe28SqIcmy334asEfUf';
|
||||||
|
|
||||||
|
$conf->table = new \stdClass();
|
||||||
|
$conf->field = new \stdClass();
|
||||||
|
$conf->role = new \stdClass();
|
||||||
|
$conf->form = new \stdClass();
|
||||||
|
|
||||||
|
$conf->table->member = "users";
|
||||||
|
|
||||||
|
$conf->field->uname = "username";
|
||||||
|
$conf->field->pwd = "password";
|
||||||
|
$conf->field->email = "email";
|
||||||
|
$conf->field->lastlogin = "ts_last_login";
|
||||||
|
$conf->field->lastip = "last_login_ip";
|
||||||
|
$conf->field->gravatar = "email";
|
||||||
|
$conf->field->realname = "realname";
|
||||||
|
|
||||||
|
$conf->role->member = "member";
|
||||||
|
$conf->role->admin = "admin";
|
||||||
|
$conf->role->guest = "guest";
|
||||||
|
|
||||||
|
$conf->form->uname = "username";
|
||||||
|
$conf->form->pwd = "password";
|
||||||
|
$conf->form->c_pwd = "confirm_password";
|
||||||
|
$conf->form->email = "email";
|
||||||
|
$conf->form->realname = "realname";
|
||||||
|
|
||||||
|
return $conf;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
<?php
|
||||||
|
namespace Wbb\Vhome\Member\Account;
|
||||||
|
|
||||||
|
use Sookon\User\Member;
|
||||||
|
|
||||||
|
class Login extends Account
|
||||||
|
{
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
//登陆
|
||||||
|
public function login($data)
|
||||||
|
{
|
||||||
|
$results = $this->getEventManager()->trigger('login.checkParam', $this, compact('data'));
|
||||||
|
$cache_data = $results->last();
|
||||||
|
|
||||||
|
if($cache_data !== true)
|
||||||
|
{
|
||||||
|
if(!is_array($cache_data))
|
||||||
|
{
|
||||||
|
return array('error'=>$cache_data);
|
||||||
|
}else{
|
||||||
|
return $cache_data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$state = $this->storeLogin($data);
|
||||||
|
|
||||||
|
if(isset($state['success']))
|
||||||
|
{
|
||||||
|
$mb = new Member();
|
||||||
|
$mb->putcookie($data[$this->conf->field->uname],md5($data[$this->conf->field->pwd]));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $state;
|
||||||
|
}//login
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,91 @@
|
||||||
|
<?php
|
||||||
|
namespace Wbb\Vhome\Member\Account;
|
||||||
|
|
||||||
|
use Sookon\User\Member;
|
||||||
|
|
||||||
|
class Register extends Account
|
||||||
|
{
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
//注册
|
||||||
|
public function register($data)
|
||||||
|
{
|
||||||
|
$params = compact('data');
|
||||||
|
$results = $this->getEventManager()->trigger('register.checkParam', $this, $params);
|
||||||
|
$cache_data = $results->last();
|
||||||
|
|
||||||
|
if($cache_data !== true)
|
||||||
|
{
|
||||||
|
if(!is_array($cache_data))
|
||||||
|
{
|
||||||
|
return array('error'=>$cache_data);
|
||||||
|
}else{
|
||||||
|
return $cache_data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$results = $this->getEventManager()->trigger('register.checkUser', $this, $params);
|
||||||
|
$cache_data = $results->last();
|
||||||
|
|
||||||
|
if($cache_data !== true)
|
||||||
|
{
|
||||||
|
if(!is_array($cache_data))
|
||||||
|
{
|
||||||
|
return array('error'=>$cache_data);
|
||||||
|
}else{
|
||||||
|
return $cache_data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$loginData = array(
|
||||||
|
$this->conf->field->uname => $data['username'],
|
||||||
|
$this->conf->field->pwd => $data['password']
|
||||||
|
);
|
||||||
|
|
||||||
|
$data['password'] = md5($data['password']);
|
||||||
|
$data['usertype'] = $this->config->member->default_role;
|
||||||
|
unset($data['confirm_password']);
|
||||||
|
|
||||||
|
$dbh = new dbh();
|
||||||
|
|
||||||
|
$id = $dbh->insert($this->conf->table->member,$data,true);
|
||||||
|
|
||||||
|
if(!empty($id) && is_numeric($id))
|
||||||
|
{
|
||||||
|
$this->storeLogin($loginData);
|
||||||
|
if(isset($state['success']))
|
||||||
|
{
|
||||||
|
$mb = new Member();
|
||||||
|
$mb->putcookie($data[$this->conf->field->uname],$data[$this->FieldPasword]);
|
||||||
|
}
|
||||||
|
$params = compact('data','id');
|
||||||
|
$results = $this->getEventManager()->trigger('register.success', $this, $params);
|
||||||
|
return array("success" => 1);
|
||||||
|
}else{
|
||||||
|
if($id === false)
|
||||||
|
{
|
||||||
|
return array('error'=>'服务器开小差了,请稍后再试');
|
||||||
|
}else{
|
||||||
|
return array('error'=>'服务器处理中遇到错误,请联系管理员');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}//register
|
||||||
|
|
||||||
|
//注册信息参数
|
||||||
|
public function getParam(\Zend_Controller_Request_Abstract $request)
|
||||||
|
{
|
||||||
|
$data = array(
|
||||||
|
$this->conf->field->uname => $request->getParam('username'),
|
||||||
|
$this->conf->field->pwd => $request->getParam('password'),
|
||||||
|
$this->conf->form->c_pwd => $request->getParam('confirm_password'),
|
||||||
|
$this->conf->form->email => $request->getParam('email'),
|
||||||
|
$this->conf->form->realname =>$request->getParam('realname')
|
||||||
|
);
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?php
|
||||||
|
namespace Wbb\Vhome\Member\Event;
|
||||||
|
|
||||||
|
use Zend\EventManager\EventInterface;
|
||||||
|
|
||||||
|
interface LoginEvent
|
||||||
|
{
|
||||||
|
public function checkParam(EventInterface $e);
|
||||||
|
|
||||||
|
public function updateStatus(EventInterface $e);
|
||||||
|
|
||||||
|
public function createAvatar(EventInterface $e);
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?php
|
||||||
|
namespace Wbb\Vhome\Member\Event;
|
||||||
|
|
||||||
|
use Zend\EventManager\EventInterface;
|
||||||
|
|
||||||
|
interface MemberEvent
|
||||||
|
{
|
||||||
|
public function checkParam(EventInterface $e);
|
||||||
|
public function processData(EventInterface $e);
|
||||||
|
public function recordPosted(EventInterface $e);
|
||||||
|
public function recordChanged(EventInterface $e);
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?php
|
||||||
|
namespace Wbb\Vhome\Member\Event;
|
||||||
|
|
||||||
|
use Zend\EventManager\EventInterface;
|
||||||
|
|
||||||
|
interface RegisterEvent
|
||||||
|
{
|
||||||
|
public function checkParam(EventInterface $e);
|
||||||
|
|
||||||
|
public function checkUser(EventInterface $e);
|
||||||
|
|
||||||
|
public function registerSuccess(EventInterface $e);
|
||||||
|
}
|
|
@ -0,0 +1,102 @@
|
||||||
|
<?php
|
||||||
|
namespace Wbb\Vhome\Member\Handle;
|
||||||
|
|
||||||
|
use Sookon\Helpers\Dbh as dbh;
|
||||||
|
use Sookon\Helpers\PDO as Db;
|
||||||
|
use Sookon\User\Gravatar;
|
||||||
|
use Sookon\Helpers\View as view;
|
||||||
|
use Zend\EventManager\EventInterface;
|
||||||
|
use Wbb\Vhome\Member\Account\Config;
|
||||||
|
|
||||||
|
class LoginHandle implements \Wbb\Vhome\Member\Event\LoginEvent
|
||||||
|
{
|
||||||
|
private $db; //传入PDO对象
|
||||||
|
private $config; //全局配置
|
||||||
|
private $conf;
|
||||||
|
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
$this->db = new Db();
|
||||||
|
$this->conf = Config::get();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function checkParam(EventInterface $e){
|
||||||
|
|
||||||
|
$data = $e->getParam('data');
|
||||||
|
|
||||||
|
if(!is_array($data))
|
||||||
|
{
|
||||||
|
return "参数错误";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(empty($data[$this->conf->field->uname]))
|
||||||
|
{
|
||||||
|
return array('error'=>"请输入用户名",'place'=>'username');
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!empty($data[$this->conf->field->uname]))
|
||||||
|
{
|
||||||
|
if(!preg_match("/^[a-zA-Z][a-zA-Z0-9_]{2,15}$/",$data[$this->conf->field->uname]))
|
||||||
|
{
|
||||||
|
return array('error'=>"用户名应当以字母开头,由字母数字和下划线组成,并且长度在2到25个字符之间",'place'=>'username');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(empty($data[$this->conf->field->pwd]))
|
||||||
|
{
|
||||||
|
return array('error'=>"请输入密码",'place'=>'password');
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = "SELECT id,{$this->conf->field->pwd} FROM {$this->conf->table->member} WHERE {$this->conf->field->uname}=?";
|
||||||
|
$sth = $this->db->prepare($sql);
|
||||||
|
$rs = $sth->execute(array($data[$this->conf->field->uname]));
|
||||||
|
$row = $sth->fetch();
|
||||||
|
|
||||||
|
if(isset($row['id']) && !empty($row['id']))
|
||||||
|
{
|
||||||
|
if(strlen($row[$this->conf->field->pwd]) !== 32)
|
||||||
|
{
|
||||||
|
return array('error'=>"您的密码或因安全猿因或其他问题已经被重置,请先<a href='/account/forgotpassword'>重置密码</a>再登陆",'place'=>'password');
|
||||||
|
}
|
||||||
|
if($row[$this->conf->field->pwd] !== md5($data[$this->conf->field->pwd]))
|
||||||
|
{
|
||||||
|
return array('error'=>"密码错误",'place'=>'password');
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}else{
|
||||||
|
return array('error'=>"用户不存在",'place'=>'username');
|
||||||
|
}
|
||||||
|
|
||||||
|
}//checkParam
|
||||||
|
|
||||||
|
public function updateStatus(EventInterface $e){
|
||||||
|
|
||||||
|
$id = (int)$e->getParam('id');
|
||||||
|
|
||||||
|
if(!is_numeric($id))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$update = array(
|
||||||
|
$this->conf->field->lastlogin => date("Y-m-d H:i:s"),
|
||||||
|
//$this->FieldLastloginIp => $_SERVER["REMOTE_ADDR"]
|
||||||
|
);
|
||||||
|
|
||||||
|
$dbh = new dbh();
|
||||||
|
@$statusUpdate = $dbh->update($this->conf->table->member,$update," id=$id ");
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}//loginSuccess
|
||||||
|
|
||||||
|
public function createAvatar(EventInterface $e){
|
||||||
|
|
||||||
|
$email = $e->getParam('email');
|
||||||
|
$avatar = new Gravatar();
|
||||||
|
return $avatar->Get($email);
|
||||||
|
|
||||||
|
}//loginSuccess
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,76 @@
|
||||||
|
<?php
|
||||||
|
namespace Wbb\Vhome\Member\Handle;
|
||||||
|
|
||||||
|
use Sookon\Helpers\PDO as Pdo;
|
||||||
|
use Sookon\Helpers\Config;
|
||||||
|
use Sookon\Helpers\View as view;
|
||||||
|
use Sookon\Mail\Mail;
|
||||||
|
use Sookon\Search\Search;
|
||||||
|
use Zend\EventManager\EventInterface;
|
||||||
|
use Wbb\Vhome\Member\Event\MemberEvent as Event;
|
||||||
|
|
||||||
|
class MemberHandle implements Event
|
||||||
|
{
|
||||||
|
private $db;
|
||||||
|
private $config;
|
||||||
|
|
||||||
|
function __construct($db = NULL)
|
||||||
|
{
|
||||||
|
$this->db = new Pdo();
|
||||||
|
|
||||||
|
$this->config = Config::get();
|
||||||
|
}
|
||||||
|
|
||||||
|
//检查字段
|
||||||
|
public function checkParam(EventInterface $e){
|
||||||
|
|
||||||
|
$data = $e->getParam('data');
|
||||||
|
|
||||||
|
if(!is_array($data))
|
||||||
|
{
|
||||||
|
return "参数错误";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(empty($data["username"]))
|
||||||
|
{
|
||||||
|
return "用户名";
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}//checkParam
|
||||||
|
|
||||||
|
//处理字段
|
||||||
|
public function processData(EventInterface $e)
|
||||||
|
{
|
||||||
|
$data = $e->getParam('data');
|
||||||
|
|
||||||
|
if(empty($data['uuid']))
|
||||||
|
{
|
||||||
|
unset($data['uuid']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
//注册成功
|
||||||
|
public function recordPosted(EventInterface $e)
|
||||||
|
{
|
||||||
|
$data = $e->getParam('data');
|
||||||
|
$id = $e->getParam('id');
|
||||||
|
|
||||||
|
//view::Dump(array($data,$id,$params));
|
||||||
|
|
||||||
|
//return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
//用户修改
|
||||||
|
public function recordChanged(EventInterface $e)
|
||||||
|
{
|
||||||
|
$data = $e->getParam('data');
|
||||||
|
$id = $e->getParam('id');
|
||||||
|
|
||||||
|
//return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,173 @@
|
||||||
|
<?php
|
||||||
|
namespace Wbb\Vhome\Member\Account\Handle;
|
||||||
|
|
||||||
|
use Zend\EventManager\EventInterface;
|
||||||
|
use Sookon\Mail\Mail;
|
||||||
|
use Sookon\Helpers\View as view;
|
||||||
|
use Sookon\Helpers\PDO as Db;
|
||||||
|
use Sookon\Helpers\Config as GlobalConfig;
|
||||||
|
use Wbb\Vhome\Member\Account\Event\RegisterEvent as Event;
|
||||||
|
use Wbb\Vhome\Member\Account\Config;
|
||||||
|
|
||||||
|
class RegisterHandle implements Event
|
||||||
|
{
|
||||||
|
private $db; //传入PDO对象
|
||||||
|
private $conf;
|
||||||
|
private $config;
|
||||||
|
function __construct($db = NULL)
|
||||||
|
{
|
||||||
|
$this->db = new Db();
|
||||||
|
$this->conf = Config::get();
|
||||||
|
$this->config = GlobalConfig::get('email');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function checkParam(EventInterface $e){
|
||||||
|
|
||||||
|
$data = $e->getParam('data');
|
||||||
|
|
||||||
|
if(!is_array($data))
|
||||||
|
{
|
||||||
|
return "参数错误";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(empty($data[$this->conf->field->uname]))
|
||||||
|
{
|
||||||
|
return array('error'=>"请输入用户名",'place'=> $this->conf->form->uname );
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!empty($data[$this->conf->field->uname]))
|
||||||
|
{
|
||||||
|
if(!preg_match("/^[a-zA-Z][a-zA-Z0-9_]{4,15}$/",$data[$this->conf->field->uname]))
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
'error'=>"用户名应当以字母开头,由字母数字和下划线组成,并且长度在5到16个字符之间",
|
||||||
|
'place'=>$this->conf->form->uname
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(empty($data[$this->conf->field->pwd]))
|
||||||
|
{
|
||||||
|
return array('error'=>"请输入密码",'place'=>$this->conf->form->pwd);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(strlen($data[$this->conf->field->pwd]) < 6)
|
||||||
|
{
|
||||||
|
return array('error'=>"密码长度太短,为了安全最少输入6位哦",'place'=>$this->conf->form->pwd);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(strlen($data[$this->conf->field->pwd]) > 14)
|
||||||
|
{
|
||||||
|
return array('error'=>"密码太长,亲您记得住吗?不要超过14位哦",'place'=>$this->conf->form->pwd);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(empty($data[$this->conf->form->c_pwd]))
|
||||||
|
{
|
||||||
|
return array('error'=>"请再次输入密码已确认输入正确",'place'=>$this->conf->form->c_pwd);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(md5($data[$this->conf->field->pwd]) != md5($data[$this->conf->form->c_pwd]))
|
||||||
|
{
|
||||||
|
return array('error'=>"两次输入的密码不同,请重新输入",'place'=>$this->conf->form->c_pwd);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(empty($data[$this->conf->field->email]))
|
||||||
|
{
|
||||||
|
return array('error'=>"请输入电子邮箱,作为找回密码和接受通知的联系方式",'place' => $this->conf->form->email);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!preg_match('/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/',$data[$this->conf->field->email]))
|
||||||
|
{
|
||||||
|
return array('error'=>"请输入正确的电子邮件,推荐使用QQ邮箱和Gmail邮箱",'place' => $this->conf->form->email);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(empty($data[$this->conf->field->realname]))
|
||||||
|
{
|
||||||
|
return array('error'=>"起个响亮的名号吧",'place'=> $this->conf->form->realname);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mb_strlen($data[$this->conf->field->realname],"UTF-8")>15 )
|
||||||
|
{
|
||||||
|
return array('error'=>":-(这名号也太长了吧,不要超过15个字哦",'place'=> $this->conf->form->realname);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}//checkParam
|
||||||
|
|
||||||
|
public function checkUser(EventInterface $e){
|
||||||
|
|
||||||
|
$data = $e->getParam('data');
|
||||||
|
|
||||||
|
if(!is_array($data))
|
||||||
|
{
|
||||||
|
return "用户信息验证失败,请重新尝试";
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = "SELECT
|
||||||
|
id,{$this->conf->field->uname},{$this->conf->field->email}
|
||||||
|
FROM {$this->conf->table->member}
|
||||||
|
WHERE {$this->conf->field->uname}='".$data[$this->conf->field->uname]."'
|
||||||
|
OR {$this->conf->field->email}='".$data[$this->conf->field->email]."'";
|
||||||
|
|
||||||
|
$rs = $this->db->query($sql);
|
||||||
|
|
||||||
|
$row = $rs->fetch();
|
||||||
|
|
||||||
|
if(isset($row['id']) && !empty($row['id']))
|
||||||
|
{
|
||||||
|
if($row[$this->conf->field->uname] == $data[$this->conf->field->uname])
|
||||||
|
{
|
||||||
|
return array('error'=>'您的用户名已经注册过账号,您是否<a href="/account/forgotpassword">忘记了密码?</a>','place'=>$this->conf->form->uname);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($row[$this->conf->field->email] == $data[$this->conf->field->email])
|
||||||
|
{
|
||||||
|
return array('error'=>'您的邮箱已经注册过账号,请换一个邮箱','place'=>$this->conf->form->email);
|
||||||
|
}
|
||||||
|
|
||||||
|
return array('error'=>'您的用户名或邮箱已经使用过,注册马甲请换一个用户名');
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}//checkUser
|
||||||
|
|
||||||
|
public function registerSuccess(EventInterface $e){
|
||||||
|
|
||||||
|
$data = $e->getParam('data');
|
||||||
|
|
||||||
|
if(!is_array($data))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$id = $e->getParam('id');
|
||||||
|
|
||||||
|
if(!is_numeric($id))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$mail_template = $this->config->template->register;
|
||||||
|
$mail_data = array(
|
||||||
|
'name'=>$data[$this->conf->field->realname],
|
||||||
|
'content' => ''
|
||||||
|
);
|
||||||
|
|
||||||
|
$mail = new Mail();
|
||||||
|
|
||||||
|
$mail->loadTemplate($mail_template,$mail_data);
|
||||||
|
$mail->addTo($data[$this->conf->field->email],$data[$this->conf->field->realname]);
|
||||||
|
$mail->send();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}//registerSuccess
|
||||||
|
|
||||||
|
//邮件内容
|
||||||
|
public function getMailContent()
|
||||||
|
{
|
||||||
|
$content = "";
|
||||||
|
|
||||||
|
return $content;
|
||||||
|
}//getMailContent();
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
<?php
|
||||||
|
namespace Wbb\Vhome\Member\Listener;
|
||||||
|
|
||||||
|
use Zend\EventManager\ListenerAggregateInterface;
|
||||||
|
use Zend\EventManager\EventManagerInterface;
|
||||||
|
use Wbb\Vhome\Member\Handle;
|
||||||
|
|
||||||
|
class MemberListener implements ListenerAggregateInterface
|
||||||
|
{
|
||||||
|
protected $listeners = array();
|
||||||
|
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function attach(EventManagerInterface $events)
|
||||||
|
{
|
||||||
|
$_Events = new Handle\RegisterHandle();
|
||||||
|
$this->listeners[] = $events->attach('register.checkParam', array($_Events, 'checkParam'), 100);
|
||||||
|
$this->listeners[] = $events->attach('register.checkUser', array($_Events, 'checkUser'), 80);
|
||||||
|
$this->listeners[] = $events->attach('register.success', array($_Events, 'registerSuccess'), 50);
|
||||||
|
|
||||||
|
$_Events = new Handle\LoginHandle();
|
||||||
|
$this->listeners[] = $events->attach('login.checkParam', array($_Events, 'checkParam'), 100);
|
||||||
|
$this->listeners[] = $events->attach('login.success.updateStatus', array($_Events, 'updateStatus'), 50);
|
||||||
|
$this->listeners[] = $events->attach('login.success.createAvatar', array($_Events, 'createAvatar'), 50);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function detach(EventManagerInterface $events)
|
||||||
|
{
|
||||||
|
foreach ($this->listeners as $index => $listener) {
|
||||||
|
if ($events->detach($listener)) {
|
||||||
|
unset($this->listeners[$index]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?php
|
||||||
|
namespace Wbb\Vhome\Post\Event;
|
||||||
|
|
||||||
|
use Zend\EventManager\EventInterface;
|
||||||
|
|
||||||
|
interface PostEvent
|
||||||
|
{
|
||||||
|
public function checkParam(EventInterface $e);
|
||||||
|
public function processData(EventInterface $e);
|
||||||
|
public function recordPosted(EventInterface $e);
|
||||||
|
public function recordChanged(EventInterface $e);
|
||||||
|
}
|
|
@ -0,0 +1,89 @@
|
||||||
|
<?php
|
||||||
|
namespace Wbb\Vhome\Post\Handle;
|
||||||
|
|
||||||
|
use Sookon\Helpers\PDO as Pdo;
|
||||||
|
use Sookon\Helpers\Config;
|
||||||
|
use Sookon\Helpers\View as view;
|
||||||
|
use Sookon\Mail\Mail;
|
||||||
|
use Sookon\Search\Search;
|
||||||
|
use Zend\EventManager\EventInterface;
|
||||||
|
use Wbb\Vhome\Post\Event\PostEvent as Event;
|
||||||
|
|
||||||
|
class PostHandle implements Event
|
||||||
|
{
|
||||||
|
private $db;
|
||||||
|
private $config;
|
||||||
|
|
||||||
|
function __construct($db = NULL)
|
||||||
|
{
|
||||||
|
$this->db = new Pdo();
|
||||||
|
|
||||||
|
$this->config = Config::get();
|
||||||
|
}
|
||||||
|
|
||||||
|
//检查字段
|
||||||
|
public function checkParam(EventInterface $e){
|
||||||
|
|
||||||
|
$data = $e->getParam('data');
|
||||||
|
|
||||||
|
if(!is_array($data))
|
||||||
|
{
|
||||||
|
return "参数错误";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(empty($data["title"]))
|
||||||
|
{
|
||||||
|
return "请输入标题";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(empty($data["body"]))
|
||||||
|
{
|
||||||
|
return "请输入内容";
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}//checkParam
|
||||||
|
|
||||||
|
//处理字段
|
||||||
|
public function processData(EventInterface $e)
|
||||||
|
{
|
||||||
|
$data = $e->getParam('data');
|
||||||
|
|
||||||
|
if(empty($data['uuid']))
|
||||||
|
{
|
||||||
|
unset($data['uuid']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(empty($data['ts_published']))
|
||||||
|
{
|
||||||
|
$data['ts_published'] = date("Y-m-d H:i:s");
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($data['tags']);
|
||||||
|
unset($data['category']);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
//发布
|
||||||
|
public function recordPosted(EventInterface $e)
|
||||||
|
{
|
||||||
|
$data = $e->getParam('data');
|
||||||
|
$id = $e->getParam('id');
|
||||||
|
|
||||||
|
//view::Dump(array($data,$id,$params));
|
||||||
|
|
||||||
|
//return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
//更改
|
||||||
|
public function recordChanged(EventInterface $e)
|
||||||
|
{
|
||||||
|
$data = $e->getParam('data');
|
||||||
|
$id = $e->getParam('id');
|
||||||
|
|
||||||
|
//return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?php
|
||||||
|
namespace Wbb\Vhome\Post\Listener;
|
||||||
|
|
||||||
|
use Zend\EventManager\ListenerAggregateInterface;
|
||||||
|
use Zend\EventManager\EventManagerInterface;
|
||||||
|
use Wbb\Vhome\Post\Handle as Handle;
|
||||||
|
|
||||||
|
class PostListener implements ListenerAggregateInterface
|
||||||
|
{
|
||||||
|
protected $listeners = array();
|
||||||
|
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function attach(EventManagerInterface $events)
|
||||||
|
{
|
||||||
|
$_Events = new Handle;
|
||||||
|
$this->listeners[] = $events->attach('submit.checkParam', array($_Events, 'checkParam'), 100);
|
||||||
|
$this->listeners[] = $events->attach('submit.processData', array($_Events, 'processData'), 100);
|
||||||
|
$this->listeners[] = $events->attach('submit.recordPosted', array($_Events, 'recordPosted'), 100);
|
||||||
|
$this->listeners[] = $events->attach('submit.recordChanged', array($_Events, 'recordChanged'), 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function detach(EventManagerInterface $events)
|
||||||
|
{
|
||||||
|
foreach ($this->listeners as $index => $listener) {
|
||||||
|
if ($events->detach($listener)) {
|
||||||
|
unset($this->listeners[$index]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue