discuz数据批量入库接口
近期在做社区,首选discuz,数据需要用scrapy爬虫批量入库,就写了一个php入库接口。
<?php
define('PW', 'abc123456');//一定要修改
if($_REQUEST['pw'] !== PW){
exit('密码错误');
}
error_reporting(E_ERROR | E_WARNING | E_PARSE);
define('APPTYPEID', 2);
define('CURSCRIPT', 'forum');
define('JK_CHARSET','gbk');
require './source/class/class_core.php';
require './source/function/function_forum.php';
C::app()->init();
@set_time_limit(0);
/****************配置信息华丽的分割线***************/
$config = array
(
'使用签名' => 0, //使用签名(1或0)
'注册会员邮件后缀' => '126.com|||163.com', //多个用|||分割
'数据库用户' => 0, //是否从数据随机取出用户,如果为1从数据库随机取出数据。
'回复用户名' => '回复用户1|||回复用户2|||回复用户3|||回复用户4|||回复用户5|||回复用户6',
//回复用户名,把想充当回复的用户名放到这里,用|||分割,用户名不需要在论坛已经存在,如果没有会自动注册
'用户密码' => '', //新注册用户的密码
'用户密码参数' => 'jksdjfs', //用户密码参数,建议随意修改
'回复间隔' => array( 30 , 60 ), //回复间隔,单位是秒。会随机在2个数字的中间取值
'回复用户签名' => '',//回复用户签名,为空新注册的用户没有签名,否则设置签名,随机签名
'分隔符' => '|||', //采集器标签循环的分隔符
'附件权限组' => '', //权限多个用|分割
'附件价格' => '0', //价格多个用|分割
'附件隐藏' => 0,
'fname' => array( //用来映射fid的值的
'板块1'=>'1',
'板块2'=>'2',
),
'typename' => array( //用来映射typeid的值的
'站长杂谈'=>'1',
'分类2'=>'2',
),
'标题允许重复' => '1', //为0的话不允许标题重复
'新注册用户群组' => array(), //用户组的id写里面,新注册的用户就是这个用户组了。可以写多个。如:array(16,17,18);
);
/****************配置信息华丽的分割线***************/
$j = new jiekou();
if(empty($_POST)){
$j->makeCat(getgpc('type'));
//memory('rm', '2', 'forumdisplay_');
}else{
define('NOROBOT', TRUE);
$j->checkAndInitData();
runhooks();
set_rssauth();
loadforum();
require_once libfile('function/misc');
require_once libfile('function/member');
loaducenter();
$j->logonUser();
$j->newthread();
$j->reply();
exit('发布成功');
}
class jiekou
{
public $replys = array();
public $file = array();
/**
* 生成栏目列表
*/
public function makeCat($type = 'forum')
{
function maketree($ar,$id,$pre)
{
$ids='';
foreach($ar as $k=>$v){
$pid=$v['fud'];
$cname=$v['name'];
$cid=$v['fid'];
if($pid==$id)
{
$ids.="<option value='$cid'>{$pre}{$cname}</option>";
foreach($ar as $kk=>$vv)
{
$pp=$vv['pid'];
if($pp==$cid)
{
$ids.=maketree($ar,$cid,$pre." ");
break;
}
}
}
}
return $ids;
}
if($type == 'group'){
$cates = DB::fetch_all("SELECT * FROM ".DB::table('forum_forum')." WHERE status='3' AND type = 'sub'");
}else{
$cates = C::t('forum_forum')->fetch_all_valid_forum();
}
echo "<select name='list'>";
echo maketree($cates,0,'');
echo '</select>';
exit;
} /**
* 检测以及初始化数据
*/
public function checkAndInitData()
{
global $_G , $config;
$fid = intval(getgpc('fid'));
$sortid = intval(getgpc('sortid'));
$typeid = intval(getgpc('typeid'));
$special = intval(getgpc('special'));
if(empty($sortid) && !empty($_POST['sortname'])){
$_POST['sortid'] = intval($config['sortname'][trim($_POST['sortname'])]);
}
if(empty($typeid) && !empty($_POST['typename'])){
$_POST['typeid'] = intval($config['typename'][trim($_POST['typename'])]);
}
if(empty($fid) && !empty($_GET['fname'])){
$_GET['fid'] = intval($config['fname'][trim($_GET['fname'])]);
}
if(empty($_GET['fid']) || empty($_GET['subject']) || empty($_GET['message']) || empty($_GET['username'])){
echo '错误缺少参数:';
empty($_GET['fid']) && print('fid ');
empty($_GET['subject']) && print('标题 ');
empty($_GET['message']) && print('内容 ');
empty($_GET['username']) && print('作者 ');
exit();
}else{
$this->subject = trim($_POST['subject']);
$messageArr = explode($config['分隔符'] , trim($_POST['message']));
$usernameArr = explode($config['分隔符'] , trim($_POST['username']));
foreach($usernameArr as $k =>$v){
$usernameArr[$k] = trim($v);
if(!$this->check_username($v)){
unset($usernameArr[$k]);
}
} $this->message = array_shift($messageArr);
$this->username = array_shift($usernameArr); isset($_POST['price']) && $this->price = intval(trim($_POST['price']));
isset($_POST['readperm']) && $this->readperm = intval($_POST['readperm']);
}
if(!empty($_POST['publishdate'])){
$publish_date_arr = explode($config['分隔符'] , trim($_POST['publishdate']));
$publish_date_tmp = array_shift($publish_date_arr);
$publish_date = strtotime(trim($publish_date_tmp));
if($publish_date > 0){
$this->publish_date = $publish_date;
}else{
$this->publish_date = $_G['timestamp'];
}
}else{
$this->publish_date = $_G['timestamp'];
} if(!empty($_POST['avatar'])){
$avatar_tmp_arr = array_unique(explode($config['分隔符'] , trim($_POST['avatar'])));
foreach($avatar_tmp_arr as $k => $v){
foreach ($_FILES as $k2 => $v2){
if(strpos($k2 , 'avatar') === 0){
if(strpos($v , $v2['name']) !== false){
$this->avatar[] = array('username' => $v , 'file'=>$v2);
break;
}
}
}
}
}
/**if(!empty($_FILES)){
$i = 0;
while (isset($_FILES['attach'.$i])){
$this->attach[] = $_FILES['attach'.$i++];
}
//unset($_FILES);
//$_FILES=null;
}**/ $this->save_date = $this->publish_date;
if(!empty($messageArr)){
if(!empty($usernameArr)){
$reply_user = $usernameArr;
$is_username_random = false;
}elseif(!empty($config['回复用户名'])){
$is_username_random = true;
$reply_user = explode('|||', $config['回复用户名']);
}else{
$reply_user = $this->username;
}
if(!empty($publish_date_arr)){
$reply_times = $publish_date_arr;
}
//签名
if(!empty($_POST['signature'])){
$reply_sig = explode($config['分隔符'], trim($_POST['signature']));
$this->sightml = array_shift($reply_sig);
$is_signature_random = false;
//随机用户签名
}elseif(!empty($config['回复用户签名'])){
$is_signature_random = true;
$reply_sig = explode('|||', $config['回复用户签名']);
$this->sightml = array_shift($reply_sig);
}
foreach($messageArr as $k => $v)
{
$reply_tmp = (!$is_username_random && isset($reply_user[$k])) ? $reply_user[$k] : $reply_user[rand(0,count($reply_user)-1)];
$sig_tmp = (!$is_signature_random && isset($reply_sig[$k])) ? $reply_sig[$k] : (empty($reply_sig) ? '' : $reply_sig[rand(0,count($reply_sig)-1)]);
if(isset($reply_times[$k])){
$reply_time_tmp = strtotime($reply_times[$k]);
if($reply_time_tmp > 0){
$this->save_date = $reply_time_tmp;
}else{
$this->save_date = $reply_time_tmp = $this->save_date + rand($config['回复间隔'][0] , $config['回复间隔'][1]);
}
}else{
$this->save_date = $reply_time_tmp = $this->save_date + rand($config['回复间隔'][0] , $config['回复间隔'][1]);
}
$this->replys[$k] = array(
'message' => $v ,
'username' => $reply_tmp ,
'publishdate' => $reply_time_tmp ,
'signature' => $sig_tmp
);
}
}
} /**
* 得到随机ip
*/
private function randomip()
{
return rand(0,255).'.'.rand(0,255).'.'.rand(0,255).'.'.rand(0,255);
} public function logonUser($username = '')
{
empty($username) && $username = $this->username;
global $_G , $config;
$user = uc_get_user($username);
$uid = $user[0];
$ip = $this->randomip();
$groupinfo = array();
$groupinfo['groupid'] = empty($config['新注册用户群组']) ? $_G['setting']['newusergroupid'] : (is_array($config['新注册用户群组']) ? $config['新注册用户群组'][rand(0,count($config['新注册用户群组'])-1)] : $config['新注册用户群组']);
$init_arr = array('credits' => explode(',', $_G['setting']['initcredits']), 'profile'=>array());
if($user){
if(!C::t('common_member')->fetch_uid_by_username($username)){
C::t('common_member')->insert($uid, $username, md5(1), $user[2], $ip, $groupinfo['groupid'], $init_arr);
}
$member = getuserbyuid($user[0]);
$this->setloginstatus($member , 0);
}else{
if(!empty($config['用户密码'])){
$password = $config['用户密码'];
}else{
$md5 = md5($username.$config['用户密码参数']);
$password = substr($md5, 20);
}
if(empty($config['注册会员邮件后缀'])){
$mail_ext = '@126.com';
}else{
$mail_arr = explode('|||', $config['注册会员邮件后缀']);
$mail_ext = '@'.$mail_arr[rand(0 , count($mail_arr)-1)];
}
$email = substr($md5, 0 , 6).$mail_ext ; $uid = uc_user_register(addslashes($username), $password , $email , '', '', $ip);
if($uid == -1) {
exit('错误|用户名包含敏感字符->'.addslashes($username));
} elseif($uid == -2) {
exit('错误|用户名包含被系统屏蔽的字符');
} elseif($uid == -3) {
exit('错误|该用户名已被注册');
} elseif($uid == -4) {
exit('错误|Email 地址无效');
} elseif($uid == -5) {
exit('错误|抱歉,Email 包含不可使用的邮箱域名');
} elseif($uid == -6) {
exit('错误|该 Email 地址已被注册');
} elseif($uid <= 0) {
exit('错误|未定义操作');
}
if(getuserbyuid($uid, 1)) {
uc_user_delete($uid);
exit("错误抱歉,用户 ID {$uid} 已被占用");
} $setregip = null;
if($_G['setting']['regfloodctrl']) {
$regip = C::t('common_regip')->fetch_by_ip_dateline($ip, $_G['timestamp']-86400);
if($regip) {
if($$regip['count'] >= $_G['setting']['regfloodctrl']) {
exit('错误ip注册数超过'.$_G['setting']['regfloodctrl']);
} else {
$setregip = 1;
}
} else {
$setregip = 2;
}
}
if($setregip !== null) {
if($setregip == 1) {
C::t('common_regip')->update_count_by_ip($ip);
} else {
C::t('common_regip')->insert(array('ip' => $ip, 'count' => 1, 'dateline' => $_G['timestamp']));
}
} C::t('common_member')->insert($uid, $username, md5($password), $email, $ip, $groupinfo['groupid'], $init_arr);
if(!empty($this->sightml)){
C::t('common_member_field_forum')->update($uid, array('sightml' => $this->sightml));
} //上传头像
$this->postAvatar($uid , $username);
require_once libfile('cache/userstats', 'function');
build_cache_userstats();
//unset($_COOKIE);$_COOKIE = array();
$this->setloginstatus(array(
'uid' => $uid,
'username' => $username,
'password' => $password,
'groupid' => $groupinfo['groupid'],
), 0);
include_once libfile('function/stat');
updatestat('register');
}
$_G['group']['allowsigbbcode'] = $_G['group']['allowhtml'] = $_G['group']['allowposttag'] = $_G['group']['allowsetattachperm'] = '1'; }
private function postAvatar($uid,$username)
{
global $config; if(empty($this->avatar) || !function_exists('fsockopen')){
return false;
}
//匹配用户名和头像
foreach($this->avatar as $k => $v){
if(strpos($v['username'] , $username) !== false && is_uploaded_file($v['file']['tmp_name'])){
$img_file = $v['file'];
$nowkey = $k;
}
}
if(!empty($img_file)){
require_once './uc_server/lib/upload.class.php';
$uc_datadir = './uc_server/data/';
$dir=upload::mkdir_by_uid($uid , $uc_datadir.'avatar/');
$ext='jpg';//upload::fileext($img_file['name']);
$u = str_pad(substr($uid,-2,2), 2, "0", STR_PAD_LEFT);
$bImg=$uc_datadir.'avatar/'.$dir.'/'.$u.'_avatar_big.'.$ext;
$mImg=$uc_datadir.'avatar/'.$dir.'/'.$u.'_avatar_middle.'.$ext;
$sImg=$uc_datadir.'avatar/'.$dir.'/'.$u.'_avatar_small.'.$ext;
upload::thumb(200,200,$img_file['tmp_name'],$bImg,$ext);
upload::thumb(120,120,$bImg,$mImg,$ext);
upload::thumb(48,48,$bImg,$sImg,$ext);
}
} private function setloginstatus($member, $cookietime)
{
global $_G;
$_G['uid'] = intval($member['uid']);
$_G['username'] = $member['username'];
$_G['adminid'] = $member['adminid'];
$_G['groupid'] = $member['groupid'];
$_G['formhash'] = formhash();
$_G['session']['invisible'] = getuserprofile('invisible');
$_G['member'] = $member;
loadcache('usergroup_'.$_G['groupid']);
C::app()->session->isnew = true;
/*
C::app()->session->updatesession();
dsetcookie('auth', authcode("{$member['password']}\t{$member['uid']}", 'ENCODE'), $cookietime, 1, true);
dsetcookie('loginuser');
dsetcookie('activationauth');
dsetcookie('pmnum');
*/
include_once libfile('function/stat');
updatestat('login', 1);
$rule = updatecreditbyaction('daylogin', $_G['uid']);
if(!$rule['updatecredit']) {
checkusergroup($_G['uid']);
}
} private function checkGroup()
{
global $_G;
if($_G['forum']['status'] == 3) {
if(!helper_access::check_module('group')) {
exit('错误group_status_off');
}
require_once libfile('function/group');
$status = groupperm($_G['forum'], $_G['uid'], 'post');
if($status == -1) {
exit("错误|该版块不是{$_G['setting']['navs']['3']['navname']}");
} elseif($status == 1) {
exit("错误|该{$_G['setting']['navs']['3']['navname']}已关闭");
} elseif($status == 2) {
exit("错误|抱歉,您没有权限访问该{$_G['setting']['navs']['3']['navname']}");
} elseif($status == 3) {
exit('错误|请等待群主审核');
} elseif($status == 4) {
exit("错误|抱歉,您还不是本{$_G['setting']['navs']['3']['navname']}成员不能发帖");
} elseif($status == 5) {
exit('错误|请等待群主审核');
}
}
if(($_G['forum']['simple'] & 1) || $_G['forum']['redirect']) {
exit('错误|本版块禁止发帖');
}
} private function upload($publishdate)
{
global $_G;
empty($publishdate) && $publishdate = $_G['timestamp'];
$upload = new discuz_upload();
$upload->init($_FILES['Filedata'], 'forum');
//$this->attach = &$upload->attach; if($upload->error()) {
exit('错误上传错误');
}
/*
if($_G['group']['attachextensions'] && (!preg_match("/(^|\s|,)".preg_quote($upload->attach['ext'], '/')."($|\s|,)/i", $_G['group']['attachextensions']) || !$upload->attach['ext'])) {
exit('错误不支持的附近格式'.$upload->attach['ext']);
} if(empty($upload->attach['size']) || $_G['group']['maxattachsize'] && $upload->attach['size'] > $_G['group']['maxattachsize']) {
exit('错误附近大小不对'.$upload->attach['size'].'最大'.$_G['group']['maxattachsize']);
} loadcache('attachtype');
if($_G['fid'] && isset($_G['cache']['attachtype'][$_G['fid']][$upload->attach['ext']])) {
$maxsize = $_G['cache']['attachtype'][$_G['fid']][$upload->attach['ext']];
} elseif(isset($_G['cache']['attachtype'][0][$upload->attach['ext']])) {
$maxsize = $_G['cache']['attachtype'][0][$upload->attach['ext']];
}
if(isset($maxsize)) {
if(!$maxsize) {
exit(4);
} elseif($upload->attach['size'] > $maxsize) {
exit(5);
}
}
*/
updatemembercount($_G['uid'], array('todayattachs' => 1, 'todayattachsize' => $upload->attach['size']));
$upload->save();
if($upload->error() == -103) {
exit(8);
} elseif($upload->error()) {
exit(9);
}
$thumb = $remote = $width = 0;
if($upload->attach['isimage']) {
if($_G['setting']['showexif']) {
require_once libfile('function/attachment');
$exif = getattachexif(0, $upload->attach['target']);
}
if($_G['setting']['thumbsource'] || $_G['setting']['thumbstatus']) {
require_once libfile('class/image');
$image = new image;
}
if($_G['setting']['thumbsource'] && $_G['setting']['sourcewidth'] && $_G['setting']['sourceheight']) {
$thumb = $image->Thumb($upload->attach['target'], '', $_G['setting']['sourcewidth'], $_G['setting']['sourceheight'], 1, 1) ? 1 : 0;
$width = $image->imginfo['width'];
$upload->attach['size'] = $image->imginfo['size'];
}
if($_G['setting']['thumbstatus']) {
$thumb = $image->Thumb($upload->attach['target'], '', $_G['setting']['thumbwidth'], $_G['setting']['thumbheight'], $_G['setting']['thumbstatus'], 0) ? 1 : 0;
$width = $image->imginfo['width'];
}
if($_G['setting']['thumbsource'] || !$_G['setting']['thumbstatus']) {
list($width) = @getimagesize($upload->attach['target']);
}
}
$aid = getattachnewaid($_G['uid']);
$insert = array(
'aid' => $aid,
'dateline' => $publishdate,
'filename' => censor($upload->attach['name']),
'filesize' => $upload->attach['size'],
'attachment' => $upload->attach['attachment'],
'isimage' => $upload->attach['isimage'],
'uid' => $_G['uid'],
'thumb' => $thumb,
'remote' => $remote,
'width' => $width,
);
C::t('forum_attachment_unused')->insert($insert);
if($upload->attach['isimage'] && $_G['setting']['showexif']) {
C::t('forum_attachment_exif')->insert($aid, $exif);
}
return array('aid'=>$aid , 'name' => $upload->attach['name'] , 'isimage' => $upload->attach['isimage']);
} private function setUpdate(&$attach , $message)
{
global $config;
if(empty($attach)){
return $message;
}
$uploadFile = array();
foreach($attach as $k => $v){
if(!empty($v) && $v['error'] == 0 && strpos($message , $v['name']) !== false){
$_FILES['Filedata'] = $v;
//$_FILES['Filedata']['name'] = addslashes(diconv(urldecode($_FILES['Filedata']['name']), 'UTF-8'));
$_FILES['Filedata']['name'] = addslashes(urldecode($_FILES['Filedata']['name']));
$_FILES['Filedata']['type'] = strrchr($_FILES['Filedata']['name'], '.');
$uploadFile[] = $this->upload($this->publishdate);
unset($attach[$k]);
}
}
if(!empty($uploadFile)){
foreach($uploadFile as $k => $v){
$have = false;
$preg_name = preg_quote($v['name']);
if($v['isimage'] == '1'){
//正则替换,
if(preg_match("/<img[^<>]+".$preg_name."[^<>]+>/iUs", $message , $match)){
$have = true;
if($config['附件隐藏']){
$message = str_replace($match[0], '[hide][attach]'.$v['aid'].'[/attach][/hide]', $message);
}else{
$message = str_replace($match[0], '[attach]'.$v['aid'].'[/attach]', $message);
}
//[img]19352073h2uh607pzo6oh6.jpg[/img]
}elseif(preg_match("/\[img\][^\[\]]*".$preg_name."\[\/img\]/iUs", $message , $match)){
$have = true;
if($config['附件隐藏']){
$message = str_replace($match[0], '[hide][attach]'.$v['aid'].'[/attach][/hide]', $message);
}else{
$message = str_replace($match[0], '[attach]'.$v['aid'].'[/attach]', $message);
}
}
}else{
if(preg_match("/<a[^<>]*>[^<>]*".$preg_name."[^<>]*</a>/iUs", $message , $match)){
$have = true;
if($config['附件隐藏']){
$message = str_replace($match[0], '[hide][attach]'.$v['aid'].'[/attach][/hide]', $message);
}else{
$message = str_replace($match[0], '[attach]'.$v['aid'].'[/attach]', $message);
}
}elseif(preg_match("/\[url=[^\[\]]+\][^\[\]]*".$preg_name."\[\/url\]/iUs", $message , $match)){
$have = true;
if($config['附件隐藏']){
$message = str_replace($match[0], '[hide][attach]'.$v['aid'].'[/attach][/hide]', $message);
}else{
$message = str_replace($match[0], '[attach]'.$v['aid'].'[/attach]', $message);
}
}
} if(!empty($config['附件权限组'])){
$readpermArr = explode('|', $config['附件权限组']);
$readperm = $readpermArr[rand(0 , count($readpermArr)-1)];
}else{
$readperm = 0;
}
if(!empty($config['附件价格'])){
$priceArr = explode('|', $config['附件价格']);
$price = $priceArr[rand(0 , count($priceArr)-1)];
}else{
$price = 0;
}
$_GET['attachnew'][$v['aid']]['description'] = $v['name'];
$_GET['attachnew'][$v['aid']]['readperm'] = $readperm;
$_GET['attachnew'][$v['aid']]['price'] = $price;//$config['附件价格'];
}
}
return $message;
} public function newthread()
{
global $_G,$config;
require_once libfile('class/credit');
require_once libfile('function/post');
$pid = intval(getgpc('pid'));
$sortid = intval(getgpc('sortid'));
$typeid = intval(getgpc('typeid'));
$special = intval(getgpc('special'));
$postinfo = array('subject' => '');
$thread = array('readperm' => '', 'pricedisplay' => '', 'hiddenreplies' => '');
$_G['forum_dtype'] = $_G['forum_checkoption'] = $_G['forum_optionlist'] = $tagarray = $_G['forum_typetemplate'] = array(); if($sortid) {
require_once libfile('post/threadsorts', 'include');
}
$this->checkGroup();
//require_once libfile('function/discuzcode'); $space = array();
space_merge($space, 'field_home'); formulaperm($_G['forum']['formulaperm']); $_G['forum']['allowpostattach'] = isset($_G['forum']['allowpostattach']) ? $_G['forum']['allowpostattach'] : '';
$_G['group']['allowpostattach'] = $_G['forum']['allowpostattach'] != -1 && ($_G['forum']['allowpostattach'] == 1 || (!$_G['forum']['postattachperm'] && $_G['group']['allowpostattach']) || ($_G['forum']['postattachperm'] && forumperm($_G['forum']['postattachperm'])));
$_G['forum']['allowpostimage'] = isset($_G['forum']['allowpostimage']) ? $_G['forum']['allowpostimage'] : '';
$_G['group']['allowpostimage'] = $_G['forum']['allowpostimage'] != -1 && ($_G['forum']['allowpostimage'] == 1 || (!$_G['forum']['postimageperm'] && $_G['group']['allowpostimage']) || ($_G['forum']['postimageperm'] && forumperm($_G['forum']['postimageperm'])));
$_G['group']['attachextensions'] = $_G['forum']['attachextensions'] ? $_G['forum']['attachextensions'] : $_G['group']['attachextensions'];
require_once libfile('function/upload');
$swfconfig = getuploadconfig($_G['uid'], $_G['fid']);
$imgexts = str_replace(array(';', '*.'), array(', ', ''), $swfconfig['imageexts']['ext']);
$allowuploadnum = $allowuploadtoday = TRUE;
if($_G['group']['allowpostattach'] || $_G['group']['allowpostimage']) {
if($_G['group']['maxattachnum']) {
$allowuploadnum = $_G['group']['maxattachnum'] - getuserprofile('todayattachs');
$allowuploadnum = $allowuploadnum < 0 ? 0 : $allowuploadnum;
if(!$allowuploadnum) {
$allowuploadtoday = false;
}
}
if($_G['group']['maxsizeperday']) {
$allowuploadsize = $_G['group']['maxsizeperday'] - getuserprofile('todayattachsize');
$allowuploadsize = $allowuploadsize < 0 ? 0 : $allowuploadsize;
if(!$allowuploadsize) {
$allowuploadtoday = false;
}
$allowuploadsize = $allowuploadsize / 1048576 >= 1 ? round(($allowuploadsize / 1048576), 1).'MB' : round(($allowuploadsize / 1024)).'KB';
}
}
$allowpostimg = $_G['group']['allowpostimage'] && $imgexts;
$enctype = ($_G['group']['allowpostattach'] || $_G['group']['allowpostimage']) ? 'enctype="multipart/form-data"' : '';
$maxattachsize_mb = $_G['group']['maxattachsize'] / 1048576 >= 1 ? round(($_G['group']['maxattachsize'] / 1048576), 1).'MB' : round(($_G['group']['maxattachsize'] / 1024)).'KB'; $_G['group']['maxprice'] = isset($_G['setting']['extcredits'][$_G['setting']['creditstrans']]) ? $_G['group']['maxprice'] : 0; $extra = ''; $subject = dhtmlspecialchars(censor(trim($this->subject)));
$subject = !empty($subject) ? str_replace("\t", ' ', $subject) : $subject;
if(empty($config['标题允许重复'])){
C::t('forum_thread')->count_by_tid_fid('','','','',$subject)> 0 && exit('错误,标题重复');
}
$message = $this->setUpdate($this->attach , censor($this->message));
$polloptions = isset($polloptions) ? censor(trim($polloptions)) : '';
$readperm = isset($this->readperm) ? $this->readperm : 0;
$price = isset($this->price) ? $this->price : 0;
/*
if(empty($bbcodeoff) && !$_G['group']['allowhidecode'] && !empty($message) && preg_match("/\[hide=?\d*\].*?\[\/hide\]/is", preg_replace("/(\[code\](.+?)\[\/code\])/is", ' ', $message))) {
exit('错误post_hide_nopermission');
}
*/
$modnewthreads = $modnewreplies = 0;
$urloffcheck = $usesigcheck = $smileyoffcheck = $codeoffcheck = $htmloncheck = $emailcheck = ''; $seccodecheck = ($_G['setting']['seccodestatus'] & 4) && (!$_G['setting']['seccodedata']['minposts'] || getuserprofile('posts') < $_G['setting']['seccodedata']['minposts']);
$secqaacheck = $_G['setting']['secqaa']['status'] & 2 && (!$_G['setting']['secqaa']['minposts'] || getuserprofile('posts') < $_G['setting']['secqaa']['minposts']); $_G['group']['allowpostpoll'] = $_G['group']['allowpost'] && $_G['group']['allowpostpoll'] && ($_G['forum']['allowpostspecial'] & 1);
$_G['group']['allowposttrade'] = $_G['group']['allowpost'] && $_G['group']['allowposttrade'] && ($_G['forum']['allowpostspecial'] & 2);
$_G['group']['allowpostreward'] = $_G['group']['allowpost'] && $_G['group']['allowpostreward'] && ($_G['forum']['allowpostspecial'] & 4);
$_G['group']['allowpostactivity'] = $_G['group']['allowpost'] && $_G['group']['allowpostactivity'] && ($_G['forum']['allowpostspecial'] & 8);
$_G['group']['allowpostdebate'] = $_G['group']['allowpost'] && $_G['group']['allowpostdebate'] && ($_G['forum']['allowpostspecial'] & 16);
$_G['forum']['threadplugin'] = dunserialize($_G['forum']['threadplugin']); $_G['group']['allowanonymous'] = $_G['forum']['allowanonymous'] || $_G['group']['allowanonymous'] ? 1 : 0; $policykey = 'post';
$postcredits = $_G['forum'][$policykey.'credits'] ? $_G['forum'][$policykey.'credits'] : $_G['setting']['creditspolicy'][$policykey]; $albumlist = array();
if(helper_access::check_module('album') && $_G['group']['allowupload'] && $_G['uid']) {
$query = C::t('home_album')->fetch_all_by_uid($_G['uid'], 'updatetime');
foreach($query as $value) {
if($value['picnum']) {
$albumlist[] = $value;
}
}
}
check_allow_action('allowpost'); if(helper_access::check_module('album') && $_G['group']['allowupload'] && $_G['setting']['albumcategorystat'] && !empty($_G['cache']['albumcategory'])) {
require_once libfile('function/portalcp');
}
loadcache('groupreadaccess');
/*
if(empty($_G['forum']['fid']) || $_G['forum']['type'] == 'group') {
exit('错误板块id不正确');
}
if(!$_G['uid'] && !((!$_G['forum']['postperm'] && $_G['group']['allowpost']) || ($_G['forum']['postperm'] && forumperm($_G['forum']['postperm'])))) {
exit('错误postperm_login_nopermission');
} elseif(empty($_G['forum']['allowpost'])) {
if(!$_G['forum']['postperm'] && !$_G['group']['allowpost']) {
exit('错误|抱歉,您没有权限在该版块发帖|postperm_none_nopermission');
} elseif($_G['forum']['postperm'] && !forumperm($_G['forum']['postperm'])) {
exit('错误|抱歉,您没有权限在该版块发帖');
//showmessagenoperm('postperm', $_G['fid'], $_G['forum']['formulaperm']);
}
} elseif($_G['forum']['allowpost'] == -1) {
exit('错误|抱歉,本版块只有特定用户组可以发新主题|post_forum_newthread_nopermission');
}
if(!$_G['uid'] && ($_G['setting']['need_avatar'] || $_G['setting']['need_email'] || $_G['setting']['need_friendnum'])) {
exit('错误|抱歉,您尚未登录,没有权限在该版块发帖|postperm_login_nopermission');
} checklowerlimit('post', 0, 1, $_G['forum']['fid']); 检测长度
if($post_invalid = checkpost($subject, $message, ($special || $sortid))) {
exit('错误'.$post_invalid);
}
*/ $_GET['save'] = $_G['uid'] ? $_GET['save'] : 0;
if ($this->publish_date > $_G['timestamp']) {
$_GET['save'] = 1;
}
$publishdate = $this->publish_date; $typeid = isset($typeid) && isset($_G['forum']['threadtypes']['types'][$typeid]) && (empty($_G['forum']['threadtypes']['moderators'][$typeid]) || $_G['forum']['ismoderator']) ? $typeid : 0;
$displayorder = ($_G['forum']['ismoderator'] && $_G['group']['allowstickthread'] && !empty($_GET['sticktopic'])) ? 1 : (empty($_GET['save']) ? 0 : -4);
if($displayorder == -4) {
$_GET['addfeed'] = 0;
}
$digest = $_G['forum']['ismoderator'] && $_G['group']['allowdigestthread'] && !empty($_GET['addtodigest']) ? 1 : 0;
$readperm = $_G['group']['allowsetreadperm'] ? $readperm : 0;
$isanonymous = 0;
//$price = $_G['group']['maxprice'] && !$special ? ($price <= $_G['group']['maxprice'] ? $price : $_G['group']['maxprice']) : 0; if(!$typeid && $_G['forum']['threadtypes']['required'] && !$special) {
exit('错误该板块必须要主题分类typeid');
} if(!$sortid && $_G['forum']['threadsorts']['required'] && !$special) {
exit('错误该板块必须要分类信息sortid');
} if($price > 0 && floor($price * (1 - $_G['setting']['creditstax'])) == 0) {
exit('错误|抱歉,您的主题售价扣除积分交易税后为 0|post_net_price_iszero');
} $typeexpiration = intval($_GET['typeexpiration']); if($_G['forum']['threadsorts']['expiration'][$typeid] && !$typeexpiration) {
exit('错误|抱歉,此主题必须指定有效期|threadtype_expiration_invalid');//);
} $_G['forum_optiondata'] = array();
if($_G['forum']['threadsorts']['types'][$sortid] && !$_G['forum']['allowspecialonly']) {
$_G['forum_optiondata'] = threadsort_validator($_GET['typeoption'], $pid);
} $author = $_G['username'] ; $moderated = $digest || $displayorder > 0 ? 1 : 0; $thread['status'] = 0;
$isgroup = $_G['forum']['status'] == 3 ? 1 : 0; //回复奖励
if($_G['group']['allowreplycredit']) {
$_GET['replycredit_extcredits'] = intval($_GET['replycredit_extcredits']);
$_GET['replycredit_times'] = intval($_GET['replycredit_times']);
$_GET['replycredit_membertimes'] = intval($_GET['replycredit_membertimes']);
$_GET['replycredit_random'] = intval($_GET['replycredit_random']); $_GET['replycredit_random'] = $_GET['replycredit_random'] < 0 || $_GET['replycredit_random'] > 99 ? 0 : $_GET['replycredit_random'] ;
$replycredit = $replycredit_real = 0;
if($_GET['replycredit_extcredits'] > 0 && $_GET['replycredit_times'] > 0) {
$replycredit_real = ceil(($_GET['replycredit_extcredits'] * $_GET['replycredit_times']) + ($_GET['replycredit_extcredits'] * $_GET['replycredit_times'] * $_G['setting']['creditstax']));
if($replycredit_real > getuserprofile('extcredits'.$_G['setting']['creditstransextra'][10])) {
exit('错误|抱歉,回帖送积分额度大于您的积分|replycredit_morethan_self');
} else {
$replycredit = ceil($_GET['replycredit_extcredits'] * $_GET['replycredit_times']);
}
}
} $newthread = array(
'fid' => $_G['fid'],
'posttableid' => 0,
'readperm' => $readperm,
'price' => $price,
'typeid' => $typeid,
'sortid' => $sortid,
'author' => $author,
'authorid' => $_G['uid'],
'subject' => $subject,
'views' => (rand(5,10)*count($this->replys))+rand(1,10),
'dateline' => $publishdate,
'lastpost' => $publishdate,
'lastposter' => $author,
'displayorder' => $displayorder,
'digest' => $digest,
'special' => $special,
'attachment' => 0,
'moderated' => $moderated,
'status' => $thread['status'],
'isgroup' => $isgroup,
'replycredit' => $replycredit,
'closed' => $closed ? 1 : 0
);
$tid = C::t('forum_thread')->insert($newthread, true);
useractionlog($_G['uid'], 'tid'); if(!getuserprofile('threads') && $_G['setting']['newbie']) {
C::t('forum_thread')->update($tid, array('icon' => $_G['setting']['newbie']));
}
//计划发布
if ($publishdate != $_G['timestamp']) {
loadcache('cronpublish');
$cron_publish_ids = dunserialize($_G['cache']['cronpublish']);
$cron_publish_ids[$tid] = $tid;
$cron_publish_ids = serialize($cron_publish_ids);
savecache('cronpublish', $cron_publish_ids);
} C::t('common_member_field_home')->update($_G['uid'], array('recentnote'=>$subject)); if($moderated) {
updatemodlog($tid, ($displayorder > 0 ? 'STK' : 'DIG'));
updatemodworks(($displayorder > 0 ? 'STK' : 'DIG'), 1);
} if($_G['forum']['threadsorts']['types'][$sortid] && !empty($_G['forum_optiondata']) && is_array($_G['forum_optiondata'])) {
$filedname = $valuelist = $separator = '';
foreach($_G['forum_optiondata'] as $optionid => $value) {
if($value) {
$filedname .= $separator.$_G['forum_optionlist'][$optionid]['identifier'];
$valuelist .= $separator."'".daddslashes($value)."'";
$separator = ' ,';
} if($_G['forum_optionlist'][$optionid]['type'] == 'image') {
$identifier = $_G['forum_optionlist'][$optionid]['identifier'];
$sortaids[] = intval($_GET['typeoption'][$identifier]['aid']);
} C::t('forum_typeoptionvar')->insert(array(
'sortid' => $sortid,
'tid' => $tid,
'fid' => $_G['fid'],
'optionid' => $optionid,
'value' => censor($value),
'expiration' => ($typeexpiration ? $publishdate + $typeexpiration : 0),
));
} if($filedname && $valuelist) {
C::t('forum_optionvalue')->insert($sortid, "($filedname, tid, fid) VALUES ($valuelist, '$tid', '$_G[fid]')");
}
}
if($_G['group']['allowat']) {
$atlist = $atlist_tmp = array();
preg_match_all("/@([^\r\n]*?)\s/i", $message.' ', $atlist_tmp);
$atlist_tmp = array_slice(array_unique($atlist_tmp[1]), 0, $_G['group']['allowat']);
if(!empty($atlist_tmp)) {
if(empty($_G['setting']['at_anyone'])) {
foreach(C::t('home_follow')->fetch_all_by_uid_fusername($_G['uid'], $atlist_tmp) as $row) {
$atlist[$row['followuid']] = $row['fusername'];
}
if(count($atlist) < $_G['group']['allowat']) {
$query = C::t('home_friend')->fetch_all_by_uid_username($_G['uid'], $atlist_tmp);
foreach($query as $row) {
$atlist[$row['fuid']] = $row['fusername'];
}
}
} else {
foreach(C::t('common_member')->fetch_all_by_username($atlist_tmp) as $row) {
$atlist[$row['uid']] = $row['username'];
}
}
}
if($atlist) {
foreach($atlist as $atuid => $atusername) {
$atsearch[] = "/@$atusername /i";
$atreplace[] = "[url=home.php?mod=space&uid=$atuid]@{$atusername}[/url] ";
}
$message = preg_replace($atsearch, $atreplace, $message.' ', 1);
}
} $bbcodeoff = checkbbcodes($message, 0);
$smileyoff = checksmilies($message, 0);
$parseurloff = !empty($_GET['parseurloff']);
$htmlon = strpos($message , '<') !==false ? 1 : 0;
$usesig = $config['使用签名'];
$class_tag = new tag();
$tagstr = $class_tag->add_tag($_GET['tags'], $tid, 'tid'); if($_G['group']['allowreplycredit']) {
if($replycredit > 0 && $replycredit_real > 0) {
updatemembercount($_G['uid'], array('extcredits'.$_G['setting']['creditstransextra'][10] => -$replycredit_real), 1, 'RCT', $tid);
$insertdata = array(
'tid' => $tid,
'extcredits' => $_GET['replycredit_extcredits'],
'extcreditstype' => $_G['setting']['creditstransextra'][10],
'times' => $_GET['replycredit_times'],
'membertimes' => $_GET['replycredit_membertimes'],
'random' => $_GET['replycredit_random']
);
C::t('forum_replycredit')->insert($insertdata);
}
}
$pinvisible = $modnewthreads ? -2 : (empty($_GET['save']) ? 0 : -3); $pid = insertpost(array(
'fid' => $_G['fid'],
'tid' => $tid,
'first' => '1',
'author' => $_G['username'],
'authorid' => $_G['uid'],
'subject' => $subject,
'dateline' => $publishdate,
'message' => $message,
'useip' => $_G['clientip'],
'invisible' => $pinvisible,
'anonymous' => $isanonymous,
'usesig' => $usesig,
'htmlon' => $htmlon,
'bbcodeoff' => $bbcodeoff,
'smileyoff' => $smileyoff,
'parseurloff' => $parseurloff,
'attachment' => '0',
'tags' => $tagstr,
'replycredit' => 0,
'status' => 0
));
if($_G['group']['allowat'] && $atlist) {
foreach($atlist as $atuid => $atusername) {
notification_add($atuid, 'at', 'at_message', array('from_id' => $tid, 'from_idtype' => 'thread', 'buyerid' => $_G['uid'], 'buyer' => $_G['username'], 'tid' => $tid, 'subject' => $subject, 'pid' => $pid, 'message' => messagecutstr($message, 150)));
}
set_atlist_cookie(array_keys($atlist));
}
$threadimageaid = 0;
$threadimage = array(); if($_G['forum']['threadsorts']['types'][$sortid] && !empty($_G['forum_optiondata']) && is_array($_G['forum_optiondata']) && $sortaids) {
foreach($sortaids as $sortaid) {
convertunusedattach($sortaid, $tid, $pid);
}
} if(($_G['group']['allowpostattach'] || $_G['group']['allowpostimage']) && ($_GET['attachnew'] || $sortid || !empty($_GET['activityaid']))) {
updateattach($displayorder == -4 || $modnewthreads, $tid, $pid, $_GET['attachnew']);
if(!$threadimageaid) {
$threadimage = C::t('forum_attachment_n')->fetch_max_image('tid:'.$tid, 'tid', $tid);
$threadimageaid = $threadimage['aid'];
}
} $values = array('fid' => $_G['fid'], 'tid' => $tid, 'pid' => $pid, 'coverimg' => '');
$param = array();
if($_G['forum']['picstyle']) {
if(!setthreadcover($pid, 0, $threadimageaid)) {
preg_match_all("/(\[img\]|\[img=\d{1,4}[x|\,]\d{1,4}\])\s*([^\[\<\r\n]+?)\s*\[\/img\]/is", $message, $imglist, PREG_SET_ORDER);
$values['coverimg'] = "<p id=\"showsetcover\">".lang('message', 'post_newthread_set_cover')."<span id=\"setcoverwait\"></span></p><script>if($('forward_a')){\$('forward_a').style.display='none';setTimeout(\"$('forward_a').style.display=''\", 5000);};ajaxget('forum.php?mod=ajax&action=setthreadcover&tid=$tid&pid=$pid&fid=$_G[fid]&imgurl={$imglist[0][2]}&newthread=1', 'showsetcover', 'setcoverwait')</script>";
$param['clean_msgforward'] = 1;
$param['timeout'] = $param['refreshtime'] = 15;
}
} if($threadimageaid) {
if(!$threadimage) {
$threadimage = C::t('forum_attachment_n')->fetch('tid:'.$tid, $threadimageaid);
}
$threadimage = daddslashes($threadimage);
C::t('forum_threadimage')->insert(array(
'tid' => $tid,
'attachment' => $threadimage['attachment'],
'remote' => $threadimage['remote'],
));
} $statarr = array(0 => 'thread', 1 => 'poll', 2 => 'trade', 3 => 'reward', 4 => 'activity', 5 => 'debate', 127 => 'thread');
include_once libfile('function/stat');
updatestat($isgroup ? 'groupthread' : 'thread'); //dsetcookie('clearUserdata', 'forum'); if($modnewthreads) {
updatemoderate('tid', $tid);
C::t('forum_forum')->update_forum_counter($_G['fid'], 0, 0, 1);
manage_addnotify('verifythread');
exit('陈功|新主题需要审核,您的帖子通过审核后才能显示|post_newthread_mod_succeed');
} else {
if($displayorder != -4) {
if($digest) {
updatepostcredits('+', $_G['uid'], 'digest', $_G['fid']);
}
updatepostcredits('+', $_G['uid'], 'post', $_G['fid']);
if($isgroup) {
C::t('forum_groupuser')->update_counter_for_user($_G['uid'], $_G['fid'], 1);
} C::t('forum_forum')->update_forum_counter($_G['fid'], 1, 1, 1);
if($publishdate >= $_G['timestamp']){
$subject = str_replace("\t", ' ', $subject);
$lastpost = "$tid\t".$subject."\t$publishdate\t$author";
C::t('forum_forum')->update($_G['fid'], array('lastpost' => $lastpost));
if($_G['forum']['type'] == 'sub') {
C::t('forum_forum')->update($_G['forum']['fup'], array('lastpost' => $lastpost));
}
}
} if($_G['forum']['status'] == 3) {
if($publishdate >= $_G['timestamp']){
C::t('forum_forumfield')->update($_G['fid'], array('lastupdate' => $publishdate));
}
require_once libfile('function/grouplog');
updategroupcreditlog($_G['fid'], $_G['uid']);
}
}
$_G['tid'] = $_GET['tid'] = $tid;
$_GET['attachnew'] = null;
loadforum();
} public function doreply($username , $message , $publishdate)
{
global $_G,$config;
//cknewuser();
$pid = intval(getgpc('pid'));
$sortid = intval(getgpc('sortid'));
$typeid = intval(getgpc('typeid'));
$special = intval(getgpc('special')); $postinfo = array('subject' => '');
$thread = array('readperm' => '', 'pricedisplay' => '', 'hiddenreplies' => ''); $_G['forum_dtype'] = $_G['forum_checkoption'] = $_G['forum_optionlist'] = $tagarray = $_G['forum_typetemplate'] = array(); if($sortid) {
require_once libfile('post/threadsorts', 'include');
}
$this->checkGroup();
require_once libfile('function/discuzcode'); $space = array();
space_merge($space, 'field_home'); if(!empty($_GET['cedit'])) {
unset($_G['inajax'], $_GET['infloat'], $_GET['ajaxtarget'], $_GET['handlekey']);
} $thread = C::t('forum_thread')->fetch($_G['tid']);
formulaperm($_G['forum']['formulaperm']); $_G['forum']['allowpostattach'] = isset($_G['forum']['allowpostattach']) ? $_G['forum']['allowpostattach'] : '';
$_G['group']['allowpostattach'] = $_G['forum']['allowpostattach'] != -1 && ($_G['forum']['allowpostattach'] == 1 || (!$_G['forum']['postattachperm'] && $_G['group']['allowpostattach']) || ($_G['forum']['postattachperm'] && forumperm($_G['forum']['postattachperm'])));
$_G['forum']['allowpostimage'] = isset($_G['forum']['allowpostimage']) ? $_G['forum']['allowpostimage'] : '';
$_G['group']['allowpostimage'] = $_G['forum']['allowpostimage'] != -1 && ($_G['forum']['allowpostimage'] == 1 || (!$_G['forum']['postimageperm'] && $_G['group']['allowpostimage']) || ($_G['forum']['postimageperm'] && forumperm($_G['forum']['postimageperm'])));
$_G['group']['attachextensions'] = $_G['forum']['attachextensions'] ? $_G['forum']['attachextensions'] : $_G['group']['attachextensions'];
require_once libfile('function/upload');
$swfconfig = getuploadconfig($_G['uid'], $_G['fid']);
$imgexts = str_replace(array(';', '*.'), array(', ', ''), $swfconfig['imageexts']['ext']);
$allowuploadnum = $allowuploadtoday = TRUE;
if($_G['group']['allowpostattach'] || $_G['group']['allowpostimage']) {
if($_G['group']['maxattachnum']) {
$allowuploadnum = $_G['group']['maxattachnum'] - getuserprofile('todayattachs');
$allowuploadnum = $allowuploadnum < 0 ? 0 : $allowuploadnum;
if(!$allowuploadnum) {
$allowuploadtoday = false;
}
}
if($_G['group']['maxsizeperday']) {
$allowuploadsize = $_G['group']['maxsizeperday'] - getuserprofile('todayattachsize');
$allowuploadsize = $allowuploadsize < 0 ? 0 : $allowuploadsize;
if(!$allowuploadsize) {
$allowuploadtoday = false;
}
$allowuploadsize = $allowuploadsize / 1048576 >= 1 ? round(($allowuploadsize / 1048576), 1).'MB' : round(($allowuploadsize / 1024)).'KB';
}
}
$allowpostimg = $_G['group']['allowpostimage'] && $imgexts;
$enctype = ($_G['group']['allowpostattach'] || $_G['group']['allowpostimage']) ? 'enctype="multipart/form-data"' : '';
$maxattachsize_mb = $_G['group']['maxattachsize'] / 1048576 >= 1 ? round(($_G['group']['maxattachsize'] / 1048576), 1).'MB' : round(($_G['group']['maxattachsize'] / 1024)).'KB'; $_G['group']['maxprice'] = isset($_G['setting']['extcredits'][$_G['setting']['creditstrans']]) ? $_G['group']['maxprice'] : 0; $extra = ''; $subject = isset($subject) ? dhtmlspecialchars(censor(trim($subject))) : '';
$subject = !empty($subject) ? str_replace("\t", ' ', $subject) : $subject;
$message = isset($message) ? censor($message) : '';
/*
if(empty($bbcodeoff) && !$_G['group']['allowhidecode'] && !empty($message) && preg_match("/\[hide=?\d*\].*?\[\/hide\]/is", preg_replace("/(\[code\](.+?)\[\/code\])/is", ' ', $message))) {
exit('错误post_hide_nopermission');//);
}
*/
$modnewthreads = $modnewreplies = 0; $urloffcheck = $usesigcheck = $smileyoffcheck = $codeoffcheck = $htmloncheck = $emailcheck = ''; $seccodecheck = ($_G['setting']['seccodestatus'] & 4) && (!$_G['setting']['seccodedata']['minposts'] || getuserprofile('posts') < $_G['setting']['seccodedata']['minposts']);
$secqaacheck = $_G['setting']['secqaa']['status'] & 2 && (!$_G['setting']['secqaa']['minposts'] || getuserprofile('posts') < $_G['setting']['secqaa']['minposts']); $_G['group']['allowpostpoll'] = $_G['group']['allowpost'] && $_G['group']['allowpostpoll'] && ($_G['forum']['allowpostspecial'] & 1);
$_G['group']['allowposttrade'] = $_G['group']['allowpost'] && $_G['group']['allowposttrade'] && ($_G['forum']['allowpostspecial'] & 2);
$_G['group']['allowpostreward'] = $_G['group']['allowpost'] && $_G['group']['allowpostreward'] && ($_G['forum']['allowpostspecial'] & 4);
$_G['group']['allowpostactivity'] = $_G['group']['allowpost'] && $_G['group']['allowpostactivity'] && ($_G['forum']['allowpostspecial'] & 8);
$_G['group']['allowpostdebate'] = $_G['group']['allowpost'] && $_G['group']['allowpostdebate'] && ($_G['forum']['allowpostspecial'] & 16);
$_G['forum']['threadplugin'] = dunserialize($_G['forum']['threadplugin']); $_G['group']['allowanonymous'] = $_G['forum']['allowanonymous'] || $_G['group']['allowanonymous'] ? 1 : 0;
$policykey = 'reply';
if($policykey) {
$postcredits = $_G['forum'][$policykey.'credits'] ? $_G['forum'][$policykey.'credits'] : $_G['setting']['creditspolicy'][$policykey];
} $albumlist = array();
if(helper_access::check_module('album') && $_G['group']['allowupload'] && $_G['uid']) {
$query = C::t('home_album')->fetch_all_by_uid($_G['uid'], 'updatetime');
foreach($query as $value) {
if($value['picnum']) {
$albumlist[] = $value;
}
}
} check_allow_action('allowreply'); if(helper_access::check_module('album') && $_G['group']['allowupload'] && $_G['setting']['albumcategorystat'] && !empty($_G['cache']['albumcategory'])) {
require_once libfile('function/portalcp');
} require_once libfile('function/forumlist'); $isfirstpost = 0;
$showthreadsorts = 0;
$quotemessage = '';
if(trim($subject) == '' && trim($message) == '') {
return false;
}
$attentionon = empty($_GET['attention_add']) ? 0 : 1;
$attentionoff = empty($attention_remove) ? 0 : 1;
$heatthreadset = update_threadpartake($_G['tid'], true);
$message = $this->setUpdate($this->attach , $message);
$bbcodeoff = checkbbcodes($message, 0);
$smileyoff = checksmilies($message, 0);
$parseurloff = !empty($_GET['parseurloff']);
$htmlon = strpos($message , '<') !== false ? 1 : 0 ;//$_G['group']['allowhtml'] && !empty($_GET['htmlon']) ? 1 : 0;
$usesig = $config['使用签名']; $isanonymous = 0;
$author = $_G['username'] ; if($thread['displayorder'] == -4) {
$modnewreplies = 0;
}
$pinvisible = $modnewreplies ? -2 : ($thread['displayorder'] == -4 ? -3 : 0);
$postcomment = in_array(2, $_G['setting']['allowpostcomment']) && $_G['group']['allowcommentreply'] && !$pinvisible && !empty($_GET['reppid']) && ($nauthorid != $_G['uid'] || $_G['setting']['commentpostself']) ? messagecutstr($message, 200, ' ') : '';
$position= C::t('forum_post')->count_visiblepost_by_tid($_G['tid']) + 1;
$pid = insertpost(array(
'fid' => $_G['fid'],
'tid' => $_G['tid'],
'first' => '0',
'author' => $_G['username'],
'authorid' => $_G['uid'],
'subject' => $subject,
'dateline' => $publishdate,
'message' => $message,
'useip' => $this->randomip(),
'invisible' => $pinvisible,
'anonymous' => $isanonymous,
'usesig' => $usesig,
'htmlon' => $htmlon,
'bbcodeoff' => $bbcodeoff,
'smileyoff' => $smileyoff,
'parseurloff' => $parseurloff,
'attachment' => '0',
'status' => 0,
'position' => $position
));
if($_G['group']['allowat'] && $atlist) {
foreach($atlist as $atuid => $atusername) {
notification_add($atuid, 'at', 'at_message', array('from_id' => $_G['tid'], 'from_idtype' => 'thread', 'buyerid' => $_G['uid'], 'buyer' => $_G['username'], 'tid' => $_G['tid'], 'subject' => $thread['subject'], 'pid' => $pid, 'message' => messagecutstr($message, 150)));
}
set_atlist_cookie(array_keys($atlist));
}
$updatethreaddata = $heatthreadset ? $heatthreadset : array();
$postionid = C::t('forum_post')->fetch_maxposition_by_tid($thread['posttableid'], $_G['tid']);
$updatethreaddata[] = DB::field('maxposition', $postionid);
if(getstatus($thread['status'], 3) && $postionid) {
$rushstopfloor = $rushinfo['stopfloor'];
if($rushstopfloor > 0 && $thread['closed'] == 0 && $postionid >= $rushstopfloor) {
$updatethreaddata[] = 'closed=1';
}
}
useractionlog($_G['uid'], 'pid'); $nauthorid = 0; if($thread['authorid'] != $_G['uid'] && getstatus($thread['status'], 6) && empty($_GET['noticeauthor']) && !$isanonymous && !$modnewreplies) {
$thapost = C::t('forum_post')->fetch_threadpost_by_tid_invisible($_G['tid'], 0);
notification_add($thapost['authorid'], 'post', 'reppost_noticeauthor', array(
'tid' => $thread['tid'],
'subject' => $thread['subject'],
'fid' => $_G['fid'],
'pid' => $pid,
'from_id' => $thread['tid'],
'from_idtype' => 'post',
));
} if($thread['replycredit'] > 0 && !$modnewreplies && $thread['authorid'] != $_G['uid'] && $_G['uid']) { $replycredit_rule = C::t('forum_replycredit')->fetch($_G['tid']);
if(!empty($replycredit_rule['times'])) {
$have_replycredit = C::t('common_credit_log')->count_by_uid_operation_relatedid($_G['uid'], 'RCA', $_G['tid']);
if($replycredit_rule['membertimes'] - $have_replycredit > 0 && $thread['replycredit'] - $replycredit_rule['extcredits'] >= 0) {
$replycredit_rule['extcreditstype'] = $replycredit_rule['extcreditstype'] ? $replycredit_rule['extcreditstype'] : $_G['setting']['creditstransextra'][10];
if($replycredit_rule['random'] > 0) {
$rand = rand(1, 100);
$rand_replycredit = $rand <= $replycredit_rule['random'] ? true : false ;
} else {
$rand_replycredit = true;
}
if($rand_replycredit) {
updatemembercount($_G['uid'], array($replycredit_rule['extcreditstype'] => $replycredit_rule['extcredits']), 1, 'RCA', $_G[tid]);
C::t('forum_post')->update('tid:'.$_G['tid'], $pid, array('replycredit' => $replycredit_rule['extcredits']));
$updatethreaddata[] = DB::field('replycredit', $thread['replycredit'] - $replycredit_rule['extcredits']);
}
}
}
}
($_G['group']['allowpostattach'] || $_G['group']['allowpostimage']) && ($_GET['attachnew'] || $special == 2 && $_GET['tradeaid']) && updateattach($thread['displayorder'] == -4 || $modnewreplies, $_G['tid'], $pid, $_GET['attachnew']);
$_GET['attachnew'] = null;
$_G['forum']['threadcaches'] && deletethreadcaches($_G['tid']); include_once libfile('function/stat');
updatestat($thread['isgroup'] ? 'grouppost' : 'post'); $param = array('fid' => $_G['fid'], 'tid' => $_G['tid'], 'pid' => $pid, 'from' => $_GET['from'], 'sechash' => !empty($_GET['sechash']) ? $_GET['sechash'] : '');
if($feedid) {
$param['feedid'] = $feedid;
}
//dsetcookie('clearUserdata', 'forum'); if($modnewreplies) {
updatemoderate('pid', $pid);
unset($param['pid']);
if($updatethreaddata) {
C::t('forum_thread')->update($_G['tid'], $updatethreaddata, false, false, 0, true);
}
C::t('forum_forum')->update_forum_counter($_G['fid'], 0, 0, 1, 1);
manage_addnotify('verifypost');
} else {
$fieldarr = array(
'lastposter' => array($author),
'replies' => 1
);
if($thread['lastpost'] < $publishdate) {
$fieldarr['lastpost'] = array($publishdate);
}
$row = C::t('forum_threadaddviews')->fetch($_G['tid']);
if(!empty($row)) {
C::t('forum_threadaddviews')->update($_G['tid'], array('addviews' => 0));
$fieldarr['views'] = $row['addviews'];
}
$updatethreaddata = array_merge($updatethreaddata, C::t('forum_thread')->increase($_G['tid'], $fieldarr, false, 0, true));
if($thread['displayorder'] != -4) {
updatepostcredits('+', $_G['uid'], 'reply', $_G['fid']);
if($_G['forum']['status'] == 3) {
if($_G['forum']['closed'] > 1) {
C::t('forum_thread')->increase($_G['forum']['closed'], $fieldarr, true);
}
C::t('forum_groupuser')->update_counter_for_user($_G['uid'], $_G['fid'], 0, 1);
C::t('forum_forumfield')->update($_G['fid'], array('lastupdate' => $publishdate));
require_once libfile('function/grouplog');
updategroupcreditlog($_G['fid'], $_G['uid']);
} C::t('forum_forum')->update_forum_counter($_G['fid'], 0, 1, 1);
if($publishdate >= $_G['timestamp']){
$lastpost = "$thread[tid]\t$thread[subject]\t$publishdate\t$author";
C::t('forum_forum')->update($_G['fid'], array('lastpost' => $lastpost));
if($_G['forum']['type'] == 'sub') {
C::t('forum_forum')->update($_G['forum']['fup'], array('lastpost' => $lastpost));
}
}
}
if($updatethreaddata) {
C::t('forum_thread')->update($_G['tid'], $updatethreaddata, false, false, 0, true);
}
}
} public function reply()
{
global $_G,$config;
if(empty($this->replys)){
return false;
}else{
require_once libfile('class/credit');
require_once libfile('function/post');
foreach($this->replys as $k => $v){
if(!empty($config['数据库用户'])){
$max = C::t('common_member')->max_uid();
$randuid = rand(1, $max);
$username_info = DB::fetch_first("SELECT uid,username FROM `".DB::table('common_member')."` where uid >= {$randuid} order by uid ASC LIMIT 1" );
$username = $username_info['username'];
}else{
$username = $v['username'];
}
$this->logonUser($username);
empty($v['signature']) || C::t('common_member_field_forum')->update($_G['uid'], array('sightml' => $v['signature']));
$this->doreply($username , $v['message'] , $v['publishdate']);
//$_COOKIE = null;
}
}
} function check_username($username) {
$guestexp = '\xA1\xA1|\xAC\xA3|^Guest|^\xD3\xCE\xBF\xCD|\xB9\x43\xAB\xC8';
$len = $this->dstrlen($username);
if($len > 15 || $len < 3 || preg_match("/\s+|^c:\\con\\con|[%,\*\"\s\<\>\&]|$guestexp/is", $username)) {
return FALSE;
} else {
return TRUE;
}
}
function dstrlen($str) {
if(strtolower(JK_CHARSET) != 'utf-8') {
return strlen($str);
}
$count = 0;
for($i = 0; $i < strlen($str); $i++){
$value = ord($str[$i]);
if($value > 127) {
$count++;
if($value >= 192 && $value <= 223) $i++;
elseif($value >= 224 && $value <= 239) $i = $i + 2;
elseif($value >= 240 && $value <= 247) $i = $i + 3;
}
$count++;
}
return $count;
}
}
function check_allow_action($action = 'allowpost') {
global $_G;
if(isset($_G['forum'][$action]) && $_G['forum'][$action] == -1) {
showmessage('forum_access_disallow');
}
}
function recent_use_tag() {
$tagarray = $stringarray = array();
$string = '';
$i = 0;
$query = C::t('common_tagitem')->select(0, 0, 'tid', 'itemid', 'DESC', 10);
foreach($query as $result) {
if($i > 4) {
break;
}
if($tagarray[$result['tagid']] == '') {
$i++;
}
$tagarray[$result['tagid']] = 1;
}
if($tagarray) {
$query = C::t('common_tag')->fetch_all(array_keys($tagarray));
foreach($query as $result) {
$tagarray[$result[tagid]] = $result['tagname'];
}
}
return $tagarray;
}
discuz数据批量入库接口的更多相关文章
- C# SqlBulkCopy数据批量入库
准备条件:20万+数据 界面设计使用的WPF. 没有对比就没有伤害,以下是我两种方式导入数据案例. 运行 结果对比: 首先使用一般sql语句导入,因为时间原因,我就没有等待程序执行完,但是我记录了大约 ...
- discuz论坛门户资讯入库接口【原创】
最近想打造一个社区门户站点,所以写了这个入库接口,可以对接数据入库. <?php /* * Discuz x3.2 门户免登陆发布接口 * 2018-08-10 * Copyright 68xi ...
- java 操作Oracle 批量入库的问题
java 操作Oracle 批量入库的问题 先说下我运行的环境: Windows7 64位操作系统 (四核)Intel i5-2300 CPU @2.80GHz 内存4G 硬盘1T Jdk1.6+My ...
- Java批量入库Demo
java中往数据库批量插入数据Demo java代码: //入库数据是需要批量入库的List int len =入库数据.size(); //每次循环10条 int incremnet = 10; / ...
- maccms10二开批量入库和资源打包
批量入库 因为maccms自带的采集采集起来很慢,而且很多资源站的采集接口不能对内容排序,导致最旧的数据最后入库.用java写个采集程序,采集完入库的时候发现不能一次性入库多个数据,导致入库也很慢,所 ...
- 【hbase】——HBase 写优化之 BulkLoad 实现数据快速入库
1.为何要 BulkLoad 导入?传统的 HTableOutputFormat 写 HBase 有什么问题? 我们先看下 HBase 的写流程: 通常 MapReduce 在写HBase时使用的是 ...
- 高并发简单解决方案————redis队列缓存+mysql 批量入库(ThinkPhP)
问题分析 问题一:要求日志最好入库:但是,直接入库mysql确实扛不住,批量入库没有问题,done.[批量入库和直接入库性能差异] 问题二:批量入库就需要有高并发的消息队列,决定采用redis lis ...
- 转载:【高并发简单解决方案 | 靠谱崔小拽 】redis队列缓存 + mysql 批量入库 + php离线整合
需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化过程中,应用最新的框 ...
- C#中几种数据库的大数据批量插入
C#语言中对SqlServer.Oracle.SQLite和MySql中的数据批量插入是支持的,不过Oracle需要使用Orace.DataAccess驱动. IProvider里有一个用于实现批量插 ...
随机推荐
- 【视频开发】Gstreamer中一些gst-launch常用命令
GStreamer是著名的开源多媒体框架,功能强大,其命令行程序 gst-launch 可以实现很多常规测试.播放等,作为系统调试等是非常方便的. 1.摄像头测试 gst-launch v4l2src ...
- Apache Kafka® is a distributed streaming platform
Kafka Connect简介 我们知道过去对于Kafka的定义是分布式,分区化的,带备份机制的日志提交服务.也就是一个分布式的消息队列,这也是他最常见的用法.但是Kafka不止于此,打开最新的官网. ...
- spring较为常用注解
@Configuration 从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被Annotat ...
- Java集合框架(Java总结五)
”https://www.runoob.com/java/” 集合接口区别 List 接口存储一组不唯一,有序(插入顺序)的对象,允许有相同的元素. Set 接口存储一组唯一,无序的对象,不保存重复的 ...
- python 之 面向对象(元类、__call__、单例模式)
7.13 元类 元类:类的类就是元类,我们用class定义的类来产生我们自己的对象的,内置元类type是用来专门产生class定义的类 code=""" global x ...
- *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
Warning提示的原因是 一些未使用的函数被编译进入芯片,浪费了RAM/ROM. 解决的方法: 1.将不用的函数注释: 2.在未使用函数的首尾加条件编译 #ifdef 函数名 和 #endif ,不 ...
- Python爬虫之旅(一):小白也能懂的爬虫入门
Python爬虫之旅(一):小白也能懂的爬虫入门 爬虫是什么 爬虫就是按照一定的规则,去抓取网页中的信息.爬虫流程大致分为以下几步: 向目标网页发送请求 获取请求的响应内容 按照一定的规则解析返回 ...
- Android 系统架构 和 各个版本代号介绍
一.Android 系统架构: 1. linux内核层Android 基于Linux内核,为Android设备的各种硬件提供底层驱动 比如: 显示驱动.音频.照相机.蓝牙.Wi-Fi驱动,电源管理等 ...
- IDEA远程调试Ambari Server
1.配置端口 Ambari Server默认配置了服务端的debug参数,端口为5005.如果要修改端口,可以在/usr/sbin/ambari_server_main.py文件中对应地方修改,直接改 ...
- ConcurrentDictionary,ConcurrentStack,ConcurrentQueue
static void Main(string[] args) { var concurrentDictionary = new ConcurrentDictionary<int, string ...