Merge branch 'development' of http://git.westgis.ac.cn:8000/lijianxuan/westdc-core into development

This commit is contained in:
Li Jianxuan 2015-01-26 09:52:24 +08:00
commit 8aa0abb88f
12 changed files with 165 additions and 90 deletions

View File

@ -15,6 +15,7 @@ class AuthenticationService
protected $role; protected $role;
public $loginRouterName = "login"; public $loginRouterName = "login";
public $logoutRouterName = "logout";
function __construct() function __construct()
{ {
@ -45,9 +46,12 @@ class AuthenticationService
return true; return true;
} }
// view::Dump($e->getRouteMatch()->getMatchedRouteName() . ":" . $controller."-".$action,false); //view::Dump($e->getRouteMatch()->getMatchedRouteName() . ":" . $controller."-".$action,false);
$this->preCookieCheck(); if($rsp = $this->preCookieCheck($e) !== false)
{
return $rsp;
}
try{ try{
if(!$this->acl->hasResource($controller)) if(!$this->acl->hasResource($controller))
@ -68,14 +72,13 @@ class AuthenticationService
} }
} }
}catch (Exception $e) { }catch (Exception $e) {
//echo 'Caught exception: ', $e->getMessage(), "\n";
$this->badRequest($e); $this->badRequest($e);
return; return;
} }
} }
public function preCookieCheck() public function preCookieCheck($e)
{ {
if(!view::User()) if(!view::User())
{ {
@ -85,8 +88,38 @@ class AuthenticationService
{ {
$account = new Account(); $account = new Account();
$account->cookieLogin(array('username'=>$mb->user)); $account->cookieLogin(array('username'=>$mb->user));
$response = $e->getResponse();
$response->setStatusCode(200);
$response->sendHeaders();
$layout = $e->getViewModel();
$viewHelperManager = $e->getApplication()->getServiceManager()->get('viewHelperManager');
$partial = $viewHelperManager->get('partial');
$page_content = $partial(
'layout/layout/message',
array(
'message' => '您的账号已自动登陆',
'url'=> [
['title' => '立即跳转', 'url' => $_SERVER['REQUEST_URI']],
['title'=>'退出登陆','url'=>$e->getRouter()->assemble(array(), array('name' => $this->logoutRouterName))]
],
)
);
$layout->setVariable('content',$page_content);
$layout->setTemplate('layout/layout');
$e->stopPropagation();
return $response;
} }
} }
return false;
} }
public function response($e) public function response($e)

View File

@ -1,43 +1,37 @@
<?php <?php
namespace Westdc\Db; namespace Westdc\Db;
use Westdc\Service\AbstractServiceManager;
use Zend\Db\Adapter\Adapter; use Zend\Db\Adapter\Adapter;
use Zend\Config\Config as Zend_Config;
class Db extends AbstractServiceManager class Db
{ {
private $db;
function __construct(&$db = "",$param = array()) private static $_instance = NULL;
{
$configService = $this->getServiceManager()->get('Config'); private function __construct(){
$config_local = $configService->get("local.php");
}
if(is_array($param) && count($param)>0)
{ public static function getInstance(){
$this->db = new Adapter($param);
}else{ if (self::$_instance === NULL) {
$this->db = new Adapter(array(
$config_local = new Zend_Config(include "config/autoload/local.php");
self::$_instance = new Adapter(array(
'driver' => $config_local->db->driver, 'driver' => $config_local->db->driver,
'hostname' => $config_local->db->hostname, 'hostname' => $config_local->db->hostname,
'port' => $config_local->db->port, 'port' => $config_local->db->port,
'database' => $config_local->db->database, 'database' => $config_local->db->database,
'username' => $config_local->db->username, 'username' => $config_local->db->username,
'password' => $config_local->db->password 'password' => $config_local->db->password
)); ));
} }
$db = $this->db; return self::$_instance;
} }
public function getAdapter()
{
return $this->db;
}
public function setConfig()
{
}
} }

View File

