<?php


$_GET['mod']='post'; //zzcityadd
$_GET['action']='reply'; //zzcityadd


define('APPTYPEID', 2);
define('CURSCRIPT', 'forum');


require './source/class/class_core.php';
require './source/function/function_forum.php';

$discuz = & discuz_core::instance();

$modarray = array('ajax','announcement','attachment','forumdisplay',
 'group','image','index','medal','misc','modcp','notice','post','redirect',
 'relatekw','relatethread','rss','topicadmin','trade','viewthread','tag'
);

$modcachelist = array(
 'index'  => array('announcements', 'onlinelist', 'forumlinks',
   'heats', 'historyposts', 'onlinerecord', 'userstats', 'diytemplatenameforum'),
 'forumdisplay' => array('smilies', 'announcements_forum', 'globalstick', 'forums',
   'onlinelist', 'forumstick', 'threadtable_info', 'threadtableids', 'stamps', 'diytemplatenameforum'),
 'viewthread' => array('smilies', 'smileytypes', 'forums', 'usergroups',
   'stamps', 'bbcodes', 'smilies', 'custominfo', 'groupicon', 'stamps',
   'threadtableids', 'threadtable_info', 'posttable_info', 'diytemplatenameforum'),
 'redirect' => array('threadtableids', 'threadtable_info', 'posttable_info'),
 'post'  => array('bbcodes_display', 'bbcodes', 'smileycodes', 'smilies', 'smileytypes',
   'domainwhitelist'),
 'space'  => array('fields_required', 'fields_optional', 'custominfo'),
 'group'  => array('grouptype', 'diytemplatenamegroup'),
);

//$mod = !in_array($discuz->var['mod'], $modarray) ? 'index' : $discuz->var['mod'];


define('CURMODULE', $mod);
$cachelist = array();
if(isset($modcachelist[CURMODULE])) {
 $cachelist = $modcachelist[CURMODULE];
}
if($discuz->var['mod'] == 'group') {
 $_G['basescript'] = 'group';
}

$discuz->cachelist = $cachelist;
$discuz->init();
//zzcity add
$member = array();
$member = DB::fetch_first("SELECT * FROM ".DB::table('common_member')." WHERE username='".$_POST['username']."'");
$cookietime=$_G['gp_cookietime'] ? 2592000 : 0;
 $_G['uid'] = $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;
 $_G['core']->session->isnew = 1;

 dsetcookie('auth', authcode("{$member['password']}\t{$member['uid']}", 'ENCODE'), $cookietime, 1, true);
 dsetcookie('loginuser');
 dsetcookie('activationauth');
 dsetcookie('pmnum');
$discuz->_init_user();
$_G['gp_htmlon'] = trim($_G['gp_htmlon'])=='' ? '1' : $_G['gp_htmlon'];

//zzcity
loadforum();

//zzcityadd
$_G['tid']=$_POST['tid'];
$_G['group']['allowhtml']=$_G['gp_htmlon'];
$_G['forum']['allowhtml']=$_G['gp_htmlon'];
$zzhour =!isset($_G['gp_zzhour']) ? '1' : intval($_G['gp_zzhour']); //zzcity add

$replyno =!isset($_G['gp_replyno']) ? '1' : intval($_G['gp_replyno']); //zzcity add

$zztimestamp =time()-$zzhour*60*60; //zzcity add

$zztimestamp =$_G['timestamp']= $zztimestamp+$replyno*5*60+rand(0,4)*60;  //zzcity add

//zzcity


set_rssauth();
//runhooks();
$navtitle = str_replace('{bbname}', $_G['setting']['bbname'], $_G['setting']['seotitle']['forum']);

//require DISCUZ_ROOT.'./source/module/forum/forum_'.$mod.'.php';替换开始
if(!defined('IN_DISCUZ')) {
 exit('Access Denied');
}
define('NOROBOT', TRUE);

cknewuser();

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');
 threadsort_checkoption($sortid);
 $forum_optionlist = getsortedoptionlist();
}

if($_G['forum']['status'] == 3) {
 require_once libfile('function/group');
 $status = groupperm($_G['forum'], $_G['uid'], 'post');
 if($status == -1) {
//  showmessage('该版块不是群组', 'index.php');
  exit('[err]该版块不是群组[/err]');
 } elseif($status == 1) {
//  showmessage('该群组已经关闭');
  exit('[err]该群组已经关闭[/err]');
 } elseif($status == 2) {
//  showmessage('您没有权限访问该群组', "forum.php?mod=group&fid=$_G[fid]");
  exit('[err]您没有权限访问该群组[/err]');
 } elseif($status == 3) {
//  showmessage('请等待群主审核。', "forum.php?mod=group&fid=$_G[fid]");
  exit('[err]请等待群主审核[/err]');
 } elseif($status == 4) {
  if($_G['uid']) {
   //showmessage('forum_group_not_groupmember', "", array('fid' => $_G['fid']), array('showmsg' => 1));
   exit('[err]非本群组成员不能发帖[/err]');
  } else {
   //showmessage('forum_group_not_groupmember_guest', "", array('fid' => $_G['fid']), array('showmsg' => 1, 'login' => 1));
   exit('[err]非本群组成员不能发帖[/err]');
  }
 } elseif($status == 5) {
  //showmessage('forum_group_moderated', "", array('fid' => $_G['fid']), array('showmsg' => 1));
  exit('[err]请等待群主审核[/err]');
  
 }
}
/*
if(empty($_G['gp_action'])) {
 showmessage('undefined_action', NULL);
} elseif($_G['gp_action'] == 'albumphoto') {
 require libfile('post/albumphoto', 'include');
} elseif(($_G['forum']['simple'] & 1) || $_G['forum']['redirect']) {
 showmessage('forum_disablepost');
}
*/
require_once libfile('function/discuzcode');
$space = array();
space_merge($space, 'field_home');

if($_G['gp_action'] == 'reply') {
 $addfeedcheck = !empty($space['privacy']['feed']['newreply']) ? 'checked="checked"': '';
} else {
 $addfeedcheck = !empty($space['privacy']['feed']['newthread']) ? 'checked="checked"': '';
}


$navigation = $navtitle = '';

if(!empty($_G['gp_cedit'])) {
 unset($_G['inajax'], $_G['gp_infloat'], $_G['gp_ajaxtarget'], $_G['gp_handlekey']);
}

if($_G['gp_action'] == 'edit' || $_G['gp_action'] == 'reply') {

// if($thread = DB::fetch_first("SELECT * FROM ".DB::table('forum_thread')." WHERE tid='$_G[tid]'".($_G['forum_auditstatuson'] ? '' : " AND (displayorder>='0' OR (displayorder IN ('-4', '-2') AND authorid='$_G[uid]'))"))) {
 
 if($thread = DB::fetch_first("SELECT * FROM ".DB::table('forum_thread')." WHERE tid='$_G[tid]'")) {

  if($thread['readperm'] && $thread['readperm'] > $_G['group']['readaccess'] && !$_G['forum']['ismoderator'] && $thread['authorid'] != $_G['uid']) {
//   showmessage('thread_nopermission', NULL, array('readperm' => $thread['readperm']), array('login' => 1));
   exit('[err]'.lang('message', 'thread_nopermission',array('readperm' => $thread['readperm']), array('login' => 1)).'[/err]');
  }

  $_G['fid'] = $thread['fid'];
  $special = $thread['special'];

 } else {
//  showmessage('thread_nonexistence');
  exit('[err]'.lang('message', 'thread_nonexistence').'[/err]');
 }

 if($_G['gp_action'] == 'reply' && ($thread['closed'] == 1) && !$_G['forum']['ismoderator']) {
//  showmessage('post_thread_closed');
  exit('[err]'.lang('message', 'post_thread_closed').'[/err]');
 }

}

