db=Zend_Registry::get('db'); $this->view->config = Zend_Registry::get('config'); $this->messenger=$this->_helper->getHelper('FlashMessenger'); $this->view->messages = $this->messenger->getMessages(); $this->view->theme = new Theme(); } function postDispatch() { $this->view->messages = $this->messenger->getMessages(); } function indexAction() { $sql="select count(id) as total from users"; $uq=$this->db->query($sql); $row=$uq->fetch(); $sqlt="select count(id) as total from users where usertype='administrator'"; $uqt=$this->db->query($sqlt); $adminrow=$uqt->fetch(); $this->view->su=$row; $this->view->suadmin=$adminrow; }//indexAction function listAction() { $select=$this->db->select(); $select->from('users') ->where('usertype = ?', 'member') ->order('users.id desc'); $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($this->_getParam('page')); $paginator->setItemCountPerPage(30); $paginator->setView($this->view); Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml'); $this->view->paginator=$paginator; }//listAction function searchAction() { $search = $this->_getParam('search'); $realname = $this->view->realname = $this->_getParam('realname'); $unit = $this->view->unit = $this->_getParam('unit'); $project = $this->view->project = $this->_getParam('project'); $select=$this->db->select(); if(!empty($search) && ( !empty($realname) || !empty($unit) || !empty($project) )) { $this->messenger->addMessage('搜索结果'); $select->from('users'); if(!empty($realname)) { $select->where('realname like ? ', '%'.$realname.'%'); $select->orWhere('username like ? ', '%'.$realname.'%'); } if(!empty($unit)) $select->where('unit like ? ', '%'.$unit.'%'); if(!empty($project)) $select->where('project like ? ', '%'.$project.'%'); $select->order('users.id desc'); $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($this->_getParam('page')); $paginator->setItemCountPerPage(30); $paginator->setView($this->view); Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); $this->view->paginator=$paginator; $this->_helper->viewRenderer('list'); } else { $this->_redirect("/admin/user/list"); } }//searchAction function deleteAction() { $delete=(int)$this->_getParam('id'); $deletename = $this->_getParam('uname'); if (isset($delete)) { $sql="delete from users where id=?"; try { $this->db->query($sql,array($delete)); $this->messenger->addMessage('您已经成功的删除了用户:'.$deletename); } catch (Exception $e) { $this->messenger->addMessage($e->getMessage()); } $this->_redirect("/admin/user/list"); } } function adminlistAction() { $select=$this->db->select(); $select->from('users') ->where('usertype = ?', 'administrator') ->order('users.id desc'); $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($this->_getParam('page')); $paginator->setItemCountPerPage(30); $paginator->setView($this->view); Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml'); $this->view->paginator=$paginator; } function showAction() { $id=(int)$this->_getParam('id'); if (isset($id)) { try { $sql="select * from users where id=?"; $result=$this->db->query($sql,$id); $rows = $result->fetch(); $this->view->infos=$rows; } catch (Exception $e) { $this->messenger->addMessage($e->getMessage()); } } else { $this->_redirect("/admin/user/list"); } }//showAction() function upAction() { $id=(int)$this->_getParam('id'); if (isset($id)) { try { $sql="select u.*,m.id as mid from users u left join mdexperts m on m.id=u.id where u.id='$id'"; $result = $this->db->query($sql); $ex = $result->fetch(); if(empty($ex['mid'])){ $submit=$this->_getParam('submit'); $speciality = $this->_getParam('speciality'); if($submit) { $sql="insert into mdexperts (id,speciality) values ('$id','$speciality')"; if($this->db->exec($sql)>0) { $this->messenger->addMessage('已经成功将用户提升为评审专家'); $this->_redirect("/admin/user/list"); } } else { $this->view->infos = $ex; } }else { $this->messenger->addMessage("该用户已经是评审专家"); $this->_redirect("/admin/user/list"); } } catch (Exception $e) { $this->messenger->addMessage($e->getMessage()); $this->_redirect("/admin/user/list"); } } else { $this->_redirect("/admin/user/list"); } }//upAction() 把用户提升为评审专家 function editAction() { $id=(int)$this->_getParam('id'); $usertype=$this->_getParam('usertype'); $newpwd=$this->_getParam('newpwd'); $cfnewpwd=$this->_getParam('cfnewpwd'); $sql=""; $updates=array(); if (isset($id)) { if(!empty($newpwd)&&!empty($cfnewpwd)) { if($newpwd==$cfnewpwd) { $password=md5($newpwd); $updates[]="password='$password'"; } else { $this->messenger->addMessage('两次密码不相同'); $this->_redirect("/admin/user/show/id/$id"); } } if(isset($usertype)) { $updates[]="usertype='$usertype'"; } $update=join(',',$updates); $sql="update users set $update where id='$id'"; try { $this->db->query($sql); $this->messenger->addMessage('编辑成功!'); } catch (Exception $e) { $this->messenger->addMessage($e->getMessage()); } $this->_redirect("/admin/user/show/id/$id"); } else { $this->_redirect("/admin/user/list"); } } function fetchpwdAction() { $id=(int)$this->_getParam('id'); $email=$this->_getParam('email'); if (!empty($email)) { try { $sql="select * from users where email=?"; $uq=$this->db->query($sql,$email); if ($urow=$uq->fetch()) { //email the url to user $username=$urow['username']; $sql="update users set activation=? where email=?"; $uid=uniqid(); $this->db->query($sql,array($uid,$email)); $mail=new WestdcMailer($this->view->config->smtp); $body="尊敬的西部数据中心用户: 有人提出了针对此用户名的密码重置请求。 用户名:"; $body.=$username; $body.=" 若想重置您的密码请打开下面的链接,否则请忽略此邮件,一切如常。 "; $body.="http://westdc.westgis.ac.cn/account/fetchpwd/".$username."/".$uid; $mail->setBodyText($body); $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); $mail->addTo($email); $mail->setSubject('密码已重置'); $mail->send(); $this->messenger->addMessage('密码重置成功!'); } } catch (Exception $e) { $this->messenger->addMessage($e->getMessage().$email); } $this->_redirect("/admin/user/show/id/$id"); } else { $this->_redirect("/admin/user/list"); } } //overview /* * groupAction() 用户组管理 * */ function groupAction(){ $ac = $this->_getParam('ac'); $groupsTable = "groups"; $userGroupTable = "usergroup"; $nameField = $paramName = "name"; include_once("Users.php"); $u = new Users($this->db); if(empty($ac) || $ac == "index") { $select=$this->db->select(); $select->from($groupsTable) ->order('groups.id desc'); $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($this->_getParam('page')); $paginator->setItemCountPerPage(30); $paginator->setView($this->view); Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml'); $this->view->paginator=$paginator; }//首页 if($ac == "add") { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $data[$nameField] = $this->_getParam($paramName); if(empty($data[$nameField])) { $this->jsonexit(array("error"=>'请输入组名')); return true; } if($this->db->insert($groupsTable,$data)) { $this->jsonexit(array("status"=>1)); return true; }else{ $this->jsonexit(array("error"=>"出现错误,请重试")); return true; } return true; }//增加用户组 if($ac == "edit") { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $id = $this->_getParam('id'); $data[$nameField] = $this->_getParam($paramName); if(empty($id)) { $this->jsonexit(array("error"=>'参数错误')); return true; } if(empty($data[$nameField])) { $this->jsonexit(array("error"=>'请输入组名')); return true; } if($this->db->update($groupsTable,$data,"id=$id")) { $this->jsonexit(array("status"=>1,"name"=>$data[$nameField])); return true; }else{ $this->jsonexit(array("error"=>"出现错误,请重试")); return true; } return true; }//编辑 if($ac == "del") { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $id = $this->_getParam('id'); if(empty($id)) { $this->jsonexit(array("error"=>'参数错误')); return true; } if($this->db->delete($groupsTable,"id=$id")) { $this->jsonexit(array("status"=>1)); return true; }else{ $this->jsonexit(array("error"=>"出现错误,请重试")); return true; } return true; }//删除 if($ac == "show") { $this->_helper->viewRenderer('group-users'); $gid = (int)$this->_getParam('id'); if(empty($gid)) { echo "参数错误!"; return true; } $this->view->groupid = $gid; $sql = "SELECT ug.uid,ug.gid,u.id,u.username,u.realname,u.email FROM $userGroupTable ug LEFT JOIN users u ON ug.uid=u.id WHERE ug.gid=$gid ORDER BY ug.ts_created DESC"; $sth = $this->db->query($sql); $rows = $sth->fetchAll(); $paginator = Zend_Paginator::factory($rows); $paginator->setCurrentPageNumber($this->_getParam('page')); $paginator->setItemCountPerPage(20); $paginator->setView($this->view); Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); $this->view->paginator=$paginator; }//查看用户 if($ac == "adduser") { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $data['uid'] = $this->_getParam('uid'); $data['gid'] = $this->_getParam('gid'); if(empty($data['uid']) || empty($data['gid'])) { $this->jsonexit(array("error"=>'参数错误')); return true; } $sql = "SELECT * FROM users WHERE id={$data['uid']}"; $sth = $this->db->query($sql); $rows = $sth->fetchAll(); if(count($rows)<1) { $this->jsonexit(array("error"=>'用户不存在')); return true; } $sql = "SELECT * FROM $userGroupTable WHERE uid={$data['uid']} AND gid='{$data['gid']}'"; $sth = $this->db->query($sql); $rows = $sth->fetchAll(); if(count($rows)>0) { $this->jsonexit(array("error"=>'该用户已经存在于要加入的组')); return true; } if($this->db->insert($userGroupTable,$data)) { $this->jsonexit(array("status"=>1)); return true; }else{ $this->jsonexit(array("error"=>"出现错误,请重试")); return true; } return true; }//往组中添加用户 if($ac == "deluser") { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $uid = $this->_getParam('uid'); $gid = $this->_getParam('gid'); if(empty($uid) || empty($gid)) { $this->jsonexit(array("error"=>'参数错误')); return true; } if($this->db->delete($userGroupTable,"uid=$uid AND gid=$gid")) { $this->jsonexit(array("status"=>1)); return true; }else{ $this->jsonexit(array("error"=>"出现错误,请重试")); return true; } return true; }//从组中删除用户 }// groupAction() //管理用户权限 public function userauthAction() { $this->_helper->viewRenderer('auth-user'); $uid = $this->_getParam('uid'); }//userauthAction() /* * * 给时间长没有登录的用户发送邀请邮件 * */ public function sendmailAction(){ $ac = $this->_getParam('ac'); if(empty($ac) || $ac=='index') { $time = date("Y-m-d H:i:s",time()-3*365*24*3600); $sql = "SELECT * FROM users WHERE ts_last_login<'$time' ORDER BY ts_last_login DESC"; $sth = $this->db->query($sql); $rows = $sth->fetchAll(); $paginator = Zend_Paginator::factory($rows); $paginator->setCurrentPageNumber($this->_getParam('page')); $paginator->setItemCountPerPage(20); $paginator->setView($this->view); Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); $this->view->paginator=$paginator; $this->view->count_users = count($rows); return true; } if($ac == "send") { $this->_helper->viewRenderer('sendmail-send'); //当前进行到的数量 $now = $this->_getParam('now'); //需要将起始的时间传递过来,防止sql中出现多余的用户 $time = $this->_getParam('time'); if(empty($time)) { $time = date("Y-m-d H:i:s",time()-3*365*24*3600); } $this->view->gotime = $time; //当前处理的页数 $page = $this->_getParam('page'); if(empty($page)) { $page = 0; } $step = 20; $sql = "SELECT count(id) as c FROM users WHERE ts_last_login<'$time'"; $sth = $this->db->query($sql); $row = $sth->fetch(); $total = $row['c']; if(empty($now)) { $now = 0; } //此次读取的起点 $start = $now + $step; if($start>$total) { $this->view->stop = "YES"; $msg = array( "title"=>"为长时间未登录用户发送邀请", "body"=>"在 ".time()." 时间给最后登陆时间在". $time ."之前的用户发送了邀请访问邮件。 " ); include_once("message.php"); message::post($this->db,0,-1,$msg['title'],$msg['body']); return true; } $sql = "SELECT * FROM users WHERE ts_last_login<'$time' ORDER BY ts_last_login DESC LIMIT $step OFFSET $start"; $sth = $this->db->query($sql); $rows = $sth->fetchAll(); $result = array(); foreach($rows as $k=>$v) { include_once("EmailText.php"); $mail=new WestdcMailer($this->view->config->smtp); $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); $mailtp=new EmailText($this->db,"user-invite",array( 'user' => $v['username'], 'uid' => $v['id'], 'realname'=> $v['realname'], 'lastlogin'=> date("Y-m-d",strtotime($v['ts_last_login'])), )); $mail->setBodyText($mailtp->getBody()); $mail->setSubject($mailtp->getSubject()); @$mail->addTo($v['email']); $result[$v['id']] = array( 'username'=>$v['username'], 'email'=>$v['email'], 'lastlogin'=>date("Y-m-d",strtotime($v['ts_last_login'])) ); //@$mail->send(); } $this->view->result = $result; $this->view->now = $start; $this->view->total = $total; $percent = round( ( $start / $total ) * 100 ,1); $this->view->percent = $percent; $page ++; $this->view->page = $page; return true; } //黑河用户邮件 if($ac == "heihe") { $this->_helper->viewRenderer('sendmail-heihe'); $sql = "SELECT * FROM heiheuser ORDER BY id DESC"; $sth = $this->db->query($sql); $rows = $sth->fetchAll(); $paginator = Zend_Paginator::factory($rows); $paginator->setCurrentPageNumber($this->_getParam('page')); $paginator->setItemCountPerPage(20); $paginator->setView($this->view); Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); $this->view->paginator=$paginator; $this->view->count_users = count($rows); return true; } //黑河邮件发送 if($ac == "heihemail") { $this->_helper->viewRenderer('sendmail-heihe-send'); //当前进行到的数量 $now = $this->_getParam('now'); //当前处理的页数 $page = $this->_getParam('page'); if(empty($page)) { $page = 0; } $step = 20; $sql = "SELECT count(id) as c FROM heiheuser"; $sth = $this->db->query($sql); $row = $sth->fetch(); $total = $row['c']; if(empty($now)) { $now = 0; } //此次读取的起点 $start = $now + $step; if($start>$total) { $this->view->stop = "YES"; $msg = array( "title"=>"为数字黑河用户发送了邮件通知", "body"=>"在 ".time()." 时间给数字黑河用户发送了邮件通知 " ); include_once("message.php"); message::post($this->db,0,-1,$msg['title'],$msg['body']); return true; } $sql = "SELECT * FROM heiheuser ORDER BY id DESC LIMIT $step OFFSET $start"; $sth = $this->db->query($sql); $rows = $sth->fetchAll(); $result = array(); foreach($rows as $k=>$v) { include_once("EmailText.php"); $mail=new WestdcMailer($this->view->config->smtp); $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); $mailtp=new EmailText($this->db,"user-heihe-invite",array( 'user' => $v['username'], 'uid' => $v['id'], 'lastlogin'=> date("Y-m-d",strtotime($v['lastlogin'])), )); $mail->setBodyText($mailtp->getBody()); $mail->setSubject($mailtp->getSubject()); @$mail->addTo($v['email']); $result[$v['id']] = array( 'username'=>$v['username'], 'email'=>$v['email'], 'lastlogin'=>date("Y-m-d",strtotime($v['lastlogin'])) ); //@$mail->send(); } $this->view->result = $result; $this->view->now = $start; $this->view->total = $total; $percent = round( ( $start / $total ) * 100 ,1); $this->view->percent = $percent; $page ++; $this->view->page = $page; $this->view->url = "/admin/user/sendmail/ac/heihemail?now=".$start."&page=".$page; return true; } //节日祝贺邮件 if($ac == "holiday") { $this->_helper->viewRenderer('sendmail-holiday'); $sql = "SELECT count(id) as c FROM users"; $sth = $this->db->query($sql); $row = $sth->fetch(); $this->view->count_users = $row['c']; $sql = "SELECT * FROM emailtext WHERE \"template\"='user-holiday-email'"; $sth = $this->db->query($sql); $row = $sth->fetch(); $this->view->mailtemp = $row; return true; } //节日祝贺邮件 if($ac == "holidaymail") { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $title = $this->_getParam('title'); $body = $this->_getParam('content'); if(empty($title) || empty($body)) { $this->jsonexit(array("error"=>"请填写邮件标题和内容")); return true; } //当前进行到的数量 $now = $this->_getParam('now'); //当前处理的页数 $page = $this->_getParam('page'); if(empty($page)) { $page = 0; } $step = 20; $sql = "SELECT count(id) as c FROM users"; $sth = $this->db->query($sql); $row = $sth->fetch(); $total = $row['c']; if(empty($now)) { $now = 0; } //此次读取的起点 $start = $now + $step; if($start>$total) { $stop = "YES"; $msg = array( "title"=>"为用户发送了节日祝贺邮件", "body"=>"在 ".time()." 为用户发送了节日祝贺邮件 " ); include_once("message.php"); message::post($this->db,0,-1,$msg['title'],$msg['body']); } $sql = "SELECT * FROM users ORDER BY id DESC LIMIT $step OFFSET $start"; $sth = $this->db->query($sql); $rows = $sth->fetchAll(); $result = array(); $sended = 0; foreach($rows as $k=>$v) { $replace_data = array( 'username' => $v['username'], 'uid' => $v['id'], 'lastlogin'=> date("Y-m-d",strtotime($v['ts_last_login'])), ); $patterns = array(); $replacements = array(); foreach($replace_data as $k=>$v) { $patterns[]='/{'.$k.'}/i'; $replacements[]=$v; } ksort($patterns); ksort($replacements); $send_body = preg_replace($patterns, $replacements, $body); $send_subject = preg_replace($patterns, $replacements, $title); /* $mail=new WestdcMailer($this->view->config->smtp); $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); $mail->setBodyText($send_body); $mail->setSubject($send_subject); @$mail->addTo($v['email']); if(@$mail->send()) { $sended ++; $status = "成功"; }else{ $status = "失败"; } */ $sended ++; /* 调试时前台循环输出result $result[$v['id']] = array( 'username'=>$v['username'], 'email'=>$v['email'], 'send_body'=>$send_body, 'send_subject'=>$send_subject ); */ } $percent = round( ( $start / $total ) * 100 ,1); if($percent > 100) { $percent = 100; } $page ++; $data = array( 'now'=>$start, 'total'=>$total, 'percent'=>$percent, 'page'=>$page, 'sended'=>$sended, 'url'=> "/admin/user/sendmail/ac/holidaymail?now=".$start."&page=".$page."&title=".$title."&body=".urlencode($body), 'content'=>$body, 'title'=>$title, 'status'=>1, 'result'=>$result //用于调试 ); if(!empty($stop)) { $data['stop'] = $stop; $data['status'] = 0; } $this->jsonexit($data); return true; } }//sendemailAction() public function jsonexit($data){ $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(json_encode($data,JSON_NUMERIC_CHECK)); return true; } }