471 lines
11 KiB
PHP
471 lines
11 KiB
PHP
<?php
|
|
class Admin_HeiheController extends Zend_Controller_Action
|
|
{
|
|
function preDispatch()
|
|
{
|
|
$this->db=Zend_Registry::get('db');
|
|
$this->view->config = Zend_Registry::get('config');
|
|
}
|
|
|
|
function postDispatch()
|
|
{
|
|
|
|
}
|
|
|
|
function indexAction()
|
|
{
|
|
|
|
}
|
|
|
|
/*
|
|
* projectsAction() 数据汇交计划
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*/
|
|
function projectAction()
|
|
{
|
|
$this->view->input_NameDefaultVal = "专家姓名";
|
|
$this->view->input_EmailDefaultVal = "专家email";
|
|
$projectTable = "heiheproject";
|
|
|
|
$ac = $this->_getParam('ac');
|
|
|
|
if(empty($ac) || $ac == "index")
|
|
{
|
|
$this->_helper->viewRenderer('project');
|
|
|
|
//Search Link
|
|
$this->view->searchLink = "/admin/heihe/project/ac/index/";
|
|
|
|
$q = $this->_getParam('q');
|
|
|
|
$wheresql = array();
|
|
|
|
if(!empty($q))
|
|
{
|
|
$wheresql[] = " (title LIKE '%$q%' OR
|
|
code LIKE '%$q%' OR
|
|
name LIKE '%$q%' OR
|
|
email LIKE '%$q%')";
|
|
$this->view->searchKeyword = $q;
|
|
}
|
|
|
|
if(count($wheresql)>0)
|
|
{
|
|
$wheresql = join(" AND ",$wheresql);
|
|
}else{
|
|
$wheresql = "";
|
|
}
|
|
|
|
if(!empty($wheresql))
|
|
{
|
|
$wheresql = " WHERE ".$wheresql;
|
|
}
|
|
|
|
$sql = "SELECT * FROM $projectTable $wheresql
|
|
ORDER BY id ASC";
|
|
$sth = $this->db->query($sql);
|
|
$rows = $sth->fetchAll();
|
|
|
|
foreach ($rows as $k=>$v)
|
|
{
|
|
$rows[$k]['status'] = $this->replacestatus($v['status']);
|
|
}
|
|
|
|
$this->view->Count = count($rows);
|
|
|
|
$paginator = Zend_Paginator::factory($rows);
|
|
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
|
$paginator->setItemCountPerPage(15);
|
|
$paginator->setView($this->view);
|
|
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
|
$this->view->paginator=$paginator;
|
|
|
|
}//ac == index
|
|
|
|
//邀请专家
|
|
if($ac == "invite")
|
|
{
|
|
$this->_helper->layout->disableLayout();
|
|
$this->_helper->viewRenderer->setNoRender();
|
|
|
|
$pid = $this->_getParam('id');
|
|
$name = $this->_getParam('name');
|
|
$email = $this->_getParam('email');
|
|
|
|
if(!is_numeric($pid))
|
|
{
|
|
$this->jsonexit(array("error"=>"参数错误"));
|
|
return true;
|
|
}
|
|
|
|
if(empty($name) || $name == $this->view->input_NameDefaultVal)
|
|
{
|
|
$this->jsonexit(array("error"=>"请输入专家姓名"));
|
|
return true;
|
|
}
|
|
|
|
if(empty($email) || $email == $this->view->input_EmailDefaultVal)
|
|
{
|
|
$this->jsonexit(array("error"=>"请输入专家Email"));
|
|
return true;
|
|
}
|
|
|
|
$sql = "SELECT * FROM $projectTable WHERE id=$pid";
|
|
$sth = $this->db->query($sql);
|
|
$row = $sth->fetch();
|
|
|
|
$expert_name = $this->getArray($row['expert_name']);
|
|
$expert_email = $this->getArray($row['expert_email']);
|
|
$expert_validation = $this->getArray($row['expert_validation']);
|
|
$expert_created = $this->getArray($row['expert_created']);
|
|
|
|
$name_list = array();
|
|
$email_list = array();
|
|
$validation_list = array();
|
|
$created_list = array();
|
|
|
|
if(is_array($expert_name) && count($expert_name)>0)
|
|
{
|
|
if(in_array($name,$expert_name))
|
|
{
|
|
$this->jsonexit(array("error"=>"该专家的姓名已经存在"));
|
|
return true;
|
|
}
|
|
}
|
|
|
|
if(is_array($expert_email) && count($expert_email)>0)
|
|
{
|
|
if(in_array($email,$expert_email))
|
|
{
|
|
$this->jsonexit(array("error"=>"该专家的Email已经存在"));
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
$expert_name[] = $name;
|
|
$expert_email[] = $email;
|
|
$code = substr(md5($email),5,12);
|
|
$expert_validation[] = $code;
|
|
$expert_created[] = date("Y-m-d H:i:s",time());
|
|
|
|
|
|
$name_list = $this->mkArray($expert_name);
|
|
$email_list = $this->mkArray($expert_email);
|
|
$validation_list = $this->mkArray($expert_validation);
|
|
$created_list = $this->mkArray($expert_created);
|
|
|
|
$update = array(
|
|
"expert_name"=>$name_list,
|
|
"expert_email"=>$email_list,
|
|
"expert_validation"=>$validation_list,
|
|
"expert_created"=>$created_list
|
|
);
|
|
$where = "id=$pid";
|
|
|
|
if($this->db->update($projectTable,$update,$where))
|
|
{
|
|
$this->sendMailToExpert($pid,$name,$email,$code);
|
|
$this->jsonexit(array("msg"=>"专家邀请成功!","invited"=>1));
|
|
return true;
|
|
}else{
|
|
$this->jsonexit(array("error"=>"邀请失败,请重试"));
|
|
return true;
|
|
}
|
|
|
|
return true;
|
|
}// 邀请专家
|
|
|
|
if($ac == "showexpert")
|
|
{
|
|
$del = $this->_getParam('del');
|
|
|
|
if(isset($del))
|
|
{
|
|
|
|
$this->_helper->layout->disableLayout();
|
|
$this->_helper->viewRenderer->setNoRender();
|
|
}else{
|
|
$this->_helper->layout->setLayout('layout-iframe');
|
|
$this->_helper->viewRenderer('project-showexpert');
|
|
}
|
|
|
|
$pid = $this->_getParam('id');
|
|
|
|
if(empty($pid) || !is_numeric($pid))
|
|
{
|
|
$this->view->error = "参数错误";
|
|
return true;
|
|
}
|
|
|
|
$this->view->pid = $pid;
|
|
|
|
$sql = "SELECT * FROM $projectTable WHERE id=$pid";
|
|
$sth = $this->db->query($sql);
|
|
$row = $sth->fetch();
|
|
|
|
if(empty($row['expert_name']))
|
|
{
|
|
$this->view->error = "此项目还没有添加跟踪专家";
|
|
return true;
|
|
}
|
|
|
|
$names = $this->getArray($row['expert_name']);
|
|
$emails = $this->getArray($row['expert_email']);
|
|
$validations = $this->getArray($row['expert_validation']);
|
|
$created = $this->getArray($row['expert_created']);
|
|
|
|
$experts = array();
|
|
|
|
foreach($names as $k=>$v)
|
|
{
|
|
$experts[$k] = array(
|
|
"name"=>$names[$k],
|
|
"email"=>$emails[$k],
|
|
"validation"=>$validations[$k],
|
|
"created"=>$created[$k],
|
|
"url"=>$this->makeInviteLink($pid,$validations[$k])
|
|
);
|
|
}
|
|
|
|
$this->view->experts = $experts;
|
|
|
|
$del = $this->_getParam('del');
|
|
|
|
if(isset($del))
|
|
{
|
|
|
|
if(!is_numeric($del))
|
|
{
|
|
$this->jsonexit(array("error"=>"参数错误"));
|
|
return true;
|
|
}
|
|
|
|
unset($names[$del]);
|
|
unset($emails[$del]);
|
|
unset($validations[$del]);
|
|
unset($created[$del]);
|
|
|
|
$update = array(
|
|
"expert_name"=>$this->mkArray($names),
|
|
"expert_email"=>$this->mkArray($emails),
|
|
"expert_validation"=>$this->mkArray($validations),
|
|
"expert_created"=>$this->mkArray($created),
|
|
);
|
|
$where = "id=$pid";
|
|
|
|
if($this->db->update($projectTable,$update,$where))
|
|
{
|
|
$this->jsonexit(array("deleted"=>1));
|
|
return true;
|
|
}else{
|
|
$this->jsonexit(array("error"=>"邀请失败,请重试"));
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
return true;
|
|
}//ac == showexpert 查看跟踪专家
|
|
|
|
if($ac == "upload")
|
|
{
|
|
$this->_helper->layout->setLayout('layout-iframe');
|
|
$this->_helper->viewRenderer('project-upload');
|
|
|
|
$submit = $this->_getParam('submit');
|
|
|
|
$pid = $this->_getParam('pid');
|
|
|
|
if(empty($pid) || !is_numeric($pid))
|
|
{
|
|
$this->view->error = "参数错误";
|
|
return true;
|
|
}
|
|
|
|
$this->view->pid = $pid;
|
|
|
|
$auth = Zend_Auth::getInstance();
|
|
if($auth->hasIdentity())
|
|
{
|
|
$user = $auth->getIdentity();
|
|
$uid = $user->id;
|
|
}
|
|
|
|
if(!empty($submit) && empty($this->view->error))
|
|
{
|
|
|
|
$files=new files();
|
|
$msg = $files -> upload($this->view->config->upload,$_FILES['Filedata'],'heihe');
|
|
|
|
if(empty($msg['error']))
|
|
{
|
|
$msg['error']="";
|
|
$filename = $msg['db_path'];
|
|
$filesize = $msg['file_size'];
|
|
$filedesc = $this->_request->getParam('filedesc');
|
|
$filetype = $msg['file_type'];
|
|
$realname = $msg['realname'];
|
|
|
|
if(!empty($row['attachid']))
|
|
{
|
|
$sql = "SELECT * FROM attachments WHERE id={$row['attachid']}";
|
|
$sth = $this->db->query($sql);
|
|
$attach = $sth->fetch();
|
|
$this->db->exec("DELETE FROM attachments WHERE id={$row['attachid']} AND filetype='heihe'");
|
|
@unlink($this->view->config->upload.$attach['filename']);
|
|
}
|
|
|
|
$sql = " INSERT INTO attachments (filename,filetype,filedesc,userid,filesize,realname) values
|
|
('$filename','heihe','$filedesc','$uid','$filesize','$realname') RETURNING id";
|
|
$sth = $this->db->prepare($sql);
|
|
$sth->execute();
|
|
$att = $sth->fetch(PDO::FETCH_ASSOC);
|
|
$msg['attid'] = $attid = $att['id'];
|
|
|
|
$sql = "UPDATE heiheproject SET attachid=$attid WHERE id=$pid";
|
|
$sth = $this->db->exec($sql);
|
|
|
|
if($sth)
|
|
{
|
|
$this->view->message = "上传成功";
|
|
}else{
|
|
@unlink($filename);
|
|
$this->view->error = '附件上传失败:写入附件表出错';
|
|
return true;
|
|
}
|
|
}else{
|
|
@unlink($filename);
|
|
$this->view->error = "附件上传失败".$msg['error'];
|
|
return true;
|
|
}
|
|
}
|
|
|
|
$sql = "SELECT * FROM heiheproject WHERE id=$pid";
|
|
$sth = $this->db->query($sql);
|
|
$row = $sth->fetch();
|
|
|
|
if(!empty($row['attachid']))
|
|
{
|
|
$sql = "SELECT * FROM attachments WHERE id = {$row['attachid']}";
|
|
$sth = $this->db->query($sql);
|
|
$this->view->att = $sth->fetch();
|
|
}
|
|
|
|
return true;
|
|
}//ac == upload
|
|
|
|
}//projectsAction()
|
|
|
|
function replacestatus($status)
|
|
{
|
|
if($status == 0)
|
|
{
|
|
return "计划未提交";
|
|
}
|
|
if($status == 1)
|
|
{
|
|
return "计划未审核";
|
|
}
|
|
if($status == 2)
|
|
{
|
|
return "跟踪专家审核";
|
|
}
|
|
if($status == 3)
|
|
{
|
|
return "跟踪专家通过";
|
|
}
|
|
if($status == 4)
|
|
{
|
|
return "数据委员会通过";
|
|
}
|
|
}
|
|
|
|
//从pgsql读取数组并拆分为php数组
|
|
function getArray($str){
|
|
if(strlen($str)>3)
|
|
{
|
|
return explode(",",substr($str,1,-1));
|
|
}else{
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
//将php数组组装成pgsql中的数组
|
|
function mkArray($array){
|
|
if(!is_array($array))
|
|
{
|
|
return "{".$array."}";
|
|
}
|
|
if(count($array)==1)
|
|
{
|
|
$key = max(array_keys($array));
|
|
return "{".$array[$key]."}";
|
|
}
|
|
if(count($array)>1)
|
|
{
|
|
return "{".join(",",$array)."}";
|
|
}
|
|
}
|
|
|
|
//发送邀请专家的邮件
|
|
function sendMailToExpert($pid,$name,$email,$code)
|
|
{
|
|
$url = $this->makeInviteLink($pid,$code);
|
|
|
|
include_once("EmailText.php");
|
|
$mailtp=new EmailText($this->db,"expert-invite",array(
|
|
'name' => $name,
|
|
'url' => $url,
|
|
));
|
|
//Email test code
|
|
|
|
/*
|
|
$mail_config = array(
|
|
'ssl' => 'ssl',
|
|
'port' => 465,
|
|
'auth' => 'login',
|
|
'username' => 'la5c@qq.com',
|
|
'password' => ''
|
|
);
|
|
$transport = new Zend_Mail_Transport_Smtp('smtp.qq.com', $mail_config);
|
|
Zend_Mail::setDefaultTransport($transport);
|
|
|
|
$mail=new Zend_Mail();
|
|
$mail->setBodyText($mailtp->getBody());
|
|
$mail->setFrom('la5c@qq.com','Jack');
|
|
$mail->addTo($email);
|
|
$mail->setSubject($mailtp->getSubject());
|
|
$mail->send();
|
|
*/
|
|
|
|
$mail=new WestdcMailer($this->view->config->smtp);
|
|
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
|
|
$mail->setBodyText($mailtp->getBody());
|
|
$mail->setSubject($mailtp->getSubject());
|
|
$mail->addTo($email);
|
|
$mail->send();
|
|
}//发送邀请邮件
|
|
|
|
//生成邀请连接
|
|
function makeInviteLink($pid,$code)
|
|
{
|
|
$http_base = "http://".$_SERVER ['HTTP_HOST'];
|
|
$url = $http_base."/heihe/projects/invite/".$code.'/pid/'.$pid;
|
|
return $url;
|
|
}//生成邀请连接
|
|
|
|
public function jsonexit($data){
|
|
$this->getResponse()
|
|
->setHeader('Content-Type', 'application/json')
|
|
->appendBody(json_encode($data,JSON_NUMERIC_CHECK));
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|