if($_G['forum']['status'] == 3) {
 $returnurl = 'forum.php?mod=forumdisplay&fid='.$_G['fid'].(!empty($_G['gp_extra']) ? '&action=list&'.preg_replace("/^(&)*/", '', $_G['gp_extra']) : '').'#groupnav';
 $nav = get_groupnav($_G['forum']);
 $navigation = ' <em>&rsaquo;</em> <a href="group.php">'.$_G['setting']['navs'][3]['navname'].'</a> '.$nav['nav'];
} else {
 loadcache('forums');
 $returnurl = 'forum.php?mod=forumdisplay&fid='.$_G['fid'].(!empty($_G['gp_extra']) ? '&'.preg_replace("/^(&)*/", '', $_G['gp_extra']) : '');
 $navigation = ' <em>&rsaquo;</em> <a href="forum.php">'.$_G['setting']['navs'][2]['navname'].'</a>';

 if($_G['forum']['type'] == 'sub') {
  $fup = $_G['cache']['forums'][$_G['forum']['fup']]['fup'];
  $t_link = $_G['cache']['forums'][$fup]['type'] == 'group' ? 'forum.php?gid='.$fup : 'forum.php?mod=forumdisplay&fid='.$fup;
  $navigation .= ' <em>&rsaquo;</em> <a href="'.$t_link.'">'.strip_tags($_G['cache']['forums'][$fup]['name']).'</a>';
 }

 if($_G['forum']['fup']) {
  $fup = $_G['forum']['fup'];
  $t_link = $_G['cache']['forums'][$fup]['type'] == 'group' ? 'forum.php?gid='.$fup : 'forum.php?mod=forumdisplay&fid='.$fup;
  $navigation .= ' <em>&rsaquo;</em> <a href="'.$t_link.'">'.strip_tags($_G['cache']['forums'][$fup]['name']).'</a>';
 }

 $t_link = 'forum.php?mod=forumdisplay&fid='.$_G['fid'].($_G['gp_extra'] && !IS_ROBOT ? '&'.$_G['gp_extra'] : '');
 $navigation .= ' <em>&rsaquo;</em> <a href="'.$t_link.'">'.strip_tags($_G['forum']['name']).'</a>';

 unset($t_link, $t_name);
}

periodscheck('postbanperiods');

//if($_G['forum']['password'] && $_G['forum']['password'] != $_G['cookie']['fidpw'.$_G['fid']]) {
// showmessage('forum_passwd', "forum.php?mod=forumdisplay&fid=$_G[fid]");
//}

/*if(empty($_G['forum']['allowview'])) {
 if(!$_G['forum']['viewperm'] && !$_G['group']['readaccess']) {
  showmessage('group_nopermission', NULL, array('grouptitle' => $_G['group']['grouptitle']), array('login' => 1));
 } elseif($_G['forum']['viewperm'] && !forumperm($_G['forum']['viewperm'])) {
  showmessagenoperm('viewperm', $_G['fid']);
 }
} elseif($_G['forum']['allowview'] == -1) {
 showmessage('forum_access_view_disallow');
}
*/
formulaperm($_G['forum']['formulaperm']);

/*if(!$_G['adminid'] && $_G['setting']['newbiespan'] && (!getuserprofile('lastpost') || TIMESTAMP - getuserprofile('lastpost') < $_G['setting']['newbiespan'] * 60) && TIMESTAMP - $_G['member']['regdate'] < $_G['setting']['newbiespan'] * 60) {
 showmessage('post_newbie_span', '', array('newbiespan' => $_G['setting']['newbiespan']));
}
*/
$special = $special > 0 && $special < 7 || $special == 127 ? intval($special) : 0;

$_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'];
if($_G['group']['attachextensions']) {
 $imgexts = explode(',', str_replace(' ', '', $_G['group']['attachextensions']));
 $imgexts = array_intersect(array('jpg','jpeg','gif','png','bmp'), $imgexts);
 $imgexts = implode(', ', $imgexts);
} else {
 $imgexts = 'jpg, jpeg, gif, png, bmp';
}
$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 = !empty($_G['gp_extra']) ? rawurlencode($_G['gp_extra']) : '';
$notifycheck = empty($emailnotify) ? '' : 'checked="checked"';
$stickcheck = empty($sticktopic) ? '' : 'checked="checked"';
$digestcheck = empty($addtodigest) ? '' : 'checked="checked"';

$subject = isset($_G['gp_subject']) ? dhtmlspecialchars(censor(trim($_G['gp_subject']))) : '';
$subject = !empty($subject) ? str_replace("\t", ' ', $subject) : $subject;
$message = isset($_G['gp_message']) ? censor($_G['gp_message']) : '';

$polloptions = isset($polloptions) ? censor(trim($polloptions)) : '';
$readperm = isset($_G['gp_readperm']) ? intval($_G['gp_readperm']) : 0;
$price = isset($_G['gp_price']) ? intval($_G['gp_price']) : 0;

/*if(empty($bbcodeoff) && !$_G['group']['allowhidecode'] && !empty($message) && preg_match("/\[hide=?\d*\].+?\[\/hide\]/is", preg_replace("/(\[code\](.+?)\[\/code\])/is", ' ', $message))) {
 showmessage('post_hide_nopermission');
}
*/
if(periodscheck('postmodperiods', 0)) {
 $modnewthreads = $modnewreplies = 1;
} else {
 $censormod = censormod($subject."\t".$message);
 $modnewthreads = (!$_G['group']['allowdirectpost'] || $_G['group']['allowdirectpost'] == 1) && $_G['forum']['modnewposts'] || $censormod ? 1 : 0;
 $modnewreplies = (!$_G['group']['allowdirectpost'] || $_G['group']['allowdirectpost'] == 2) && $_G['forum']['modnewposts'] == 2 || $censormod ? 1 : 0;
}

require_once libfile('class/censor');
$censor = & discuz_censor::instance();
if(!empty($_G['gp_attachnew'])) {
 foreach($_G['gp_attachnew'] as $key => $attachnew) {
  censor($attachnew['description']);
  $censor->check($_G['gp_attachnew'][$key]['description']);
  if($censor->modmoderated()) {
   if(!$modnewthreads || !$modnewreplies) {
    $modnewthreads = $modnewreplies = 1;
   }
  }
 }
}

if($_G['forum']['status'] == 3) {
 $modnewthreads = !$_G['group']['allowgroupdirectpost'] || $_G['group']['allowgroupdirectpost'] == 1 || $censormod ? 1 : 0;
 $modnewreplies = !$_G['group']['allowgroupdirectpost'] || $_G['group']['allowgroupdirectpost'] == 2 || $censormod ? 1 : 0;
}
$_G['group']['allowposturl'] = $_G['forum']['status'] != 3 ? $_G['group']['allowposturl'] : $_G['group']['allowgroupposturl'];
if($_G['group']['allowposturl'] == 1 && $message) {
 if(censormod($message)) {
  $modnewthreads = $modnewreplies = 1;
 }
}

$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) && isset($_G['setting']['extcredits'][$_G['setting']['creditstrans']]);
$_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);
$usesigcheck = $_G['uid'] && $_G['group']['maxsigsize'] ? 'checked="checked"' : '';
$ordertypecheck = !empty($thread['tid']) && getstatus($thread['status'], 4) ? 'checked="checked"' : '';
$specialextra = !empty($_G['gp_specialextra']) ? $_G['gp_specialextra'] : '';
$_G['forum']['threadplugin'] = unserialize($_G['forum']['threadplugin']);

if($specialextra && $_G['group']['allowpost'] && $_G['setting']['threadplugins'] &&
 (!array_key_exists($specialextra, $_G['setting']['threadplugins']) ||
 !@in_array($specialextra, is_array($_G['forum']['threadplugin']) ? $_G['forum']['threadplugin'] : unserialize($_G['forum']['threadplugin'])) ||
 !@in_array($specialextra, $_G['group']['allowthreadplugin']))) {
 $specialextra = '';
}

$_G['group']['allowanonymous'] = $_G['forum']['allowanonymous'] || $_G['group']['allowanonymous'] ? 1 : 0;

if($_G['gp_action'] == 'newthread' && $_G['forum']['allowspecialonly'] && !$special) {
 if($_G['group']['allowpostpoll']) {
  $special = 1;
 } elseif($_G['group']['allowposttrade']) {
  $special = 2;
 } elseif($_G['group']['allowpostreward']) {
  $special = 3;
 } elseif($_G['group']['allowpostactivity']) {
  $special = 4;
 } elseif($_G['group']['allowpostdebate']) {
  $special = 5;
 } elseif($_G['group']['allowpost'] && $_G['setting']['threadplugins'] && $_G['group']['allowthreadplugin']) {
  $threadpluginary = array_intersect($_G['forum']['threadplugin'], $_G['group']['allowthreadplugin']);
  $specialextra = $threadpluginary[0] ? $threadpluginary[0] : '';
 }

 if(!$special && !$specialextra) {
  //showmessage('group_nopermission', NULL, array('grouptitle' => $_G['group']['grouptitle']), array('login' => 1));
    exit('[err]您所在的用户组无法进行此操作[/err]');
 }
}

if(!$sortid && !$specialextra) {
 $postspecialcheck[$special] = ' class="a"';
}