@ -11,7 +11,7 @@ class Dbh
function __construct($db = NULL) function __construct($db = NULL)
{ {
if($db == NULL) if($db == NULL)
$this->db = new PDO(); $this->db = PDO::getInstance();
else else
$this->db = $db; $this->db = $db;
} }

View File

@ -1,25 +1,33 @@
<?php <?php
namespace Westdc\Db; namespace Westdc\Db;
use Westdc\Helpers\Config; use Zend\Config\Config as Zend_Config;
class Pdo extends \PDO class Pdo
{ {
private static $_instance = NULL;
function __construct($DSN = NULL) private function __construct($DSN = NULL)
{ {
if (!empty($DSN)) {
parent::__construct($DSN); }
} else {
$config_local = Config::get('local'); public static function getInstance()
{
if (self::$_instance === null) {
$config_local = new Zend_Config(include "config/autoload/local.php");
$dsn = "pgsql:host={$config_local->db->hostname};" $dsn = "pgsql:host={$config_local->db->hostname};"
. "port={$config_local->db->port};" . "port={$config_local->db->port};"
. "dbname={$config_local->db->database};" . "dbname={$config_local->db->database};"
. "user={$config_local->db->username};" . "user={$config_local->db->username};"
. "password={$config_local->db->password}"; . "password={$config_local->db->password}";
parent::__construct($dsn); self::$_instance = new \PDO($dsn);
} }
return self::$_instance;
} }
} }

View File

@ -23,7 +23,8 @@ class Auth
public function clearIndentity() public function clearIndentity()
{ {
return $this->auth->clearIdentity(); $this->auth->clearIdentity();
return true;
} }
public function getIdentity($field = "") public function getIdentity($field = "")

View File

