$id)); message('微信墙信息审核成功!', $this->createWebUrl('manage', array('id' => $id, 'isshow' => $isshow, 'page' => $_GPC['page']))); } if (checksubmit('delete') && !empty($_GPC['select'])) { foreach ($_GPC['select'] as &$row) { $row = intval($row); } $sql = 'DELETE FROM' . tablename('wxwall_message') . " WHERE rid=:rid AND id IN ('" . implode("','", $_GPC['select']) . "')"; pdo_query($sql, array(':rid' => $id)); message('微信墙信息删除成功!', $this->createWebUrl('manage', array('id' => $id, 'isshow' => $isshow, 'page' => $_GPC['page']))); } $condition = ' WHERE `ms`.`rid` = :rid'; $params = array(':rid' => intval($_GPC['id'])); $sql = 'SELECT `id`, `isshow`, `rid` FROM ' . tablename('wxwall_reply') . ' AS `ms` ' . $condition; $wall = pdo_fetch($sql, $params); if (empty($wall)) { message('微信墙活动不存在或已经被删除'); } $condition .= ' AND `me`.`rid` = :rid'; $params[':isshow'] = intval($_GPC['isshow']); if ($params[':isshow'] < 1) { $condition .= ' AND `isshow` = :isshow'; } else { $condition .= ' AND `isshow` > :isshow'; $params[':isshow'] = 0; } $sql = 'SELECT COUNT(*) FROM ' . tablename('wxwall_message') . ' AS `ms` JOIN ' . tablename('wxwall_members') . ' AS `me` ON `ms`.`from_user` = `me`.`from_user` ' . $condition; $total = pdo_fetchcolumn($sql, $params); if ($total > 0) { $pindex = max(1, intval($_GPC['page'])); $psize = 15; $sql = 'SELECT `ms`.*, `isblacklist`, `avatar` FROM ' . tablename('wxwall_message') . ' AS `ms` JOIN ' . tablename('wxwall_members') . ' AS `me` ON `ms`.`from_user` = `me`.`from_user` ' . $condition . ' ORDER BY `createtime` DESC LIMIT ' . ($pindex - 1) * $psize . ',' . $psize; $list = pdo_fetchall($sql, $params); $pager = pagination($total, $pindex, $psize); foreach ($list as &$row) { if ($row['type'] == 'image') { $row['content'] = ''; } else { $row['content'] = emotion($row['content']); } // 获取粉丝信息 $sql = 'SELECT `nickname` FROM ' . tablename('mc_mapping_fans') . ' WHERE `openid` = :openid'; $row['nickname'] = pdo_fetchcolumn($sql, array(':openid' => $row['from_user'])); } unset($row); } include $this->template('manage'); } /** * 增量数据调用 */ public function doWebIncoming() { global $_GPC, $_W; $id = intval($_GPC['id']); $lastmsgtime = intval($_GPC['lastmsgtime']); $sql = "SELECT * FROM " . tablename('wxwall_message') . " WHERE rid = :rid"; $params = array(':rid' => $id); $page = max(1, intval($_GPC['page'])); if (!empty($lastmsgtime)) { $sql .= " AND createtime >= :createtime AND isshow > 0 ORDER BY id ASC LIMIT " . ($page - 1) . ", 1"; $params[':createtime'] = $lastmsgtime; } else { $sql .= " AND isshow = '1' ORDER BY createtime ASC LIMIT 1"; } $list = pdo_fetchall($sql, $params); if (!empty($list)) { $this->formatMsg($list); $row = $list[0]; pdo_update('wxwall_message', array('isshow' => '2'), array('id' => $row['id'])); $row['content'] = emotion($row['content'], '48px'); message($row, '', 'ajax'); } } /** * 黑名单 */ public function doWebBlacklist() { global $_W, $_GPC; $id = intval($_GPC['id']); if (checksubmit('delete') && !empty($_GPC['select'])) { foreach ($_GPC['select'] as &$row) { $row = intval($row); } $sql = 'UPDATE ' . tablename('wxwall_members') . " SET isblacklist=0 WHERE rid=:rid AND id IN ('" . implode("','", $_GPC['select']) . "')"; pdo_query($sql, array(':rid' => $id)); message('黑名单解除成功!', $this->createWebUrl('blacklist', array('id' => $id, 'page' => $_GPC['page']))); } if (!empty($_GPC['from_user'])) { pdo_update('wxwall_members', array('isblacklist' => intval($_GPC['switch'])), array('from_user' => $_GPC['from_user'], 'rid' => $id)); message('黑名单操作成功!', $this->createWebUrl('manage', array('id' => $id, 'isshow' => intval($_GPC['isshow'])))); } $where = ' WHERE `rid` = :rid AND `isblacklist` = :isblacklist'; $params = array(':rid' => intval($_GPC['id']), ':isblacklist' => 1); $sql = 'SELECT COUNT(*) FROM ' . tablename('wxwall_members') . $where; $total = pdo_fetchcolumn($sql, $params); if ($total > 0) { $pindex = max(1, intval($_GPC['page'])); $psize = 15; $sql = 'SELECT `id`, `from_user`, `lastupdate` FROM ' . tablename('wxwall_members') . $where . ' ORDER BY `lastupdate` DESC LIMIT ' . ($pindex - 1) * $psize . ',' . $psize; $list = pdo_fetchall($sql, $params); foreach ($list as &$row) { $sql = 'SELECT `nickname` FROM ' . tablename('mc_mapping_fans') . ' WHERE `openid` = :openid'; $row['nickname'] = pdo_fetchcolumn($sql, array(':openid' => $row['from_user'])); } unset($row); } include $this->template('blacklist'); } /** * 二维码 */ public function doWebQrcode() { global $_GPC, $_W; $id = intval($_GPC['id']); $wall = $this->getWall($id); include $this->template('qrcode'); } /** * 抽奖 */ public function doWebLottery() { global $_GPC, $_W; $id = intval($_GPC['id']); $type = intval($_GPC['type']); $wall = $this->getWall($id); if ($type == 1) { $list = pdo_fetchall("SELECT id, content, from_user, type, createtime FROM ".tablename('wxwall_message')." WHERE rid = '{$wall['rid']}' AND isshow = '2' AND from_user <> '' ORDER BY createtime DESC"); } else { $list = pdo_fetchall("SELECT id, content, from_user, type, createtime FROM ".tablename('wxwall_message')." WHERE rid = '{$wall['rid']}' AND isshow = '2' AND from_user <> '' GROUP BY from_user ORDER BY createtime DESC LIMIT 10"); } $this->formatMsg($list); include $this->template('lottery'); } /** * 抽奖 */ public function doWebAward() { global $_GPC, $_W; $message = pdo_fetch("SELECT * FROM " . tablename('wxwall_message') . " WHERE id = :id LIMIT 1", array(':id' => intval($_GPC['mid']))); if (empty($message)) { message('抱歉,参数不正确!', '', 'error'); } $data = array( 'rid' => $message['rid'], 'from_user' => $message['from_user'], 'createtime' => TIMESTAMP, 'status' => 0, ); pdo_insert('wxwall_award', $data); message('', '', 'success'); } /** * 中奖列表 */ public function doWebAwardlist() { global $_GPC, $_W; $id = intval($_GPC['id']); if (checksubmit('delete') && !empty($_GPC['select'])) { pdo_delete('wxwall_award', " id IN ('" . implode("','", $_GPC['select']) . "')"); message('删除成功!', $this->createWebUrl('awardlist', array('id' => $id, 'page' => $_GPC['page']))); } if (!empty($_GPC['wid'])) { $wid = intval($_GPC['wid']); pdo_update('wxwall_award', array('status' => intval($_GPC['status'])), array('id' => $wid)); message('标识领奖成功!', $this->createWebUrl('awardlist', array('id' => $id, 'page' => $_GPC['page']))); } $where = ' WHERE `rid` = :rid'; $params = array(':rid' => $id); $sql = 'SELECT COUNT(*) FROM ' . tablename('wxwall_award') . $where; $total = pdo_fetchcolumn($sql, $params); if ($total > 0) { $pindex = max(1, intval($_GPC['page'])); $psize = 15; $sql = 'SELECT * FROM ' . tablename('wxwall_award') . $where . ' ORDER BY `status`, `createtime` DESC LIMIT ' . ($pindex - 1) * $psize . ',' . $psize; $list = pdo_fetchall($sql, $params); foreach ($list as &$row) { // 获取粉丝信息 $sql = 'SELECT `nickname` FROM ' . tablename('mc_mapping_fans') . ' WHERE `openid` = :openid'; $row['nickname'] = pdo_fetchcolumn($sql, array(':openid' => $row['from_user'])); } unset($row); $pager = pagination($total, $pindex, $psize); } include $this->template('awardlist'); } /** * 获取微信墙附加字段信息 * @param int $id * @return array */ public function getWall($id) { $sql = 'SELECT `id`, `acid`, `isshow`, `rid`, `syncwall`, `logo`, `background` FROM ' . tablename('wxwall_reply') . ' WHERE `rid` = :rid'; $params = array(':rid' => $id); $wall = pdo_fetch($sql, $params); $wall['syncwall'] = unserialize($wall['syncwall']); $sql = 'SELECT `name`, `uniacid` FROM ' . tablename('rule') . ' WHERE `id` = :rid'; $wall['rule'] = pdo_fetch($sql, $params); load()->model('account'); $accounts = uni_accounts(); $wall['account'] = $accounts[$wall['acid']]; $sql = 'SELECT `content` FROM ' . tablename('rule_keyword') . ' WHERE rid = :rid'; $wall['keyword'] = pdo_fetchall($sql, $params); return $wall; } /** * 格式化输出微信墙信息 * @param $list 消息集合 * @return boolean */ public function formatMsg(&$list) { global $_W; if (empty($list)) { return false; } foreach ($list as &$row) { if ($row['type'] == 'image') { $row['content'] = ''; } elseif ($row['type'] == 'txwall') { $content = iunserializer($row['content']); $row['content'] = $content['content']; $row['avatar'] = $content['avatar']; $row['nickname'] = $content['nickname']; } $row['content'] = emotion($row['content'], '48px'); // 获取粉丝信息 if ($row['type'] != 'txwall') { $sql = 'SELECT `nickname` FROM ' . tablename('mc_mapping_fans') . ' WHERE `openid` = :openid'; $params = array(':openid' => $row['from_user']); $row['nickname'] = pdo_fetchcolumn($sql, $params); $sql = 'SELECT `avatar` FROM ' . tablename('wxwall_members') . ' WHERE `from_user` = :openid'; $row['avatar'] = pdo_fetchcolumn($sql, $params); } } unset($row); } /** * 异步处理腾讯墙信息 */ public function doWebIncomingTxWall() { global $_W, $_GPC; $id = intval($_GPC['id']); $result = array('status' => 0); $lastmsgtime = intval($_GPC['lastmsgtime']); $lastuser = ''; $wall = pdo_fetchcolumn("SELECT syncwall FROM " . tablename('wxwall_reply') . " WHERE rid = :rid LIMIT 1", array(':rid' => $id)); if (empty($wall)) { message($result, '', 'ajax'); } $wall = iunserializer($wall); if (empty($wall['tx']['status'])) { message($result, '', 'ajax'); } load()->func('communication'); $response = ihttp_request('http://wall.v.t.qq.com/index.php?c=wall&a=topic&ak=801424380&t=' . $wall['tx']['subject'] . '&fk=&fn=&rnd=' . TIMESTAMP); if (empty($response['content'])) { $result['status'] = -1; message($result, '', 'ajax'); } $last = pdo_fetch("SELECT createtime, from_user FROM " . tablename('wxwall_message') . " WHERE createtime >= :createtime AND type = 'txwall' AND rid = :rid ORDER BY createtime DESC LIMIT 1", array(':createtime' => $lastmsgtime, ':rid' => $id)); if (!empty($last)) { $lastmsgtime = $last['createtime']; $lastuser = $last['from_user']; } $list = json_decode($response['content'], true); if (!empty($list['data']['info'])) { $insert = array(); foreach ($list['data']['info'] as $row) { if ($row['timestamp'] < $lastmsgtime || ($lastmsgtime == $row['timestamp'] && !empty($lastuser) && $lastuser == $row['name'])) { break; } $content = array('nickname' => $row['nick'], 'avatar' => !empty($row['head']) ? $row['head'] . '/120' : '', 'content' => $row['text']); $insert[] = array( 'rid' => $id, 'content' => iserializer($content), 'from_user' => $row['name'], 'type' => 'txwall', 'isshow' => 1, 'createtime' => $row['timestamp'] ); } unset($row); if (!empty($insert)) { $insert = array_reverse($insert); foreach ($insert as $row) { pdo_insert('wxwall_message', $row); } } $lastmsgtime = $row['timestamp']; $result = array( 'status' => 1, 'lastmsgtime' => $lastmsgtime, ); message($result, '', 'ajax'); } else { message($result, '', 'ajax'); } } public function doMobileRegister() { global $_GPC, $_W; $title = '微信墙登记'; /**** 0.6 ****/ load()->model('mc'); load()->func('tpl'); // 验证用户注册, 注册后方能进如活动 checkauth(); if (!empty($_GPC['submit'])) { $data = array( 'nickname' => $_GPC['nickname'], ); if (empty($data['nickname'])) { die(''); } if (!empty($_FILES['avatar']['tmp_name'])) { /**** 0.6 ****/ load()->func('file'); $upload = file_upload($_FILES['avatar']); if (is_error($upload)) { die(''); } $data['avatar'] = $upload['path']; } else { $data['avatar'] = $_GPC['avatar']; } if (empty($data['avatar'])) { $data['avatar'] = 'images/global/noavatar_middle.gif'; } mc_update($_W['member']['uid'], $data); message('登记成功,系统会自动跳转,如果未成功请手动退回微信界面。'); } /**** 0.6 ****/ $member = mc_fetch($_W['member']['uid'], array('nickname', 'avatar')); if (empty($member['avatar'])) { //mc_oauth_userinfo(); $member['avatar'] = 'images/global/noavatar_middle.gif'; include $this->template('register'); } else { message('个人信息已经自动获取到,系统会自动跳转,如果未成功请手动退回微信界面。', '', 'success'); } } }