$editorid = 'e';
$_G['setting']['editoroptions'] = str_pad(decbin($_G['setting']['editoroptions']), 2, 0, STR_PAD_LEFT);
$editormode = $_G['setting']['editoroptions']{0};
$allowswitcheditor = $_G['setting']['editoroptions']{1};
$editor = array(
 'editormode' => $editormode,
 'allowswitcheditor' => $allowswitcheditor,
 'allowhtml' => $_G['forum']['allowhtml'],
 'allowsmilies' => $_G['forum']['allowsmilies'],
 'allowbbcode' => $_G['forum']['allowbbcode'],
 'allowimgcode' => $_G['forum']['allowimgcode'],
 'allowresize' => 1,
 'allowchecklength' => 1,
 'allowtopicreset' => 1,
 'textarea' => 'message',
 'simplemode' => !isset($_G['cookie']['editormode_'.$editorid]) ? !$_G['setting']['editoroptions']{2} : $_G['cookie']['editormode_'.$editorid],
);
if($specialextra) {
 $special = 127;
}

if($_G['gp_action'] == 'newthread') {
 $policykey = 'post';
} elseif($_G['gp_action'] == 'reply') {
 $policykey = 'reply';
} else {
 $policykey = '';
}
if($policykey) {
 $postcredits = $_G['forum'][$policykey.'credits'] ? $_G['forum'][$policykey.'credits'] : $_G['setting']['creditspolicy'][$policykey];
}

$albumlist = array();
if($_G['setting']['homestatus'] && $_G['group']['allowupload'] && $_G['uid']) {
 $query = DB::query("SELECT albumid, albumname, picnum FROM ".DB::table('home_album')." WHERE uid='$_G[uid]' ORDER BY updatetime DESC");
 while($value = DB::fetch($query)) {
  if($value['picnum']) {
   $albumlist[] = $value;
  }
 }
}

$posturl = "action=$_G[gp_action]&fid=$_G[fid]".
 (!empty($_G['tid']) ? "&tid=$_G[tid]" : '').
 (!empty($pid) ? "&pid=$pid" : '').
 (!empty($special) ? "&special=$special" : '').
 (!empty($sortid) ? "&sortid=$sortid" : '').
 (!empty($typeid) ? "&typeid=$typeid" : '').
 (!empty($_G['gp_firstpid']) ? "&firstpid=$firstpid" : '').
 (!empty($_G['gp_addtrade']) ? "&addtrade=$addtrade" : '');

if($_G['gp_action'] == 'reply') {
 check_allow_action('allowreply');
} else {
 check_allow_action('allowpost');
}

if($special == 4) {
 $_G['setting']['activityfield'] = $_G['setting']['activityfield'] ? unserialize($_G['setting']['activityfield']) : array();
}
$navtitle = lang('core', 'title_'.$_G['gp_action'].'_post');
/*if($_G['gp_action'] == 'newthread') {
 loadcache('groupreadaccess');
 $navtitle .= ' - '.$_G['forum']['name'];
 require_once libfile('post/newthread', 'include');
} elseif($_G['gp_action'] == 'reply') {
 $navtitle .= ' - '.$thread['subject'].' - '.$_G['forum']['name'];
 require_once libfile('post/newreply', 'include');
} elseif($_G['gp_action'] == 'edit') {
 loadcache('groupreadaccess');
 $navtitle .= ' - '.$thread['subject'].' - '.$_G['forum']['name'];
 require_once libfile('post/editpost', 'include');
} elseif($_G['gp_action'] == 'newtrade') {
 $navtitle .= ' - '.$_G['forum']['name'];
 require_once libfile('post/newtrade', 'include');
}
*/

//require_once libfile('post/newreply', 'include');替换开始
//if(!defined('IN_DISCUZ')) {
// exit('Access Denied');
//}

require_once libfile('function/forumlist');

$isfirstpost = 0;
$showthreadsorts = 0;
$quotemessage = '';

/*if($special == 5) {
 $debate = array_merge($thread, DB::fetch_first("SELECT * FROM ".DB::table('forum_debate')." WHERE tid='$_G[tid]'"));
 $standquery = DB::query("SELECT stand FROM ".DB::table('forum_debatepost')." WHERE tid='$_G[tid]' AND uid='$_G[uid]' AND stand>'0' ORDER BY dateline LIMIT 1");
 $firststand = DB::result_first("SELECT stand FROM ".DB::table('forum_debatepost')." WHERE tid='$_G[tid]' AND uid='$_G[uid]' AND stand>'0' ORDER BY dateline LIMIT 1");
 $stand = $firststand ? $firststand : intval($_G['gp_stand']);

 if($debate['endtime'] && $debate['endtime'] < TIMESTAMP) {
  showmessage('debate_end');
 }
}
*/
/*if(!$_G['uid'] && !((!$_G['forum']['replyperm'] && $_G['group']['allowreply']) || ($_G['forum']['replyperm'] && forumperm($_G['forum']['replyperm'])))) {
 showmessage('replyperm_login_nopermission', NULL, array(), array('login' => 1));
} elseif(empty($_G['forum']['allowreply'])) {
 if(!$_G['forum']['replyperm'] && !$_G['group']['allowreply']) {
  showmessage('replyperm_none_nopermission', NULL, array(), array('login' => 1));
 } elseif($_G['forum']['replyperm'] && !forumperm($_G['forum']['replyperm'])) {
  showmessagenoperm('replyperm', $_G['forum']['fid']);
 }
} elseif($_G['forum']['allowreply'] == -1) {
 showmessage('post_forum_newreply_nopermission', NULL);
}

if(!$_G['uid'] && ($_G['setting']['need_avatar'] || $_G['setting']['need_email'] || $_G['setting']['need_friendnum'])) {
 showmessage('replyperm_login_nopermission', NULL, array(), array('login' => 1));
}
*/
if(empty($thread)) {
// showmessage('thread_nonexistence');
 exit('[err]'.lang('message', 'thread_nonexistence').'[/err]');
} elseif($thread['price'] > 0 && $thread['special'] == 0 && !$_G['uid']) {
// showmessage('group_nopermission', NULL, array('grouptitle' => $_G['group']['grouptitle']), array('login' => 1));
 exit('[err]'.lang('message', 'group_nopermission',array('grouptitle' => $_G['group']['grouptitle']), array('login' => 1)).'[/err]');
}

//checklowerlimit('reply', 0, 1, $_G['forum']['fid']);

