Merge branch 'development' into 'master'
Development to master 发布一个稳定的测试版本 See merge request !1
This commit is contained in:
commit
e40848e98b
|
@ -41,8 +41,14 @@ class AuthenticationService
|
|||
$namespace = $e->getRouteMatch()->getParam('__NAMESPACE__');
|
||||
$controller = $e->getRouteMatch()->getParam('controller');
|
||||
$action = $e->getRouteMatch()->getParam('action');
|
||||
|
||||
if($module == 'Engine' && $namespace == 'ConsoleApp')
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
//view::Dump($e->getRouteMatch()->getMatchedRouteName() . ":" . $controller."-".$action,false);
|
||||
// view::Dump($e->getRouteMatch()->getMatchedRouteName() . ":" . $controller."-".$action,false);
|
||||
|
||||
$this->preCookieCheck();
|
||||
|
||||
try{
|
||||
|
|
|
@ -14,6 +14,8 @@ use Zend\EventManager\EventManagerAwareInterface;
|
|||
|
||||
abstract class AbstractEventManager {
|
||||
|
||||
protected $events;
|
||||
|
||||
public function setEventManager (EventManagerInterface $events) {
|
||||
$events->setIdentifiers(array(
|
||||
__CLASS__,
|
||||
|
|
|
@ -0,0 +1,95 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: liujin834
|
||||
* Date: 14/12/26
|
||||
* Time: 下午3:52
|
||||
*/
|
||||
|
||||
namespace Westdc\File;
|
||||
|
||||
use Zend\ServiceManager\ServiceManager;
|
||||
use Zend\ServiceManager\ServiceManagerAwareInterface;
|
||||
|
||||
class File implements ServiceManagerAwareInterface{
|
||||
|
||||
protected $serviceManager;
|
||||
|
||||
public function setServiceManager(ServiceManager $serviceManager)
|
||||
{
|
||||
$this->serviceManager = $serviceManager;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
//获取文件扩展名
|
||||
public function getFileTextExt($file_name)
|
||||
{
|
||||
$temp_arr = explode(".", $file_name);
|
||||
$file_ext = array_pop($temp_arr);
|
||||
$file_ext = trim($file_ext);
|
||||
$file_ext = strtolower($file_ext);
|
||||
return $file_ext;
|
||||
}
|
||||
|
||||
//获取文件Mime,通过finfo扩展
|
||||
public function getFileMime($file_name)
|
||||
{
|
||||
$finfo = finfo_open(FILEINFO_MIME_TYPE);
|
||||
$filetype = finfo_file($finfo, $file_name) ; //文件mime类型
|
||||
finfo_close($finfo);
|
||||
return $filetype;
|
||||
}
|
||||
|
||||
//获取某个文件的信息
|
||||
public function get($id)
|
||||
{
|
||||
if(!is_numeric($id) || $id<1)
|
||||
return false;
|
||||
|
||||
$dbService = $this->serviceManager->get('Db');
|
||||
$db = $dbService->getPdo();
|
||||
$sql = "SELECT * FROM attachments WHERE id=$id";
|
||||
$rs = $db->query($sql);
|
||||
|
||||
return $rs->fetch();
|
||||
}
|
||||
|
||||
//删除文件
|
||||
public function delete($id)
|
||||
{
|
||||
if(!is_numeric($id) || $id<1)
|
||||
return false;
|
||||
|
||||
$file_info = $this->get($id);
|
||||
|
||||
$basePath = $this->getFileSaveDirByType($file_info['filetype']);
|
||||
|
||||
@unlink($basePath . $file_info['filename']);
|
||||
|
||||
$dbService = $this->serviceManager->get('Db');
|
||||
$db = $dbService->getPdo();
|
||||
|
||||
return $db->exec("DELETE FROM attachments WHERE id=$id");
|
||||
}
|
||||
|
||||
public function getFileSaveDirByType($fileType)
|
||||
{
|
||||
$configService = $this->serviceManager->get('ConfigService');
|
||||
|
||||
$basePath = "";
|
||||
|
||||
switch ($fileType){
|
||||
case "literature":
|
||||
$appConfig = $configService->get('application.ini');
|
||||
$basePath = $appConfig['reference_save_path'];
|
||||
break;
|
||||
}
|
||||
|
||||
if (!preg_match("/[\/|\\\]+$/", $basePath))
|
||||
$basePath .= "/";
|
||||
|
||||
return $basePath;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
<?php
|
||||
namespace Westdc\File\Listener;
|
||||
|
||||
use Zend\EventManager\EventCollection;
|
||||
use Zend\EventManager\ListenerAggregateInterface;
|
||||
use Zend\EventManager\EventManagerInterface;
|
||||
use Westdc\Service\ServiceManager;
|
||||
|
||||
class DefaultFileUploadListener implements ListenerAggregateInterface
|
||||
{
|
||||
protected $listeners = array();
|
||||
|
||||
protected $serviceManager;
|
||||
|
||||
function __construct()
|
||||
{
|
||||
$this->serviceManager = new ServiceManager();
|
||||
$this->serviceManager = $this->serviceManager->getServiceManager();
|
||||
}
|
||||
|
||||
public function attach(EventManagerInterface $events)
|
||||
{
|
||||
$this->listeners[] = $events->attach('upload.pre', function($e){
|
||||
return true;
|
||||
return ['error' => '文件格式不在可上传的范围内'];
|
||||
}, 100);
|
||||
|
||||
$this->listeners[] = $events->attach('upload.pre', function($e){
|
||||
return true;
|
||||
return ['error' => '文件大小超出了限制'];
|
||||
}, 80);
|
||||
|
||||
$this->listeners[] = $events->attach('upload.after', function($e){
|
||||
|
||||
$file_data = $e->getParam('file_data');
|
||||
|
||||
$authService = $this->serviceManager->get('Auth');
|
||||
|
||||
$data = [
|
||||
'filename' => $file_data['db_path'],
|
||||
'filetype' => $file_data['file_type'],
|
||||
'filedesc' => $file_data['file_mime'],
|
||||
'userid' => $authService->getIdentity('id'),
|
||||
'filesize' => $file_data['file_size'],
|
||||
'realname' => $file_data['realname'],
|
||||
];
|
||||
|
||||
if(isset($file_data['language']))
|
||||
{
|
||||
$data['language'] = $file_data['language'];
|
||||
}
|
||||
|
||||
$dbServices = $this->serviceManager->get('Db');
|
||||
$dbh = $dbServices->getDbh();
|
||||
|
||||
$attid = $dbh->insert("attachments" , $data , true);
|
||||
|
||||
if(is_numeric($attid))
|
||||
return ['attid' => $attid];
|
||||
|
||||
return false;
|
||||
}, 100);
|
||||
|
||||
|
||||
}
|
||||
|
||||
public function detach(EventManagerInterface $events)
|
||||
{
|
||||
foreach ($this->listeners as $index => $listener) {
|
||||
if ($events->detach($listener)) {
|
||||
unset($this->listeners[$index]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,250 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: liujin834
|
||||
* Date: 14/12/26
|
||||
* Time: 下午3:52
|
||||
*/
|
||||
|
||||
namespace Westdc\File;
|
||||
|
||||
use Zend\ServiceManager\ServiceManager;
|
||||
use Zend\ServiceManager\ServiceManagerAwareInterface;
|
||||
use Westdc\EventModel\AbstractEventManager;
|
||||
use Westdc\File\Listener\DefaultFileUploadListener;
|
||||
|
||||
class Upload extends AbstractEventManager implements ServiceManagerAwareInterface{
|
||||
|
||||
protected $serviceManager;
|
||||
|
||||
private $uploadPath = "";
|
||||
private $relativePath = "";
|
||||
private $fileName = "";
|
||||
private $config;
|
||||
private $params;
|
||||
|
||||
//日期路径模式
|
||||
const DATETIME_MODEL_YMD = "Y/M/D/";
|
||||
const DATETIME_MODEL_YM = "Y/M/";
|
||||
const DATETIME_MODEL_Y = "Y/";
|
||||
|
||||
public function setServiceManager(ServiceManager $serviceManager)
|
||||
{
|
||||
$this->serviceManager = $serviceManager;
|
||||
|
||||
$this->init();
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function init()
|
||||
{
|
||||
$Listener = new DefaultFileUploadListener;
|
||||
$this->getEventManager()->attachAggregate($Listener);
|
||||
|
||||
$configService = $this->serviceManager->get('ConfigService');
|
||||
$this->config = $configService->get('file.php');
|
||||
}
|
||||
|
||||
public function __invoke($files,$rootDir = "",$childDir = "",$fileName = "",$dateDirModel = self::DATETIME_MODEL_YMD)
|
||||
{
|
||||
return $this->upload($files,$rootDir,$childDir,$fileName,$dateDirModel);
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传文件
|
||||
* @param $files 上传文件的信息 e.g.$_FILE['fileData']
|
||||
* @param string $rootDir 文件存储的根路径(磁盘物理路径),如果没有设置则从 config/autoload/file.php 中读取 upload 配置
|
||||
* @param string $childDir 根路径中的下一级路径,默认为空
|
||||
* @param string $fileName 新文件的文件名,如果不指定则设置为新的UUID
|
||||
* @param string $dateDirModel 年月日目录模式,如果设为 false 则存储时不添加年月日路径,年月日路径在子文件夹中创建,unix和linux中需要开启上传目录的权限,否则无法创建文件夹
|
||||
* @return array
|
||||
*/
|
||||
public function upload($files,$rootDir = "",$childDir = "",$fileName = "",$dateDirModel = self::DATETIME_MODEL_YMD)
|
||||
{
|
||||
if (empty($files) !== false) {
|
||||
return array("error"=>"请选择要上传的文件.");
|
||||
}
|
||||
|
||||
if (is_uploaded_file($files['tmp_name']) === false) {
|
||||
return array("error"=>"文件上传失败,请重新上传");
|
||||
}
|
||||
|
||||
$file = $files;
|
||||
|
||||
$results = $this->getEventManager()->trigger('upload.pre', $this, compact('file'));
|
||||
$cache_data = $results->last();
|
||||
|
||||
if($cache_data !== true)
|
||||
{
|
||||
return $cache_data;
|
||||
}
|
||||
|
||||
$fileService = $this->serviceManager->get('File');
|
||||
|
||||
$this->setRootDir($rootDir);
|
||||
$this->setChildDir($childDir);
|
||||
|
||||
if($dateDirModel !== false)
|
||||
$this->makeDateDir($dateDirModel);
|
||||
|
||||
$this->setFileName($fileName , $fileService->getFileTextExt($files['name']));
|
||||
|
||||
//移动文件
|
||||
$file_path = $this->getUploadPath() . $this->getFileName();
|
||||
|
||||
if (move_uploaded_file($file['tmp_name'], $file_path) === false) {
|
||||
return array("error"=>"上传失败,请重试");
|
||||
}
|
||||
|
||||
$file_data = array();
|
||||
|
||||
$file_data['file_url'] = $this->getRelativePath() . $this->getFileName();
|
||||
$file_data['file_size'] = $files['size'];
|
||||
$file_data['db_path'] = $this->getRelativePath() . $this->getFileName();
|
||||
$file_data['realname'] = $files['name'];
|
||||
$file_data['file_ext'] = $fileService->getFileTextExt($files['name']);
|
||||
$file_data['file_mime'] = $fileService->getFileMime($file_path);
|
||||
|
||||
if(!empty($file_data) && is_array($file_data))
|
||||
{
|
||||
$file_data = array_merge($file_data,$this->params);
|
||||
}
|
||||
|
||||
$results = $this->getEventManager()->trigger('upload.after', $this, compact('file_data'));
|
||||
$cache_data = $results->last();
|
||||
|
||||
if(is_array($cache_data))
|
||||
$file_data = array_merge($file_data , $cache_data);
|
||||
|
||||
return $file_data;
|
||||
}//文件上传
|
||||
|
||||
/**
|
||||
* 设置上传文件的根路径,这样操作会忽略config中的定义
|
||||
* 根路径需要自行创建
|
||||
* 路径结尾必须加 "/"
|
||||
* @param string $path
|
||||
* @return bool
|
||||
*/
|
||||
public function setRootDir($path = "")
|
||||
{
|
||||
if(empty($path))
|
||||
$this->uploadPath = $this->config->upload;
|
||||
|
||||
$this->uploadPath = $path;
|
||||
|
||||
if(!preg_match("/[\/|\\\]+$/",$this->uploadPath))
|
||||
$this->uploadPath .= "/";
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置子路径,自动加在根路径之后
|
||||
* 如果不存在程序将创建
|
||||
* @param string $dirname
|
||||
* @return bool | string
|
||||
*/
|
||||
public function setChildDir($dirname)
|
||||
{
|
||||
if(empty($dirname)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$this->uploadPath .= $dirname;
|
||||
|
||||
if (!preg_match("/[\/|\\\]+$/", $this->uploadPath))
|
||||
$this->uploadPath .= "/";
|
||||
|
||||
|
||||
if(!file_exists($this->uploadPath)) {
|
||||
if(!mkdir($this->uploadPath))
|
||||
return "failed to create folder :".$this->uploadPath;
|
||||
}
|
||||
|
||||
$this->relativePath = $dirname;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建并返回年月日的子目录路径
|
||||
* @return string
|
||||
*/
|
||||
public function makeDateDir($model)
|
||||
{
|
||||
$y = date("Y");
|
||||
$m = date("m");
|
||||
$d = date("d");
|
||||
|
||||
if($model == self::DATETIME_MODEL_YMD || $model == self::DATETIME_MODEL_YM || $model == self::DATETIME_MODEL_Y) {
|
||||
$current_path = $y . "/";
|
||||
if (!file_exists($this->uploadPath . $current_path))
|
||||
mkdir($this->uploadPath . $current_path);
|
||||
}
|
||||
|
||||
if($model == self::DATETIME_MODEL_YMD || $model == self::DATETIME_MODEL_YM){
|
||||
$current_path .= $m . "/";
|
||||
if (!file_exists($this->uploadPath . $current_path))
|
||||
mkdir($this->uploadPath . $current_path);
|
||||
}
|
||||
|
||||
if($model == self::DATETIME_MODEL_YMD) {
|
||||
$current_path .= $d ."/";
|
||||
if (!file_exists($this->uploadPath . $current_path))
|
||||
mkdir($this->uploadPath . $current_path);
|
||||
}
|
||||
|
||||
$this->uploadPath .= $current_path;
|
||||
$this->relativePath .= $current_path;
|
||||
return $current_path;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $fileName
|
||||
* @param $fileExt
|
||||
*/
|
||||
public function setFileName($fileName,$fileExt)
|
||||
{
|
||||
if(!empty($fileName)){
|
||||
$this->fileName = $fileName . "." .$fileExt;
|
||||
return;
|
||||
}
|
||||
|
||||
$tools = $this->serviceManager->get('Tools');
|
||||
$uuid = $tools->uuid();
|
||||
|
||||
$this->fileName = $uuid . "." . $fileExt;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function setParams($params)
|
||||
{
|
||||
$this->params = $params;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getFileName()
|
||||
{
|
||||
return $this->fileName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getUploadPath()
|
||||
{
|
||||
return $this->uploadPath;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getRelativePath()
|
||||
{
|
||||
return $this->relativePath;
|
||||
}
|
||||
|
||||
}
|
|
@ -14,20 +14,29 @@ class Assist
|
|||
|
||||
}
|
||||
|
||||
static function addPaginator($data,$ctl,$limit = 10,$viewPartial = "layout/manager/pagination")
|
||||
static function addPaginator($data,$ctl,$limit = 10,$viewPartial = "layout/manager/pagination" )
|
||||
{
|
||||
$request = $ctl->getRequest();
|
||||
$page = $ctl->params()->fromRoute('page');
|
||||
|
||||
$paginator = new \Zend\Paginator\Paginator(new \Zend\Paginator\Adapter\ArrayAdapter($data));
|
||||
|
||||
if(is_array($data)){
|
||||
$data = new \Zend\Paginator\Adapter\ArrayAdapter($data);
|
||||
}
|
||||
// elseif($data instanceof ){
|
||||
//
|
||||
// }
|
||||
|
||||
$paginator = new \Zend\Paginator\Paginator($data);
|
||||
$paginator->setCurrentPageNumber($page)
|
||||
->setItemCountPerPage($limit)
|
||||
->setPageRange(6);
|
||||
$paginator->setDefaultScrollingStyle('Sliding');
|
||||
|
||||
$pagination = $ctl->getServiceLocator()->get('viewhelpermanager')->get('PaginationControl');
|
||||
$renderer = $ctl->getServiceLocator()->get('Zend\View\Renderer\PhpRenderer');
|
||||
$paginator->setView($renderer);
|
||||
$renderer = $ctl->getServiceLocator()->get('Zend\View\Renderer\PhpRenderer');
|
||||
|
||||
$paginator->setView($renderer);
|
||||
|
||||
$pagination->setDefaultViewPartial($viewPartial);
|
||||
|
||||
$ctl->ViewModel->setVariable('paginator',$paginator);
|
||||
|
|
|
@ -28,6 +28,9 @@ class Auth
|
|||
|
||||
public function getIdentity($field)
|
||||
{
|
||||
return $this->auth->getIdentity()->$field;
|
||||
if(isset($this->auth->getIdentity()->$field))
|
||||
return $this->auth->getIdentity()->$field;
|
||||
else
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,132 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: liujin834
|
||||
* Date: 14/12/25
|
||||
* Time: 下午5:29
|
||||
*/
|
||||
|
||||
namespace Westdc\Helpers;
|
||||
|
||||
use Zend\ServiceManager\ServiceManager;
|
||||
use Zend\ServiceManager\ServiceManagerAwareInterface;
|
||||
use Zend\Mvc\Controller\AbstractActionController;
|
||||
use Zend\Paginator\Adapter\ArrayAdapter;
|
||||
use Zend\Paginator\Adapter\DbSelect;
|
||||
use Zend\Paginator\Adapter\DbTableGateway;
|
||||
use Zend\Paginator\Paginator as Zend_Paginator;
|
||||
use Zend\Db\Sql\Select;
|
||||
use Zend\Db\TableGateway\TableGateway;
|
||||
|
||||
class Paginator implements ServiceManagerAwareInterface{
|
||||
|
||||
protected $serviceManager;
|
||||
|
||||
public $sqlQuery,$sqlOrder,$sqlGroup,$sqlHaving;
|
||||
|
||||
private $pageLimit,$pageRange,$route,$params;
|
||||
|
||||
public function setServiceManager(ServiceManager $serviceManager)
|
||||
{
|
||||
$this->serviceManager = $serviceManager;
|
||||
|
||||
$this->setPageLimit();
|
||||
$this->setPageRange();
|
||||
$this->setRoute();
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setPageLimit($limit = 0)
|
||||
{
|
||||
$this->pageLimit = (int)$limit;
|
||||
if(empty($this->pageLimit))
|
||||
$this->pageLimit = 10;
|
||||
}
|
||||
|
||||
public function setPageRange($range = 0)
|
||||
{
|
||||
$this->pageRange = (int)$range;
|
||||
if(empty($this->pageRange))
|
||||
$this->pageRange = 6;
|
||||
}
|
||||
|
||||
public function setRoute($route = "",$params = "")
|
||||
{
|
||||
|
||||
if(empty($route)) {
|
||||
$routeMatch = $this->serviceManager->get('Application')->getMvcEvent()->getRouteMatch();
|
||||
$this->route = str_replace("/wildcard", "", $routeMatch->getMatchedRouteName());
|
||||
$this->params = [];
|
||||
}else{
|
||||
$this->route = $route;
|
||||
}
|
||||
|
||||
if(empty($params)) {
|
||||
if(!isset($routeMatch))
|
||||
$routeMatch = $this->serviceManager->get('Application')->getMvcEvent()->getRouteMatch();
|
||||
|
||||
if (!empty($routeMatch->getParam('__CONTROLLER__')))
|
||||
$this->params['controller'] = $routeMatch->getParam('__CONTROLLER__');
|
||||
|
||||
if (!empty($routeMatch->getParam('action')))
|
||||
$this->params['action'] = $routeMatch->getParam('action');
|
||||
|
||||
if (!empty($routeMatch->getParam('ac')))
|
||||
$this->params['ac'] = $routeMatch->getParam('ac');
|
||||
|
||||
if (!empty($routeMatch->getParam['id']))
|
||||
$this->params['id'] = $routeMatch->getParam('id');
|
||||
|
||||
if (!empty($routeMatch->getParam['uuid']))
|
||||
$this->params['uuid'] = $routeMatch->getParam('uuid');
|
||||
}else{
|
||||
$this->params = $params;
|
||||
}
|
||||
|
||||
unset($routeMatch);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param AbstractActionController $ctl
|
||||
* @param mixed $data
|
||||
* @param string $viewPartial
|
||||
* @return bool
|
||||
*/
|
||||
public function add(AbstractActionController $ctl,$data,$viewPartial = "pagination")
|
||||
{
|
||||
$page = $ctl->params()->fromRoute('page');
|
||||
|
||||
if(is_array($data))
|
||||
$data = new ArrayAdapter($data);
|
||||
|
||||
if($data instanceof Select)
|
||||
{
|
||||
$dbService = $this->serviceManager->get('Db');
|
||||
$zendDb = $dbService->getZendDb();
|
||||
$data = new DbSelect($data,$zendDb);
|
||||
}
|
||||
|
||||
if($data instanceof TableGateway)
|
||||
$data = new DbTableGateway($data,$this->sqlQuery,$this->sqlOrder,$this->sqlGroup,$this->sqlHaving);
|
||||
|
||||
$paginator = new Zend_Paginator($data);
|
||||
$paginator->setCurrentPageNumber($page)
|
||||
->setItemCountPerPage($this->pageLimit)
|
||||
->setPageRange($this->pageRange);
|
||||
|
||||
$pagination = $ctl->getServiceLocator()->get('viewhelpermanager')->get('PaginationControl');
|
||||
|
||||
$pageSliding = $pagination(
|
||||
$paginator,
|
||||
'Sliding',
|
||||
$viewPartial,
|
||||
['route'=>$this->route,'params'=>$this->params]
|
||||
);
|
||||
|
||||
$ctl->ViewModel->setVariable('pagination',$pageSliding);
|
||||
$ctl->ViewModel->setVariable('paginator',$paginator);
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,204 @@
|
|||
<?php
|
||||
/**
|
||||
* Theme 主题
|
||||
*/
|
||||
|
||||
namespace Westdc\Helpers;
|
||||
|
||||
class Theme
|
||||
{
|
||||
private $render; //传入Zend Render对象
|
||||
public $plus; //插件
|
||||
public $ScriptKey = "js"; //js 文件键名
|
||||
public $CSSKey = "css"; //css 文件键名
|
||||
|
||||
function __construct()
|
||||
{
|
||||
$this->_init_plus();
|
||||
}
|
||||
|
||||
//初始化插件
|
||||
function _init_plus()
|
||||
{
|
||||
$this->plus = array(
|
||||
|
||||
/**********Jquery公共库******/
|
||||
|
||||
//Jquery
|
||||
'jquery'=>array(
|
||||
$this->ScriptKey => array(
|
||||
'/js/lib/jquery.lasted.js'
|
||||
)
|
||||
),
|
||||
|
||||
//Jquery UI
|
||||
'jquery_ui'=>array(
|
||||
$this->ScriptKey => array(
|
||||
'/js/lib/jquery.lasted.js',
|
||||
'/js/lib/jquery.ui/jquery-ui.lasted.js'
|
||||
),
|
||||
$this->CSSKey =>array(
|
||||
'/js/lib/jquery.ui/jquery-ui.lasted.css'
|
||||
)
|
||||
),
|
||||
|
||||
/********* Bootstrap ******/
|
||||
'bootstrap'=>array(
|
||||
$this->ScriptKey => array(
|
||||
'/js/lib/bootstrap/js/bootstrap.min.js',
|
||||
),
|
||||
$this->CSSKey =>array(
|
||||
'/js/lib/bootstrap/css/bootstrap.min.css',
|
||||
'/js/lib/bootstrap/css/bootstrap-responsive.min.css'
|
||||
)
|
||||
),
|
||||
|
||||
|
||||
/********Jquery 插件********/
|
||||
|
||||
//colorbox
|
||||
'colorbox' => array(
|
||||
$this->ScriptKey => array(
|
||||
'/lib/jquery.colorbox/jquery.colorbox-min.js'
|
||||
),
|
||||
$this->CSSKey => array(
|
||||
'/lib/jquery.colorbox/style2/colorbox.css'
|
||||
)
|
||||
),
|
||||
|
||||
//inputbg
|
||||
'inputbg' => array(
|
||||
$this->ScriptKey => array(
|
||||
'/js/lib/custom/jquery.inputbg.js'
|
||||
)
|
||||
),
|
||||
|
||||
//loadinglayer
|
||||
'loadinglayer' => array(
|
||||
$this->ScriptKey => array(
|
||||
'/js/lib/custom/jquery.loadinglayer.js'
|
||||
)
|
||||
),
|
||||
|
||||
//admin_plugin
|
||||
'admin_plugin' => array(
|
||||
$this->ScriptKey => array(
|
||||
'/js/lib/custom/admin_plugin.js'
|
||||
)
|
||||
),
|
||||
|
||||
'jplayer' => array(
|
||||
$this->ScriptKey => array(
|
||||
'/js/lib/jplayer/jquery.jplayer.min.js'
|
||||
)
|
||||
),
|
||||
|
||||
//slides
|
||||
'slides' => array(
|
||||
$this->ScriptKey => array(
|
||||
'/js/lib/jquery.slides.min.js'
|
||||
)
|
||||
),
|
||||
|
||||
'datatable' => array(
|
||||
$this->ScriptKey => array(
|
||||
'/js/lib/jquery.datatable/jquery.dataTables.min.js'
|
||||
),
|
||||
$this->CSSKey => array(
|
||||
'/js/lib/jquery.datatable/datatable.css'
|
||||
)
|
||||
),
|
||||
|
||||
'masonry' => array(
|
||||
$this->ScriptKey => array(
|
||||
'/js/lib/jquery.masonry.min.js'
|
||||
),
|
||||
),
|
||||
|
||||
'jquery-fileupload' => array(
|
||||
$this->ScriptKey => array(
|
||||
'/static/lib/jquery-fileupload/vendor/jquery.ui.widget.js',
|
||||
'/static/lib/jquery-fileupload/jquery.iframe-transport.js',
|
||||
'/static/lib/jquery-fileupload/jquery.fileupload.js',
|
||||
),
|
||||
$this->CSSKey => array(
|
||||
'/static/lib/jquery-fileupload/css/jquery.fileupload.css',
|
||||
)
|
||||
),
|
||||
|
||||
'datepicker' => array(
|
||||
$this->ScriptKey => array(
|
||||
'/js/lib/datepicker/jquery-ui-1.10.3.custom.min.js'
|
||||
),
|
||||
$this->CSSKey => array(
|
||||
'/js/lib/datepicker/jquery-ui-1.10.3.custom.min.css'
|
||||
)
|
||||
),
|
||||
|
||||
/*********谷歌地图*********/
|
||||
|
||||
//Google Map API v3
|
||||
'google_map_v3'=>array(
|
||||
$this->ScriptKey => array(
|
||||
'http://maps.google.com/maps/api/js?sensor=false&language=zh-cn'
|
||||
)
|
||||
),
|
||||
|
||||
//Google Map API v3 - KeyDragZone
|
||||
'google_map_keydragzone' => array(
|
||||
$this->ScriptKey => array(
|
||||
'/lib/google-map/keydragzoom.js'
|
||||
)
|
||||
),
|
||||
|
||||
'kindeditor' => array(
|
||||
$this->ScriptKey => array(
|
||||
'/lib/kindeditor/kindeditor-min.js',
|
||||
'/lib/kindeditor/lang/zh_CN.js'
|
||||
)
|
||||
),
|
||||
//Tianditu
|
||||
'tianditu'=>array(
|
||||
$this->ScriptKey => array(
|
||||
'http://api.tianditu.com/js/maps.js'
|
||||
)
|
||||
),
|
||||
);//插件列表
|
||||
|
||||
}// _init_plus()
|
||||
|
||||
//前台添加插件
|
||||
function appendPlus($render,$plus_name){
|
||||
|
||||
$plus_name = strtolower($plus_name);
|
||||
|
||||
$plusing = $this->plus;
|
||||
|
||||
if(!empty($plusing[$plus_name][$this->ScriptKey]))
|
||||
{
|
||||
foreach($plusing[$plus_name][$this->ScriptKey] as $k=>$v)
|
||||
{
|
||||
$render->headScript()->appendFile($v);
|
||||
}
|
||||
}
|
||||
|
||||
if(!empty($plusing[$plus_name][$this->CSSKey]))
|
||||
{
|
||||
foreach($plusing[$plus_name][$this->CSSKey] as $k=>$v)
|
||||
{
|
||||
$render->headLink()->appendStylesheet($v);
|
||||
}
|
||||
}
|
||||
|
||||
}// AppendPlus
|
||||
|
||||
//加载页面中的JS
|
||||
function AppendModel($render,$model)
|
||||
{
|
||||
|
||||
$model = trim($model);
|
||||
|
||||
$render->headScript()->appendFile("/js/lib/custom/models/".$model.".js");
|
||||
|
||||
}//
|
||||
}
|
|
@ -2,13 +2,84 @@
|
|||
namespace Westdc\Helpers;
|
||||
|
||||
class Tools {
|
||||
/**
|
||||
* 判断是否为UUID字符串
|
||||
* 返回结果为0或1
|
||||
*/
|
||||
|
||||
/**
|
||||
* 判断是否为UUID字符串
|
||||
* @param $uuid
|
||||
* @return int
|
||||
*/
|
||||
public static function isUUID($uuid) {
|
||||
return preg_match("/^[0-9A-Za-z]{8}-[0-9A-Za-z]{4}-[0-9A-Za-z]{4}-[0-9A-Za-z]{4}-[0-9A-Za-z]{12}$/",$uuid);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $str
|
||||
* @return bool
|
||||
*/
|
||||
public function isEmail($str){
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $cmd
|
||||
*/
|
||||
public function execBackend($cmd)
|
||||
{
|
||||
if (substr(php_uname(), 0, 7) == "Windows"){
|
||||
pclose(popen("start cmd /c ". $cmd, "r"));
|
||||
}
|
||||
else {
|
||||
exec($cmd . " > /dev/null &");
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回的汉语文字信息在windows中是GB2312编码,需要手动改成UTF8
|
||||
* iconv("GB2312","UTF-8",$read);
|
||||
* @param $cmd
|
||||
* @return array
|
||||
*/
|
||||
public function execFront($cmd)
|
||||
{
|
||||
$response = array();
|
||||
$handle = popen("$cmd 2>&1", 'r');
|
||||
$read = '';
|
||||
while ($read = fread($handle, 20096)) {
|
||||
$response[] = trim($read);
|
||||
}
|
||||
pclose($handle);
|
||||
flush();
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function uuid()
|
||||
{
|
||||
return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
|
||||
// 32 bits for "time_low"
|
||||
mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
|
||||
|
||||
// 16 bits for "time_mid"
|
||||
mt_rand( 0, 0xffff ),
|
||||
|
||||
// 16 bits for "time_hi_and_version",
|
||||
// four most significant bits holds version number 4
|
||||
mt_rand( 0, 0x0fff ) | 0x4000,
|
||||
|
||||
// 16 bits, 8 bits for "clk_seq_hi_res",
|
||||
// 8 bits for "clk_seq_low",
|
||||
// two most significant bits holds zero and one for variant DCE1.1
|
||||
mt_rand( 0, 0x3fff ) | 0x8000,
|
||||
|
||||
// 48 bits for "node"
|
||||
mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff )
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -8,36 +8,185 @@
|
|||
|
||||
namespace Westdc\Mail;
|
||||
|
||||
use Zend\EventManager\EventManagerInterface;
|
||||
use Zend\EventManager\EventManager;
|
||||
use Zend\EventManager\EventManagerAwareInterface;
|
||||
use Zend\ServiceManager\ServiceManager;
|
||||
use Zend\ServiceManager\ServiceManagerAwareInterface;
|
||||
use Westdc\EventModel\AbstractEventManager;
|
||||
use Westdc\Service\ServiceManager as WestdcServiceManager;
|
||||
use Zend\Mail\Message;
|
||||
use Zend\Mail\Transport\Smtp as SmtpTransport;
|
||||
use Zend\Mail\Transport\SmtpOptions;
|
||||
use Zend\Mime\Message as MimeMessage;
|
||||
use Zend\Mime\Part as MimePart;
|
||||
|
||||
class Mail {
|
||||
class Mail extends AbstractEventManager implements ServiceManagerAwareInterface{
|
||||
|
||||
function __construct()
|
||||
protected $serviceManager;
|
||||
|
||||
public $mail;
|
||||
public $config;
|
||||
public $subject;
|
||||
public $body;
|
||||
public $type;
|
||||
public $transport;
|
||||
public $from;
|
||||
|
||||
public function setServiceManager(ServiceManager $serviceManager)
|
||||
{
|
||||
$this->serviceManager = $serviceManager;
|
||||
|
||||
}
|
||||
$this->init();
|
||||
|
||||
public function setEventManager(EventManagerInterface $events)
|
||||
{
|
||||
$events->setIdentifiers(array(
|
||||
__CLASS__,
|
||||
get_called_class(),
|
||||
));
|
||||
$this->events = $events;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getEventManager()
|
||||
private function init()
|
||||
{
|
||||
if (NULL === $this->events) {
|
||||
$this->setEventManager(new EventManager());
|
||||
if(!$this->serviceManager instanceof ServiceManager)
|
||||
{
|
||||
$serviceManager = new WestdcServiceManager();
|
||||
$this->serviceManager = $serviceManager->getServiceManager();
|
||||
}
|
||||
return $this->events;
|
||||
|
||||
$this->loadConfigure();
|
||||
$this->smtp();
|
||||
$this->buildMailMessage();
|
||||
}
|
||||
|
||||
//单独调用Mail类的时候需要先执行委托函数
|
||||
public function __invoke()
|
||||
{
|
||||
$this->init();
|
||||
}
|
||||
|
||||
public function loadConfigure()
|
||||
{
|
||||
$configService = $this->serviceManager->get('ConfigService');
|
||||
$this->config = $configService->get('email.ini');
|
||||
}
|
||||
|
||||
public function smtp()
|
||||
{
|
||||
$this->transport = new SmtpTransport();
|
||||
|
||||
$options = new SmtpOptions(array(
|
||||
'name' => $this->config['smtp']['hostname'],
|
||||
'host' => $this->config['smtp']['host'],
|
||||
'port' => $this->config['smtp']['port'], // Notice port change for TLS is 587
|
||||
'connection_class' => $this->config['smtp']['auth'],
|
||||
'connection_config' => array(
|
||||
'username' => $this->config['smtp']['username'],
|
||||
'password' => $this->config['smtp']['password'],
|
||||
'ssl' => $this->config['smtp']['ssl'],
|
||||
),
|
||||
));
|
||||
|
||||
$this->transport->setOptions($options);
|
||||
}
|
||||
|
||||
public function buildMailMessage($mail = NULL)
|
||||
{
|
||||
if(empty($mail))
|
||||
{
|
||||
$this->mail = new Message();
|
||||
}else{
|
||||
$this->mail = $mail;
|
||||
}
|
||||
|
||||
$this->mail->setEncoding("UTF-8");
|
||||
}
|
||||
|
||||
//设置默认发件人
|
||||
public function setDefaultFrom()
|
||||
{
|
||||
$this->mail->setFrom($this->config['smtp']['username'],$this->config['smtp']['name']);
|
||||
}
|
||||
|
||||
//添加收件人
|
||||
public function addTo($email,$name)
|
||||
{
|
||||
$this->mail->addTo($email,$name);
|
||||
}
|
||||
|
||||
//加载模板
|
||||
public function loadTemplate($id,$data){
|
||||
|
||||
$mailTemplate = $this->serviceManager->get('Mail/Template');
|
||||
|
||||
$content = $mailTemplate->load($id,$data);
|
||||
|
||||
$this->subject = $content['subject'];
|
||||
$this->body = $content['body'];
|
||||
$this->type = $content['type'];
|
||||
|
||||
}//加载模板
|
||||
|
||||
/**
|
||||
* @param $from
|
||||
*/
|
||||
public function setFrom($from)
|
||||
{
|
||||
$this->from = $from;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param null $from
|
||||
* @return bool
|
||||
*/
|
||||
public function preSend($from = NULL)
|
||||
{
|
||||
if(empty($this->subject) || empty($this->body))
|
||||
{
|
||||
return "邮件信息不完整";
|
||||
}
|
||||
|
||||
if($this->type == 'html')
|
||||
{
|
||||
$bodyPart = new MimeMessage();
|
||||
|
||||
$bodyMessage = new MimePart($this->body);
|
||||
$bodyMessage->type = 'text/html';
|
||||
|
||||
$bodyPart->setParts(array($bodyMessage));
|
||||
|
||||
$this->mail->setBody($bodyPart);
|
||||
}else{
|
||||
$this->mail->setBody($this->body);
|
||||
}
|
||||
|
||||
if(empty($from) && empty($this->from))
|
||||
{
|
||||
$this->setDefaultFrom();
|
||||
}else{
|
||||
if(!empty($this->from))
|
||||
$this->mail->setFrom($this->from['email'],$this->from['name']);
|
||||
if(!empty($from))
|
||||
$this->mail->setFrom($from['email'],$from['name']);
|
||||
}
|
||||
|
||||
$this->mail->setSubject($this->subject);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//使用loadTemplate 的结果发送邮件
|
||||
//在此之前需要使用 $this->mail->addTo()添加收件人
|
||||
/**
|
||||
* @param null $from
|
||||
*/
|
||||
public function send($from = NULL){
|
||||
|
||||
if(!$status = $this->preSend($from))
|
||||
return $status;
|
||||
|
||||
try {
|
||||
$this->transport->send($this->mail);
|
||||
return true;
|
||||
}catch(\Exception $e)
|
||||
{
|
||||
throw new \RuntimeException($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,32 +1,41 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Li Jianxuan
|
||||
* Date: 14-9-19
|
||||
* Time: 下午4:22
|
||||
* User: liujin834
|
||||
* Date: 15/1/3
|
||||
* Time: 下午9:57
|
||||
*/
|
||||
|
||||
namespace Westdc\Mail;
|
||||
|
||||
use Zend\ServiceManager\ServiceManager;
|
||||
use Zend\ServiceManager\ServiceManagerAwareInterface;
|
||||
use Westdc\EventModel\AbstractEventManager;
|
||||
|
||||
class MailService implements ServiceManagerAwareInterface {
|
||||
class Queue extends AbstractEventManager implements ServiceManagerAwareInterface{
|
||||
|
||||
/**
|
||||
* @var ServiceManager
|
||||
*/
|
||||
protected $serviceManager;
|
||||
|
||||
/**
|
||||
* @param ServiceManager $serviceManager
|
||||
* @return service
|
||||
*/
|
||||
public function setServiceManager(ServiceManager $serviceManager)
|
||||
{
|
||||
$this->serviceManager = $serviceManager;
|
||||
|
||||
$this->init();
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
private function init()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public function add(){
|
||||
|
||||
}
|
||||
|
||||
public function show(){
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,90 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Li Jianxuan
|
||||
* Date: 14-9-19
|
||||
* Time: 下午3:43
|
||||
*/
|
||||
|
||||
namespace Westdc\Mail;
|
||||
|
||||
use Zend\ServiceManager\ServiceManager;
|
||||
use Zend\ServiceManager\ServiceManagerAwareInterface;
|
||||
|
||||
class Sender implements ServiceManagerAwareInterface{
|
||||
|
||||
protected $serviceManager;
|
||||
|
||||
public $debug = 0;
|
||||
|
||||
public function setServiceManager(ServiceManager $serviceManager)
|
||||
{
|
||||
$this->serviceManager = $serviceManager;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送即时邮件
|
||||
* @param $options
|
||||
* @return bool
|
||||
*/
|
||||
public function backend($options)
|
||||
{
|
||||
$cmd = "php ".CURRENT_BOOTSTRAP_SCRIPT;
|
||||
$cmd .= ' mail send';
|
||||
$cmd .= ' --email="'.$options['email'].'"';
|
||||
$cmd .= ' --name="'.$options['name'].'"';
|
||||
$cmd .= ' --template="'.$options['template'].'"';
|
||||
|
||||
if(isset($options['data']))
|
||||
{
|
||||
$data = json_encode($options['data']);
|
||||
$cmd .= ' --data=\''.$data.'\'';
|
||||
}
|
||||
|
||||
$tools = $this->serviceManager->get('Tools');
|
||||
|
||||
if($this->debug == 0)
|
||||
{
|
||||
$tools->execBackend($cmd);
|
||||
return true;
|
||||
}
|
||||
|
||||
var_dump($tools->execFront($cmd));
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将邮件添加到发送列队,降低内存和cpu消耗,但是用户无法即时收到,适用于通知类型的邮件和大批量发送的邮件
|
||||
* @param $options
|
||||
* @return bool
|
||||
*/
|
||||
public function queue($options)
|
||||
{
|
||||
$cmd = "php ".CURRENT_BOOTSTRAP_SCRIPT;
|
||||
$cmd .= ' mail queue';
|
||||
$cmd .= ' --email="'.$options['email'].'"';
|
||||
$cmd .= ' --name="'.$options['name'].'"';
|
||||
$cmd .= ' --template="'.$options['template'].'"';
|
||||
|
||||
if(isset($options['data']))
|
||||
{
|
||||
$data = json_encode($options['data']);
|
||||
$cmd .= ' --data=\''.$data.'\'';
|
||||
}
|
||||
|
||||
$tools = $this->serviceManager->get('Tools');
|
||||
|
||||
if($this->debug == 0)
|
||||
{
|
||||
$tools->execBackend($cmd);
|
||||
return true;
|
||||
}
|
||||
|
||||
var_dump($tools->execFront($cmd));
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,139 @@
|
|||
<?php
|
||||
namespace Westdc\Mail;
|
||||
|
||||
use Zend\ServiceManager\ServiceManager;
|
||||
use Zend\ServiceManager\ServiceManagerAwareInterface;
|
||||
|
||||
class Template implements ServiceManagerAwareInterface
|
||||
{
|
||||
protected $serviceManager;
|
||||
|
||||
private $db;
|
||||
|
||||
const DEFAULT_TEMPLATE_TYPE = 'text';
|
||||
|
||||
public function setServiceManager(ServiceManager $serviceManager)
|
||||
{
|
||||
$this->serviceManager = $serviceManager;
|
||||
|
||||
$this->init();
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
private function init()
|
||||
{
|
||||
$dbService = $this->serviceManager->get('Db');
|
||||
$this->db = $dbService->getPdo();
|
||||
}
|
||||
|
||||
public function fetchAll()
|
||||
{
|
||||
$sql='SELECT * FROM emailtext';
|
||||
$rs=$this->db->query($sql);
|
||||
return $rs->fetchAll(\PDO::FETCH_ASSOC);
|
||||
}
|
||||
|
||||
//插入邮件模板
|
||||
public function insert($data)
|
||||
{
|
||||
$temp=$this->fetch($data['template']);
|
||||
if(isset($temp['id']) && is_numeric($temp['id']) && $temp['id']>0)
|
||||
{
|
||||
return '该邮件模板标识已经存在,请更换标识!';
|
||||
}
|
||||
|
||||
$dbhService = $this->serviceManager->get('Db');
|
||||
$dbh = $dbhService->getDbh();
|
||||
|
||||
if(empty($data['subject']))
|
||||
{
|
||||
$data['subject']='未命名模板';
|
||||
}
|
||||
|
||||
|
||||
$rs = $dbh->insert('emailtext',$data,1);
|
||||
return $rs;
|
||||
}
|
||||
|
||||
//删除邮件模板
|
||||
public function del($id)
|
||||
{
|
||||
$sql = "DELETE FROM emailtext WHERE id=$id";
|
||||
$rs = $this->db->exec($sql);
|
||||
return $rs;
|
||||
}
|
||||
|
||||
//更新邮件模板
|
||||
public function update($data,$id)
|
||||
{
|
||||
$temp=$this->fetch($data['template']);
|
||||
if(isset($temp['id']) && is_numeric($temp['id']) && $temp['id']>0)
|
||||
{
|
||||
if($id!=$temp['id'])
|
||||
return '该邮件模板标识已经存在,请更换标识!';
|
||||
}
|
||||
|
||||
$dbhService = $this->serviceManager->get('Db');
|
||||
$dbh = $dbhService->getDbh();
|
||||
|
||||
|
||||
$rs = $dbh->update('emailtext',$data,"id=$id",1);
|
||||
return $rs;
|
||||
}
|
||||
|
||||
public function fetch($key)
|
||||
{
|
||||
if(is_numeric($key))
|
||||
{
|
||||
$sql="SELECT * FROM emailtext WHERE id=$key";
|
||||
}else
|
||||
{
|
||||
$sql="SELECT * FROM emailtext WHERE template='$key'";
|
||||
}
|
||||
|
||||
$rs=$this->db->query($sql);
|
||||
|
||||
return $rs->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $key
|
||||
* @param $data
|
||||
* @return array
|
||||
*/
|
||||
public function load($key,$data){
|
||||
|
||||
$template_data = $this->fetch($key);
|
||||
|
||||
if(empty($data) || !is_array($data) || count($data) < 1)
|
||||
return [
|
||||
'subject' => $template_data['subject'],
|
||||
'body' => $template_data['body'],
|
||||
'type' => isset($template_data['type']) ? $template_data['type'] : self::DEFAULT_TEMPLATE_TYPE
|
||||
];
|
||||
|
||||
$patterns = array();
|
||||
$replacements = array();
|
||||
|
||||
foreach($data as $k=>$v)
|
||||
{
|
||||
$patterns[]='/{'.$k.'}/i';
|
||||
$replacements[]=$v;
|
||||
}
|
||||
|
||||
ksort($patterns);
|
||||
ksort($replacements);
|
||||
|
||||
$replaced_body = preg_replace($patterns, $replacements, $template_data['body']);
|
||||
$replaced_subject = preg_replace($patterns, $replacements, $template_data['subject']);
|
||||
|
||||
return [
|
||||
'subject' => $replaced_subject,
|
||||
'body' => $replaced_body,
|
||||
'type' => isset($template_data['type']) ? $template_data['type'] : self::DEFAULT_TEMPLATE_TYPE
|
||||
];
|
||||
|
||||
}//function load
|
||||
|
||||
}
|
|
@ -1,6 +1,8 @@
|
|||
<?php
|
||||
namespace Westdc\Member;
|
||||
|
||||
use Zend\ServiceManager\ServiceManager;
|
||||
use Zend\ServiceManager\ServiceManagerAwareInterface;
|
||||
use Westdc\EventModel\AbstractEventManager;
|
||||
use Zend\Authentication\AuthenticationService;
|
||||
use Zend\Authentication\Storage\Session as SessionStorage;
|
||||
|
@ -13,7 +15,8 @@ use Westdc\Db\Db as Zend_Db;
|
|||
use Westdc\Mail\Mail;
|
||||
use Westdc\User\Member;
|
||||
|
||||
class Account extends AbstractEventManager
|
||||
|
||||
class Account extends AbstractEventManager implements ServiceManagerAwareInterface
|
||||
{
|
||||
public $memberTable = "tbl_member";
|
||||
public $FieldUsername = "username";
|
||||
|
@ -31,9 +34,23 @@ class Account extends AbstractEventManager
|
|||
|
||||
function __construct()
|
||||
{
|
||||
$this->db = new Db();
|
||||
$this->config = Config::get();
|
||||
}
|
||||
|
||||
public function init()
|
||||
{
|
||||
$dbService = $this->serviceManager->get('Db');
|
||||
$this->db = $dbService->getPdo();
|
||||
}
|
||||
|
||||
public function setServiceManager(ServiceManager $serviceManager)
|
||||
{
|
||||
$this->serviceManager = $serviceManager;
|
||||
|
||||
$this->init();
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
//获取账号信息,数组
|
||||
public function getAccountInfo($id = 0)
|
||||
|
|
|
@ -124,12 +124,5 @@ class Cookie
|
|||
setcookie('user','',time()-99999,'/');
|
||||
setcookie('scr','',time()-99999,'/');
|
||||
}
|
||||
|
||||
public function getUser()
|
||||
{
|
||||
$sql = "SELECT * FROM ".$this->memberTable." m ORDER BY m.id DESC";
|
||||
$rs = $this->db->query($sql);
|
||||
return $rs->fetchAll();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,171 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: liujin834
|
||||
* Date: 14/12/21
|
||||
* Time: 下午4:46
|
||||
*/
|
||||
|
||||
namespace Westdc\Metadata;
|
||||
|
||||
use Zend\ServiceManager\ServiceManager;
|
||||
use Zend\ServiceManager\ServiceManagerAwareInterface;
|
||||
use Westdc\EventModel\AbstractEventManager;
|
||||
|
||||
class Dataset extends AbstractEventManager implements ServiceManagerAwareInterface{
|
||||
|
||||
protected $serviceManager;
|
||||
|
||||
private $db;
|
||||
|
||||
public function setServiceManager(ServiceManager $serviceManager)
|
||||
{
|
||||
$this->serviceManager = $serviceManager;
|
||||
|
||||
$this->init();
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
private function init()
|
||||
{
|
||||
$dbService = $this->serviceManager->get('Db');
|
||||
$this->db = $dbService->getPdo();
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询某个元数据的数据集信息(数据存储位置)
|
||||
* @param $uuid
|
||||
* @return mixed
|
||||
*/
|
||||
public function fetch($uuid)
|
||||
{
|
||||
$sql = "SELECT * FROM dataset WHERE uuid=?";
|
||||
$sth = $this->db->prepare($sql);
|
||||
$sth ->execute(array($uuid));
|
||||
return $sth->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param $uuid
|
||||
* @param $host
|
||||
* @param $path
|
||||
* @return bool|string
|
||||
*/
|
||||
public function record($uuid,$host,$path)
|
||||
{
|
||||
$tools = $this->serviceManager->get('Tools');
|
||||
|
||||
if( false == $tools->isUUID($uuid) )
|
||||
return "Invalid UUID";
|
||||
|
||||
$data = $this->fetch($uuid);
|
||||
|
||||
if(isset($data['id']) && $data['id'] > 0)
|
||||
return $this->update($uuid,$host,$path);
|
||||
else
|
||||
return $this->insert($uuid,$host,$path);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $uuid
|
||||
* @param $host
|
||||
* @param $path
|
||||
* @return bool
|
||||
*/
|
||||
public function update($uuid,$host,$path)
|
||||
{
|
||||
$sql = "UPDATE dataset SET host='$host',path='$path' WHERE uuid='$uuid'";
|
||||
if($this->db->exec($sql) > 0)
|
||||
{
|
||||
$this->proftpUpload($uuid,$host);
|
||||
$this->getEventManager()->trigger('dataset.update.success', $this, compact('uuid','host','path'));
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $uuid
|
||||
* @param $host
|
||||
* @param $path
|
||||
* @return bool
|
||||
*/
|
||||
public function insert($uuid,$host,$path)
|
||||
{
|
||||
$dbService = $this->serviceManager->get('Db');
|
||||
$dbh = $dbService->getDbh();
|
||||
|
||||
$id = $dbh->insert('dataset',[
|
||||
'uuid' => $uuid,
|
||||
'host' => $host,
|
||||
'path' => $path,
|
||||
],true);
|
||||
|
||||
if(is_numeric($id) && $id>0)
|
||||
{
|
||||
$this->proftpUpload($uuid,$host);
|
||||
$this->getEventManager()->trigger('dataset.insert.success', $this, compact('id','uuid','host','path'));
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $uuid
|
||||
* @return bool
|
||||
*/
|
||||
public function delete($uuid)
|
||||
{
|
||||
$sql = "DELETE FROM dataset WHERE uuid='$uuid'";
|
||||
if($this->db->exec($sql) > 0)
|
||||
{
|
||||
$this->getEventManager()->trigger('dataset.delete.success', $this, compact('uuid'));
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function reload($uuid)
|
||||
{
|
||||
$data = $this->fetch($uuid);
|
||||
|
||||
if(!isset($data['id']) || empty($data['id']))
|
||||
{
|
||||
return "未找到对应的记录,无法完成更新";
|
||||
}
|
||||
|
||||
try {
|
||||
$this->proftpUpload($uuid, $data['host']);
|
||||
}catch(\Exception $e){
|
||||
return $e->getMessage();
|
||||
}
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $uuid
|
||||
* @param $host
|
||||
*/
|
||||
public function proftpUpload($uuid,$host)
|
||||
{
|
||||
if ($host=='ftp1.westgis.ac.cn')
|
||||
{
|
||||
//var_dump("http://ftp1.westgis.ac.cn/proftp_upload.php?uuid=".$uuid."&filelist=1");
|
||||
file_get_contents("http://ftp1.westgis.ac.cn/proftp_upload.php?uuid=".$uuid."&filelist=1");
|
||||
} else if ($host=='ftp2.westgis.ac.cn') {
|
||||
//var_dump("http://ftp1.westgis.ac.cn/proftp_upload.php?uuid=".$uuid."&filelist=1");
|
||||
file_get_contents("http://ftp2.westgis.ac.cn/proftp_upload.php?uuid=".$uuid."&filelist=1");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -8,10 +8,70 @@
|
|||
|
||||
namespace Westdc\Metadata;
|
||||
|
||||
use Zend\ServiceManager\ServiceManager;
|
||||
use Zend\ServiceManager\ServiceManagerAwareInterface;
|
||||
use Westdc\EventModel\AbstractEventManager;
|
||||
|
||||
class Metadata extends AbstractEventManager implements ServiceManagerAwareInterface{
|
||||
|
||||
protected $serviceManager;
|
||||
|
||||
private $db;
|
||||
|
||||
public function setServiceManager(ServiceManager $serviceManager)
|
||||
{
|
||||
$this->serviceManager = $serviceManager;
|
||||
|
||||
$this->init();
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
private function init()
|
||||
{
|
||||
$dbService = $this->serviceManager->get('Db');
|
||||
$this->db = $dbService->getPdo();
|
||||
}
|
||||
|
||||
|
||||
class Metadata {
|
||||
public function simpleFetch($uuid)
|
||||
{
|
||||
$sql="select * from metadata where uuid='$uuid'";
|
||||
$rs = $this->db->query($sql);
|
||||
|
||||
return $rs->fetch();
|
||||
}//simpleFetch
|
||||
|
||||
/**
|
||||
* 通过UUID删除元数据
|
||||
* @param $uuid
|
||||
* @return bool|string
|
||||
*/
|
||||
public function delete($uuid)
|
||||
{
|
||||
|
||||
$tools = $this->serviceManager->get('Tools');
|
||||
|
||||
if( false == $tools->isUUID($uuid) )
|
||||
return "参数错误";
|
||||
|
||||
|
||||
$sql = "delete from mdstatus where uuid='$uuid'";
|
||||
$sql1 = "delete from mdauthor where uuid='$uuid'";
|
||||
$sql2="delete from metadata where uuid='$uuid'";
|
||||
|
||||
try{
|
||||
$this->db->exec($sql);
|
||||
$this->db->exec($sql1);
|
||||
$this->db->exec($sql2);
|
||||
|
||||
$search=new Search();
|
||||
$search->del($uuid,'uuid');
|
||||
}catch(\Exception $e){
|
||||
return $e->getMessage();
|
||||
}
|
||||
|
||||
return true;
|
||||
}//delete 删除元数据
|
||||
|
||||
}
|
|
@ -0,0 +1,292 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: liujin834
|
||||
* Date: 14/12/21
|
||||
* Time: 上午11:11
|
||||
*/
|
||||
|
||||
namespace Westdc\Metadata;
|
||||
|
||||
class Search
|
||||
{
|
||||
var $terms;
|
||||
var $text;
|
||||
var $xs;
|
||||
var $search;
|
||||
var $error;
|
||||
var $pager;
|
||||
var $count;
|
||||
var $related;
|
||||
var $corrected;
|
||||
var $total;
|
||||
var $search_cost;
|
||||
var $docs;
|
||||
var $hot;
|
||||
var $base_url;
|
||||
var $expanded;
|
||||
|
||||
//require_once '/home/wlx/xunsearch/sdk/php/lib/XS.php';
|
||||
|
||||
private function safe_query($search)
|
||||
{
|
||||
return preg_replace('/%|_|\'|\\\\/', '\\\\$0', stripslashes($search));
|
||||
}
|
||||
|
||||
function parse_search($search="", $safe = true)
|
||||
{
|
||||
if (empty($search)) $search=$this->text;
|
||||
$temp = array();
|
||||
preg_match_all('/"([^"]+)"|([^\\s]+)/', (( $safe ) ? $this->safe_query($search) : $search), $temp);
|
||||
|
||||
for ($i = 1; $i < count($temp); $i++)
|
||||
{
|
||||
foreach ( $temp[$i] as $value )
|
||||
{
|
||||
if ( strlen($value) >= 3 )
|
||||
{
|
||||
$this->terms[] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function sql_expr($field)
|
||||
{
|
||||
$sql=" 1=1 ";
|
||||
if (!is_array($field))
|
||||
{
|
||||
$field=array($field);
|
||||
}
|
||||
if (!count($this->terms))
|
||||
$this->parse_search();
|
||||
foreach($this->terms as $t)
|
||||
{
|
||||
$sql.=" and (1<>1 ";
|
||||
foreach($field as $f)
|
||||
{
|
||||
$sql.=" or ".$f." ilike '%".$t."%' ";
|
||||
}
|
||||
$sql.=") ";
|
||||
}
|
||||
return $sql;
|
||||
}
|
||||
function __construct($text='')
|
||||
{
|
||||
require_once '/home/wlx/xunsearch/sdk/php/lib/XS.php';
|
||||
$this->xs=new XS('heihe');
|
||||
$this->search=$this->xs->search;
|
||||
$this->terms = array();
|
||||
$this->text=$text;
|
||||
|
||||
// other variable maybe used
|
||||
$this->count = $this->total = $this->search_cost = 0;
|
||||
$this->docs = $this->related = $this->corrected =$this->expanded = $this->hot = array();
|
||||
$this->error = $this->pager = $this->base_url='';
|
||||
}
|
||||
|
||||
function dosearch()
|
||||
{
|
||||
//
|
||||
// 支持的 GET 参数列表
|
||||
// q: 查询语句
|
||||
// m: 开启模糊搜索,其值为 yes/no
|
||||
// f: 只搜索某个字段,其值为字段名称,要求该字段的索引方式为 self/both
|
||||
// s: 排序字段名称及方式,其值形式为:xxx_ASC 或 xxx_DESC
|
||||
// p: 显示第几页,每页数量为 XSSearch::PAGE_SIZE 即 10 条
|
||||
// ie: 查询语句编码,默认为 UTF-8
|
||||
// oe: 输出编码,默认为 UTF-8
|
||||
// xml: 是否将搜索结果以 XML 格式输出,其值为 yes/no
|
||||
//
|
||||
// variables
|
||||
$eu = '';
|
||||
$__ = array('q', 'm', 'f', 's', 'p', 'ie', 'oe', 'syn', 'xml','east','west','south','north','begin','end');
|
||||
foreach ($__ as $_)
|
||||
$$_ = isset($_GET[$_]) ? $_GET[$_] : '';
|
||||
|
||||
// recheck request parameters
|
||||
$q = get_magic_quotes_gpc() ? stripslashes($q) : $q;
|
||||
$f = empty($f) ? '_all' : $f;
|
||||
${'m_check'} = ($m == 'yes' ? ' checked' : '');
|
||||
${'syn_check'} = ($syn == 'yes' ? ' checked' : '');
|
||||
${'f_' . $f} = ' checked';
|
||||
${'s_' . $s} = ' selected';
|
||||
if (!isset($q)) $q='';
|
||||
// base url
|
||||
$this->base_url = '/search?q=' . urlencode($q) . '&m=' . $m . '&f=' . $f . '&s=' . $s .'&begin='.$begin.'&end='.$end.'&east='.$east.'&north='.$north.'&west='.$west.'&south='.$south. $eu;
|
||||
|
||||
$total_begin = microtime(true);
|
||||
// perform the search
|
||||
try
|
||||
{
|
||||
$this->search->setCharset('UTF-8');
|
||||
|
||||
if (empty($q))
|
||||
{
|
||||
// just show hot query
|
||||
$this->hot = $this->search->getHotQuery();
|
||||
}
|
||||
|
||||
{
|
||||
// fuzzy search
|
||||
$this->search->setFuzzy($m === 'yes');
|
||||
|
||||
// synonym search
|
||||
$this->search->setAutoSynonyms($syn === 'yes');
|
||||
|
||||
// set query
|
||||
if (!empty($f) && $f != '_all')
|
||||
{
|
||||
$this->search->setQuery($f . ':(' . $q . ')');
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->search->setQuery($q);
|
||||
}
|
||||
|
||||
//spatial search
|
||||
if (!empty($east) && !empty($west) && !empty($south) && !empty($north))
|
||||
{
|
||||
$this->search->addRange('east',null,$east);
|
||||
$this->search->addRange('west',$west,null);
|
||||
$this->search->addRange('south',$south,null);
|
||||
$this->search->addRange('north',null,$north);
|
||||
}
|
||||
|
||||
//date search
|
||||
if (!empty($begin))
|
||||
{
|
||||
$from=strtotime($begin);
|
||||
$this->search->addRange('timebegin',$from,null);
|
||||
}
|
||||
if (!empty($end))
|
||||
{
|
||||
$to=strtotime($end);
|
||||
$this->search->addRange('timeend',null,$to);
|
||||
}
|
||||
|
||||
// set sort
|
||||
if (($pos = strrpos($s, '_')) !== false)
|
||||
{
|
||||
$sf = substr($s, 0, $pos);
|
||||
$st = substr($s, $pos + 1);
|
||||
$this->search->setSort($sf, $st === 'ASC');
|
||||
}
|
||||
|
||||
// set offset, limit
|
||||
$p = max(1, intval($p));
|
||||
$n = XSSearch::PAGE_SIZE;
|
||||
$this->search->setLimit($n, ($p - 1) * $n);
|
||||
|
||||
// get the result
|
||||
$search_begin = microtime(true);
|
||||
$this->docs = $this->search->search();
|
||||
$this->search_cost = microtime(true) - $search_begin;
|
||||
|
||||
// get other result
|
||||
$this->count = $this->search->getLastCount();
|
||||
$this->total = $this->search->getDbTotal();
|
||||
|
||||
if ($xml !== 'yes')
|
||||
{
|
||||
if ($this->count<1)
|
||||
$this->expanded=$this->search->getExpandedQuery($q);
|
||||
// try to corrected, if resul too few
|
||||
if ($this->count < 1 || $this->count < ceil(0.001 * $this->total))
|
||||
$this->corrected = $this->search->getCorrectedQuery();
|
||||
// get related query
|
||||
$this->related = $this->search->getRelatedQuery();
|
||||
}
|
||||
|
||||
// gen pager
|
||||
if ($this->count > $n)
|
||||
{
|
||||
$pb = max($p - 5, 1);
|
||||
$pe = min($pb + 10, ceil($this->count / $n) + 1);
|
||||
$this->pager = '';
|
||||
do
|
||||
{
|
||||
$this->pager .= ($pb == $p) ? '<strong>' . $p . '</strong>' : '<a href="' . $this->base_url . '&p=' . $pb . '">[' . $pb . ']</a>';
|
||||
}
|
||||
while (++$pb < $pe);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (XSException $e)
|
||||
{
|
||||
$this->error = strval($e);
|
||||
}
|
||||
// calculate total time cost
|
||||
$this->total_cost = microtime(true) - $total_begin;
|
||||
|
||||
// XML OUPUT
|
||||
if ($xml === 'yes' && !empty($q))
|
||||
{
|
||||
header("Content-Type: text/xml; charset=$oe");
|
||||
echo "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
|
||||
echo "<xs:result count=\"$this->count\" total=\"$this->total\" cost=\"$this->total_cost\" xmlns:xs=\"http://www.xunsearch.com\">\n";
|
||||
if ($this->error !== '')
|
||||
echo " <error><![CDATA[" . $this->error . "]]></error>\n";
|
||||
|
||||
foreach ($this->docs as $doc)
|
||||
{
|
||||
echo " <doc index=\"" . $doc->rank() . "\" percent=\"" . $doc->percent() . "%\">\n";
|
||||
foreach ($doc as $k => $v)
|
||||
{
|
||||
echo " <$k>";
|
||||
if (is_numeric($v))
|
||||
echo $v;
|
||||
else
|
||||
echo "\n <![CDATA[" . $v . "]]>\n ";
|
||||
echo "</$k>\n";
|
||||
}
|
||||
echo " </doc>\n";
|
||||
}
|
||||
echo "</xs:result>\n";
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
//搜索建议
|
||||
function suggest($q)
|
||||
{
|
||||
$terms = array();
|
||||
if (!empty($q) && strpos($q, ':') === false)
|
||||
{
|
||||
try {
|
||||
$terms = $this->search->setCharset('UTF-8')->getExpandedQuery($q);
|
||||
} catch (XSException $e) { }
|
||||
}
|
||||
return json_encode($terms);
|
||||
}
|
||||
|
||||
//添加新文档
|
||||
//$data: 包含field和value的数组
|
||||
function add($data)
|
||||
{
|
||||
$doc=new XSDocument;
|
||||
$index=$this->xs->index;
|
||||
$doc->setFields($data);
|
||||
$index->add($doc);
|
||||
}
|
||||
|
||||
//更新已有文档
|
||||
//$data: 包含field和value的数组
|
||||
function update($data)
|
||||
{
|
||||
$doc=new XSDocument;
|
||||
$index=$this->xs->index;
|
||||
$doc->setFields($data);
|
||||
$index->update($doc);
|
||||
}
|
||||
//根据主键删除对应的索引
|
||||
function del($data,$field='')
|
||||
{
|
||||
$index=$this->xs->index;
|
||||
if (empty($field))
|
||||
$index->del($data);
|
||||
else {
|
||||
$index->del($data,$field);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
<?php
|
||||
namespace Westdc\Reference\Handler;
|
||||
|
||||
use Zend\EventManager\EventInterface;
|
||||
use Westdc\Service\AbstractServiceManager;
|
||||
|
||||
//事件中存在的操作
|
||||
class RisHandler extends AbstractServiceManager
|
||||
{
|
||||
private $db; //传入PDO对象误
|
||||
private $config; //全局配置
|
||||
|
||||
private $table;
|
||||
public $tbl_maillog = ""; //邮件日志表
|
||||
|
||||
function __construct($db = NULL)
|
||||
{
|
||||
$this->dbService = $this->getServiceManager()->get('Db');
|
||||
$this->db = $this->dbService->getPdo();
|
||||
|
||||
$this->table = new \stdClass;
|
||||
$this->table->reference = "reference";
|
||||
$this->table->reference_author = "ref_author";
|
||||
$this->table->reference_tag = "ref_tag";
|
||||
}
|
||||
|
||||
//检查ris中的文献是否已经存在
|
||||
public function checkRisReference(EventInterface $e)
|
||||
{
|
||||
$ref = $e->getParam('ref');
|
||||
|
||||
$wheresql = array();
|
||||
|
||||
if(preg_match("/\'/",$ref['title']))
|
||||
{
|
||||
$ref['title'] = preg_replace("/\'/","''",$ref['title']);
|
||||
}
|
||||
|
||||
$wheresql[] = " lower(title)=lower('{$ref['title']}') ";
|
||||
$wheresql[] = " year='{$ref['year']}' ";
|
||||
|
||||
//暂时不使用期刊限制
|
||||
/*if(isset($ref['publisher']))
|
||||
{
|
||||
$wheresql[] = " publisher='{$ref['publisher']}' ";
|
||||
}*/
|
||||
|
||||
if(count($wheresql) > 0)
|
||||
{
|
||||
$wheresql = " WHERE ".join(" and ",$wheresql);
|
||||
}else{
|
||||
$wheresql = "";
|
||||
}
|
||||
|
||||
$sql="select * from {$this->table->reference} $wheresql";
|
||||
$sth=$this->db->query($sql);
|
||||
$row=$sth->fetch();
|
||||
$id=$row['id'];
|
||||
|
||||
if(!empty($row['id']))
|
||||
{
|
||||
return $id;
|
||||
}else{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
//删除作者
|
||||
public function deleteAuthor(EventInterface $e)
|
||||
{
|
||||
$id = $e->getParam('id');
|
||||
|
||||
$sql = "DELETE FROM {$this->table->reference_author} WHERE id=$id ";
|
||||
return $this->db->exec($sql);
|
||||
}
|
||||
|
||||
public function deleteTag(EventInterface $e)
|
||||
{
|
||||
$id = $e->getParam('id');
|
||||
|
||||
$sql = "DELETE FROM {$this->table->reference_tag} WHERE id=$id ";
|
||||
return $this->db->exec($sql);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
namespace Westdc\Reference\Listener;
|
||||
|
||||
use Westdc\Reference\Handler\RisHandler;
|
||||
use Zend\EventManager\ListenerAggregateInterface;
|
||||
use Zend\EventManager\EventManagerInterface;
|
||||
|
||||
class RisListener implements ListenerAggregateInterface
|
||||
{
|
||||
protected $listeners = array();
|
||||
|
||||
public function attach(EventManagerInterface $events)
|
||||
{
|
||||
$Handler = new RisHandler();
|
||||
$events->attach('checkLoad', array($Handler, 'checkRisReference'), 100);
|
||||
$events->attach('delete.after', array($Handler, 'deleteAuthor'), 100);
|
||||
$events->attach('delete.after', array($Handler, 'deleteTag'), 80);
|
||||
}
|
||||
|
||||
public function detach(EventManagerInterface $events)
|
||||
{
|
||||
foreach ($this->listeners as $index => $listener) {
|
||||
if ($events->detach($listener)) {
|
||||
unset($this->listeners[$index]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,784 @@
|
|||
<?php
|
||||
namespace Westdc\Reference;
|
||||
|
||||
use Zend\ServiceManager\ServiceManager;
|
||||
use Zend\ServiceManager\ServiceManagerAwareInterface;
|
||||
use Westdc\EventModel\AbstractEventManager;
|
||||
use Westdc\Reference\Listener\ReferenceListener;
|
||||
|
||||
class Reference extends AbstractEventManager implements ServiceManagerAwareInterface{
|
||||
|
||||
protected $serviceManager;
|
||||
private $db; //传入PDO对象.
|
||||
|
||||
protected $events = NULL;
|
||||
public $table;
|
||||
public $keyword;
|
||||
public $order;
|
||||
public $sort = "DESC";
|
||||
public $field;
|
||||
|
||||
public $reftype;
|
||||
|
||||
function __construct($db = NULL,$mail = NULL)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public function setServiceManager(ServiceManager $serviceManager)
|
||||
{
|
||||
$this->serviceManager = $serviceManager;
|
||||
|
||||
$this->init();
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
private function init(){
|
||||
$dbService = $this->serviceManager->get('Db');
|
||||
$this->db = $dbService->getPdo();
|
||||
unset($dbService);
|
||||
|
||||
$this->table = new \stdClass();
|
||||
$this->table->reference = "reference";
|
||||
$this->table->reference_author = "ref_author";
|
||||
$this->table->source = "source";
|
||||
$this->table->metadata_reference = "mdref";
|
||||
$this->table->reference_tag = "ref_tag";
|
||||
$this->table->metadata = "metadata";
|
||||
$this->table->attachments = "attachments";
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加或编辑文献
|
||||
* @param $data
|
||||
* @param int $id
|
||||
* @return bool|string
|
||||
*/
|
||||
public function reference($data,$id = 0)
|
||||
{
|
||||
$params = compact('data');
|
||||
$results = $this->getEventManager()->trigger('submit.before', $this, $params);
|
||||
$cache_data = $results->bottom();
|
||||
|
||||
if($cache_data !== true)
|
||||
{
|
||||
return $cache_data;
|
||||
}
|
||||
|
||||
$results = $this->getEventManager()->trigger('submit.processData', $this, $params);
|
||||
$data = $results->bottom();
|
||||
|
||||
$dbServices = $this->serviceManager->get('Db');
|
||||
$dbh = $dbServices->getDbh();
|
||||
|
||||
if(empty($id))
|
||||
{
|
||||
$id = $dbh->insert($this->table->reference,$data,true);
|
||||
}else{
|
||||
if(!$dbh->update($this->table->reference,$data," id=$id ",true))
|
||||
{
|
||||
return "修改失败!请重试";
|
||||
}
|
||||
}
|
||||
|
||||
if(!empty($id) && is_numeric($id))
|
||||
{
|
||||
return true;
|
||||
}else{
|
||||
return "修改失败";
|
||||
}
|
||||
}
|
||||
|
||||
//上传文献PDF
|
||||
public function uploadReferencePdf($file,$autoread = false)
|
||||
{
|
||||
$configService = $this->serviceManager->get('ConfigService');
|
||||
$appConfig = $configService->get('application.ini');
|
||||
|
||||
$fileUploadService = $this->serviceManager->get('File/Upload');
|
||||
$fileUploadService->setParams(['file_type' => 'literature']);
|
||||
$file_info = $fileUploadService($file,$appConfig['reference_save_path'],"","",$fileUploadService::DATETIME_MODEL_Y);
|
||||
|
||||
if(isset($file_info['error']) && !empty($file_info['error']))
|
||||
{
|
||||
return array("error" => $file_info['error']);
|
||||
}
|
||||
|
||||
if($autoread)
|
||||
{
|
||||
$params = compact('file_data');
|
||||
$results = $this->events()->trigger('upload.insertToReferenceTable', $this, $params);
|
||||
$cache_data = $results->bottom();
|
||||
$file_info = array_merge($file_info,$cache_data);
|
||||
}
|
||||
|
||||
return $file_info;
|
||||
}
|
||||
|
||||
//通过文件名自动提取文章标题
|
||||
public function getReferenceTitleFromFilenName($filename)
|
||||
{
|
||||
$file = new Files();
|
||||
$title = str_replace( ".".$file->getFileTextExt($filename),"",$filename);
|
||||
return $title;
|
||||
}
|
||||
|
||||
//删除文献文件
|
||||
public function deleteReferenceAttchment($attid)
|
||||
{
|
||||
if(empty($attid) || !is_numeric($attid))
|
||||
{
|
||||
return array("error"=>"参数错误");
|
||||
}
|
||||
|
||||
$files = new Files();
|
||||
$status = $files->delete($attid);
|
||||
|
||||
if($status !== true)
|
||||
{
|
||||
return array("error"=>$status);
|
||||
}else{
|
||||
return array("success"=>1);
|
||||
}
|
||||
}
|
||||
|
||||
//所有文献
|
||||
public function fetchAll()
|
||||
{
|
||||
$wheresql = array();
|
||||
if(!empty($this->keyword))
|
||||
{
|
||||
$wheresql[] = " ({$this->table->reference}.title LIKE '%{$this->keyword}%' OR {$this->table->reference}.reference LIKE '%{$this->keyword}%') ";
|
||||
}
|
||||
|
||||
if(!empty($this->field))
|
||||
{
|
||||
foreach($this->field as $k=>$v)
|
||||
{
|
||||
if(!empty($v))
|
||||
{
|
||||
if(!is_numeric($v)) $v="'{$v}'";
|
||||
$wheresql[] = " ({$this->table->reference}.{$k}={$v} ) ";
|
||||
}else{
|
||||
if(is_numeric($v))
|
||||
$wheresql[] = " ({$this->table->reference}.{$k} IS NULL OR {$this->table->reference}.{$k}=0 ) ";
|
||||
else
|
||||
$wheresql[] = " ({$this->table->reference}.{$k} IS NULL ) ";
|
||||
}//if(empty($v)
|
||||
}//foreach
|
||||
}
|
||||
|
||||
if(count($wheresql)>0)
|
||||
{
|
||||
$wheresql = " WHERE ".join(" AND ",$wheresql);
|
||||
}else{
|
||||
$wheresql = "";
|
||||
}
|
||||
|
||||
if(empty($this->order))
|
||||
{
|
||||
$order = "{$this->table->reference}.title";
|
||||
}else{
|
||||
$order = "{$this->table->reference}.{$this->order}";
|
||||
}
|
||||
|
||||
$sql = "SELECT {$this->table->reference}.* FROM
|
||||
{$this->table->reference}
|
||||
$wheresql
|
||||
ORDER BY $order {$this->sort}";
|
||||
$rs = $this->db->query($sql);
|
||||
return $rs->fetchAll();
|
||||
}
|
||||
|
||||
//获取专题数据的文献
|
||||
public function fetchThemeReferences($code)
|
||||
{
|
||||
$wheresql = array();
|
||||
//$wheresql[] = " s.code='$code' ";
|
||||
if(!empty($this->keyword))
|
||||
{
|
||||
$wheresql[] = " (ref.title iLIKE '%{$this->keyword}%' OR ref.reference iLIKE '%{$this->keyword}%') ";
|
||||
}
|
||||
if(count($wheresql)>0)
|
||||
{
|
||||
$wheresql = " and ".join(" AND ",$wheresql);
|
||||
}else{
|
||||
$wheresql = "";
|
||||
}
|
||||
|
||||
if(empty($this->order))
|
||||
{
|
||||
$order = "ref.year,ref.title";
|
||||
}else{
|
||||
$order = "ref.{$this->order} {$this->sort}";
|
||||
}
|
||||
|
||||
$sql="select distinct ref.* from {$this->table->reference} ref where ref.id in (select r.refid from mdref r
|
||||
left join datasource ds on r.uuid=ds.uuid left join {$this->table->source} s on s.id=ds.sourceid
|
||||
where s.code='$code')
|
||||
$wheresql
|
||||
ORDER BY $order";
|
||||
$rs=$this->db->query($sql);
|
||||
return $rs->fetchAll();
|
||||
}
|
||||
|
||||
//Get WestDC references
|
||||
public function fetchWestdcReferences()
|
||||
{
|
||||
$wheresql = array();
|
||||
$wheresql[]=" r.uuid='e31f5ea7-a4af-4ae3-9ac1-1a84132c4338' ";
|
||||
if(!empty($this->keyword))
|
||||
{
|
||||
$wheresql[] = " (ref.title LIKE '%{$this->keyword}%' OR ref.reference LIKE '%{$this->keyword}%') ";
|
||||
}
|
||||
if(count($wheresql)>0)
|
||||
{
|
||||
$wheresql = " WHERE ".join(" AND ",$wheresql);
|
||||
}else{
|
||||
$wheresql = "";
|
||||
}
|
||||
|
||||
if(empty($this->order))
|
||||
{
|
||||
$order = "ref.year,ref.title";
|
||||
}else{
|
||||
$order = "ref.{$this->order} {$this->sort}";
|
||||
}
|
||||
|
||||
$sql="select distinct ref.* from mdref r left join {$this->table->reference} ref on r.refid=ref.id
|
||||
$wheresql
|
||||
ORDER BY $order";
|
||||
$rs=$this->db->query($sql);
|
||||
return $rs->fetchAll();
|
||||
}
|
||||
|
||||
//Get references which need to deal with
|
||||
public function fetchTodoReferences()
|
||||
{
|
||||
$wheresql = array();
|
||||
$wheresql[]=" ref.id not in (select distinct refid from mdref) ";
|
||||
if(!empty($this->keyword))
|
||||
{
|
||||
$wheresql[] = " (ref.title LIKE '%{$this->keyword}%' OR ref.reference LIKE '%{$this->keyword}%') ";
|
||||
}
|
||||
if(count($wheresql)>0)
|
||||
{
|
||||
$wheresql = " WHERE ".join(" AND ",$wheresql);
|
||||
}else{
|
||||
$wheresql = "";
|
||||
}
|
||||
|
||||
if(empty($this->order))
|
||||
{
|
||||
$order = "ref.year,ref.title";
|
||||
}else{
|
||||
$order = "ref.{$this->order} {$this->sort}";
|
||||
}
|
||||
|
||||
$sql="select distinct ref.* from {$this->table->reference} ref
|
||||
$wheresql
|
||||
ORDER BY $order";
|
||||
$rs=$this->db->query($sql);
|
||||
return $rs->fetchAll();
|
||||
}
|
||||
|
||||
//Get data author references which need to deal with
|
||||
public function fetchAuthorReferences()
|
||||
{
|
||||
$wheresql = array();
|
||||
$wheresql[] = " ref.ris is NULL ";
|
||||
$wheresql[]=" ref.id in (select distinct refid from mdref where reftype=0) ";
|
||||
if(!empty($this->keyword))
|
||||
{
|
||||
$wheresql[] = " (ref.title LIKE '%{$this->keyword}%' OR ref.reference LIKE '%{$this->keyword}%') ";
|
||||
}
|
||||
if(count($wheresql)>0)
|
||||
{
|
||||
$wheresql = " WHERE ".join(" AND ",$wheresql);
|
||||
}else{
|
||||
$wheresql = "";
|
||||
}
|
||||
|
||||
if(empty($this->order))
|
||||
{
|
||||
$order = "ref.year,ref.title";
|
||||
}else{
|
||||
$order = "ref.{$this->order} {$this->sort}";
|
||||
}
|
||||
|
||||
$sql="select distinct ref.* from {$this->table->reference} ref
|
||||
$wheresql
|
||||
ORDER BY $order";
|
||||
$rs=$this->db->query($sql);
|
||||
return $rs->fetchAll();
|
||||
}
|
||||
|
||||
//Get references by data UUID
|
||||
public function fetchReferencesByUUID($uuid)
|
||||
{
|
||||
$wheresql = array();
|
||||
$wheresql[]=" r.uuid='$uuid' ";
|
||||
if(!empty($this->keyword))
|
||||
{
|
||||
$wheresql[] = " (ref.title LIKE '%{$this->keyword}%' OR ref.reference LIKE '%{$this->keyword}%') ";
|
||||
}
|
||||
if(count($wheresql)>0)
|
||||
{
|
||||
$wheresql = " WHERE ".join(" AND ",$wheresql);
|
||||
}else{
|
||||
$wheresql = "";
|
||||
}
|
||||
|
||||
if(empty($this->order))
|
||||
{
|
||||
$order = "ref.year,ref.title";
|
||||
}else{
|
||||
$order = "ref.{$this->order} {$this->sort}";
|
||||
}
|
||||
|
||||
$sql="select distinct ref.*,r.reftype,r.place,r.id as mrid from {$this->table->reference} ref left join {$this->table->metadata_reference} r on ref.id=r.refid
|
||||
$wheresql
|
||||
ORDER BY $order";
|
||||
$rs=$this->db->query($sql);
|
||||
return $rs->fetchAll();
|
||||
}
|
||||
|
||||
//Get references with data UUID
|
||||
public function fetchReferencesWithUUID($uuid)
|
||||
{
|
||||
$wheresql = array();
|
||||
//$wheresql[]=" r.uuid='$uuid' ";
|
||||
if(!empty($this->keyword))
|
||||
{
|
||||
$wheresql[] = " (ref.title LIKE '%{$this->keyword}%' OR ref.reference LIKE '%{$this->keyword}%') ";
|
||||
}
|
||||
if(count($wheresql)>0)
|
||||
{
|
||||
$wheresql = " WHERE ".join(" AND ",$wheresql);
|
||||
}else{
|
||||
$wheresql = "";
|
||||
}
|
||||
|
||||
if(empty($this->order))
|
||||
{
|
||||
$order = "ref.year,ref.title";
|
||||
}else{
|
||||
$order = "ref.{$this->order} {$this->sort}";
|
||||
}
|
||||
|
||||
$sql="select distinct ref.*,r.reftype,r.place,r.id as mrid from {$this->table->reference} ref left join
|
||||
(select * from {$this->table->metadata_reference} r where uuid='$uuid') r on ref.id=r.refid
|
||||
$wheresql
|
||||
ORDER BY $order";
|
||||
$rs=$this->db->query($sql);
|
||||
return $rs->fetchAll();
|
||||
}
|
||||
|
||||
//单条文献的信息
|
||||
public function getOneReferenceData($id)
|
||||
{
|
||||
if(empty($id) || !is_numeric($id))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$sql = "SELECT * FROM {$this->table->reference} WHERE id=$id LIMIT 1";
|
||||
$rs = $this->db->query($sql);
|
||||
$row = $rs->fetch();
|
||||
if ($row['attid'])
|
||||
{
|
||||
$fileService = $this->serviceManager->get('File');
|
||||
$attfile = $fileService->get($row['attid']);
|
||||
|
||||
$row['file'] = $attfile;
|
||||
}
|
||||
return $row;
|
||||
}
|
||||
|
||||
//获得reference类型的附件
|
||||
public function getReferenceFiles()
|
||||
{
|
||||
$wheresql = [
|
||||
"att.filetype='literature'",
|
||||
];
|
||||
|
||||
if(!empty($this->keyword))
|
||||
{
|
||||
$wheresql[] = " (att.realname LIKE '%{$this->keyword}%' OR att.filename LIKE '%{$this->keyword}%') ";
|
||||
}
|
||||
|
||||
$wheresql = " WHERE ".join(" AND ",$wheresql);
|
||||
|
||||
$sql = "SELECT att.*,ref.attid,ref.id as refid FROM {$this->table->attachments} att
|
||||
LEFT JOIN {$this->table->reference} ref ON att.id=ref.attid
|
||||
$wheresql";
|
||||
$rs = $this->db->query($sql);
|
||||
$rows = $rs->fetchAll();
|
||||
return $rows;
|
||||
}
|
||||
|
||||
//删除文献
|
||||
public function deleteReference($id,$delete_att = false)
|
||||
{
|
||||
if(empty($id) || !is_numeric($id))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if($delete_att == false)
|
||||
{
|
||||
$sql = "DELETE FROM {$this->table->reference} WHERE id=$id";
|
||||
@$this->db->exec($sql);
|
||||
|
||||
$sql = "DELETE FROM {$this->table->metadata_reference} WHERE refid=$id";
|
||||
@$this->db->exec($sql);
|
||||
|
||||
$this->deleteReferenceAuthor($id);
|
||||
$this->deleteReferenceTag($id);
|
||||
|
||||
return true;
|
||||
}else{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//删除作者信息
|
||||
public function deleteReferenceAuthor($id)
|
||||
{
|
||||
if(empty($id) || !is_numeric($id))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$sql = "DELETE FROM {$this->table->reference_author} WHERE id=$id ";
|
||||
return $this->db->exec($sql);
|
||||
}
|
||||
|
||||
//删除标签信息
|
||||
public function deleteReferenceTag($id)
|
||||
{
|
||||
if(empty($id) || !is_numeric($id))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$sql = "DELETE FROM {$this->table->reference_tag} WHERE id=$id ";
|
||||
return $this->db->exec($sql);
|
||||
}
|
||||
|
||||
//建立文献与数据的关系
|
||||
public function createRelationFromReferenceToData($refid,$uuid,$reftype,$place,$id = NULL)
|
||||
{
|
||||
if(empty($refid) || !is_numeric($refid))
|
||||
{
|
||||
return "参数错误";
|
||||
}
|
||||
|
||||
$tools = $this->serviceManager->get('Tools');
|
||||
if(!$tools->isUuid($uuid))
|
||||
{
|
||||
return "参数错误";
|
||||
}
|
||||
|
||||
$data = array(
|
||||
'uuid'=>$uuid,
|
||||
'refid'=>$refid,
|
||||
'reftype'=>$reftype,
|
||||
'place'=>$place
|
||||
);
|
||||
|
||||
$dbService = $this->serviceManager->get('Db');
|
||||
$dbh = $dbService->getDbh();
|
||||
|
||||
if(empty($id))
|
||||
{
|
||||
$id = $dbh->insert($this->table->metadata_reference,$data,true);
|
||||
|
||||
if(is_numeric($id))
|
||||
{
|
||||
return $id;
|
||||
}else{
|
||||
return "关系写入失败,请检查是否已经存在";
|
||||
}
|
||||
}else{
|
||||
$status = $dbh->update($this->table->metadata_reference,$data," id=$id ");
|
||||
|
||||
if($status === true)
|
||||
{
|
||||
return $id;
|
||||
}else{
|
||||
return "修改失败";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//获得某个文献关联的数据 (根据文献获得数据)
|
||||
public function getDataByReference($id)
|
||||
{
|
||||
if(empty($id) || !is_numeric($id))
|
||||
{
|
||||
return "参数错误";
|
||||
}
|
||||
|
||||
$sql = "SELECT mr.id,mr.refid,mr.reftype,mr.place,md.title,md.uuid FROM {$this->table->metadata_reference} mr
|
||||
LEFT JOIN {$this->table->metadata} md ON mr.uuid=md.uuid
|
||||
WHERE mr.refid=$id
|
||||
ORDER BY mr.place ASC";
|
||||
|
||||
$rs = $this->db->query($sql);
|
||||
$rows = $rs->fetchAll();
|
||||
return $rows;
|
||||
}
|
||||
|
||||
//获得某个数据关联的文献 (根据数据获得文献)
|
||||
public function getReferenceByData($uuid)
|
||||
{
|
||||
if(!view::isUuid($uuid))
|
||||
{
|
||||
return "参数错误";
|
||||
}
|
||||
|
||||
$sql = "SELECT mr.reftype,mr.place,md.title,md.uuid FROM {$this->table->metadata_reference} mr
|
||||
LEFT JOIN {$this->table->metadata} md
|
||||
WHERE mr.uuid = $uuid";
|
||||
|
||||
$rs = $this->db->query($sql);
|
||||
$rows = $rs->fetchAll();
|
||||
return $rows;
|
||||
}
|
||||
|
||||
//文献类型
|
||||
public function referenceType()
|
||||
{
|
||||
return array(
|
||||
0 => '相关文献',//作者建议的文献或数据中心建议的文献
|
||||
1 => '施引文献',
|
||||
2 => '参考文献',
|
||||
3 => '多篇文献',
|
||||
4 => '专题文献'
|
||||
);
|
||||
}
|
||||
|
||||
//写入数据文献
|
||||
public function makeMdref($data,$id = NULL)
|
||||
{
|
||||
$results = $this->getEventManager()->trigger('mdref.pre', $this, compact('data'));
|
||||
$cache_data = $results->bottom();
|
||||
|
||||
if($cache_data !== true)
|
||||
{
|
||||
return $cache_data;
|
||||
}
|
||||
|
||||
$results = $this->getEventManager()->trigger('mdref.processData', $this, compact('data'));
|
||||
$data = $results->last();
|
||||
|
||||
$id = $this->createRelationFromReferenceToData($data['refid'],$data['uuid'],$data['reftype'],$data['place'],$id);
|
||||
|
||||
if(is_numeric($id))
|
||||
{
|
||||
return true;
|
||||
}else{
|
||||
return $id;
|
||||
}
|
||||
}
|
||||
|
||||
//删除数据文献
|
||||
public function delMdref($id)
|
||||
{
|
||||
if(empty($id) || !is_numeric($id))
|
||||
{
|
||||
return "参数错误";
|
||||
}
|
||||
|
||||
$sql = "DELETE FROM {$this->table->metadata_reference} WHERE id=$id";
|
||||
if($this->db->exec($sql))
|
||||
{
|
||||
return true;
|
||||
}else{
|
||||
return "删除失败";
|
||||
}
|
||||
}
|
||||
|
||||
//按年份获得文献数量
|
||||
public function countByYear()
|
||||
{
|
||||
$sql = "SELECT count(id) as num,year FROM {$this->table->reference} GROUP BY year ORDER BY year DESC";
|
||||
$rs = $this->db->query($sql);
|
||||
$rows = $rs->fetchAll();
|
||||
|
||||
return $rows;
|
||||
}
|
||||
|
||||
//获得作者
|
||||
public function getAuthorByReference($id,$join = false)
|
||||
{
|
||||
if(is_numeric($id))
|
||||
{
|
||||
$sql = "SELECT * FROM {$this->table->reference_author} WHERE id=$id ORDER BY place ASC";
|
||||
$rs = $this->db->query($sql);
|
||||
if(!$join)
|
||||
{
|
||||
return $rs->fetchAll();
|
||||
}else{
|
||||
foreach($rows = $rs->fetchAll() as $k=>$v)
|
||||
{
|
||||
$rows[$k] = (string)$v['firstname'].$v['lastname'];
|
||||
}
|
||||
return $rows;
|
||||
}
|
||||
}
|
||||
|
||||
if(is_array($id))
|
||||
{
|
||||
$sql = "SELECT * FROM {$this->table->reference_author} WHERE id IN (".join(",",$id).")";
|
||||
$rs = $this->db->query($sql);
|
||||
return $rs->fetchAll();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
//获得标签
|
||||
public function getTagsByReference($id,$single = false)
|
||||
{
|
||||
if(is_numeric($id))
|
||||
{
|
||||
$sql = "SELECT * FROM {$this->table->reference_tag} WHERE id=$id";
|
||||
$rs = $this->db->query($sql);
|
||||
if(!$single)
|
||||
{
|
||||
return $rs->fetchAll();
|
||||
}else{
|
||||
foreach($rows = $rs->fetchAll() as $k=>$v)
|
||||
{
|
||||
$rows[$k] = (string)$v['tag'];
|
||||
}
|
||||
return $rows;
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
//Get data author references
|
||||
//$ordertype 0: by data, 1: by literature
|
||||
public function getReferencesByAuthor($uid,$ordertype=0,$reftype=0)
|
||||
{
|
||||
$wheresql = array();
|
||||
$wheresql[] = " a.userid=$uid ";
|
||||
$wheresql[] = " a.status=1 ";
|
||||
if(!empty($this->keyword))
|
||||
{
|
||||
if($ordertype==0)
|
||||
{
|
||||
$wheresql[] = " (md.title LIKE '%{$this->keyword}%' OR md.description LIKE '%{$this->keyword}%') ";
|
||||
}else{
|
||||
$wheresql[] = " (ref.title LIKE '%{$this->keyword}%' OR ref.reference LIKE '%{$this->keyword}%') ";
|
||||
}
|
||||
}
|
||||
if(count($wheresql)>0)
|
||||
{
|
||||
$wheresql = " WHERE ".join(" AND ",$wheresql);
|
||||
}else{
|
||||
$wheresql = "";
|
||||
}
|
||||
|
||||
if($ordertype==0)
|
||||
{
|
||||
$order = "md.title";
|
||||
$sql="SELECT md.title,md.uuid,count(mr.id) as c FROM metadata md
|
||||
LEFT JOIN (select * from mdref where reftype=$reftype) mr ON md.uuid=mr.uuid
|
||||
LEFT JOIN mdauthor a ON md.uuid=a.uuid
|
||||
left join reference ref on mr.refid=ref.id
|
||||
$wheresql
|
||||
group by md.title,md.uuid
|
||||
ORDER BY c desc,$order";
|
||||
}else{
|
||||
$order = "ref.title";
|
||||
$sql="SELECT ref.*,count(mr.uuid) as c FROM metadata md
|
||||
LEFT JOIN mdref mr ON md.uuid=mr.uuid
|
||||
LEFT JOIN mdauthor a ON md.uuid=a.uuid
|
||||
left join reference ref on mr.refid=ref.id
|
||||
$wheresql and mr.reftype=$reftype
|
||||
group by ref.id
|
||||
ORDER BY c desc,$order";
|
||||
}
|
||||
$rs=$this->db->query($sql);
|
||||
return $rs->fetchAll();
|
||||
}
|
||||
|
||||
//Get author references by data uuid
|
||||
public function getReferencesByAuthorUUID($uid,$uuid)
|
||||
{
|
||||
$wheresql = array();
|
||||
$wheresql[] = " a.userid=$uid ";
|
||||
$wheresql[] = " a.status=1 ";
|
||||
$wheresql[] = " mr.uuid='$uuid' ";
|
||||
if(!empty($this->keyword))
|
||||
{
|
||||
$wheresql[] = " (ref.title LIKE '%{$this->keyword}%' OR ref.reference LIKE '%{$this->keyword}%') ";
|
||||
}
|
||||
if(count($wheresql)>0)
|
||||
{
|
||||
$wheresql = " WHERE ".join(" AND ",$wheresql);
|
||||
}else{
|
||||
$wheresql = "";
|
||||
}
|
||||
|
||||
$order = "ref.title";
|
||||
$sql="SELECT md.title as mdtitle,md.uuid,ref.id,ref.reference,ref.link,mr.place,mr.id as mrid,mr.reftype FROM mdref mr
|
||||
LEFT JOIN metadata md ON md.uuid=mr.uuid
|
||||
LEFT JOIN mdauthor a ON md.uuid=a.uuid
|
||||
left join reference ref on mr.refid=ref.id
|
||||
$wheresql
|
||||
order by mr.reftype,mr.place ASC,ref.id DESC,md.ts_created desc";
|
||||
$rs=$this->db->query($sql);
|
||||
return $rs->fetchAll();
|
||||
}
|
||||
|
||||
//数据作者修改推荐文献的排序
|
||||
public function changeOrderByAuthor($uid,$id,$order)
|
||||
{
|
||||
$sql="update mdref set place=$order where id=$id and uuid in
|
||||
(select uuid from mdauthor where status=1 and userid=$uid)";
|
||||
if($this->db->exec($sql))
|
||||
{
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//数据作者移除推荐文献
|
||||
public function removeReferenceByAuthor($uid,$id)
|
||||
{
|
||||
$sql = "DELETE FROM mdref WHERE id=$id and uuid in (select uuid from mdauthor where userid=$uid AND status=1)";
|
||||
if($this->db->exec($sql))
|
||||
{
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//数据作者添加推荐文献
|
||||
public function insertMdrefByAuthor($uid,$refid,$uuid,$place,$reftype=0)
|
||||
{
|
||||
$sql="select * from mdauthor where status=1 and uuid='$uuid' and userid=$uid";
|
||||
$rs=$this->db->fetchRow($sql);
|
||||
if ($rs)
|
||||
{
|
||||
$id = $this->createRelationFromReferenceToData($refid,$uuid,$reftype,$place);
|
||||
if(is_numeric($id))
|
||||
{
|
||||
return true;
|
||||
}else{
|
||||
return $id;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,333 @@
|
|||
<?php
|
||||
namespace Westdc\Reference;
|
||||
|
||||
use Zend\ServiceManager\ServiceManager;
|
||||
use Zend\ServiceManager\ServiceManagerAwareInterface;
|
||||
use Westdc\EventModel\AbstractEventManager;
|
||||
use Westdc\Reference\Listener\RisListener;
|
||||
use LibRIS\RISReader;
|
||||
use LibRIS\RISTags;
|
||||
use LibRIS\RISWriter;
|
||||
|
||||
class Ris extends AbstractEventManager implements ServiceManagerAwareInterface
|
||||
{
|
||||
protected $serviceManager;
|
||||
public $table;
|
||||
public $ris_records = NULL;
|
||||
private $dbh;
|
||||
|
||||
public function setServiceManager(ServiceManager $serviceManager)
|
||||
{
|
||||
$this->serviceManager = $serviceManager;
|
||||
|
||||
$this->init();
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function init()
|
||||
{
|
||||
$Listener = new RisListener;
|
||||
$this->getEventManager()->attachAggregate($Listener);
|
||||
|
||||
$this->table = new \stdClass;
|
||||
$this->table->reference = "reference";
|
||||
$this->table->reference_author = "ref_author";
|
||||
$this->table->reference_tag = "ref_tag";
|
||||
}
|
||||
|
||||
//ris导入
|
||||
public function loadout()
|
||||
{
|
||||
$file = $this->uploadRisFile();
|
||||
$text = $this->loadRisText();
|
||||
|
||||
if(empty($text) && $file === false)
|
||||
{
|
||||
return "导入失败,请选择要导入的文件或直接使用ris文本";
|
||||
}
|
||||
|
||||
$records = array();
|
||||
|
||||
if($file !== false)
|
||||
{
|
||||
$records = array_merge($records,$this->processRis($file,NULL));
|
||||
}
|
||||
|
||||
if(!empty($text))
|
||||
{
|
||||
$records = array_merge($records,$this->processRis(NULL,$text));
|
||||
}
|
||||
|
||||
$this->ris_records = $records;
|
||||
|
||||
$data = $this->reBuildRisArray($records);
|
||||
return $data;
|
||||
}
|
||||
|
||||
//上传RIS文件
|
||||
public function uploadRisFile()
|
||||
{
|
||||
if(!isset($_FILES['Filedata']))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$file = $_FILES['Filedata'];
|
||||
|
||||
if (@is_uploaded_file($file['tmp_name']) === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
return $file;
|
||||
}
|
||||
|
||||
//文本直接导入
|
||||
public function loadRisText()
|
||||
{
|
||||
if(!isset($_REQUEST['ristext']))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$text = $_REQUEST['ristext'];
|
||||
return $text;
|
||||
}
|
||||
|
||||
//处理ris文件
|
||||
public function processRis($file = NULL,$text = NULL)
|
||||
{
|
||||
$ris = new RISReader();
|
||||
if(!empty($file) && empty($text))
|
||||
{
|
||||
$ris->parseFile($file['tmp_name']);
|
||||
}else{
|
||||
$ris->parseString($text);
|
||||
}
|
||||
|
||||
$records = $ris->getRecords();
|
||||
|
||||
return $records;
|
||||
}
|
||||
|
||||
//对解析过的数据进行编排
|
||||
public function reBuildRisArray($records)
|
||||
{
|
||||
$data = array();
|
||||
foreach($records as $k=>$ref)
|
||||
{
|
||||
$data[$k] = array();
|
||||
foreach($ref as $index=>$value)
|
||||
{
|
||||
if(isset($this->attr[$index]))
|
||||
{
|
||||
$index_name = $this->attr[$index];
|
||||
if(count($value) > 1)
|
||||
{
|
||||
$data[$k][$index_name] = array();
|
||||
foreach($value as $item)
|
||||
{
|
||||
$data[$k][$index_name][] = $item;
|
||||
}
|
||||
}else{
|
||||
$data[$k][$index_name] = $value[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
unset($records);
|
||||
return $data;
|
||||
}
|
||||
|
||||
//将解析好的ris数据写入数据库
|
||||
public function pushToDataTable($data){
|
||||
|
||||
if(!is_array($data) || count($data) < 1)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$dbService = $this->serviceManager->get('Db');
|
||||
$dbh = $this->dbh = $dbService->getDbh();
|
||||
|
||||
foreach($data as $k=>$ref)
|
||||
{
|
||||
if (is_null($ref['title']))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
@$tags = $ref['tags'];
|
||||
@$author = $ref['author'];
|
||||
|
||||
$ref['ris'] = $this->makeRisData(array(0=>$this->ris_records[$k]));
|
||||
|
||||
$results = $this->getEventManager()->trigger('checkLoad', $this, compact('ref'));
|
||||
$id = $results->bottom();
|
||||
|
||||
if ($id > 0)
|
||||
{
|
||||
$this->unsetVar($ref);
|
||||
$this->getEventManager()->trigger('delete.after', $this, compact('id'));
|
||||
|
||||
unset($ref['reference']);
|
||||
|
||||
$dbh->update($this->table->reference,$ref," id=$id ");
|
||||
} else {
|
||||
$ref['reference'] = $this->makeReferenceFlag($ref);
|
||||
$this->unsetVar($ref);
|
||||
$id = $dbh->insert($this->table->reference,$ref,true);
|
||||
}
|
||||
|
||||
$this->insertTags($id,$tags);
|
||||
$this->insertAuthor($id,$author);
|
||||
}
|
||||
}
|
||||
|
||||
//更新单个reference的RIS
|
||||
public function updateWithRis($id,$ref)
|
||||
{
|
||||
if(empty($id) || !is_numeric($id))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (is_null($ref['title']))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
@$tags = $ref['tags'];
|
||||
@$author = $ref['author'];
|
||||
|
||||
$ref['ris'] = $this->makeRisData(array(0=>$this->ris_records[0]));
|
||||
|
||||
$this->getEventManager()->trigger('delete.after', $this, compact('id'));
|
||||
$this->getEventManager()->trigger('delete.after', $this, compact('id'));
|
||||
|
||||
$this->unsetVar($ref);
|
||||
if(isset($ref['reference'])) unset($ref['reference']);
|
||||
|
||||
$dbService = $this->serviceManager->get('Db');
|
||||
$this->dbh = $dbh = $dbService->getDbh();
|
||||
|
||||
if($dbh->update($this->table->reference,$ref," id=$id "))
|
||||
{
|
||||
$this->insertTags($id,$tags);
|
||||
$this->insertAuthor($id,$author);
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//写入标签
|
||||
public function insertTags($id,$tags){
|
||||
if(is_array($tags) && count($tags) > 0)
|
||||
{
|
||||
foreach($tags as $v)
|
||||
{
|
||||
$this->dbh->insert($this->table->reference_tag,array('id'=>$id,'tag'=>$v));
|
||||
}
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//写入作者
|
||||
public function insertAuthor($id,$author)
|
||||
{
|
||||
$index = 0;
|
||||
if(is_array($author) && count($author) > 0)
|
||||
{
|
||||
foreach($author as $v)
|
||||
{
|
||||
$index ++ ;
|
||||
$author_splited = $this->splitAuthor($v);
|
||||
$this->dbh->insert($this->table->reference_author,array('id'=>$id , 'lastname'=>$author_splited['lastname'] , 'firstname'=>$author_splited['firstname'] , 'place'=>$index ));
|
||||
}
|
||||
return true;
|
||||
}else{
|
||||
if(is_string($author))
|
||||
{
|
||||
$author_splited = $this->splitAuthor($author);
|
||||
$this->dbh->insert($this->table->reference_author,array('id'=>$id , 'lastname'=>$author_splited['lastname'] , 'firstname'=>$author_splited['firstname'] , 'place'=>0 ));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//创建ris格式的数据
|
||||
public function makeRisData($ref)
|
||||
{
|
||||
$ris_writer = new RISWriter();
|
||||
return $ris_writer->writeRecords($ref);
|
||||
}
|
||||
|
||||
//创建reference 字段
|
||||
public function makeReferenceFlag($ref){
|
||||
$str='';
|
||||
if(is_array($ref['author']) && count($ref['author']) > 0)
|
||||
{
|
||||
$str .= join(', ',$ref['author']).'. ';
|
||||
} else if (is_string($ref['author'])) {
|
||||
$str .= $ref['author'].'. ';
|
||||
}
|
||||
$str .= $ref['title'].'. ';
|
||||
$str .= $ref['publisher'].', ';
|
||||
isset($ref['year']) ? $str .= $ref['year'].', ':"";
|
||||
isset($ref['volume']) ? $str .= $ref['volume']:"";
|
||||
isset($ref['issue']) ? $str .= '('.$ref['issue'].')':"";
|
||||
isset($ref['pages']) ? $str .= ':'.$ref['pages']:"";
|
||||
isset($ref['endpage'])? $str .= '-'.$ref['endpage']:"";
|
||||
isset($ref['doi']) ? $str .= '. doi:'.$ref['doi'] : "";
|
||||
|
||||
return $str;
|
||||
}
|
||||
|
||||
//卸载不需要的变量
|
||||
public function unsetVar(&$ref)
|
||||
{
|
||||
unset($ref['pages']);
|
||||
unset($ref['endpage']);
|
||||
unset($ref['issue']);
|
||||
unset($ref['volume']);
|
||||
unset($ref['tags']);
|
||||
unset($ref['author']);
|
||||
}
|
||||
|
||||
//将作者名字分割为数组
|
||||
public function splitAuthor($author){
|
||||
if(preg_match("/\,/",$author))
|
||||
{
|
||||
$arr = explode(",",$author);
|
||||
return array(
|
||||
'lastname' => trim($arr[0]),
|
||||
'firstname' => trim($arr[1])
|
||||
);
|
||||
}else{
|
||||
return array(
|
||||
'firstname' => '',
|
||||
'lastname' => trim($author)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public $attr = array(
|
||||
'TY' => 'type',
|
||||
'TI' => 'title',
|
||||
'AU' => 'author',
|
||||
'PY' => 'year',
|
||||
'LA' => 'language',
|
||||
'KW' => 'tags',
|
||||
'AB' => 'abstract',
|
||||
'DO' => 'doi',
|
||||
'T2' => 'publisher',
|
||||
'VL' => 'volume',
|
||||
'IS' => 'issue',
|
||||
'SP' => 'pages',
|
||||
'EP' => 'endpage'
|
||||
);
|
||||
}
|
|
@ -0,0 +1,139 @@
|
|||
<?php
|
||||
namespace Westdc\Reference;
|
||||
|
||||
use Zend\ServiceManager\ServiceManager;
|
||||
use Zend\ServiceManager\ServiceManagerAwareInterface;
|
||||
use LibRIS\RISReader;
|
||||
use LibRIS\RISTags;
|
||||
use LibRIS\RISWriter;
|
||||
|
||||
class RisExport implements ServiceManagerAwareInterface
|
||||
{
|
||||
protected $serviceManager;
|
||||
private $table;
|
||||
private $db;
|
||||
|
||||
public $ris_records = NULL;
|
||||
protected $ris;
|
||||
public $attr;
|
||||
public $attr_flip;
|
||||
|
||||
|
||||
public function setServiceManager(ServiceManager $serviceManager)
|
||||
{
|
||||
$this->serviceManager = $serviceManager;
|
||||
|
||||
$this->init();
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function init()
|
||||
{
|
||||
$this->table = new \stdClass;
|
||||
$this->table->reference = "reference";
|
||||
|
||||
$dbService = $this->serviceManager->get('Db');
|
||||
$this->db = $dbService->getPdo();
|
||||
}
|
||||
|
||||
//读取数据
|
||||
public function preRead($mode = "all")
|
||||
{
|
||||
if($mode == "all")
|
||||
{
|
||||
$sql = "SELECT * FROM {$this->table->reference} where length(ris)<10 or ris is null ORDER BY year DESC,title ASC,id ASC";
|
||||
$rs = $this->db->query($sql);
|
||||
return $rs->fetchAll();
|
||||
}
|
||||
|
||||
|
||||
}//preRead
|
||||
|
||||
//将数据组成RIS数组格式
|
||||
public function processArrayDataToRisData($arrayData,$risPrior = true,$mixAuthor = true,$mixTags = true)
|
||||
{
|
||||
if(!is_array($arrayData))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$risData = array();
|
||||
|
||||
if($risPrior === true)
|
||||
{
|
||||
$risReader = new RISReader();
|
||||
}
|
||||
|
||||
$this->ris = $this->serviceManager->get('Reference/Ris');
|
||||
$this->attr = $this->ris->attr;
|
||||
$this->attr_flip = array_flip($this->ris->attr);
|
||||
unset($this->ris);
|
||||
|
||||
$this->reference = $this->serviceManager->get('Reference');
|
||||
|
||||
foreach($arrayData as $k=>$v)
|
||||
{
|
||||
$risData[$k] = $this->transformToRis($v);
|
||||
if($mixAuthor === true || $mixTags === true)
|
||||
{
|
||||
if($mixAuthor === true)
|
||||
{
|
||||
$author = $this->reference->getAuthorByReference($v['id'],true);
|
||||
if(is_array($author) && count($author)>0)
|
||||
{
|
||||
$risData[$k] = array_merge($risData[$k],array("AU"=>$author));
|
||||
}
|
||||
unset($author);
|
||||
}//mixAuthor
|
||||
|
||||
if($mixTags === true)
|
||||
{
|
||||
$tags = $this->reference->getTagsByReference($v['id'],true);
|
||||
if(is_array($tags) && count($tags) > 0)
|
||||
{
|
||||
$risData[$k] = array_merge($risData[$k],array("KW"=>$tags));
|
||||
}
|
||||
unset($tags);
|
||||
}
|
||||
}
|
||||
|
||||
if(!is_array($risData[$k]) || count($risData[$k]) < 1)
|
||||
{
|
||||
unset($risData[$k]);
|
||||
}
|
||||
|
||||
unset($arrayData[$k]);
|
||||
}
|
||||
|
||||
return $risData;
|
||||
}//processArrayDataToRisData
|
||||
|
||||
//单条记录的整编
|
||||
public function transformToRis($record)
|
||||
{
|
||||
$arr = array();
|
||||
|
||||
foreach($record as $k=>$v)
|
||||
{
|
||||
if(!empty($v))
|
||||
{
|
||||
if(isset($this->attr_flip[$k]))
|
||||
{
|
||||
//echo $k ."-". $this->attr_flip[$k] . '-' .$v;
|
||||
//echo "<br />";
|
||||
$arr[$this->attr_flip[$k]] = array(0=>$v);
|
||||
}
|
||||
}
|
||||
}
|
||||
//echo "<br />";
|
||||
return $arr;
|
||||
}//transformToRis
|
||||
|
||||
//输出成文件
|
||||
public function output($risData)
|
||||
{
|
||||
$risWirte = new RISWriter();
|
||||
return @$risWirte->writeRecords($risData);
|
||||
}//output
|
||||
}
|
|
@ -0,0 +1,260 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: liujin834
|
||||
* Date: 15/1/1
|
||||
* Time: 下午8:04
|
||||
*/
|
||||
namespace Westdc\Review;
|
||||
|
||||
use Zend\ServiceManager\ServiceManager;
|
||||
use Zend\ServiceManager\ServiceManagerAwareInterface;
|
||||
use Westdc\EventModel\AbstractEventManager;
|
||||
|
||||
class Review extends AbstractEventManager implements ServiceManagerAwareInterface{
|
||||
|
||||
protected $serviceManager;
|
||||
|
||||
public $opt,$orderSql = "",$limitSql = "",$sortSql = "";
|
||||
|
||||
const REVIEW_STATUS_CANCELED = -1; //取消评审
|
||||
const REVIEW_STATUS_DEFAULT = 0; //初始状态
|
||||
const REVIEW_STATUS_ACCEPT = 1; //接收元数据,进入评审状态
|
||||
const REVIEW_STATUS_EXPERT_INVITED = 2; //开始邀请专家
|
||||
const REVIEW_STATUS_EXPERT_ACCEPT = 3; //专家接受邀请
|
||||
const REVIEW_STATUS_EXPERT_FEEDBACK = 4; //专家有反馈
|
||||
const REVIEW_STATUS_PUBLISH = 5; //已发布
|
||||
|
||||
public function setServiceManager(ServiceManager $serviceManager)
|
||||
{
|
||||
$this->serviceManager = $serviceManager;
|
||||
|
||||
$this->init();
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
private function init(){
|
||||
$dbService = $this->serviceManager->get('Db');
|
||||
$this->db = $dbService->getPdo();
|
||||
unset($dbService);
|
||||
|
||||
$this->opt = new \stdClass;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理sql中用到的排序,limit等语句
|
||||
*/
|
||||
private function processOptions()
|
||||
{
|
||||
if(isset($this->opt->limit) && $this->opt->limit > 0)
|
||||
$this->limitSql = "LIMIT {$this->opt->limit}";
|
||||
|
||||
if(isset($this->opt->order) && !empty($this->opt->order)) {
|
||||
$this->orderSql = "ORDER BY {$this->opt->order}";
|
||||
|
||||
if (isset($this->opt->sortSql) && !empty($this->opt->sortSql))
|
||||
$this->sortSql = "{$this->opt->sort}";
|
||||
else
|
||||
$this->sortSql = "DESC";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得最新的数据
|
||||
* @return mixed
|
||||
*/
|
||||
public function getLatest()
|
||||
{
|
||||
$this->processOptions();
|
||||
|
||||
$sql = "select m.id,md.title,u.username,u.realname,m.status from mdstatus m
|
||||
right join metadata md on md.uuid=m.uuid
|
||||
left join users u on u.id=m.userid
|
||||
order by m.id desc
|
||||
{$this->limitSql}";
|
||||
$rs = $this->db->query($sql);
|
||||
return $rs->fetchAll();
|
||||
}//getLatest()
|
||||
|
||||
/**
|
||||
* 获得管理员负责的评审
|
||||
* @param $userId
|
||||
* @return mixed
|
||||
*/
|
||||
public function getAdminReview($userId)
|
||||
{
|
||||
$this->processOptions();
|
||||
|
||||
$sql = "select m.id,md.title,u.username,u.realname,m.status from mdstatus m
|
||||
right join metadata md on md.uuid=m.uuid
|
||||
left join users u on u.id=m.userid
|
||||
where u.id='$userId'
|
||||
{$this->limitSql}";
|
||||
|
||||
$rs = $this->db->query($sql);
|
||||
return $rs->fetchAll();
|
||||
} //getAdminReview
|
||||
|
||||
/**
|
||||
* 投稿元数据
|
||||
* @return mixed
|
||||
*/
|
||||
public function getDraft(){
|
||||
|
||||
$this->processOptions();
|
||||
|
||||
$searchJoin = "";
|
||||
if(isset($this->opt->keyword) && !empty($this->opt->keyword))
|
||||
{
|
||||
$searchJoin = " AND md.title LIKE '%{$this->opt->keyword}%'";
|
||||
}
|
||||
|
||||
if(empty($this->orderSql))
|
||||
{
|
||||
$this->orderSql = "ORDER BY m.ts_created DESC";
|
||||
}
|
||||
|
||||
$sql = "SELECT m.id,md.title,md.uuid,u.username,u.realname,m.status,m.ts_created,gn.id as gnid FROM mdstatus m
|
||||
RIGHT JOIN metadata md ON md.uuid=m.uuid
|
||||
LEFT JOIN users u ON u.id=m.userid
|
||||
LEFT JOIN geonetworkmetadata gn ON m.uuid=gn.uuid
|
||||
WHERE m.status=0 $searchJoin
|
||||
{$this->orderSql} {$this->sortSql}
|
||||
{$this->limitSql}";
|
||||
|
||||
$rs = $this->db->query($sql);
|
||||
return $rs->fetchAll();
|
||||
}//getDraft()
|
||||
|
||||
/**
|
||||
* 取消评审
|
||||
* @param $id
|
||||
* @return bool
|
||||
*/
|
||||
public function cancel($id){
|
||||
if(!is_numeric($id) || $id<1)
|
||||
return false;
|
||||
return $this->changeStatus($id,self::REVIEW_STATUS_CANCELED);
|
||||
}
|
||||
|
||||
/**
|
||||
* 接收投稿的元数据
|
||||
* @param $id
|
||||
* @return bool
|
||||
*/
|
||||
public function accept($id){
|
||||
|
||||
if($this->getStatus($id) != self::REVIEW_STATUS_DEFAULT)
|
||||
return [
|
||||
'评审状态错误,有可能的错误是:',
|
||||
'此评审已被取消,请到<b>已取消评审的元数据</b>中将其重置',
|
||||
'此评审已经被接收',
|
||||
'此评审已经处于待分配责任编辑、邀请专家、等待专家评审、已通过评审的状态中'
|
||||
];
|
||||
|
||||
$status = $this->changeStatus($id,self::REVIEW_STATUS_ACCEPT);
|
||||
|
||||
if(false === $status){
|
||||
return false;
|
||||
}
|
||||
|
||||
$authorEmail = $this->getAuthor($id);
|
||||
|
||||
foreach($authorEmail as $v)
|
||||
{
|
||||
$mailSender = $this->serviceManager->get('Mail/Sender');
|
||||
$mailSender->backend([
|
||||
'email' => $v['email'],
|
||||
'name' => !empty($v['realname']) ? $v['realname']:$v['username'],
|
||||
'template' => 'review-new-accept',
|
||||
'data' => [
|
||||
'uuid' => $v['uuid'],
|
||||
'title' => $v['title'],
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
}//accept($id)
|
||||
|
||||
/**
|
||||
* 获得某条评审涉及的元数据相关作者信息(email,元数据标题,uuid)
|
||||
* @param $id
|
||||
* @return mixed
|
||||
*/
|
||||
public function getAuthor($id){
|
||||
$sql = "SELECT DISTINCT u.email,u.realname,u.username,m.title,m.uuid FROM mdstatus s
|
||||
LEFT JOIN metadata m ON s.uuid=m.uuid
|
||||
RIGHT JOIN mdauthor a ON s.uuid=a.uuid
|
||||
LEFT JOIN users u ON a.userid=u.id
|
||||
WHERE s.id=$id
|
||||
ORDER BY u.email";
|
||||
|
||||
$rs = $this->db->query($sql);
|
||||
return $rs->fetchAll(\PDO::FETCH_ASSOC);
|
||||
}
|
||||
|
||||
public function reset($id){
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 更改mdstatus中的status字段
|
||||
* @param $id
|
||||
* @param $status
|
||||
* @return bool
|
||||
*/
|
||||
function changeStatus($id,$status){
|
||||
$statusValues = array(
|
||||
self::REVIEW_STATUS_CANCELED, //取消评审
|
||||
self::REVIEW_STATUS_DEFAULT, //初始状态
|
||||
self::REVIEW_STATUS_ACCEPT, //接受元数据评审,进入评审阶段
|
||||
self::REVIEW_STATUS_EXPERT_INVITED, //开始邀请专家,送审阶段
|
||||
self::REVIEW_STATUS_EXPERT_ACCEPT, //专家接受邀请,在审阶段
|
||||
self::REVIEW_STATUS_EXPERT_FEEDBACK,//专家反馈,在审
|
||||
self::REVIEW_STATUS_PUBLISH, //评审结束,发布
|
||||
6,7
|
||||
);
|
||||
if(empty($id) || !isset($status) || !in_array($status,$statusValues))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if($status==1)
|
||||
{$sql = "update mdstatus set status='$status',ts_accepted='now()' where id in ($id)"; }
|
||||
else if($status==5)
|
||||
{$sql = "update mdstatus set status='$status',ts_finished='now()' where id in ($id)";}
|
||||
else
|
||||
{$sql = "update mdstatus set status='$status' where id in ($id)";}
|
||||
try{
|
||||
if($this->db->exec($sql)>0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch(\Exception $e)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}//changestatus 更改状态
|
||||
|
||||
|
||||
/**
|
||||
* 获取mdstatus表中的status字段
|
||||
* @param $id
|
||||
* @return mixed
|
||||
*/
|
||||
public function getStatus($id)
|
||||
{
|
||||
$sql = "SELECT status FROM mdstatus WHERE id=$id";
|
||||
$rs = $this->db->query($sql);
|
||||
|
||||
return $rs->fetchColumn(0);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: liujin834
|
||||
* Date: 14/12/14
|
||||
* Time: 下午8:51
|
||||
*/
|
||||
|
||||
namespace Westdc\Service\ServiceAgent;
|
||||
|
||||
|
||||
class ConfigService extends Config{
|
||||
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Administrator
|
||||
* Date: 2014/11/4
|
||||
* Time: 11:23
|
||||
*/
|
||||
|
||||
namespace Westdc\Service\ServiceAgent;
|
||||
|
||||
use Westdc\User\User as Westdc_User;
|
||||
|
||||
class User extends Westdc_User
|
||||
{
|
||||
|
||||
|
||||
}
|
|
@ -12,8 +12,31 @@ use Zend\ServiceManager\AbstractFactoryInterface;
|
|||
|
||||
class ServiceFactory implements AbstractFactoryInterface{
|
||||
|
||||
private $invokedService;
|
||||
private $invokedNames;
|
||||
private $currentServiceType;
|
||||
|
||||
function __construct()
|
||||
{
|
||||
$this->invokedService = $this->getInvokedServiceFromConfig();
|
||||
$this->invokedNames = array_keys($this->invokedService);
|
||||
}
|
||||
|
||||
private function getInvokedServiceFromConfig()
|
||||
{
|
||||
return include dirname(__FILE__) . "/service.lazy.config.php";
|
||||
}
|
||||
|
||||
public function canCreateServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName)
|
||||
{
|
||||
if(!is_array($this->invokedService))
|
||||
throw new \RuntimeException('lazy services not found');
|
||||
|
||||
if(in_array($requestedName , $this->invokedNames))
|
||||
{
|
||||
$this->currentServiceType = "lazy";
|
||||
return true;
|
||||
}
|
||||
|
||||
$serviceAgentDir = __DIR__ . "/ServiceAgent";
|
||||
|
||||
|
@ -24,6 +47,7 @@ class ServiceFactory implements AbstractFactoryInterface{
|
|||
while(false !== ($file = readdir($handle)))
|
||||
{
|
||||
if(substr($file,0,strlen($file)-4) == (string)$requestedName) {
|
||||
$this->currentServiceType = "agent";
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -36,13 +60,30 @@ class ServiceFactory implements AbstractFactoryInterface{
|
|||
|
||||
public function createServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName)
|
||||
{
|
||||
$serviceName = __NAMESPACE__ . "\\ServiceAgent\\" . $requestedName;
|
||||
switch($this->currentServiceType)
|
||||
{
|
||||
case 'lazy':
|
||||
$service = new $this->invokedService[$requestedName];
|
||||
|
||||
$service = new $serviceName;
|
||||
$service->WESTDC_SERVICE_TYPE = "lazy";
|
||||
$service->WESTDC_SERVICE_NAME = $requestedName;
|
||||
|
||||
$service->name = $requestedName;
|
||||
return $service;
|
||||
|
||||
case 'agent':
|
||||
$serviceName = __NAMESPACE__ . "\\ServiceAgent\\" . $requestedName;
|
||||
|
||||
$service = new $serviceName;
|
||||
|
||||
$service->WESTDC_SERVICE_TYPE = "agent";
|
||||
$service->WESTDC_SERVICE_NAME = $requestedName;
|
||||
|
||||
return $service;
|
||||
|
||||
}
|
||||
|
||||
return $service;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -16,8 +16,15 @@ class ServiceManager {
|
|||
|
||||
function __construct()
|
||||
{
|
||||
$this->serviceManager = new Zend_ServiceManager();
|
||||
$this->serviceManager = new Zend_ServiceManager;
|
||||
$this->serviceManager->addAbstractFactory(new ServiceFactory);
|
||||
|
||||
$configService = $this->serviceManager->get('ConfigService');
|
||||
$invoked_services = $configService->get('service.invoked.ini');
|
||||
|
||||
foreach($invoked_services as $k=>$v) {
|
||||
$this->serviceManager->setInvokableClass($k, $v);
|
||||
}
|
||||
}
|
||||
|
||||
public function addKey($key,$value = "")
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
<?php
|
||||
return array(
|
||||
'Tools' => 'Westdc\Helpers\Tools'
|
||||
);
|
|
@ -375,12 +375,17 @@ class Account implements EventManagerAwareInterface
|
|||
$mail_data = array(
|
||||
'name'=>$row['realname'],
|
||||
);
|
||||
$mail = new Mail();
|
||||
$mail->loadTemplate($mail_template,$mail_data);
|
||||
$mail->addTo($row['email'],$row['realname']);
|
||||
$mail->send();
|
||||
|
||||
return true;
|
||||
|
||||
try {
|
||||
$mail = new Mail();
|
||||
$mail->loadTemplate($mail_template, $mail_data);
|
||||
$mail->addTo($row['email'], $row['realname']);
|
||||
$mail->send();
|
||||
return true;
|
||||
}catch(\Exception $e){
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1,135 +0,0 @@
|
|||
<?php
|
||||
namespace Westdc\User;
|
||||
|
||||
use Westdc\Helpers\Config;
|
||||
use Westdc\Db\PDO as Db;
|
||||
|
||||
class Cookie
|
||||
{
|
||||
var $ck='Dxe8SqIcmyUf';
|
||||
var $db; //传入PDO对象
|
||||
var $mid; //会员ID
|
||||
|
||||
public $scr; //cookie 安全码 $_COOKIE['scr']
|
||||
public $user;//cookie User $_COOKIE['user']
|
||||
|
||||
public $srpwd;//执行checkcookie后方可调用
|
||||
|
||||
public $memberTable = "users";
|
||||
public $FieldUsername = "username";
|
||||
public $FieldPasword = "password";
|
||||
public $FieldLastlogin = "ts_last_login";
|
||||
public $FieldEmail = "email";
|
||||
public $FieldLastloginIp = "last_login_ip";
|
||||
public $GravatarEmailField = "gravatar_email";
|
||||
|
||||
public $RoleMember = "member";
|
||||
|
||||
function __construct()
|
||||
{
|
||||
$this->db = new Db();
|
||||
$this->config = Config::get();
|
||||
|
||||
if(!empty($_COOKIE['scr']))
|
||||
{
|
||||
$this->scr = $_COOKIE['scr'];
|
||||
}
|
||||
if(!empty($_COOKIE['user']))
|
||||
{
|
||||
$this->user= $_COOKIE['user'];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 检测cookie
|
||||
*/
|
||||
public function checkcookie()
|
||||
{
|
||||
$uname = $this->user;
|
||||
$hash = $this->scr;
|
||||
|
||||
if(!empty($uname) && !empty($hash))
|
||||
{
|
||||
if (preg_match("/[<|>|#|$|%|^|*|(|)|{|}|'|\"|;|:]/i",$uname) || preg_match("/[<|>|#|$|%|^|*|(|)|{|}|'|\"|;|:]/i",$hash))
|
||||
{
|
||||
$this->mid=0;
|
||||
return false;
|
||||
}
|
||||
else{
|
||||
$sql = "select {$this->FieldUsername} as userid,{$this->FieldPasword} as pwd from {$this->memberTable} where {$this->FieldUsername}='$uname'";
|
||||
$rs = $this->db->query($sql);
|
||||
$row = $rs->fetch();
|
||||
$scr = $this->makescr($row['userid'],$row['pwd']);
|
||||
|
||||
if($hash == $scr)
|
||||
{
|
||||
$this->srpwd=$row['pwd'];
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}//cookie安全
|
||||
}else {
|
||||
return false;
|
||||
}//exit
|
||||
}//function checkcookie
|
||||
|
||||
/**
|
||||
* putcookie
|
||||
*
|
||||
* 登陆成功后放置cookie,包含安全码
|
||||
*
|
||||
* @param String $uname
|
||||
* @param String $pwd
|
||||
* @param Int $time
|
||||
*/
|
||||
public function putcookie($uname,$pwd,$time = 604800)
|
||||
{
|
||||
try {
|
||||
$scrString = $this->makescr($uname,$pwd);//加密验证串:防止用户密码被盗;防止伪造cookie。
|
||||
|
||||
if(!is_numeric($time))
|
||||
{
|
||||
$time = 604800;
|
||||
}
|
||||
|
||||
setcookie('user',$uname,time()+$time,'/');
|
||||
setcookie('scr',$scrString,time()+$time,'/');
|
||||
|
||||
return true;
|
||||
} catch (Exception $e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
}//function putcookie
|
||||
|
||||
/**
|
||||
* 生成安全码
|
||||
*
|
||||
* @param String $u
|
||||
* @param String $p
|
||||
*/
|
||||
public function makescr($u,$p)
|
||||
{
|
||||
return substr(md5($u.$p.$this->ck),3,20);
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除cookie
|
||||
*/
|
||||
static function flushcookie()
|
||||
{
|
||||
setcookie('user','',time()-99999,'/');
|
||||
setcookie('scr','',time()-99999,'/');
|
||||
}
|
||||
|
||||
public function getUser()
|
||||
{
|
||||
$sql = "SELECT * FROM ".$this->memberTable." m ORDER BY m.id DESC";
|
||||
$rs = $this->db->query($sql);
|
||||
return $rs->fetchAll();
|
||||
}
|
||||
|
||||
}
|
|
@ -1,135 +0,0 @@
|
|||
<?php
|
||||
namespace Sookon\User;
|
||||
|
||||
use Sookon\Helpers\Config;
|
||||
use Sookon\Helpers\PDO as Db;
|
||||
|
||||
class Member
|
||||
{
|
||||
var $ck='Dxe8SqIcmyUf';
|
||||
var $db; //传入PDO对象
|
||||
var $mid; //会员ID
|
||||
|
||||
public $scr; //cookie 安全码 $_COOKIE['scr']
|
||||
public $user;//cookie User $_COOKIE['user']
|
||||
|
||||
public $srpwd;//执行checkcookie后方可调用
|
||||
|
||||
public $memberTable = "tbl_member";
|
||||
public $FieldUsername = "username";
|
||||
public $FieldPasword = "password";
|
||||
public $FieldLastlogin = "ts_last_login";
|
||||
public $FieldEmail = "email";
|
||||
public $FieldLastloginIp = "last_login_ip";
|
||||
public $GravatarEmailField = "gravatar_email";
|
||||
|
||||
public $RoleMember = "member";
|
||||
|
||||
function __construct()
|
||||
{
|
||||
$this->db = new Db();
|
||||
$this->config = Config::get();
|
||||
|
||||
if(!empty($_COOKIE['scr']))
|
||||
{
|
||||
$this->scr = $_COOKIE['scr'];
|
||||
}
|
||||
if(!empty($_COOKIE['user']))
|
||||
{
|
||||
$this->user= $_COOKIE['user'];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 检测cookie
|
||||
*/
|
||||
public function checkcookie()
|
||||
{
|
||||
$uname = $this->user;
|
||||
$hash = $this->scr;
|
||||
|
||||
if(!empty($uname) && !empty($hash))
|
||||
{
|
||||
if (preg_match("/[<|>|#|$|%|^|*|(|)|{|}|'|\"|;|:]/i",$uname) || preg_match("/[<|>|#|$|%|^|*|(|)|{|}|'|\"|;|:]/i",$hash))
|
||||
{
|
||||
$this->mid=0;
|
||||
return false;
|
||||
}
|
||||
else{
|
||||
$sql = "select {$this->FieldUsername} as userid,{$this->FieldPasword} as pwd from {$this->memberTable} where {$this->FieldUsername}='$uname'";
|
||||
$rs = $this->db->query($sql);
|
||||
$row = $rs->fetch();
|
||||
$scr = $this->makescr($row['userid'],$row['pwd']);
|
||||
|
||||
if($hash == $scr)
|
||||
{
|
||||
$this->srpwd=$row['pwd'];
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}//cookie安全
|
||||
}else {
|
||||
return false;
|
||||
}//exit
|
||||
}//function checkcookie
|
||||
|
||||
/**
|
||||
* putcookie
|
||||
*
|
||||
* 登陆成功后放置cookie,包含安全码
|
||||
*
|
||||
* @param String $uname
|
||||
* @param String $pwd
|
||||
* @param Int $time
|
||||
*/
|
||||
public function putcookie($uname,$pwd,$time = 604800)
|
||||
{
|
||||
try {
|
||||
$scrString = $this->makescr($uname,$pwd);//加密验证串:防止用户密码被盗;防止伪造cookie。
|
||||
|
||||
if(!is_numeric($time))
|
||||
{
|
||||
$time = 604800;
|
||||
}
|
||||
|
||||
setcookie('user',$uname,time()+$time,'/');
|
||||
setcookie('scr',$scrString,time()+$time,'/');
|
||||
|
||||
return true;
|
||||
} catch (Exception $e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
}//function putcookie
|
||||
|
||||
/**
|
||||
* 生成安全码
|
||||
*
|
||||
* @param String $u
|
||||
* @param String $p
|
||||
*/
|
||||
public function makescr($u,$p)
|
||||
{
|
||||
return substr(md5($u.$p.$this->ck),3,20);
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除cookie
|
||||
*/
|
||||
static function flushcookie()
|
||||
{
|
||||
setcookie('user','',time()-99999,'/');
|
||||
setcookie('scr','',time()-99999,'/');
|
||||
}
|
||||
|
||||
public function getUser()
|
||||
{
|
||||
$sql = "SELECT * FROM ".$this->memberTable." m ORDER BY m.id DESC";
|
||||
$rs = $this->db->query($sql);
|
||||
return $rs->fetchAll();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Li Jianxuan
|
||||
* Date: 14-9-19
|
||||
* Time: 下午3:21
|
||||
*/
|
||||
|
||||
namespace Westdc\User;
|
||||
|
||||
use Zend\ServiceManager\ServiceManager;
|
||||
use Zend\ServiceManager\ServiceManagerAwareInterface;
|
||||
|
||||
class Status implements ServiceManagerAwareInterface{
|
||||
|
||||
protected $serviceManager;
|
||||
|
||||
private $db;
|
||||
|
||||
public function setServiceManager(ServiceManager $serviceManager)
|
||||
{
|
||||
$this->serviceManager = $serviceManager;
|
||||
|
||||
$this->init();
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
private function init()
|
||||
{
|
||||
$dbService = $this->serviceManager->get('Db');
|
||||
$this->db = $dbService->getPdo();
|
||||
}
|
||||
|
||||
|
||||
public function getUserCount(){
|
||||
|
||||
$sql="select count(id) as total from users";
|
||||
$uq=$this->db->query($sql);
|
||||
|
||||
return $uq->fetchColumn(0);
|
||||
|
||||
}
|
||||
|
||||
public function getAdminCount(){
|
||||
|
||||
$sql="select count(id) as total from users where usertype='administrator'";
|
||||
$uq=$this->db->query($sql);
|
||||
|
||||
return $uq->fetchColumn(0);
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -8,8 +8,39 @@
|
|||
|
||||
namespace Westdc\User;
|
||||
|
||||
use Zend\ServiceManager\ServiceManager;
|
||||
use Zend\ServiceManager\ServiceManagerAwareInterface;
|
||||
use Westdc\EventModel\AbstractEventManager;
|
||||
|
||||
class User extends AbstractEventManager implements ServiceManagerAwareInterface{
|
||||
|
||||
protected $serviceManager;
|
||||
|
||||
private $db;
|
||||
|
||||
public function setServiceManager(ServiceManager $serviceManager)
|
||||
{
|
||||
$this->serviceManager = $serviceManager;
|
||||
|
||||
$this->init();
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
private function init()
|
||||
{
|
||||
$dbService = $this->serviceManager->get('Db');
|
||||
$this->db = $dbService->getPdo();
|
||||
}
|
||||
|
||||
public function fetchAll(){
|
||||
$sql = "select * from users where usertype = 'member'";
|
||||
$rs = $this->db->query($sql);
|
||||
return $rs->fetchAll(\PDO::FETCH_ASSOC);
|
||||
|
||||
|
||||
class User {
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Li Jianxuan
|
||||
* Date: 14-9-19
|
||||
* Time: 下午4:23
|
||||
*/
|
||||
|
||||
namespace Westdc\User;
|
||||
|
||||
use Zend\ServiceManager\ServiceManager;
|
||||
use Zend\ServiceManager\ServiceManagerAwareInterface;
|
||||
|
||||
class UserService implements ServiceManagerAwareInterface{
|
||||
|
||||
/**
|
||||
* @var ServiceManager
|
||||
*/
|
||||
protected $serviceManager;
|
||||
|
||||
/**
|
||||
* @param ServiceManager $serviceManager
|
||||
* @return service
|
||||
*/
|
||||
public function setServiceManager(ServiceManager $serviceManager)
|
||||
{
|
||||
$this->serviceManager = $serviceManager;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue