= '$starttime' AND createtime < '$endtime'"; !empty($_GPC['keyword']) && $where .= " AND message LIKE '%{$_GPC['keyword']}%'"; switch ($_GPC['searchtype']) { case 'default': $where .= " AND module = 'default'"; break; case 'rule': default: $where .= " AND module <> 'default'"; break; } $pindex = max(1, intval($_GPC['page'])); $psize = 30; $list = pdo_fetchall("SELECT * FROM ".tablename('stat_msg_history')." WHERE uniacid = '{$_W['uniacid']}' $where ORDER BY createtime DESC LIMIT ".($pindex - 1) * $psize.','. $psize); if (!empty($_GPC['export'])) { $list = pdo_fetchall("SELECT * FROM ".tablename('stat_msg_history')." WHERE uniacid = '{$_W['uniacid']}' $where ORDER BY createtime DESC"); } if (!empty($list)) { foreach ($list as $index => &$history) { if (!empty($history['from_user'])) { $tag = pdo_fetchcolumn('SELECT tag FROM ' . tablename('mc_mapping_fans') . ' WHERE uniacid = :id AND openid = :oid', array(':id' => $_W['uniacid'], ':oid' => $history['from_user'])); if (is_base64($tag)){ $tag = base64_decode($tag); } if (is_serialized($tag)) { $tag = @iunserializer($tag); } $tag = (array)$tag; $history['from_user'] = $tag['nickname'] ? $tag['nickname'] : $history['from_user']; } if ($history['type'] == 'text') { $history['message'] = iunserializer($history['message']); $history['module'] = empty($history['message']['source']) ? $history['module'] : $history['message']['source']; $history['message'] = emotion($history['message']['original']) ? emotion($history['message']['original']) : emotion($history['message']['content']); } elseif ($history['type'] == 'link') { $history['message'] = iunserializer($history['message']); $history['module'] = empty($history['message']['source']) ? $history['message']['content'] : $history['message']['source']; $history['message'] = ''.$history['message']['title'].''; } elseif ($history['type'] == 'image') { $history['message'] = '查看图片'; } elseif ($history['type'] == 'location') { $history['message'] = iunserializer($history['message']); $history['message'] = '查看方位'; } elseif ($history['type'] == 'click') { $history['message'] = emotion($history['message']); } elseif ($history['type'] == 'view') { $history['message'] = '跳转链接'; } else { $history['message'] = emotion($history['message']); } if (!empty($history['rid'])) { $rids[$history['rid']] = $history['rid']; } } } if (!empty($rids)) { $rules = pdo_fetchall("SELECT name, id, module FROM ".tablename('rule')." WHERE id IN (".implode(',', $rids).")", array(), 'id'); foreach ($rules as $key => &$li) { if ($li['module'] == 'cover') { $cover_reply = pdo_fetch('SELECT module,do FROM ' . tablename('cover_reply') . ' WHERE rid = :rid', array(':rid' => $key)); if (!in_array($cover_reply['module'], array('mc', 'site', 'card'))) { $eid = pdo_fetchcolumn('SELECT eid FROM ' . tablename('modules_bindings') . ' WHERE module = :m AND do = :do AND entry = :entry', array(':m' => $cover_reply['module'], ':do' => $cover_reply['do'], ':entry' => 'cover')); $li['url'] = url('platform/cover/', array('eid' => $eid)); } else { $li['url'] = url('platform/cover/' . $cover_reply['module']); } $li['module'] = 'cover' . ($cover_reply['module']?'->'.$cover_reply['module']:''); } else { $li['url'] = url('platform/reply/post', array('m' => $rules[$key]['module'], 'rid' => $key)); } } } $total = pdo_fetchcolumn('SELECT COUNT(*) FROM ' . tablename('stat_msg_history') . " WHERE uniacid = '{$_W['uniacid']}' $where"); $pager = pagination($total, $pindex, $psize); if (!empty($_GPC['export'])) { $header = array( 'name' => '用户', 'realname' => '内容', 'groupid' => '规则', 'mobile' => '模块', 'email' => '时间' ); $keys = array_keys($header); $html = "\xEF\xBB\xBF"; foreach ($header as $head) { $html .= $head . "\t ,"; } $html .= "\n"; if (!empty($list)) { foreach ($list as $row) { $nickname = pdo_fetchcolumn("SELECT nickname FROM ". tablename('mc_mapping_fans')." WHERE openid = :openid", array(':openid' => $row['from_user'])); $html .= $nickname. "\t ,"; if ($row['type'] == 'text') { $row['message'] = iunserializer($row['message']); } elseif ($row['type'] == 'link') { $row['message'] = '链接'; } elseif ($row['type'] == 'image') { $row['message'] = '图片'; } elseif ($row['type'] == 'location') { $row['message'] = '位置信息'; } elseif ($row['type'] == 'click') { $row['message'] = ''; } elseif ($row['type'] == 'view') { $row['message'] = '语音'; } else { $row['message'] = '表情'; } $html .= $row['message']. "\t ,"; if (empty($row['rid']) && $row['module']) { $module = pdo_fetchcolumn("SELECT title from ".tablename('modules')." WHERE name = :name", array(':name' => $row['module'])); $html .= $module. "\t , "; } elseif (!empty($row['rid'])) { $html .= $rules[$row['rid']]['name']. "\t , "; } if ($row['module'] == 'default') { $html .= "没有回复规则, \t, "; } else { $module = array(); if ($row['module']) { $module = pdo_fetchcolumn("SELECT title from ".tablename('modules')." WHERE name = :name", array(':name' => $row['module'])); if (!empty($module)) { $html .= $module. "\t, "; } } if ($rules[$row['rid']]['module'] && empty($module)) { $row['module'] = str_replace('cover->', '', $rules[$row['rid']]['module']); $module = pdo_fetchcolumn("SELECT title from ".tablename('modules')." WHERE name = :name", array(':name' => $row['module'])); $html .= $module ." \t, "; } else { if (empty($module)){ $html .= "未触发模块". "\t, "; } } } if ($row['module'] == 'default') { $html .= "没有回复规则, \t, "; } $html .= date('Y-m-d H:i:s', $row['createtime']). "\t , \n"; } } header("Content-type:text/csv"); header("Content-Disposition:attachment; filename=聊天记录.csv"); echo $html; exit(); } template('platform/stat-history'); } if ($do == 'del') { $op = $_GPC['op'] ? trim($_GPC['op']) : itoast('非法访问', '', 'error'); $id = intval($_GPC['id']); if($op == 'history') { pdo_delete('stat_msg_history', array('id' => $id, 'uniacid' => $_W['uniacid'])); itoast('删除聊天数据成功', url('platform/stat/history'), 'success'); } } if ($do == 'rule') { $_W['page']['title'] = '回复规则使用情况 - 数据统计'; $foo = !empty($_GPC['foo']) ? $_GPC['foo'] : 'hit'; $where = ''; $starttime = empty($_GPC['time']['start']) ? TIMESTAMP - 86400 * 60 : strtotime($_GPC['time']['start']); $endtime = empty($_GPC['time']['end']) ? TIMESTAMP : strtotime($_GPC['time']['end']) + 86399; $where .= " AND createtime >= '$starttime' AND createtime < '$endtime'"; if ($foo == 'hit') { $pindex = max(1, intval($_GPC['page'])); $psize = 50; $list = pdo_fetchall("SELECT * FROM ".tablename('stat_rule')." WHERE uniacid = '{$_W['uniacid']}' $where ORDER BY hit DESC LIMIT ".($pindex - 1) * $psize.','. $psize, array(), 'rid'); $rids = array_keys($list); if (!empty($rids)) { $rules = pdo_fetchall("SELECT name, id, module FROM ".tablename('rule')." WHERE id IN (".implode(',', $rids).")", array(), 'id'); foreach ($rules as $key => &$li) { if ($li['module'] == 'cover') { $cover_reply = pdo_fetch('SELECT module,do FROM ' . tablename('cover_reply') . ' WHERE rid = :rid', array(':rid' => $key)); if (!in_array($cover_reply['module'], array('mc', 'site', 'card'))) { $eid = pdo_fetchcolumn('SELECT eid FROM ' . tablename('modules_bindings') . ' WHERE module = :m AND do = :do AND entry = :entry', array(':m' => $cover_reply['module'], ':do' => $cover_reply['do'], ':entry' => 'cover')); $li['url'] = url('platform/cover/', array('eid' => $eid)); } else { $li['url'] = url('platform/cover/' . $cover_reply['module']); } $li['module'] = 'cover' . ($cover_reply['module']?'->'.$cover_reply['module']:''); } else { $li['url'] = url('platform/reply/post', array('m' => $rules[$key]['module'], 'rid' => $key)); } } } $total = pdo_fetchcolumn("SELECT COUNT(*) FROM ".tablename('stat_rule')." WHERE uniacid = '{$_W['uniacid']}' $where"); $pager = pagination($total, $pindex, $psize); template('platform/stat-rule_hit'); } elseif ($foo == 'miss') { $pindex = max(1, intval($_GPC['page'])); $psize = 50; $list = pdo_fetchall("SELECT name, id, module FROM ".tablename('rule')." WHERE uniacid = '{$_W['uniacid']}' AND id NOT IN (SELECT rid FROM ".tablename('stat_rule')." WHERE uniacid = '{$_W['uniacid']}' $where) LIMIT ".($pindex - 1) * $psize.','. $psize, array(), 'id'); if (!empty($list)) { foreach ($list as $key => &$li) { if ($li['module'] == 'cover') { $cover_reply = pdo_fetch('SELECT module,do FROM ' . tablename('cover_reply') . ' WHERE rid = :rid', array(':rid' => $key)); if (!in_array($cover_reply['module'], array('mc', 'site', 'card'))) { $eid = pdo_fetchcolumn('SELECT eid FROM ' . tablename('modules_bindings') . ' WHERE module = :m AND do = :do AND entry = :entry', array(':m' => $cover_reply['module'], ':do' => $cover_reply['do'], ':entry' => 'cover')); $li['url'] = url('platform/cover/', array('eid' => $eid)); } else { $li['url'] = url('platform/cover/' . $cover_reply['module']); } $li['module'] = 'cover' . ($cover_reply['module']?'->'.$cover_reply['module']:''); } else { $li['url'] = url('platform/reply/post', array('m' => $li['module'], 'rid' => $key)); } } } $total = pdo_fetchcolumn("SELECT COUNT(*) FROM ".tablename('rule')." WHERE uniacid = '{$_W['uniacid']}' AND id NOT IN (SELECT rid FROM ".tablename('stat_rule')." WHERE uniacid = '{$_W['uniacid']}' $where)"); $pager = pagination($total, $pindex, $psize); template('platform/stat-rule_miss'); } } if ($do == 'keyword') { $_W['page']['title'] = '关键字命中情况 - 数据统计'; $foo = !empty($_GPC['foo']) ? $_GPC['foo'] : 'hit'; $where = ''; $starttime = empty($_GPC['time']['start']) ? TIMESTAMP - 86400 * 60 : strtotime($_GPC['time']['start']); $endtime = empty($_GPC['time']['end']) ? TIMESTAMP : strtotime($_GPC['time']['end']) + 86399; $where .= " AND createtime >= '$starttime' AND createtime < '$endtime'"; if ($foo == 'hit') { $pindex = max(1, intval($_GPC['page'])); $psize = 50; $list = pdo_fetchall("SELECT * FROM ".tablename('stat_keyword')." WHERE uniacid = '{$_W['uniacid']}' $where ORDER BY hit DESC LIMIT ".($pindex - 1) * $psize.','. $psize); if (!empty($list)) { foreach ($list as $index => &$history) { if (!empty($history['rid'])) { $rids[$history['rid']] = $history['rid']; } $kids[$history['kid']] = $history['kid']; } } if (!empty($rids)) { $rules = pdo_fetchall("SELECT name, id, module FROM ".tablename('rule')." WHERE id IN (".implode(',', $rids).")", array(), 'id'); foreach ($rules as $key => &$li) { if ($li['module'] == 'cover') { $cover_reply = pdo_fetch('SELECT module,do FROM ' . tablename('cover_reply') . ' WHERE rid = :rid', array(':rid' => $key)); if (!in_array($cover_reply['module'], array('mc', 'site', 'card'))) { $eid = pdo_fetchcolumn('SELECT eid FROM ' . tablename('modules_bindings') . ' WHERE module = :m AND do = :do AND entry = :entry', array(':m' => $cover_reply['module'], ':do' => $cover_reply['do'], ':entry' => 'cover')); $li['url'] = url('platform/cover/', array('eid' => $eid)); } else { $li['url'] = url('platform/cover/' . $cover_reply['module']); } $li['module'] = 'cover' . ($cover_reply['module']?'->'.$cover_reply['module']:''); } else { $li['url'] = url('platform/reply/post', array('m' => $rules[$key]['module'], 'rid' => $key)); } } } if (!empty($kids)) { $keywords = pdo_fetchall("SELECT content, id FROM ".tablename('rule_keyword')." WHERE id IN (".implode(',', $kids).")", array(), 'id'); } $total = pdo_fetchcolumn("SELECT COUNT(*) FROM ".tablename('stat_keyword')." WHERE uniacid = '{$_W['uniacid']}' $where"); $pager = pagination($total, $pindex, $psize); template('platform/stat-keyword_hit'); } elseif ($foo == 'miss') { $pindex = max(1, intval($_GPC['page'])); $psize = 50; $list = pdo_fetchall("SELECT content, id, module, rid FROM ".tablename('rule_keyword')." WHERE uniacid = '{$_W['uniacid']}' AND id NOT IN (SELECT kid FROM ".tablename('stat_keyword')." WHERE uniacid = '{$_W['uniacid']}' $where) LIMIT ".($pindex - 1) * $psize.','. $psize); if (!empty($list)) { foreach ($list as $index => $row) { if (!empty($row['rid'])) { $rids[$row['rid']] = $row['rid']; } } } if (!empty($rids)) { $rules = pdo_fetchall("SELECT name, id, module FROM ".tablename('rule')." WHERE id IN (".implode(',', $rids).")", array(), 'id'); foreach($rules as $key => &$li) { if ($li['module'] == 'cover') { $cover_reply = pdo_fetch('SELECT module,do FROM ' . tablename('cover_reply') . ' WHERE rid = :rid', array(':rid' => $key)); if (!in_array($cover_reply['module'], array('mc', 'site', 'card'))) { $eid = pdo_fetchcolumn('SELECT eid FROM ' . tablename('modules_bindings') . ' WHERE module = :m AND do = :do AND entry = :entry', array(':m' => $cover_reply['module'], ':do' => $cover_reply['do'], ':entry' => 'cover')); $li['url'] = url('platform/cover/', array('eid' => $eid)); } else { $li['url'] = url('platform/cover/' . $cover_reply['module']); } $li['module'] = 'cover' . ($cover_reply['module']?'->'.$cover_reply['module']:''); } else { $li['url'] = url('platform/reply/post', array('m' => $rules[$key]['module'], 'rid' => $key)); } } } $total = pdo_fetchcolumn("SELECT COUNT(*) FROM ".tablename('rule_keyword')." WHERE uniacid = '{$_W['uniacid']}' AND id NOT IN (SELECT kid FROM ".tablename('stat_keyword')." WHERE uniacid = '{$_W['uniacid']}' $where)"); $pager = pagination($total, $pindex, $psize); template('platform/stat-keyword_miss'); } } if ($do == 'setting') { $_W['page']['title'] = '参数 - 数据统计'; $settings = uni_setting($_W['uniacid'], array('stat')); $settings = $settings['stat']; $default = array('msg_history' => '1','msg_maxday' => '30','use_ratio' => '1'); $settings = empty($settings) ? $default : $settings; if (checksubmit('submit')) { $stat = array(); $stat['msg_history'] = intval($_GPC['msg_history']); $stat['msg_maxday'] = intval($_GPC['msg_maxday']); $stat['use_ratio'] = intval($_GPC['use_ratio']); $stat = iserializer($stat); pdo_update('uni_settings', array('stat' => $stat), array('uniacid' => $_W['uniacid'])); cache_delete(cache_system_key('unisetting', array('uniacid' => $_W['uniacid']))); itoast('设置参数成功', 'refresh', 'success'); } template('platform/stat-setting'); } if ($do == 'trend') { $_W['page']['title'] = '关键指标详解 - 数据统计'; $id = intval($_GPC['id']); $starttime = empty($_GPC['time']['start']) ? strtotime(date('Y-m-d')) - 7 * 86400 : strtotime($_GPC['time']['start']); $endtime = empty($_GPC['time']['end']) ? TIMESTAMP : strtotime($_GPC['time']['end']) + 86399; $list = pdo_fetchall("SELECT createtime, hit FROM " . tablename('stat_rule') . " WHERE uniacid = '{$_W['uniacid']}' AND rid = :rid AND createtime >= :createtime AND createtime <= :endtime ORDER BY createtime ASC", array(':rid' => $id, ':createtime' => $starttime, ':endtime' => $endtime)); $day = $hit = array(); if (!empty($list)) { foreach ($list as $row) { $day[] = date('m-d', $row['createtime']); $hit[] = intval($row['hit']); } } for ($i = 0; $i = count($hit) < 2; $i++) { $day[] = date('m-d', $endtime); $hit[] = $day[$i] == date('m-d', $endtime) ? $hit[0] : '0'; } $list = pdo_fetchall("SELECT createtime, hit, rid, kid FROM " . tablename('stat_keyword') . " WHERE uniacid = '{$_W['uniacid']}' AND rid = :rid AND createtime >= :createtime AND createtime <= :endtime ORDER BY createtime ASC", array(':rid' => $id, ':createtime' => $starttime, ':endtime' => $endtime)); if (!empty($list)) { foreach ($list as $row) { $keywords[$row['kid']]['hit'][] = $row['hit']; $keywords[$row['kid']]['day'][] = date('m-d', $row['createtime']); } foreach ($keywords as &$value) { if (count($value['hit']) < 2) { $value['hit'][] = $value['day'][0] == date('m-d', $endtime) ? $value['hit'][0] : '0'; $value['day'][] = date('m-d', $endtime); } } $keywordnames = pdo_fetchall("SELECT content, id FROM " . tablename('rule_keyword') . " WHERE id IN (" . implode(',', array_keys($keywords)) . ")", array(), 'id'); } template('platform/stat-trend'); } if ($do == 'browser') { $attachment = $_GPC['attach']; load()->func('communication'); $content = ihttp_request($attachment, '', array('CURLOPT_REFERER' => 'http://www.qq.com')); header('Content-Type:image/png'); echo $content['content']; }