if($_G['setting']['commentnumber'] && !empty($_G['gp_comment'])) {
 $posttable = getposttablebytid($_G['tid']);
 if(!submitcheck('commentsubmit', 0, $seccodecheck, $secqaacheck)) {
//  showmessage('undefined_action', NULL);
  exit('[err]'.lang('message', 'undefined_action').'[/err]');
 }
 $post = DB::fetch_first('SELECT * FROM '.DB::table($posttable)." WHERE pid='$_G[gp_pid]'");
 if(!$post) {
  //showmessage('post_nonexistence', NULL);
  exit('[err]'.lang('message', 'post_nonexistence').'[/err]');
 }
/* if($thread['closed'] && !$_G['forum']['ismoderator'] && !$thread['isgroup']) {
  showmessage('post_thread_closed');
 } elseif(!$thread['isgroup'] && $post_autoclose = checkautoclose($thread)) {
  showmessage($post_autoclose, '', array('autoclose' => $_G['forum']['autoclose']));
 } elseif(checkflood()) {
  showmessage('post_flood_ctrl', '', array('floodctrl' => $_G['setting']['floodctrl']));
 } elseif(checkmaxpostsperhour()) {
  showmessage('post_flood_ctrl_posts_per_hour', '', array('posts_per_hour' => $_G['group']['maxpostsperhour']));
 }
*/ $commentscore = '';
 if(!empty($_G['gp_commentitem']) && !empty($_G['uid']) && $post['authorid'] != $_G['uid']) {
  foreach($_G['gp_commentitem'] as $itemk => $itemv) {
   if($itemv !== '') {
    $commentscore .= strip_tags(trim($itemk)).': <i>'.intval($itemv).'</i> ';
   }
  }
 }
 $comment = cutstr(($commentscore ? $commentscore.'<br />' : '').censor(trim(dhtmlspecialchars($_G['gp_message'])), '***'), 200, ' ');
 if(!$comment) {
//  showmessage('post_sm_isnull');
  exit('[err]'.lang('message', 'post_sm_isnull').'[/err]');
 }
 DB::insert('forum_postcomment', array(
  'tid' => $post['tid'],
  'pid' => $post['pid'],
  'author' => $_G['username'],
  'authorid' => $_G['uid'],
  'dateline' => $zztimestamp,
  'comment' => $comment,
  'score' => $commentscore ? 1 : 0,
  'useip' => $_G['clientip'],
 ));
 DB::update($posttable, array('comment' => 1), "pid='$_G[gp_pid]'");
 !empty($_G['uid']) && updatepostcredits('+', $_G['uid'], 'reply', $_G['fid']);
 if(!empty($_G['uid']) && $_G['uid'] != $post['authorid']) {
  notification_add($post['authorid'], 'pcomment', 'comment_add', array(
   'tid' => $_G['tid'],
   'pid' => $_G['gp_pid'],
   'subject' => $thread['subject'],
   'commentmsg' => cutstr(str_replace(array('[b]', '[/b]', '[/color]'), '', preg_replace("/\[color=([#\w]+?)\]/i", "", stripslashes($comment))), 200)
  ));
 }
 if($_G['setting']['heatthread']['type'] == 2) {
  update_threadpartake($post['tid']);
 }
 $pcid = DB::result_first("SELECT id FROM ".DB::table('forum_postcomment')." WHERE pid='$_G[gp_pid]' AND authorid='-1'");
 if(!empty($_G['uid']) && $_G['gp_commentitem']) {
  $query = DB::query('SELECT comment FROM '.DB::table('forum_postcomment')." WHERE pid='$_G[gp_pid]' AND score='1'");
  $totalcomment = array();
  while($comment = DB::fetch($query)) {
   $comment['comment'] = addslashes($comment['comment']);
   if(strexists($comment['comment'], '<br />')) {
    if(preg_match_all("/([^:]+?):\s<i>(\d+)<\/i>/", $comment['comment'], $a)) {
     foreach($a[1] as $k => $itemk) {
      $totalcomment[trim($itemk)][] = $a[2][$k];
     }
    }
   }
  }
  $totalv = '';
  foreach($totalcomment as $itemk => $itemv) {
   $totalv .= strip_tags(trim($itemk)).': <i>'.(floatval(sprintf('%1.1f', array_sum($itemv) / count($itemv)))).'</i> ';
  }

  if($pcid) {
   DB::update('forum_postcomment', array('comment' => $totalv, 'dateline' => $zztimestamp + 1), "id='$pcid'");
  } else {
   DB::insert('forum_postcomment', array(
    'tid' => $post['tid'],
    'pid' => $post['pid'],
    'author' => '',
    'authorid' => '-1',
    'dateline' => $zztimestamp + 1,
    'comment' => $totalv
   ));
  }
 }
 DB::update('forum_postcomment', array('dateline' => $zztimestamp + 1), "id='$pcid'");
 //showmessage('comment_add_succeed', "forum.php?mod=viewthread&tid=$post[tid]&pid=$post[pid]&page=$_G[gp_page]&extra=$extra#pid$post[pid]", array('tid' => $post['tid'], 'pid' => $post['pid']));
 exit('[err]'.lang('message', 'comment_add_succeed').'[/err]');
}

if($special == 127) {
 $posttable = getposttablebytid($_G['tid']);
 $postinfo = DB::fetch_first("SELECT message FROM ".DB::table($posttable)." WHERE tid='$_G[tid]' AND first='1'");
 $sppos = strrpos($postinfo['message'], chr(0).chr(0).chr(0));
 $specialextra = substr($postinfo['message'], $sppos + 3);
}

/*if(!submitcheck('replysubmit', 0, $seccodecheck, $secqaacheck)) {

 if($thread['special'] == 2 && ((!isset($_G['gp_addtrade']) || $thread['authorid'] != $_G['uid']) && !$tradenum = DB::result_first("SELECT count(*) FROM ".DB::table('forum_trade')." WHERE tid='$_G[tid]'"))) {
  showmessage('trade_newreply_nopermission', NULL);
 }

 $language = lang('forum/misc');
 $noticeauthor = $noticetrimstr = '';
 if(isset($_G['gp_repquote']) && $_G['gp_repquote'] = intval($_G['gp_repquote'])) {
  $posttable = getposttablebytid($_G['tid']);
  $thaquote = DB::fetch_first("SELECT tid, fid, author, authorid, first, message, useip, dateline, anonymous, status FROM ".DB::table($posttable)." WHERE pid='$_G[gp_repquote]' AND (invisible='0' OR (authorid='$_G[uid]' AND invisible='-2'))");
  if($thaquote['tid'] != $_G['tid']) {
   //showmessage('reply_quotepost_error', NULL);
   exit('[err]'.lang('message', 'reply_quotepost_error').'[/err]');
  }

  if(getstatus($thread['status'], 2) && $thaquote['authorid'] != $_G['uid'] && $_G['uid'] != $thread['authorid'] && $thaquote['first'] != 1 && !$_G['forum']['ismoderator']) {
   //showmessage('reply_quotepost_error', NULL);
   exit('[err]'.lang('message', 'reply_quotepost_error').'[/err]');
  }

  if(!($thread['price'] && !$thread['special'] && $thaquote['first'])) {
   $quotefid = $thaquote['fid'];
   $message = $thaquote['message'];

   if($_G['setting']['bannedmessages'] && $thaquote['authorid']) {
    $author = DB::fetch_first("SELECT groupid FROM ".DB::table('common_member')." WHERE uid='$thaquote[authorid]'");
    if(!$author['groupid'] || $author['groupid'] == 4 || $author['groupid'] == 5) {
     $message = $language['post_banned'];
    } elseif($thaquote['status'] & 1) {
     $message = $language['post_single_banned'];
    }
   }

   $time = dgmdate($thaquote['dateline']);
   $message = messagecutstr($message, 100);
   $message = implode("\n", array_slice(explode("\n", $message), 0, 3));

   $thaquote['useip'] = substr($thaquote['useip'], 0, strrpos($thaquote['useip'], '.')).'.x';
   if($thaquote['author'] && $thaquote['anonymous']) {
    $thaquote['author'] = lang('forum/misc', 'anonymoususer');
   } elseif(!$thaquote['author']) {
    $thaquote['author'] = lang('forum/misc', 'guestuser').' '.$thaquote['useip'];
   } else {
    $thaquote['author'] = $thaquote['author'];
   }

   $post_reply_quote = lang('forum/misc', 'post_reply_quote', array('author' => $thaquote['author'], 'time' => $time));
   $noticeauthormsg = htmlspecialchars($message);
   if(!defined('IN_MOBILE')) {
    $message = "[quote][size=2][color=#999999]{$post_reply_quote}[/color] [url=forum.php?mod=redirect&goto=findpost&pid=$_G[gp_repquote]&ptid={$_G['tid']}][img]static/image/common/back.gif[/img][/url][/size]\n{$message}[/quote]";
   } else {
    $message = "[quote][color=#999999]{$post_reply_quote}[/color]\n[color=#999999]{$message}[/color][/quote]";
   }
   $quotemessage = discuzcode($message, 0, 0);
   $noticeauthor = htmlspecialchars(authcode('q|'.$thaquote['authorid'], 'ENCODE'));
   $noticetrimstr = htmlspecialchars($message);
   $message = '';
  }
  $reppid = $_G['gp_repquote'];

 } elseif(isset($_G['gp_reppost']) && $_G['gp_reppost'] = intval($_G['gp_reppost'])) {
  $posttable = getposttablebytid($_G['tid']);
  $thapost = DB::fetch_first("SELECT tid, author, authorid, useip, dateline, anonymous, status, message FROM ".DB::table($posttable)." WHERE pid='$_G[gp_reppost]' AND (invisible='0' OR (authorid='$_G[uid]' AND invisible='-2'))");

  if($thapost['tid'] != $_G['tid']) {
   showmessage('targetpost_donotbelongto_thisthread', NULL);
  }

  $thapost['useip'] = substr($thapost['useip'], 0, strrpos($thapost['useip'], '.')).'.x';
  if($thapost['author'] && $thapost['anonymous']) {
   $thapost['author'] = '[color=Olive]'.lang('forum/misc', 'anonymoususer').'[/color]';
  } elseif(!$thapost['author']) {
   $thapost['author'] = '[color=Olive]'.lang('forum/misc', 'guestuser').'[/color] '.$thapost['useip'];
  } else {
   $thapost['author'] = '[color=Olive]'.$thapost['author'].'[/color]';
  }
  $posttable = getposttablebytid($thapost['tid']);
  $quotemessage = discuzcode($message, 0, 0);
  $noticeauthormsg = htmlspecialchars(messagecutstr($thapost['message'], 100));
  $noticeauthor = htmlspecialchars(authcode('r|'.$thapost['authorid'], 'ENCODE'));
  $noticetrimstr = htmlspecialchars($message);
  $message = '';
  $reppid = $_G['gp_reppost'];
 }

 if(isset($_G['gp_addtrade']) && $thread['special'] == 2 && $_G['group']['allowposttrade'] && $thread['authorid'] == $_G['uid']) {
  $expiration_7days = date('Y-m-d', TIMESTAMP + 86400 * 7);
  $expiration_14days = date('Y-m-d', TIMESTAMP + 86400 * 14);
  $trade['expiration'] = $expiration_month = date('Y-m-d', mktime(0, 0, 0, date('m')+1, date('d'), date('Y')));
  $expiration_3months = date('Y-m-d', mktime(0, 0, 0, date('m')+3, date('d'), date('Y')));
  $expiration_halfyear = date('Y-m-d', mktime(0, 0, 0, date('m')+6, date('d'), date('Y')));
  $expiration_year = date('Y-m-d', mktime(0, 0, 0, date('m'), date('d'), date('Y')+1));
 }

 if($thread['replies'] <= $_G['ppp']) {
  $postlist = array();
  $posttable = getposttablebytid($_G['tid']);
  $query = DB::query("SELECT p.* ".($_G['setting']['bannedmessages'] ? ', m.groupid ' : '').
   "FROM ".DB::table($posttable)." p ".($_G['setting']['bannedmessages'] ? "LEFT JOIN ".DB::table('common_member')." m ON p.authorid=m.uid " : '').
   "WHERE p.tid='$_G[tid]' AND p.invisible='0' ".($thread['price'] > 0 && $thread['special'] == 0 ? 'AND p.first = 0' : '')." ORDER BY p.dateline DESC");
  while($post = DB::fetch($query)) {

   $post['dateline'] = dgmdate($post['dateline'], 'u');

   if($_G['setting']['bannedmessages'] && ($post['authorid'] && (!$post['groupid'] || $post['groupid'] == 4 || $post['groupid'] == 5))) {
    $post['message'] = $language['post_banned'];
   } elseif($post['status'] & 1) {
    $post['message'] = $language['post_single_banned'];
   } else {
    $post['message'] = preg_replace("/\[hide=?\d*\](.*?)\[\/hide\]/is", "[b]$language[post_hidden][/b]", $post['message']);
    $post['message'] = discuzcode($post['message'], $post['smileyoff'], $post['bbcodeoff'], $post['htmlon'] & 1, $_G['forum']['allowsmilies'], $_G['forum']['allowbbcode'], $_G['forum']['allowimgcode'], $_G['forum']['allowhtml'], $_G['forum']['jammer']);
   }

   $postlist[] = $post;
  }
 }

 if($_G['group']['allowpostattach'] || $_G['group']['allowpostimage']) {
  $attachlist = getattach(0);
  $attachs = $attachlist['attachs'];
  $imgattachs = $attachlist['imgattachs'];
  unset($attachlist);
 }

 getgpc('infloat') ? include template('forum/post_infloat') : include template('forum/post');

} else {
*/
 if(trim($subject) == '' && trim($message) == '' && $thread['special'] != 2) {
//  showmessage('post_sm_isnull');
  exit('[err]'.lang('message', 'post_sm_isnull').'[/err]');
// } elseif($thread['closed'] && !$_G['forum']['ismoderator'] && !$thread['isgroup']) {
//  showmessage('post_thread_closed');
// } elseif(!$thread['isgroup'] && $post_autoclose = checkautoclose($thread)) {
//  showmessage($post_autoclose, '', array('autoclose' => $_G['forum']['autoclose']));
 } elseif($post_invalid = checkpost($subject, $message, $special == 2 && $_G['group']['allowposttrade'])) {
//  showmessage($post_invalid, '', array('minpostsize' => $_G['setting']['minpostsize'], 'maxpostsize' => $_G['setting']['maxpostsize']));
  exit('[err]'.lang('message', $post_invalid,array('minpostsize' => $_G['setting']['minpostsize'], 'maxpostsize' => $_G['setting']['maxpostsize'])).'[/err]');
// } elseif(checkflood()) {
//  showmessage('post_flood_ctrl', '', array('floodctrl' => $_G['setting']['floodctrl']));
// } elseif(checkmaxpostsperhour()) {
//  showmessage('post_flood_ctrl_posts_per_hour', '', array('posts_per_hour' => $_G['group']['maxpostsperhour']));
 }
