您的位置:首页 > 编程语言 > PHP开发

weiphp 投票插件的主控制器部分代码3

2015-07-02 02:02 591 查看
<?php

function show() {
$vote_id = I ( 'id', 0, 'intval' );        //接受id传参
$openid = get_openid ();    //获取当前用户的OpenId
$token = get_token ();        //获取当前用户的Token

$info = $this->_getVoteInfo ( $vote_id );    //获取投票插件的信息

$canJoin = ! empty ( $openid ) && ! empty ( $token ) && ! ($this->_is_overtime ( $vote_id )) && ! ($this->_is_join ( $vote_id, $this->mid, $token ));
$this->assign ( 'canJoin', $canJoin );
// dump ( $canJoin );
// dump(! empty ( $openid ));dump(! empty ( $token ));dump(! ($this->_is_overtime ( $vote_id )));dump(! ($this->_is_join ( $vote_id, $openid, $token )));

$test_id = intval ( $_REQUEST ['test_id'] );    //转换全局变量的值
$this->assign ( 'event_url', event_url ( '投票', $vote_id ) );        //提交到模版

$this->display ( T ( 'Addons://Vote@Vote/show' ) );        //调用show模版显示
}
function _getVoteInfo($id) {        //获取投票插件的信息
// 检查ID是否合法
if (empty ( $id ) || 0 == $id) {
$this->error ( "错误的投票ID" );
}

$map ['id'] = $map2 ['vote_id'] = intval ( $id );        //将参数id转换为整形,并赋值
$info = M ( 'vote' )->where ( $map )->find ();        //查表获得信息
// dump(M ( 'vote' )->getLastSql());
$this->assign ( 'info', $info );        //将信息传给模版

// dump($info);
$opts = M ( 'vote_option' )->where ( $map2 )->order ( '`order` asc' )->select ();
//查表获得结果集并按正序排列
foreach ( $opts as $p ) {    //设置total
$total += $p ['opt_count'];

}
foreach ( $opts as &$vo ) {        //设置数组¥vo
$vo ['percent'] = round ( $vo ['opt_count'] * 100 / $total, 1 );    //
}
// dump($opts);
$this->assign ( 'opts', $opts );
$this->assign ( 'num_total', $total );
return $info;
}
// 用户投票信息
function join() {
$token = get_token ();        //获取token
$opts_ids = array_filter ( I ( 'post.optArr' ) );    //转换参数

$vote_id = intval ( $_POST ["vote_id"] );    //设置转换参数为整形
// 检查ID是否合法
if (empty ( $vote_id ) || 0 == $vote_id) {
$this->error ( "错误的投票ID" );
}
if ($this->_is_overtime ( $vote_id )) {
$this->error ( "请在指定的时间内投票" );
}
if ($this->_is_join ( $vote_id, $this->mid, $token )) {
$this->error ( "您已经投过,请不要重复投" );
}
if (empty ( $_POST ['optArr'] )) {
$this->error ( "请先选择投票项" );
}
// 如果没投过,就添加
$data ["user_id"] = $this->mid;
$data ["vote_id"] = $vote_id;
$data ["token"] = $token;
$data ["options"] = implode ( ',', $opts_ids );
$data ["cTime"] = time ();
$addid = M ( "vote_log" )->add ( $data );
// 投票选项信息的num+1
foreach ( $opts_ids as $v ) {
$v = intval ( $v );
$res = M ( "vote_option" )->where ( 'id=' . $v )->setInc ( "opt_count" );
}

// 投票信息的vote_count+1
$res = M ( "vote" )->where ( 'id=' . $vote_id )->setInc ( "vote_count" );

// 增加积分
add_credit ( 'vote' );

// 连续投票
$next_id = M ( "vote" )->where ( 'id=' . $vote_id )->getField ( "next_id" );
if (! empty ( $next_id )) {
$vote_id = $next_id;
}

redirect ( U ( 'show', 'id=' . $vote_id ) );
}
//已过期返回 true ,否则返回 false
private function _is_overtime($vote_id) {
// 先看看投票期限过期与否
$the_vote = M ( "vote" )->where ( "id=$vote_id" )->find ();

if(!empty($the_vote['start_date']) && $the_vote ['start_date'] > NOW_TIME) return ture;

$deadline = $the_vote ['end_date'] + 86400;        //过期时间
if(!empty($the_vote['end_date']) && $deadline <= NOW_TIME) return ture;        //判断

return false;
}
private function _is_join($vote_id, $user_id, $token) {
// $vote_limit = M ( 'vote' )->where ( 'id=' . $vote_id )->getField ( 'vote_limit' );
$vote_limit = 1;
$list = M ( "vote_log" )->where ( "vote_id=$vote_id AND user_id='$user_id' AND token='$token' AND options <>''" )->select ();        //查表
$count = count ( $list );    //获取个数
$info = array_pop ( $list );    //删除
if ($info) {    //若info有值
$joinData =  ( ',', $info ['options'] );    //设置$joinData
$this->assign ( 'joinData', $joinData );    //赋值给模版
}
if ($count >= $vote_limit) {        //如果数量大于限制数量,并返回数true
return true;
}
return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: