1 <?php
2
3 function show() {
4 $vote_id = I ( 'id', 0, 'intval' ); //接受id传参
5 $openid = get_openid (); //获取当前用户的OpenId
6 $token = get_token (); //获取当前用户的Token
7
8 $info = $this->_getVoteInfo ( $vote_id ); //获取投票插件的信息
9
10 $canJoin = ! empty ( $openid ) && ! empty ( $token ) && ! ($this->_is_overtime ( $vote_id )) && ! ($this->_is_join ( $vote_id, $this->mid, $token ));
11 $this->assign ( 'canJoin', $canJoin );
12 // dump ( $canJoin );
13 // dump(! empty ( $openid ));dump(! empty ( $token ));dump(! ($this->_is_overtime ( $vote_id )));dump(! ($this->_is_join ( $vote_id, $openid, $token )));
14
15 $test_id = intval ( $_REQUEST ['test_id'] ); //转换全局变量的值
16 $this->assign ( 'event_url', event_url ( '投票', $vote_id ) ); //提交到模版
17
18 $this->display ( T ( 'Addons://Vote@Vote/show' ) ); //调用show模版显示
19 }
20 function _getVoteInfo($id) { //获取投票插件的信息
21 // 检查ID是否合法
22 if (empty ( $id ) || 0 == $id) {
23 $this->error ( "错误的投票ID" );
24 }
25
26 $map ['id'] = $map2 ['vote_id'] = intval ( $id ); //将参数id转换为整形,并赋值
27 $info = M ( 'vote' )->where ( $map )->find (); //查表获得信息
28 // dump(M ( 'vote' )->getLastSql());
29 $this->assign ( 'info', $info ); //将信息传给模版
30
31 // dump($info);
32 $opts = M ( 'vote_option' )->where ( $map2 )->order ( '`order` asc' )->select ();
33 //查表获得结果集并按正序排列
34 foreach ( $opts as $p ) { //设置total
35 $total += $p ['opt_count'];
36
37 }
38 foreach ( $opts as &$vo ) { //设置数组¥vo
39 $vo ['percent'] = round ( $vo ['opt_count'] * 100 / $total, 1 ); //
40 }
41 // dump($opts);
42 $this->assign ( 'opts', $opts );
43 $this->assign ( 'num_total', $total );
44 return $info;
45 }
46 // 用户投票信息
47 function join() {
48 $token = get_token (); //获取token
49 $opts_ids = array_filter ( I ( 'post.optArr' ) ); //转换参数
50
51 $vote_id = intval ( $_POST ["vote_id"] ); //设置转换参数为整形
52 // 检查ID是否合法
53 if (empty ( $vote_id ) || 0 == $vote_id) {
54 $this->error ( "错误的投票ID" );
55 }
56 if ($this->_is_overtime ( $vote_id )) {
57 $this->error ( "请在指定的时间内投票" );
58 }
59 if ($this->_is_join ( $vote_id, $this->mid, $token )) {
60 $this->error ( "您已经投过,请不要重复投" );
61 }
62 if (empty ( $_POST ['optArr'] )) {
63 $this->error ( "请先选择投票项" );
64 }
65 // 如果没投过,就添加
66 $data ["user_id"] = $this->mid;
67 $data ["vote_id"] = $vote_id;
68 $data ["token"] = $token;
69 $data ["options"] = implode ( ',', $opts_ids );
70 $data ["cTime"] = time ();
71 $addid = M ( "vote_log" )->add ( $data );
72 // 投票选项信息的num+1
73 foreach ( $opts_ids as $v ) {
74 $v = intval ( $v );
75 $res = M ( "vote_option" )->where ( 'id=' . $v )->setInc ( "opt_count" );
76 }
77
78 // 投票信息的vote_count+1
79 $res = M ( "vote" )->where ( 'id=' . $vote_id )->setInc ( "vote_count" );
80
81 // 增加积分
82 add_credit ( 'vote' );
83
84 // 连续投票
85 $next_id = M ( "vote" )->where ( 'id=' . $vote_id )->getField ( "next_id" );
86 if (! empty ( $next_id )) {
87 $vote_id = $next_id;
88 }
89
90 redirect ( U ( 'show', 'id=' . $vote_id ) );
91 }
92 //已过期返回 true ,否则返回 false
93 private function _is_overtime($vote_id) {
94 // 先看看投票期限过期与否
95 $the_vote = M ( "vote" )->where ( "id=$vote_id" )->find ();
96
97 if(!empty($the_vote['start_date']) && $the_vote ['start_date'] > NOW_TIME) return ture;
98
99 $deadline = $the_vote ['end_date'] + 86400; //过期时间
100 if(!empty($the_vote['end_date']) && $deadline <= NOW_TIME) return ture; //判断
101
102 return false;
103 }
104 private function _is_join($vote_id, $user_id, $token) {
105 // $vote_limit = M ( 'vote' )->where ( 'id=' . $vote_id )->getField ( 'vote_limit' );
106 $vote_limit = 1;
107 $list = M ( "vote_log" )->where ( "vote_id=$vote_id AND user_id='$user_id' AND token='$token' AND options <>''" )->select (); //查表
108 $count = count ( $list ); //获取个数
109 $info = array_pop ( $list ); //删除
110 if ($info) { //若info有值
111 $joinData = ( ',', $info ['options'] ); //设置$joinData
112 $this->assign ( 'joinData', $joinData ); //赋值给模版
113 }
114 if ($count >= $vote_limit) { //如果数量大于限制数量,并返回数true
115 return true;
116 }
117 return false;
118 }