/* if(!empty($_G['gp_trade']) && $thread['special'] == 2 && $_G['group']['allowposttrade']) {

  $item_price = floatval($_G['gp_item_price']);
  $item_credit = intval($_G['gp_item_credit']);
  if(!trim($_G['gp_item_name'])) {
   showmessage('trade_please_name');
  } elseif($_G['group']['maxtradeprice'] && $item_price > 0 && ($_G['group']['mintradeprice'] > $item_price || $_G['group']['maxtradeprice'] < $item_price)) {
   showmessage('trade_price_between', '', array('mintradeprice' => $_G['group']['mintradeprice'], 'maxtradeprice' => $_G['group']['maxtradeprice']));
  } elseif($_G['group']['maxtradeprice'] && $item_credit > 0 && ($_G['group']['mintradeprice'] > $item_credit || $_G['group']['maxtradeprice'] < $item_credit)) {
   showmessage('trade_credit_between', '', array('mintradeprice' => $_G['group']['mintradeprice'], 'maxtradeprice' => $_G['group']['maxtradeprice']));
  } elseif(!$_G['group']['maxtradeprice'] && $item_price > 0 && $_G['group']['mintradeprice'] > $item_price) {
   showmessage('trade_price_more_than', '', array('mintradeprice' => $_G['group']['mintradeprice']));
  } elseif(!$_G['group']['maxtradeprice'] && $item_credit > 0 && $_G['group']['mintradeprice'] > $item_credit) {
   showmessage('trade_credit_more_than', '', array('mintradeprice' => $_G['group']['mintradeprice']));
  } elseif($item_price <= 0 && $item_credit <= 0) {
   showmessage('trade_pricecredit_need');
  } elseif($_G['gp_item_number'] < 1) {
   showmessage('tread_please_number');
  }

 }
*/
 $attentionon = empty($_G['gp_attention_add']) ? 0 : 1;
 $attentionoff = empty($attention_remove) ? 0 : 1;

 if($thread['lastposter'] != $_G['member']['username'] && $_G['uid']) {
  if($_G['setting']['heatthread']['type'] == 1 && $_G['setting']['heatthread']['reply']) {
   $posttable = getposttablebytid($_G['tid']);
   $userreplies = DB::result_first("SELECT COUNT(*) FROM ".DB::table($posttable)." WHERE tid='$_G[tid]' AND first='0' AND authorid='$_G[uid]'");
   $thread['heats'] += round($_G['setting']['heatthread']['reply'] * pow(0.8, $userreplies));
   DB::query("UPDATE ".DB::table('forum_thread')." SET heats='$thread[heats]' WHERE tid='$_G[tid]'", 'UNBUFFERED');
  } elseif($_G['setting']['heatthread']['type'] == 2) {
   update_threadpartake($_G['tid']);
  }
 }

 $bbcodeoff = checkbbcodes($message, !empty($_G['gp_bbcodeoff']));
 $smileyoff = checksmilies($message, !empty($_G['gp_smileyoff']));
 $parseurloff = !empty($_G['gp_parseurloff']);
 $htmlon = $_G['group']['allowhtml'] && !empty($_G['gp_htmlon']) ? 1 : 0;

 $usesig = !empty($_G['gp_usesig']) ? 1 : ($_G['uid'] && $_G['group']['maxsigsize'] ? 1 : 0);

 $isanonymous = $_G['group']['allowanonymous'] && !empty($_G['gp_isanonymous'])? 1 : 0;
 $author = empty($isanonymous) ? $_G['username'] : '';

 $pinvisible = $modnewreplies ? -2 : ($thread['displayorder'] == -4 ? -3 : 0);
 