@ -11,8 +11,6 @@ use Westdc\Helpers\Assist as view;
use Westdc\Helpers\Config; use Westdc\Helpers\Config;
use Westdc\Helpers\Dbh as dbh; use Westdc\Helpers\Dbh as dbh;
use Westdc\Db\Db as Zend_Db; use Westdc\Db\Db as Zend_Db;
use Westdc\Mail\Mail;
use Westdc\User\Member;
class Account extends AbstractEventManager implements ServiceManagerAwareInterface class Account extends AbstractEventManager implements ServiceManagerAwareInterface
{ {
@ -95,17 +93,8 @@ class Account extends AbstractEventManager implements ServiceManagerAwareInterfa
$registerData = [ $registerData = [
'username' => $data['username'], 'username' => $data['username'],
'password' => md5($data['password']), 'password' => md5($data['password']),
'usertype' => 'guest', 'usertype' => $this->RoleMember,
'email' => $data['email'], 'email' => $data['email'],
'realname' => $data['realname'],
'unit' => $data['unit'],
'address' => $data['address'],
'project' => $data['project'],
'phone' => $data['phone'],
'project_id' => $data['project_id'],
'project_type' => $data['project_type'],
'project_title' => $data['project_title'],
'project_leader' => $data['project_leader'],
]; ];
$dbh = new dbh(); $dbh = new dbh();
@ -118,11 +107,10 @@ class Account extends AbstractEventManager implements ServiceManagerAwareInterfa
if(isset($state['success'])) if(isset($state['success']))
{ {
//$mb = new Member(); $mb = new Member();
//$mb->putcookie($data[$this->FieldUsername],$data[$this->FieldPasword]); $mb->putcookie($data[$this->FieldUsername],$data[$this->FieldPasword]);
} }
$data = $registerData;
$params = compact('data','id'); $params = compact('data','id');
$this->getEventManager()->trigger('register.success', $this, $params); $this->getEventManager()->trigger('register.success', $this, $params);
return array("success" => 1); return array("success" => 1);
@ -161,8 +149,8 @@ class Account extends AbstractEventManager implements ServiceManagerAwareInterfa
if(isset($state['success'])) if(isset($state['success']))
{ {
//$mb = new Member(); $mb = new Cookie();
//$mb->putcookie($data[$this->FieldUsername],$data[$this->FieldPasword]); $mb->putcookie($data[$this->FieldUsername],$data[$this->FieldPasword]);
$user = (array)$state['user']; $user = (array)$state['user'];
$this->getEventManager()->trigger('login.success', $this, compact('user')); $this->getEventManager()->trigger('login.success', $this, compact('user'));

View File

@ -6,7 +6,7 @@ use Westdc\Db\Pdo as Db;
class Cookie class Cookie
{ {
var $ck='Dxe8SqIcmyUf'; var $ck='ff08XearZpUkjl3H';
var $db; //传入PDO对象 var $db; //传入PDO对象
var $mid; //会员ID var $mid; //会员ID
@ -27,14 +27,14 @@ class Cookie
function __construct() function __construct()
{ {
$this->db = new Db(); $this->db = Db::getInstance();
$this->config = Config::get(); $this->config = Config::get();
if(!empty($_COOKIE['scr'])) if(isset($_COOKIE['scr']) && !empty($_COOKIE['scr']))
{ {
$this->scr = $_COOKIE['scr']; $this->scr = $_COOKIE['scr'];
} }
if(!empty($_COOKIE['user'])) if(isset($_COOKIE['user']) && !empty($_COOKIE['user']))
{ {
$this->user= $_COOKIE['user']; $this->user= $_COOKIE['user'];
} }
@ -48,7 +48,7 @@ class Cookie
{ {
$uname = $this->user; $uname = $this->user;
$hash = $this->scr; $hash = $this->scr;
if(!empty($uname) && !empty($hash)) if(!empty($uname) && !empty($hash))
{ {
if (preg_match("/[<|>|#|$|%|^|*|(|)|{|}|'|\"|;|:]/i",$uname) || preg_match("/[<|>|#|$|%|^|*|(|)|{|}|'|\"|;|:]/i",$hash)) if (preg_match("/[<|>|#|$|%|^|*|(|)|{|}|'|\"|;|:]/i",$uname) || preg_match("/[<|>|#|$|%|^|*|(|)|{|}|'|\"|;|:]/i",$hash))
@ -61,7 +61,7 @@ class Cookie
$rs = $this->db->query($sql); $rs = $this->db->query($sql);
$row = $rs->fetch(); $row = $rs->fetch();
$scr = $this->makescr($row['userid'],$row['pwd']); $scr = $this->makescr($row['userid'],$row['pwd']);
if($hash == $scr) if($hash == $scr)
{ {
$this->srpwd=$row['pwd']; $this->srpwd=$row['pwd'];
@ -75,26 +75,27 @@ class Cookie
return false; return false;
}//exit }//exit
}//function checkcookie }//function checkcookie
/** /**
* putcookie * putcookie
* *
* 登陆成功后放置cookie包含安全码 * 登陆成功后放置cookie包含安全码
* *
* @param String $uname * @param $uname
* @param String $pwd * @param $pwd
* @param Int $time * @param int $time
*/ * @return bool
*/
public function putcookie($uname,$pwd,$time = 604800) public function putcookie($uname,$pwd,$time = 604800)
{ {
try { try {
$scrString = $this->makescr($uname,$pwd);//加密验证串:防止用户密码被盗防止伪造cookie。 $scrString = $this->makescr($uname,md5($pwd));//加密验证串:防止用户密码被盗防止伪造cookie。
if(!is_numeric($time)) if(!is_numeric($time))
{ {
$time = 604800; $time = 604800;
} }
setcookie('user',$uname,time()+$time,'/'); setcookie('user',$uname,time()+$time,'/');
setcookie('scr',$scrString,time()+$time,'/'); setcookie('scr',$scrString,time()+$time,'/');
@ -110,6 +111,7 @@ class Cookie
* *
* @param String $u * @param String $u
* @param String $p * @param String $p
* @return string
*/ */
public function makescr($u,$p) public function makescr($u,$p)
{ {

View File

@ -163,12 +163,23 @@ class Review extends AbstractEventManager implements ServiceManagerAwareInterfac
* @return bool * @return bool
*/ */
public function cancel($id){ public function cancel($id){
if(!is_numeric($id) || $id<1)
return false;
$this->getEventManager()->trigger('review.canceled', $this, compact('id')); if(is_numeric($id))
{
$this->getEventManager()->trigger('review.canceled', $this, compact('id'));
return $this->changeStatus($id,self::REVIEW_STATUS_CANCELED); return $this->changeStatus($id,self::REVIEW_STATUS_CANCELED);
}elseif(is_array($id)){
foreach($id as $item){
$item = (int)$item;
if($this->changeStatus($item,self::REVIEW_STATUS_CANCELED) === false)
return "ID:$item:取消失败";
}
$this->getEventManager()->trigger('review.canceled', $this, compact('id'));
return true;
}
return false;
} }
/** /**
@ -198,8 +209,49 @@ class Review extends AbstractEventManager implements ServiceManagerAwareInterfac
}//accept($id) }//accept($id)
/**
* 重置评审,将评审的状态设置为投稿元数据状态
* @param $id
* @return array|bool
*/
public function reset($id){ public function reset($id){
if(!is_array($id))
{
if($this->getStatus($id) != self::REVIEW_STATUS_CANCELED)
return [
'此条评审的当前状态已经不属于被取消的评审,可能已经由其他管理人员重置',
];
$status = $this->changeStatus($id,self::REVIEW_STATUS_DEFAULT);
if(false === $status)
return false;
}else{
$message = [];
foreach($id as $item)
{
$item = (int)$item;
if($this->getStatus($item) != self::REVIEW_STATUS_CANCELED){
$message[] = "ID:$item:此条评审的当前状态已经不属于被取消的评审,可能已经由其他管理人员重置";
continue;
}
$status = $this->changeStatus($item,self::REVIEW_STATUS_DEFAULT);
if(false === $status)
$message[] = "ID:$item:重置失败";
}
if(count($message) > 0)
return $message;
}
$this->getEventManager()->trigger('review.reset', $this, compact('id'));
return true;
} }
/** /**

View File

@ -13,15 +13,12 @@ use Westdc\Db as WestdcDb;
class Db { class Db {
public function getZendDb(){ public function getZendDb(){
return WestdcDb\Db::getInstance();
$dbObject = new WestdcDb\Db();
return $dbObject->getAdapter();
} }
public function getPdo() public function getPdo()
{ {
return new WestdcDb\Pdo; return WestdcDb\Pdo::getInstance();
} }
public function getDbh() public function getDbh()

View File

@ -34,7 +34,7 @@ class Account implements EventManagerAwareInterface
function __construct() function __construct()
{ {
$this->db = new Db(); $this->db = Db::getInstance();
$this->config = Config::get(); $this->config = Config::get();
$Listener = new Listener(); $Listener = new Listener();
@ -173,8 +173,8 @@ class Account implements EventManagerAwareInterface
{ {
$auth = new AuthenticationService(); $auth = new AuthenticationService();
$auth->setStorage(new SessionStorage($this->config->session_namespace)); $auth->setStorage(new SessionStorage($this->config->session_namespace));
new Zend_Db($dbAdapter); $dbAdapter = Zend_Db::getInstance();
$authAdapter = new \Zend\Authentication\Adapter\DbTable( $authAdapter = new \Zend\Authentication\Adapter\DbTable(
$dbAdapter, $dbAdapter,

View File

@ -19,7 +19,7 @@ class LoginHandle
function __construct() function __construct()
{ {
$this->db = new Db(); $this->db = Db::getInstance();
} }
public function checkParam(EventInterface $e){ public function checkParam(EventInterface $e){

View File

@ -21,7 +21,7 @@ class RegisterHandle
function __construct($db = NULL) function __construct($db = NULL)
{ {
$this->db = new Db(); $this->db = Db::getInstance();
$this->config = Config::get(); $this->config = Config::get();
} }