#437 添加了长时间未登录用户的邀请功能

This commit is contained in:
Li Jianxuan 2012-12-10 09:30:38 +00:00
parent ad3c4507c5
commit ceaf16e572
4 changed files with 254 additions and 0 deletions

View File

@ -496,6 +496,129 @@ class Admin_UserController extends Zend_Controller_Action
}// groupAction()
/*
*
* 给时间长没有登录的用户发送邀请邮件
*
*/
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);
}
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";
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,"author-new",array(
'user' => $v['username'],
'uid' => $v['id'],
'realname'=> $v['realname'],
'lastlogin'=> date("Y-m-d",$v['email']),
));
$mail->setBodyText($mailtp->getBody());
$mail->setSubject($mailtp->getSubject());
@$mail->addTo($v['email']);
$result[$v['id']] = array(
'username'=>$v['username'],
'email'=>$v['email']
);
@$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;
}
}//sendemailAction()

View File

@ -5,4 +5,5 @@
<li><a href="/admin/user/adminlist">管理员列表</a></li>
<li><a href="/admin/user/group">用户组管理</a></li>
<li><a href="/admin/review/experts">元数据评审专家库</a></li>
<li><a href="/admin/user/sendmail/">长时间未登录用户</a></li>
</ul>

View File

@ -0,0 +1,70 @@
<?php
$this->headTitle($this->config->title->site);
$this->headTitle('后台管理');
$this->headTitle()->setSeparator(' - ');
$this->headLink()->appendStylesheet('/css/admin.css');
$this->headLink()->appendStylesheet('/css/author.css');
$this->breadcrumb('<a href="/">首页</a>');
$this->breadcrumb('<a href="/admin/">后台首页</a>');
$this->breadcrumb('<a href="/admin/user">用户管理</a>');
$this->breadcrumb()->setSeparator(' > ');
?>
<style>
.process {width:99%;height:20px;overflow:hidden;border:1px solid #6CF;}
.process .display { position:absolute;height:20px;color:#6CF; margin:0px; padding:0px;}
.process .np{display:block;height:20px;background-color:green;}
</style>
<div id="leftPanel">
<?= $this->partial('user/left.phtml'); ?>
</div>
<?php if ($this->msg or $this->messages) :?>
<div id="message">
<?php if ($this->msg) : ?>
<p><?php echo $this->msg; ?></p>
<?php endif; if ($this->messages): foreach($this->messages as $msg): ?>
<p><?php echo $msg; ?></p>
<?php endforeach;endif; ?>
</div>
<?php endif; ?>
<div id="rightPanel">
<?php
if(empty($this->stop)){ ?>
<?php
echo '<div class="process">';
echo '<div class="display">'.$this->percent.'%</div>';
echo '<div class="np" style="width:'.$this->percent.'%;"></div>';
echo '</div>';
?>
<div id="datalist">
<ul>
<?php
foreach($this->result as $v)
{
echo "<li>".$v['username'].' - '.$v['email'] . " - " . "" ."</li>\r\n";
}
?>
</ul>
</div>
<script>
function jump_url(now,page,time){
self.location="/admin/user/sendmail/ac/send?"
+"now=" + now
+"&page=" + page
+"&time=" + time;
}
function jump(now,page,time)
{
setTimeout("jump_url('"+now+"','"+page+"','"+time+"');",1000);
}
</script>
<?php
echo '<script>jump("'.$this->now.'","'.$this->page.'","'.$this->gotime.'")</script>';
?>
<?php } else {
echo "邮件发送完成!";
}
?>
</div>

View File

@ -0,0 +1,60 @@
<?php
$this->headTitle($this->config->title->site);
$this->headTitle('后台管理');
$this->headTitle()->setSeparator(' - ');
$this->headLink()->appendStylesheet('/css/admin.css');
$this->breadcrumb('<a href="/">首页</a>');
$this->breadcrumb('<a href="/admin/">后台首页</a>');
$this->breadcrumb('<a href="/admin/user">用户管理</a>');
$this->breadcrumb()->setSeparator(' > ');
?>
<div id="leftPanel">
<?= $this->partial('user/left.phtml'); ?>
</div>
<?php if ($this->msg or $this->messages) :?>
<div id="message">
<?php if ($this->msg) : ?>
<p><?php echo $this->msg; ?></p>
<?php endif; if ($this->messages): foreach($this->messages as $msg): ?>
<p><?php echo $msg; ?></p>
<?php endforeach;endif; ?>
</div>
<?php endif; ?>
<div id="rightPanel">
<div style="font-size:16px;line-height:30px;">3年内未登录的用户列表(共 <?= $this->count_users;?> 个)</div>
<div>
<button type="button" onclick="self.location='/admin/user/sendmail/ac/send'" class="btn btn-green">发送邮件邀请用户访问</button>
</div>
<table>
<thead>
<tr>
<td width='150'>用户名</td>
<td width='250'>电子邮箱</td>
<td width='100'>用户类型</td>
<td width='200'>单位</td>
<td width='100'>真实姓名</td>
<td width='150'>最后登录</td>
</tr>
</thead><!-- table's head -->
<?php if (count($this->paginator)): ?>
<?php $autoindex=0;?>
<?php foreach ($this->paginator as $item): ?>
<?php $autoindex++;?>
<tr class="<?php if($autoindex%2 == 0) echo 'even'; else echo 'odd'; ?>">
<td><?= $item['username']?></td>
<td><?= $item['email']; ?></td>
<td><?= $item['usertype']; ?></td>
<td><?= $item['unit']; ?></td>
<td><?= $item['realname']; ?></td>
<td><?= date("Y-m-d",strtotime($item['ts_last_login'])); ?></td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</table>
<div class="pagenavi"><?= $this->paginator; ?></div>
</div>