//zzcity add
   //
   function zzfileext($filename) {
    return strtolower(substr(strrchr($filename, '.'), 1, 10));
   }

 $attachlist=explode(',',$_POST['etattachs']);

 $curattachs='';
 $message=preg_replace("/\[img([^\]]*?)\]/i",'[img]',$message);
 foreach ($attachlist as $key => $value) {
 $value=trim($value);
 if(empty($value))continue;
    if (preg_match("/".preg_quote($value,"/")."/i",$message)){
     $message=preg_replace("/<a([^>]*?)".preg_quote($value,"/")."([^<]*?)<img([^>]*?)".preg_quote($value,"/")."([^<]*?)<\/(.*?)>/i",'[attachimg]'.$value.'[/attachimg]',$message);
     $message=preg_replace("/<img([^>]*?)".preg_quote($value,"/")."([^>]*?)>/i",'[attachimg]'.$value.'[/attachimg]',$message);
     $message=preg_replace("/\[img([^\]]*?)\]".preg_quote($value,"/")."\[\/img\]/i",'[attachimg]'.$value.'[/attachimg]',$message);

     $message=preg_replace("/<a([^>]*?)".preg_quote($value,"/")."([^>]*?)>([^<]+?)<\/a(.*?)>/i",'[attach]'.$value.'[/attach]',$message);
     $message=preg_replace("/\[url=".preg_quote($value,"/")."(.*?)\[\/url\]/i",'[attach]'.$value.'[/attach]',$message);
     if (in_array(zzfileext('ext'),array("wma","mp3","ra","rm"))) {
      $message=preg_replace("/<object((?!object)(\s|\S))*".preg_quote($value,"/")."((?!object)(\s|\S))*</(.*?)>/i",'[audio=1]'.$value.'[/audio]',$message);
      $message=preg_replace("/<embed((?!embed)(\s|\S))*".preg_quote($value,"/")."((?!embed)(\s|\S))*</(.*?)>/i",'[audio=1]'.$value.'[/audio]',$message);
     }elseif  (in_array(zzfileext('ext'), array('wmv','rmvb','avi','mov'))){
      $message=preg_replace("/<object((?!object)(\s|\S))*".preg_quote($value,"/")."((?!object)(\s|\S))*</(.*?)>/i",'[media='.zzfileext('ext').',500,375,1]'.$value.'[/media]',$message);
      $message=preg_replace("/<embed((?!embed)(\s|\S))*".preg_quote($value,"/")."((?!embed)(\s|\S))*</(.*?)>/i",'[media='.zzfileext('ext').',500,375,1]'.$value.'[/media]',$message);
     }elseif  (in_array(zzfileext('ext'), array('swf','flv'))){
      $message=preg_replace("/<object((?!object)(\s|\S))*".preg_quote($value,"/")."((?!object)(\s|\S))*</(.*?)>/i",'[flash]'.$value.'[/flash]',$message);
      $message=preg_replace("/<embed((?!embed)(\s|\S))*".preg_quote($value,"/")."((?!embed)(\s|\S))*</(.*?)>/i",'[flash]'.$value.'[/flash]',$message);}
   $curattachs.= empty($curattachs) ? $value:','.$value;
   
  }
 }

$message = preg_replace('/\[attachimg\](.+?)\[\/attachimg\]/is', '[attach]\1[/attach]', $message);
//zzcity close
 
 
// $message = preg_replace('/\[attachimg\](\d+)\[\/attachimg\]/is', '[attach]\1[/attach]', $message);
  $postcomment = in_array(2, $_G['setting']['allowpostcomment']) && $_G['group']['allowcommentreply'] && !$pinvisible && !empty($_G['gp_reppid']) && ($nauthorid != $_G['uid'] || $_G['setting']['commentpostself']) ? messagecutstr($message, 200, ' ') : '';

 if(!empty($_G['gp_noticetrimstr'])) {
  $message = $_G['gp_noticetrimstr']."\n\n".$message;
  $bbcodeoff = false;
 }

 
 $subject='';
 

 $pid = insertpost(array(
  'fid' => $_G['fid'],
  'tid' => $_G['tid'],
  'first' => '0',
  'author' => $_G['username'],
  'authorid' => $_G['uid'],
  'subject' => $subject,
  'dateline' => $zztimestamp,
  'message' => $message,
  'useip' => $_G['clientip'],
  'invisible' => $pinvisible,
  'anonymous' => $isanonymous,
  'usesig' => $usesig,
  'htmlon' => $htmlon,
  'bbcodeoff' => $bbcodeoff,
  'smileyoff' => $smileyoff,
  'parseurloff' => $parseurloff,
  'attachment' => '0',
  'status' => (defined('IN_MOBILE') ? 8 : 0),
 ));
 if($pid && getstatus($thread['status'], 1)) {
  $postionid = savepostposition($_G['tid'], $pid, true);
 }

