2013-05-02 09:54:38 +00:00
< ? php
class Doi extends Zend_Controller_Plugin_Abstract
{
private $db ; //传入PDO对象.
private $auth = NULL ; //Zend_Auth 对象
//使用到的公共变量
public $tbl_doi = " datadoi " ;
function __construct ( $db )
{
$this -> db = $db ;
}
2013-10-28 14:54:21 +00:00
function fetch ( $uid = 0 , $keyword = '' )
2013-05-02 09:54:38 +00:00
{
2013-10-28 14:54:21 +00:00
$wheresql = ' 1=1 ' ;
if ( ! empty ( $keyword ))
{
if ( preg_match ( " / \ '/ " , $keyword ))
{
$keyword = preg_replace ( " / \ '/ " , " '' " , $keyword );
}
2015-11-27 08:19:22 +00:00
$wheresql .= " and (d.title like '% $keyword %' or d.doi like '% $keyword %') " ;
2013-10-28 14:54:21 +00:00
}
2013-05-02 09:54:38 +00:00
if ( empty ( $uid ))
{
2015-01-09 09:44:43 +00:00
$sql = " SELECT *,array_to_json(organization_en) as orgen_json FROM " . $this -> tbl_doi . " d where " . $wheresql . " ORDER BY d.ts_published desc,d.ts_submitted desc,d.ts_created DESC " ;
2013-05-02 09:54:38 +00:00
} else {
2015-01-09 09:44:43 +00:00
$sql = " SELECT d.*,array_to_json(d.organization_en) as orgen_json FROM " . $this -> tbl_doi . " d
2013-10-28 14:54:21 +00:00
LEFT JOIN mdauthor a ON d . uuid = a . uuid
WHERE a . userid = " . $uid . " AND a . status > 0 and " . $wheresql . "
ORDER BY d . ts_published desc , d . ts_submitted desc , d . ts_created DESC
2013-05-02 09:54:38 +00:00
" ;
}
$rs = $this -> db -> query ( $sql );
$rows = $rs -> fetchAll ();
return $rows ;
}
function add ( $data ){
$this -> data_process_in ( $data );
2015-01-09 09:44:43 +00:00
$sql = " insert into " . $this -> tbl_doi . " (doi,uuid,url,title_en,publisher_en,author_en,organization_en) values(' " .
$data [ 'doi' ] . " ',' " . $data [ 'uuid' ] . " ',' " . $data [ 'url' ] . " ',' " . $data [ 'title_en' ] . " ',' " . $data [ 'publisher_en' ] . " ',' " . $data [ 'author_en' ] .
" ',array[ " . $data [ 'organization_en' ] . " ]) " ;
return $this -> db -> exec ( $sql );
2013-05-02 09:54:38 +00:00
}
function update ( $data , $uuid , $uid = 0 ){
2013-05-09 03:55:46 +00:00
if ( ! empty ( $uid ))
2013-05-02 09:54:38 +00:00
{
2013-05-09 03:55:46 +00:00
include_once ( " data/Author.php " );
$author = new Author ( $this -> db );
if ( $author -> checkAuthor ( $uuid , $uid ) == false )
{
return " 您没有权限 " ;
}
2013-05-02 09:54:38 +00:00
}
$doi_info = $this -> view ( $uuid );
if ( $doi_info == false )
{
return $this -> add ( $data );
} else {
$this -> data_process_in ( $data );
include_once ( " helper/dbh.php " );
$dbh = new dbh ( $this -> db );
if ( is_numeric ( $uuid ))
{
$condition = " id= $uuid " ;
} else {
$condition = " uuid=' $uuid ' " ;
}
2015-01-09 09:44:43 +00:00
$sql = " update $this->tbl_doi set doi=' " . $data [ 'doi' ] . " ',uuid=' " . $data [ 'uuid' ] . " ',
url = '".$data[' url ']."' , title_en = '".$data[' title_en ']."' , publisher_en = '".$data[' publisher_en ' ]
. " ',author_en=' " . $data [ 'author_en' ] . " ',organization_en=array[ " . $data [ 'organization_en' ] . " ] where " . $condition ;
$state = $this -> db -> exec ( $sql );
2013-05-02 09:54:38 +00:00
if ( $state == true )
{
return true ;
} else {
return $state ;
}
}
}
2015-01-05 04:55:12 +00:00
function update_en ( $data , $uuid , $uid = 0 ){
if ( ! empty ( $uid ))
{
include_once ( " data/Author.php " );
$author = new Author ( $this -> db );
if ( $author -> checkAuthor ( $uuid , $uid ) == false )
{
return " 您没有权限 " ;
}
}
$doi_info = $this -> view ( $uuid );
if ( $doi_info == false )
{
return $this -> add ( $data );
} else {
$this -> data_process_in ( $data );
include_once ( " helper/dbh.php " );
$dbh = new dbh ( $this -> db );
if ( is_numeric ( $uuid ))
{
$condition = " id= $uuid " ;
} else {
$condition = " uuid=' $uuid ' " ;
}
2015-01-09 09:44:43 +00:00
$sql = " update $this->tbl_doi set doi=' " . $data [ 'doi' ] . " ',uuid=' " . $data [ 'uuid' ] . " ',
url = '".$data[' url ']."' , title_en = '".$data[' title_en ']."' , publisher_en = '".$data[' publisher_en ' ]
. " ',author_en=' " . $data [ 'author_en' ] . " ',organization_en=array[ " . $data [ 'organization_en' ] . " ] where " . $condition ;
$state = $this -> db -> exec ( $sql );
2015-01-05 04:55:12 +00:00
if ( $state == true )
{
return true ;
} else {
return $state ;
}
}
}
2013-05-02 09:54:38 +00:00
function data_process_in ( & $data ){
$authors = array ();
$orgs = array ();
$authors_en = array ();
$orgs_en = array ();
foreach ( $data [ 'info' ] as $k => $v )
{
2015-01-09 09:44:43 +00:00
$authors_en [( int ) $v [ 'order' ]] = $v [ 'author_en' ];
$orgs_en [( int ) $v [ 'order' ]] = $v [ 'organization_en' ];
2013-05-02 09:54:38 +00:00
}
2015-01-05 06:50:16 +00:00
ksort ( $authors_en );
ksort ( $orgs_en );
2013-05-02 09:54:38 +00:00
$authors_en = " { " . join ( " , " , $authors_en ) . " } " ;
2015-01-09 09:44:43 +00:00
$orgs_en = " ' " . join ( " ',' " , $orgs_en ) . " ' " ;
2015-01-05 05:08:32 +00:00
$data [ 'authors' ] = '{}' ;
$data [ 'organization' ] = '{}' ;
2013-05-02 09:54:38 +00:00
$data [ 'author_en' ] = $authors_en ;
$data [ 'organization_en' ] = $orgs_en ;
unset ( $data [ 'info' ]);
}
function data_process_out ( & $data ){
$authors_en = $this -> array_split ( $data [ 'author_en' ]);
2015-01-09 09:44:43 +00:00
$orgs_en = json_decode ( $data [ 'orgen_json' ]);
2013-05-02 09:54:38 +00:00
$info = array ();
2015-01-05 05:13:36 +00:00
foreach ( $authors_en as $k => $v )
2013-05-02 09:54:38 +00:00
{
$info [ $k ] = array (
2015-01-09 09:44:43 +00:00
'author_en' => str_replace ( " \" " , " " , $authors_en [ $k ]),
'organization_en' => str_replace ( " \" " , " " , $orgs_en [ $k ]),
2015-01-09 09:55:49 +00:00
'order' => count ( $authors_en ) + $k
2013-05-02 09:54:38 +00:00
);
}
return $info ;
}
function array_split ( $a ){
2015-01-09 09:44:43 +00:00
return explode ( ',' , substr ( $a , 1 , - 1 ));
2013-05-02 09:54:38 +00:00
}
function view ( $id )
{
if ( is_numeric ( $id ))
{
2015-01-09 09:44:43 +00:00
$sql = " SELECT *,array_to_json(organization_en) as orgen_json FROM " . $this -> tbl_doi . " WHERE id= $id " ;
2013-05-02 09:54:38 +00:00
} else {
2015-01-09 09:44:43 +00:00
$sql = " SELECT *,array_to_json(organization_en) as orgen_json FROM " . $this -> tbl_doi . " WHERE uuid=' $id ' " ;
2013-05-02 09:54:38 +00:00
}
$rs = $this -> db -> query ( $sql );
$row = $rs -> fetch ();
return $row ;
}
function delete ( $id , $uid = 0 ){
if ( ! is_numeric ( $id ))
{
return " 参数错误 " ;
}
if ( $uid != 0 ){
$sql = " SELECT uuid FROM " . $this -> tbl_doi . " WHERE id= $id " ;
$rs = $this -> db -> query ( $sql );
$row = $rs -> fetch ();
if ( isset ( $row [ 'uuid' ]) && ! empty ( $row [ 'uuid' ])){
include_once ( " data/Author.php " );
$author = new Author ( $this -> db );
if ( $author -> checkAuthor ( $row [ 'uuid' ], $uid ) == false )
{
return " 您没有权限 " ;
}
$condition = " id= $id " ;
$sql = " DELETE FROM " . $this -> tbl_doi . " WHERE $condition " ;
return $this -> db -> exec ( $sql );
} else {
return " 该记录不存在 " ;
}
} else {
$condition = " id= $id " ;
$sql = " DELETE FROM " . $this -> tbl_doi . " WHERE $condition " ;
return $this -> db -> exec ( $sql );
}
}
function _getParams ( Zend_Controller_Request_Abstract $request )
{
$data = array (
'doi' => trim ( $request -> getParam ( 'doi' )),
'uuid' => trim ( $request -> getParam ( 'uuid' )),
'publisher' => trim ( $request -> getParam ( 'publisher' )),
'url' => trim ( $request -> getParam ( 'url' )),
'title' => trim ( $request -> getParam ( 'title' )),
'title_en' => trim ( $request -> getParam ( 'title_en' )),
'publisher_en' => trim ( $request -> getParam ( 'publisher_en' )),
'info' => $_POST [ 'info' ]
);
return $data ;
}
function checkinfo ( $info ){
if ( ! is_array ( $info )){
return NULL ;
}
foreach ( $info as $k => $v )
{
2015-01-05 05:02:10 +00:00
if ( empty ( $v [ 'order' ]) && empty ( $v [ 'author_en' ]) && empty ( $v [ 'organization_en' ]) )
2013-05-02 09:54:38 +00:00
{
unset ( $info [ $k ]);
} else {
if ( empty ( $v [ 'author_en' ]))
{
return " 请输入 $k 中的作者英文 " ;
}
if ( empty ( $v [ 'organization_en' ]))
{
return " 请输入 $k 中的单位英文 " ;
}
if ( empty ( $v [ 'order' ]))
{
return " 请输入 $k 中的排序 " ;
}
}
}
return $info ;
}
function sksort ( $array , $key , $type = SORT_DESC ) {
$sortArray = array ();
foreach ( $array as $v ){
foreach ( $v as $key => $value ){
if ( ! isset ( $sortArray [ $key ])){
$sortArray [ $key ] = array ();
}
$sortArray [ $key ][] = $value ;
}
}
if ( array_multisort ( $sortArray [ $key ], $type , $array ))
{
return $array ;
} else {
return $array ;
}
}
}