2) { $groups_data = pdo_fetch('SELECT * FROM ' . tablename('mc_fans_groups') . ' WHERE uniacid = :uniacid AND acid = :acid', array(':uniacid' => $_W['uniacid'], ':acid' => $_W['acid'])); if(!empty($groups_data)) { $groups = iunserializer($groups_data['groups']); } else { message('未获取到粉丝分组信息,现在去拉取粉丝分组', url('mc/fangroup'), 'info'); } } template('mc/mass'); } if($do == 'news') { $condition = ' WHERE uniacid = :uniacid AND status = 1 AND module = :module'; $param = array(':uniacid' => $_W['uniacid'], ':module' => 'news'); if(!empty($_GPC['keyword'])) { $condition .= ' AND name LIKE :keyword'; $param[':keyword'] = "%{$_GPC['keyword']}%"; } $psize = 8; $pindex = max(1, intval($_GPC['page'])); $limit = ' ORDER BY id DESC LIMIT ' . ($pindex - 1) * $psize . ',' . $psize; $total = pdo_fetchcolumn('SELECT COUNT(*) FROM ' . tablename('rule') . $condition, $param); $data = pdo_fetchall('SELECT id, name FROM ' . tablename('rule') . $condition . $limit, $param, 'id'); if(!empty($data)) { foreach($data as &$da) { $da['replies'] = pdo_fetchall('SELECT id,title,thumb FROM ' . tablename('news_reply') . ' WHERE rid = :rid ORDER BY `displayorder` DESC', array(':rid' => $da['id'])); if(!empty($da['replies'])) { foreach($da['replies'] as &$li) { if(!empty($li['thumb'])) $li['thumb'] = tomedia($li['thumb']); } } } } $result = array( 'list' => $data, 'pager' => pagination($total, $pindex, $psize, '', array('before' => '2', 'after' => '3', 'ajaxcallback'=>'null')), ); message($result, '', 'ajax'); } if($do == 'fans') { $condition = " WHERE uniacid = :uniacid AND acid = :acid AND follow = 1 AND openid != ''"; $param = array(':uniacid' => $_W['uniacid'], ':acid' => $_W['acid']); if(!empty($_GPC['keyword'])) { $condition .= ' AND nickname LIKE :keyword'; $param[':keyword'] = "%{$_GPC['keyword']}%"; } $psize = 10; $pindex = max(1, intval($_GPC['page'])); $limit = ' ORDER BY followtime DESC LIMIT ' . ($pindex - 1) * $psize . ',' . $psize; $total = pdo_fetchcolumn('SELECT COUNT(*) FROM ' . tablename('mc_mapping_fans') . $condition, $param); $data = pdo_fetchall('SELECT fanid,openid,nickname,followtime,tag FROM ' . tablename('mc_mapping_fans') . $condition . $limit, $param, 'fanid'); if(!empty($data)) { foreach($data as &$da) { $da['selected'] = 0; if(empty($da['nickname'])) { $da['nickname'] = $da['openid']; } $da['avatar'] = './resource/images/noavatar_middle.gif'; if (!empty($da['tag']) && is_string($da['tag'])) { if (is_base64($da['tag'])){ $da['tag'] = base64_decode($da['tag']); } if (is_serialized($da['tag'])) { $da['tag'] = @iunserializer($da['tag']); } if(!empty($da['tag']['headimgurl'])) { $da['avatar'] = tomedia($da['tag']['headimgurl']); } unset($da['tag']); } $da['followtime'] = date('Y-m-d H:i', $da['followtime']); } } $result = array( 'list' => $data, 'pager' => pagination($total, $pindex, $psize, '', array('before' => '2', 'after' => '3', 'ajaxcallback'=>'null')), ); message($result, '', 'ajax'); } if($do == 'post') { set_time_limit(0); error_reporting(E_ERROR); $post = $_GPC['__input']; if($_GPC['send_time'] == 2) { $time = strtotime($_GPC['time']); if($time <= TIMESTAMP || $time >= (TIMESTAMP + 86400*3 - 7200)) { $time = date('Y-m-d H:i', TIMESTAMP + 86400*3 - 7200); message(error(-1, "定时发送时间不能小于当前时间并且不能超过{$time}"), '', 'ajax'); } } $acc = WeAccount::create($_W['acid']); if($post['msg_type'] == 'mpnews') { $rid = intval($post['data']); $rule = pdo_fetch('SELECT * FROM ' . tablename('rule') . ' WHERE uniacid = :uniacid AND id = :id', array(':uniacid' => $_W['uniacid'], ':id' => $rid)); if(empty($rule)) { message(error(-1, '规则不存在'), '', 'ajax'); } $replies = pdo_fetchall('SELECT * FROM ' . tablename('news_reply') . ' WHERE rid = :rid ORDER BY `displayorder` DESC', array(':rid' => $rid)); $thumb_message = ''; foreach($replies as &$reply) { $flag = 1; if(empty($reply['content'])) { $thumb_message .= "标题为 '{$reply['title']}' 回复项的内容为空
"; } if(!empty($_W['setting']['remote']['type'])) { load()->func('file'); $reply['thumb'] = file_fetch(tomedia($reply['thumb'])); if(is_error($reply['thumb'])) { $flag = 0; $thumb_message .= "标题为 '{$reply['title']}' 回复项的封面图片获取失败,请重新上传,错误详情:{$reply['thumb']['message']}
"; } } if($flag) { $path = ATTACHMENT_ROOT . ltrim($reply['thumb'], '/'); if(!file_exists($path)) { $thumb_message .= "标题为 '{$reply['title']}' 回复项的封面图片不存在
"; } else { $extension = ltrim(strrchr($reply['thumb'], '.'), '.'); if(!in_array($extension, array('jpg', 'png'))) { $thumb_message .= "标题为 '{$reply['title']}' 回复项的封面图片格式不对,仅支持jpg,png格式。
"; } if(filesize($path) > 64 * 1024) { $thumb_message .= "标题为 '{$reply['title']}' 回复项的封面图片大于64K。
"; } } } } if(!empty($thumb_message)) { message(error(-1, $thumb_message), '', 'ajax'); } $articles = array( 'articles' => array() ); foreach($replies as &$reply) { $media = $acc->uploadMedia($reply['thumb']); if(is_error($media)) { message($media, '', 'ajax'); } if(!strexists($reply['url'], 'http://') && !strexists($reply['url'], 'https://')) { $reply['url'] = $_W['siteroot'] . 'app' . ltrim($reply['url'], '.'); } $str_find = array('../attachment/images'); $str_replace = array($_W['siteroot'] . 'attachment/images'); $reply['content'] = str_replace($str_find, $str_replace, $reply['content']); $row = array( 'title' => urlencode($reply['title']), 'author' => urlencode($reply['author']), 'digest' => urlencode($reply['description']), 'content' => urlencode(addslashes(htmlspecialchars_decode($reply['content']))), 'show_cover_pic' => intval($reply['incontent']), 'content_source_url' => urlencode($reply['url']), 'thumb_media_id' => $media['media_id'], ); $articles['articles'][] = $row; } $status = $acc->uploadNews($articles); if(is_error($status)) { message($status, '', 'ajax'); } $data['mpnews'] = array( 'media_id' => $status['media_id'], ); $data['msgtype'] = 'mpnews'; } if($post['msg_type'] == 'text') { $data['text'] = array( 'content' => urlencode(trim($post['data'])), ); $data['msgtype'] = 'text'; } if($post['msg_type'] == 'image') { $data['image'] = array( 'media_id' => urlencode(trim($post['data'])), ); $data['msgtype'] = 'image'; } if($post['msg_type'] == 'voice') { $data['voice'] = array( 'media_id' => urlencode(trim($post['data'])), ); $data['msgtype'] = 'voice'; } if($post['msg_type'] == 'video') { $video = array( 'media_id' => $post['data']['media'], 'title' => urlencode($post['data']['title']), 'description' => urlencode($post['data']['description']), ); $status = $acc->uploadVideo($video); if(is_error($status)) { message($status, '', 'ajax'); } if($post['send_type'] == '3') { $data['video'] = array( 'media_id' => $status['media_id'], ); $data['msgtype'] = 'video'; } if($post['send_type'] == '2') { $data['mpvideo'] = array( 'media_id' => $status['media_id'], ); $data['msgtype'] = 'mpvideo'; } } if($post['send_type'] == 1) { $data['filter'] = array( 'is_to_all' => true, 'group_id' => 0, ); } elseif($post['send_type'] == 2) { $data['filter'] = array( 'is_to_all' => false, 'group_id' => intval($post['send_group']), ); } elseif($post['send_type'] == 3) { $data['touser'] = $post['openids']; } $record = 0; if($_GPC['send_time'] == 1) { $status = $acc->fansSendAll($data); if(is_error($status)) { message($status, '', 'ajax'); } } if($post['msg_type'] == 'mpnews') { $post['msg_type'] = 'news'; } $insert = array( 'uniacid' => $_W['uniacid'], 'acid' => $_W['acid'], 'msgtype' => $post['msg_type'], 'createtime' => TIMESTAMP, ); if($post['send_time'] == 1) { $insert['status'] = 0; } else { $insert['sendtime'] = $time; $insert['status'] = 1; $insert['data'] = iserializer($data); } if($post['send_type'] == 1) { $insert['groupname'] = '全部用户'; $insert['fansnum'] = ''; } elseif($post['send_type'] == 2) { $groups_data = pdo_fetch('SELECT * FROM ' . tablename('mc_fans_groups') . ' WHERE uniacid = :uniacid AND acid = :acid', array(':uniacid' => $_W['uniacid'], ':acid' => $_W['acid'])); $groups = iunserializer($groups_data['groups']); $insert['groupname'] = $groups[$post['send_group']]['name']; $insert['fansnum'] = $groups[$post['send_group']]['count']; } elseif($post['send_type'] == 3) { $insert['groupname'] = '根据粉丝openid群发'; $insert['fansnum'] = count($post['openids']); } if(in_array($post['msg_type'], array('text', 'image', 'voice'))) { $insert['content'] = $post['data']; } elseif($post['msg_type'] == 'video') { $insert['content'] = $post['data']['media_id']; } elseif($post['msg_type'] == 'news') { $insert['content'] = intval($post['data']); } pdo_insert('mc_mass_record', $insert); message(error(1, ''), '', 'ajax'); } if($do == 'send') { $pindex = max(1, intval($_GPC['page'])); $psize = 20; $condition = ' WHERE `uniacid` = :uniacid AND `acid` = :acid'; $pars = array(); $pars[':uniacid'] = $_W['uniacid']; $pars[':acid'] = $_W['acid']; $total = pdo_fetchcolumn("SELECT COUNT(*) FROM ".tablename('mc_mass_record').$condition, $pars); $list = pdo_fetchall("SELECT * FROM ".tablename('mc_mass_record') . $condition ." ORDER BY `id` DESC LIMIT ".($pindex - 1) * $psize.','.$psize, $pars); $types = array('text' => '文本消息', 'image' => '图片消息', 'voice' => '语音消息', 'video' => '视频消息', 'news' => '图文消息'); if(!empty($list)) { foreach($list as &$li) { if($li['msgtype'] == 'news') { $rid = intval($li['content']); if($rid > 0) { $li['rid'] = $rid; $li['rule_name'] = pdo_fetchcolumn('SELECT name FROM ' . tablename('rule') . ' WHERE id = :id', array(':id' => $rid)); } else { $li['content'] = iunserializer($li['content']); $li['content'] = iurldecode($li['content']); } } elseif(in_array($li['msgtype'], array('image', 'voice', 'video'))) { $li['content'] = media2local($li['content']); } } } $pager = pagination($total, $pindex, $psize); template('mc/send'); } function iurldecode($str) { if(!is_array($str)) { return urldecode($str); } foreach($str as $key => $val) { $str[$key] = iurldecode($val); } return $str; }