//zzcity add attachment
 $ashowurl =  empty($_POST['ashowurl']) ? "/data/attachment/forum" : trim($_POST['ashowurl']);
 
 $ashowurl = substr($ashowurl,-1)=="/" ? $ashowurl: $ashowurl.'/';
 

 $curalist=explode(',',$curattachs);
 $attachnum =  empty($curattachs) ? 0 :count($curalist);

 if ($attachnum){

   $zzattachtype=1;
   //
   function zzis_image_ext($ext) {
    static $imgext  = array('jpg', 'jpeg', 'gif', 'png', 'bmp');
    return in_array($ext, $imgext) ? 1 : 0;
   }
   //
   function zzget_target_extension($ext) {
    static $safeext  = array('attach', 'jpg', 'jpeg', 'gif', 'png', 'swf', 'bmp', 'txt', 'zip', 'rar', 'mp3');
    return strtolower(!in_array(strtolower($ext), $safeext) ? 'attach' : $ext);
   }
   function zzforum_upload($filename) {
    global $_G,$zzattachtype;
 
    $zzuid = intval($_G['uid']);
//    $swfhash = md5(substr(md5($_G['config']['security']['authkey']), 8).$this->uid);
  
     $zzaid = 0;
//     $zzsimple = !empty($_G['gp_simple']) ? $_G['gp_simple'] : 0;
  
//     $_G['groupid'] = intval(DB::result_first("SELECT groupid FROM ".DB::table('common_member')." WHERE uid='".$this->uid."'"));
//     loadcache('usergroup_'.$_G['groupid']);
//     $_G['group'] = $_G['cache']['usergroup_'.$_G['groupid']];
  
     require_once libfile('class/upload');
  
//     $upload = new discuz_upload();
//     $upload->init($_FILES['Filedata'], 'forum');
//     $this->attach = &$upload->attach;

     $thistype='forum';
     $attach=array();
  
     $attach['name'] =  trim(substr(strrchr($filename,'/'),1));
     $attach['thumb'] = '';
     
     $attach['name'] =  dhtmlspecialchars($attach['name'], ENT_QUOTES);
     if(strlen($attach['name']) > 90) {
      $attach['name'] = cutstr($attach['name'], 90, '').'.'.$attach['ext'];
     }
     $attach['ext'] = zzfileext($attach['name']);
     $attach['isimage'] = zzis_image_ext($attach['ext']);
    
     $attach['extension'] = zzget_target_extension($attach['ext']);
     
//     $attach['attachdir'] = $this->get_target_dir($thistype, $extid);
//     $attach['attachment'] = $attach['attachdir'].$this->get_target_filename($this->type, $this->extid, $this->forcename).'.'.$attach['extension'];
     $attach['attachment'] = $filename;
     $attach['target'] = getglobal('setting/attachdir').'./'.$thistype.'/'.$attach['attachment'];
     $attach['size'] = intval(filesize($attach['target']));

  
//     if($upload->error()) {
//      $this->uploadmsg(2);
//     }
//  
//     $allowupload = !$_G['group']['maxattachnum'] || $_G['group']['maxattachnum'] && $_G['group']['maxattachnum'] > DB::result_first("SELECT count(*) FROM ".DB::table('forum_attachment')." WHERE uid='$_G[uid]' AND dateline>'$_G[timestamp]'-86400");
//     if(!$allowupload) {
//      $this->uploadmsg(9);
//     }
  
//     if($_G['group']['attachextensions'] && (!preg_match("/(^|\s|,)".preg_quote($upload->attach['ext'], '/')."($|\s|,)/i", $_G['group']['attachextensions']) || !$upload->attach['ext'])) {
//      $this->uploadmsg(1);
//     }
  
//     if(empty($upload->attach['size'])) {
//      $this->uploadmsg(2);
//     }
  
//     if($_G['group']['maxattachsize'] && $upload->attach['size'] > $_G['group']['maxattachsize']) {
//      $this->uploadmsg(3);
//     }
//  
//     if($type = DB::fetch_first("SELECT maxsize FROM ".DB::table('forum_attachtype')." WHERE extension='".addslashes($upload->attach['ext'])."'")) {
//      if($type['maxsize'] == 0) {
//       $this->uploadmsg(4);
//      } elseif($upload->attach['size'] > $type['maxsize']) {
//       $this->uploadmsg(5);
//      }
//     }
  
//     if($upload->attach['size'] && $_G['group']['maxsizeperday']) {
//      $todaysize = intval(DB::result_first("SELECT SUM(filesize) FROM ".DB::table('forum_attachment')." WHERE uid='$_G[uid]' AND dateline>'$_G[timestamp]'-86400"));
//      $todaysize += $upload->attach['size'];
//      if($todaysize >= $_G['group']['maxsizeperday']) {
//       $this->uploadmsg(6);
//      }
//     }
//     $upload->save();
//     if($upload->error() == -103) {
//      $this->uploadmsg(8);
//     } elseif($upload->error()) {
//      $this->uploadmsg(9);
//     }
  $thumb = $remote = $width = 0;
  if($attach['isimage']) {
   $zzattachtype=2;
   if($_G['setting']['thumbstatus']) {
    require_once libfile('class/image');
    $image = new image;
    //$thumb = $image->Thumb($upload->attach['target'], '', $_G['setting']['thumbwidth'], $_G['setting']['thumbheight'], $_G['setting']['thumbstatus'], $_G['setting']['thumbsource']) ? 1 : 0;
    $thumb = $image->Thumb($attach['target'], '', $_G['setting']['thumbwidth'], $_G['setting']['thumbheight'], $_G['setting']['thumbstatus'], $_G['setting']['thumbsource']) ? 1 : 0;
    $image->Watermark($attach['target']);
    $width = $image->imginfo['width'];
   }
   if($_G['setting']['thumbsource'] || !$_G['setting']['thumbstatus']) {
    list($width) = @getimagesize($attach['target']);
   }
   
  }
  
//     if(!$zzsimple) {
//      $attach['name'] = diconv($attach['name'], 'utf-8');
//     }
//     if($_G['gp_type'] != 'image' && $attach['isimage']) {
//      $attach['isimage'] = -1;
//     }
  $zzaid=getattachnewaid($zzuid);
  DB::query("INSERT INTO ".DB::table('forum_attachment_unused')." (aid, dateline, filename, filesize, attachment, isimage, uid, thumb, remote, width)
   VALUES ('$zzaid', '$_G[timestamp]', '".$attach['name']."', '".$attach['size']."', '".$attach['attachment']."', '".$attach['isimage']."', '".$zzuid."', '$thumb', '$remote', '$width')");
 
     return $zzaid;
//     $this->uploadmsg(0);
  
   }
  
 foreach ($curalist as $key => $value) {
  $oldvalue=$value;
  $value=str_replace($ashowurl,'',$value);
  
  $aid=zzforum_upload($value);
  $message=str_replace($oldvalue,$aid,$message);
  $aids[]=$aid;

  }
 
    DB::query('UPDATE '.DB::table('forum_thread').' SET attachment='.$zzattachtype.' WHERE tid = '.$_G['tid']);
    $posttable = getposttablebytid($_G['tid']);
  DB::query("UPDATE ".DB::table($posttable)." SET message='$message',attachment=$attachnum WHERE pid=$pid");
 foreach($aids as $key => $value){
  convertunusedattach($value,$_G['tid'],$pid); 
 }
}
//zzcity add attachment close


 $nauthorid = 0;
 if(!empty($_G['gp_noticeauthor']) && !$isanonymous && !$modnewreplies) {
  list($ac, $nauthorid) = explode('|', authcode($_G['gp_noticeauthor'], 'DECODE'));
  if($nauthorid != $_G['uid']) {
   if($ac == 'q') {
    notification_add($nauthorid, 'post', 'reppost_noticeauthor', array(
     'tid' => $thread['tid'],
     'subject' => $thread['subject'],
     'fid' => $_G['fid'],
     'pid' => $pid,
    ));
   } elseif($ac == 'r') {
    notification_add($nauthorid, 'post', 'reppost_noticeauthor', array(
     'tid' => $thread['tid'],
     'subject' => $thread['subject'],
     'fid' => $_G['fid'],
     'pid' => $pid,
     'from_id' => $thread['tid'],
     'from_idtype' => 'post',
    ));
   }
  }

  if($postcomment) {
   $rpid = intval($_G['gp_reppid']);
   if(!$posttable) {
    $posttable = getposttablebytid($thread['tid']);
   }
   if($rpost = DB::fetch_first("SELECT first FROM ".DB::table($posttable)." WHERE pid='$rpid'")) {
    if(!$rpost['first']) {
     DB::insert('forum_postcomment', array(
      'tid' => $thread['tid'],
      'pid' => $rpid,
      'rpid' => $pid,
      'author' => $_G['username'],
      'authorid' => $_G['uid'],
      'dateline' => TIMESTAMP,
      'comment' => $postcomment,
      'score' => 0,
      'useip' => $_G['clientip'],
     ));
     DB::update($posttable, array('comment' => 1), "pid='$rpid'");
    }
   }
   unset($postcomment);
  }
 }

 if($thread['authorid'] != $_G['uid'] && getstatus($thread['status'], 6) && empty($_G['gp_noticeauthor']) && !$isanonymous && !$modnewreplies) {
  $posttable = getposttablebytid($_G['tid']);
  $thapost = DB::fetch_first("SELECT tid, author, authorid, useip, dateline, anonymous, status, message FROM ".DB::table($posttable)." WHERE tid='$_G[tid]' AND first='1' AND invisible='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 && $thread['authorid'] != $_G['uid'] && $_G['uid']) {

  $replycredit_rule = DB::fetch_first("SELECT * FROM ".DB::table('forum_replycredit')." WHERE tid = '$_G[tid]' LIMIT 1");
  $have_replycredit = DB::result_first("SELECT COUNT(*) FROM ".DB::table('common_credit_log')." WHERE relatedid = '{$_G[tid]}' AND uid = '{$_G[uid]}' AND operation = 'RCA' LIMIT {$replycredit_rule['times']} ");
  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) {
    if(!$posttable) {
     $posttable = getposttablebytid($_G['tid']);
    }
    updatemembercount($_G['uid'], array($replycredit_rule['extcreditstype'] => $replycredit_rule['extcredits']), 1, 'RCA', $_G[tid]);
    DB::update($posttable, array('replycredit' => $replycredit_rule['extcredits']), array('pid' => $pid));
    DB::update("forum_thread", array('replycredit' => $thread['replycredit'] - $replycredit_rule['extcredits']), array('tid' => $_G[tid]));
   }
  }
 }

/* if($special == 5) {

  if(!DB::num_rows($standquery)) {
   if($stand == 1) {
    DB::query("UPDATE ".DB::table('forum_debate')." SET affirmdebaters=affirmdebaters+1 WHERE tid='$_G[tid]'");
   } elseif($stand == 2) {
    DB::query("UPDATE ".DB::table('forum_debate')." SET negadebaters=negadebaters+1 WHERE tid='$_G[tid]'");
   }
  } else {
   $stand = $firststand;
  }
  if($stand == 1) {
   DB::query("UPDATE ".DB::table('forum_debate')." SET affirmreplies=affirmreplies+1 WHERE tid='$_G[tid]'");
  } elseif($stand == 2) {
   DB::query("UPDATE ".DB::table('forum_debate')." SET negareplies=negareplies+1 WHERE tid='$_G[tid]'");
  }
  DB::query("INSERT INTO ".DB::table('forum_debatepost')." (tid, pid, uid, dateline, stand, voters, voterids) VALUES ('$_G[tid]', '$pid', '$_G[uid]', '$_G[timestamp]', '$stand', '0', '')");
 }
*/
 ($_G['group']['allowpostattach'] || $_G['group']['allowpostimage']) && ($_G['gp_attachnew'] || $special == 2 && $_G['gp_tradeaid']) && updateattach($thread['displayorder'] == -4 || $modnewreplies, $_G['tid'], $pid, $_G['gp_attachnew']);

 $replymessage = 'post_reply_succeed';

