westdc-zf1/application/admin/controllers/UserController.php

939 lines
23 KiB
PHP
Raw Normal View History

<?php
class Admin_UserController extends Zend_Controller_Action
{
function preDispatch()
{
$this->db=Zend_Registry::get('db');
$this->view->config = Zend_Registry::get('config');
$this->messenger=$this->_helper->getHelper('FlashMessenger');
$this->view->messages = $this->messenger->getMessages();
2013-02-06 03:47:22 +00:00
$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');
2012-10-30 02:20:40 +00:00
if(!empty($realname))
2011-10-10 08:03:54 +00:00
{
2012-10-30 02:20:40 +00:00
$select->where('realname like ? ', '%'.$realname.'%');
$select->orWhere('username like ? ', '%'.$realname.'%');
2011-10-10 08:03:54 +00:00
}
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");
}
2012-10-30 02:20:40 +00:00
} //overview
/*
* groupAction() 用户组管理
*
*/
function groupAction(){
$ac = $this->_getParam('ac');
$groupsTable = "groups";
$userGroupTable = "usergroup";
$nameField = $paramName = "name";
2013-01-24 09:33:42 +00:00
include_once("Users.php");
$u = new Users($this->db);
2012-10-30 02:20:40 +00:00
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()
2013-02-06 03:47:22 +00:00
//管理用户权限
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,'西部数据中心服务组');
2012-12-10 09:34:59 +00:00
$mailtp=new EmailText($this->db,"user-invite",array(
'user' => $v['username'],
'uid' => $v['id'],
'realname'=> $v['realname'],
2012-12-10 13:16:28 +00:00
'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'],
2012-12-10 13:16:28 +00:00
'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']))
);
2012-12-11 11:43:19 +00:00
//@$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()
2013-02-06 03:47:22 +00:00
2012-10-30 02:20:40 +00:00
public function jsonexit($data){
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(json_encode($data,JSON_NUMERIC_CHECK));
return true;
}
}