/* if($special == 2 && $_G['group']['allowposttrade'] && $thread['authorid'] == $_G['uid'] && !empty($_G['gp_trade']) && !empty($_G['gp_item_name'])) {

  require_once libfile('function/trade');
  trade_create(array(
   'tid' => $_G['tid'],
   'pid' => $pid,
   'aid' => $_G['gp_tradeaid'],
   'item_expiration' => $_G['gp_item_expiration'],
   'thread' => $thread,
   'discuz_uid' => $_G['uid'],
   'author' => $author,
   'seller' => empty($_G['gp_paymethod']) && $_G['gp_seller'] ? dhtmlspecialchars(trim($_G['gp_seller'])) : '',
   'item_name' => $_G['gp_item_name'],
   'item_price' => $_G['gp_item_price'],
   'item_number' => $_G['gp_item_number'],
   'item_quality' => $_G['gp_item_quality'],
   'item_locus' => $_G['gp_item_locus'],
   'transport' => $_G['gp_transport'],
   'postage_mail' => $_G['gp_postage_mail'],
   'postage_express' => $_G['gp_postage_express'],
   'postage_ems' => $_G['gp_postage_ems'],
   'item_type' => $_G['gp_item_type'],
   'item_costprice' => $_G['gp_item_costprice'],
   'item_credit' => $_G['gp_item_credit'],
   'item_costcredit' => $_G['gp_item_costcredit']
  ));

  $replymessage = 'trade_add_succeed';

  if(!empty($_G['gp_tradeaid'])) {
   convertunusedattach($_G['gp_tradeaid'], $_G['tid'], $pid);
  }

 }
*/
 if($specialextra) {

  @include_once DISCUZ_ROOT.'./source/plugin/'.$_G['setting']['threadplugins'][$specialextra]['module'].'.class.php';
  $classname = 'threadplugin_'.$specialextra;
  if(class_exists($classname) && method_exists($threadpluginclass = new $classname, 'newreply_submit_end')) {
   $threadpluginclass->newreply_submit_end($_G['fid'], $_G['tid']);
  }

 }

 $_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' => $_G['gp_from'], 'sechash' => !empty($_G['gp_sechash']) ? $_G['gp_sechash'] : '');
 dsetcookie('clearUserdata', 'forum');
 if($modnewreplies) {
  updatemoderate('pid', $pid);
  unset($param['pid']);
  DB::query("UPDATE ".DB::table('forum_forum')." SET todayposts=todayposts+1, modworks='1' WHERE fid='$_G[fid]'", 'UNBUFFERED');
//  $url = empty($_POST['portal_referer']) ? ("forum.php?mod=viewthread&tid={$thread[tid]}") :  $_POST['portal_referer'];
//  manage_addnotify('verifypost');
//  if(!isset($inspacecpshare)) {
//   showmessage('post_reply_mod_succeed', $url, $param);
//  }
 } else {

  $lastpostsql = $thread['lastpost'] < $_G['timestamp'] ? "lastpost='$_G[timestamp]'," : '';
  DB::query("UPDATE ".DB::table('forum_thread')." SET lastposter='$author', $lastpostsql replies=replies+1 WHERE tid='$_G[tid]'", 'UNBUFFERED');

  if($thread['displayorder'] != -4) {
   updatepostcredits('+', $_G['uid'], 'reply', $_G['fid']);
   if($_G['forum']['status'] == 3) {
    if($_G['forum']['closed'] > 1) {
     DB::query("UPDATE ".DB::table('forum_thread')." SET lastposter='$author', $lastpostsql replies=replies+1 WHERE tid='".$_G['forum']['closed']."'", 'UNBUFFERED');
    }
    DB::query("UPDATE ".DB::table('forum_groupuser')." SET replies=replies+1, lastupdate='".TIMESTAMP."' WHERE uid='$_G[uid]' AND fid='$_G[fid]'");
    updateactivity($_G['fid'], 0);
    require_once libfile('function/grouplog');
    updategroupcreditlog($_G['fid'], $_G['uid']);
   }

   $lastpost = "$thread[tid]\t".addslashes($thread['subject'])."\t$_G[timestamp]\t$author";
   DB::query("UPDATE ".DB::table('forum_forum')." SET lastpost='$lastpost', posts=posts+1, todayposts=todayposts+1 WHERE fid='$_G[fid]'", 'UNBUFFERED');
   if($_G['forum']['type'] == 'sub') {
    DB::query("UPDATE ".DB::table('forum_forum')." SET lastpost='$lastpost' WHERE fid='".$_G['forum']['fup']."'", 'UNBUFFERED');
   }
  }

  $feed = array();
  if(!isset($_G['gp_addfeed'])) {
   $space = array();
   space_merge($space, 'field_home');
   $_G['gp_addfeed'] = $space['privacy']['feed']['newreply'];
  }
  if(!empty($_G['gp_addfeed']) && $_G['forum']['allowfeed'] && !$isanonymous) {
   if($special == 2 && !empty($_G['gp_trade'])) {
    $feed['icon'] = 'goods';
    $feed['title_template'] = 'feed_thread_goods_title';
    if($_G['gp_item_price'] > 0) {
     if($_G['setting']['creditstransextra'][5] != -1 && $_G['gp_item_credit']) {
      $feed['body_template'] = 'feed_thread_goods_message_1';
     } else {
      $feed['body_template'] = 'feed_thread_goods_message_2';
     }
    } else {
     $feed['body_template'] = 'feed_thread_goods_message_3';
    }
    $feed['body_data'] = array(
     'itemname'=> "<a href=\"forum.php?mod=viewthread&do=tradeinfo&tid=$_G[tid]&pid=$pid\">$_G[gp_item_name]</a>",
     'itemprice'=> $_G['gp_item_price'],
     'itemcredit'=> $_G['gp_item_credit'],
     'creditunit'=> $_G['setting']['extcredits'][$_G['setting']['creditstransextra'][5]]['unit'].$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][5]]['title'],
    );
    if($_G['gp_tradeaid']) {
     $feed['images'] = array(getforumimg($_G['gp_tradeaid']));
     $feed['image_links'] = array("forum.php?mod=viewthread&do=tradeinfo&tid=$_G[tid]&pid=$pid");
    }
   } elseif($special == 3 && $thread['authorid'] != $_G['uid']) {
    $feed['icon'] = 'reward';
    $feed['title_template'] = 'feed_reply_reward_title';
    $feed['title_data'] = array(
     'subject' => "<a href=\"forum.php?mod=viewthread&tid=$_G[tid]\">$thread[subject]</a>",
     'author' => "<a href=\"home.php?mod=space&uid=$thread[authorid]\">$thread[author]</a>"
    );
   } elseif($special == 5 && $thread['authorid'] != $_G['uid']) {
    $feed['icon'] = 'debate';
    if($stand == 1) {
     $feed['title_template'] = 'feed_thread_debatevote_title_1';
    } elseif($stand == 2) {
     $feed['title_template'] = 'feed_thread_debatevote_title_2';
    } else {
     $feed['title_template'] = 'feed_thread_debatevote_title_3';
    }
    $feed['title_data'] = array(
     'subject' => "<a href=\"forum.php?mod=viewthread&tid=$_G[tid]\">$thread[subject]</a>",
     'author' => "<a href=\"home.php?mod=space&uid=$thread[authorid]\">$thread[author]</a>"
    );
   } elseif($thread['authorid'] != $_G['uid']) {
    $post_url = "forum.php?mod=redirect&goto=findpost&pid=$pid&ptid=$_G[tid]";

    $feed['icon'] = 'post';
    $feed['title_template'] = !empty($thread['author']) ? 'feed_reply_title' : 'feed_reply_title_anonymous';
    $feed['title_data'] = array(
     'subject' => "<a href=\"$post_url\">$thread[subject]</a>",
     'author' => "<a href=\"home.php?mod=space&uid=$thread[authorid]\">$thread[author]</a>"
    );
    if(!empty($_G['forum_attachexist'])) {
     $firstaid = DB::result_first("SELECT aid FROM ".DB::table(getattachtablebytid($_G['tid']))." WHERE pid='$pid' AND dateline>'0' AND isimage='1' ORDER BY dateline LIMIT 1");
     if($firstaid) {
      $feed['images'] = array(getforumimg($firstaid));
      $feed['image_links'] = array($post_url);
     }
    }
   }
   $feed['title_data']['hash_data'] = "tid{$_G[tid]}";
   $feed['id'] = $pid;
   $feed['idtype'] = 'pid';
   if($feed['icon']) {
    postfeed($feed);
   }
  }
  }

//  $page = getstatus($thread['status'], 4) ? 1 : @ceil(($thread['special'] ? $thread['replies'] + 1 : $thread['replies'] + 2) / $_G['ppp']);
/*
  if($special == 2 && !empty($_G['gp_continueadd'])) {
   dheader("location: forum.php?mod=post&action=reply&fid={$_G[forum][fid]}&firstpid=$pid&tid={$thread[tid]}&addtrade=yes");
  } else {
   $url = empty($_POST['portal_referer']) ? "forum.php?mod=viewthread&tid={$thread[tid]}&pid=$pid&page=$page&extra=$extra#pid$pid" : $_POST['portal_referer'];
  }
  if(!isset($inspacecpshare)) {
   showmessage($replymessage, $url, $param);
  }
*/  
exit('[ok]replyno='.$_G['gp_replyno']); //zzcityadd  


//require_once libfile('post/newreply', 'include');替换结束



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 = DB::query("SELECT tagid, tagname FROM ".DB::table('common_tagitem')." WHERE idtype='tid' ORDER BY itemid DESC LIMIT 10");
 while($result = DB::fetch($query)) {
  if($i > 4) {
   break;
  }
  if($tagarray[$result['tagid']] == '') {
   $i++;
  }
  $tagarray[$result['tagid']] = $result['tagname'];
 }
 return $tagarray;
}

//require DISCUZ_ROOT.'./source/module/forum/forum_'.$mod.'.php';替换结束

?>