626 lines
26 KiB
PHP
626 lines
26 KiB
PHP
<?php
|
|
|
|
/**
|
|
* [Discuz!] (C)2001-2099 Comsenz Inc.
|
|
* This is NOT a freeware, use is subject to license terms
|
|
*
|
|
* $Id: model_forum_post.php 34819 2014-08-11 06:46:20Z nemohou $
|
|
*/
|
|
|
|
if(!defined('IN_DISCUZ')) {
|
|
exit('Access Denied');
|
|
}
|
|
|
|
class model_forum_post extends discuz_model {
|
|
public $forum;
|
|
|
|
public $thread;
|
|
|
|
public $post;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public $pid = 0;
|
|
|
|
public $feed = array();
|
|
|
|
public function __construct($tid = null, $pid = null) {
|
|
parent::__construct();
|
|
require_once libfile('function/post');
|
|
require_once libfile('function/forumlist');
|
|
if($tid) {
|
|
include_once libfile('function/forum');
|
|
loadforum(null, $tid);
|
|
if($pid) {
|
|
$this->post = get_post_by_tid_pid($tid, $pid);
|
|
}
|
|
}
|
|
$this->forum = &$this->app->var['forum'];
|
|
$this->thread = &$this->app->var['thread'];
|
|
$this->group = &$this->app->var['group'];
|
|
}
|
|
|
|
protected function _init_parameters($parameters) {
|
|
$varname = array(
|
|
'member', 'group', 'forum', 'thread', 'extramessage', 'special',//'nauthorid' 'modnewreplies' 'tid'
|
|
'message','clientip', 'invisible', 'isanonymous', 'usesig',
|
|
'htmlon', 'bbcodeoff', 'smileyoff', 'parseurloff', 'pstatus',
|
|
'noticetrimstr', 'noticeauthor', 'from', 'sechash', 'geoloc',
|
|
|
|
'subject', 'special', 'sortid', 'typeid', 'isanonymous', 'cronpublish', 'cronpublishdate', 'save',
|
|
'readperm', 'price', 'ordertype', 'hiddenreplies', 'allownoticeauthor', 'audit', 'tags', 'bbcodeoff', 'imgcontent', 'imgcontentwidth',
|
|
'smileyoff', 'parseurloff', 'usesig', 'htmlon', 'extramessage',
|
|
|
|
);
|
|
foreach($varname as $name) {
|
|
if(!isset($this->param[$name]) && isset($parameters[$name])) {
|
|
$this->param[$name] = $parameters[$name];
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
public function newreply($parameters) {
|
|
|
|
$this->_init_parameters($parameters);
|
|
|
|
if($this->thread['closed'] && !$this->forum['ismoderator'] && !$this->thread['isgroup']) {
|
|
return $this->showmessage('post_thread_closed');
|
|
} elseif(!$this->thread['isgroup'] && $post_autoclose = checkautoclose($this->thread)) {
|
|
return $this->showmessage($post_autoclose, '', array('autoclose' => $this->forum['autoclose']));
|
|
} if(trim($this->param['subject']) == '' && trim($this->param['message']) == '' && $this->thread['special'] != 2) {
|
|
return $this->showmessage('post_sm_isnull');
|
|
} elseif($post_invalid = checkpost($this->param['subject'], $this->param['message'], $this->param['special'] == 2 && $this->group['allowposttrade'])) {
|
|
return $this->showmessage($post_invalid, '', array('minpostsize' => $this->setting['minpostsize'], 'maxpostsize' => $this->setting['maxpostsize']));
|
|
} elseif(checkflood()) {
|
|
return $this->showmessage('post_flood_ctrl', '', array('floodctrl' => $this->setting['floodctrl']));
|
|
} elseif(checkmaxperhour('pid')) {
|
|
return $this->showmessage('post_flood_ctrl_posts_per_hour', '', array('posts_per_hour' => $this->group['maxpostsperhour']));
|
|
}
|
|
|
|
|
|
$heatthreadset = update_threadpartake($this->thread['tid'], true);
|
|
|
|
|
|
$bbcodeoff = checkbbcodes($this->param['message'], !empty($this->param['bbcodeoff']));
|
|
$smileyoff = checksmilies($this->param['message'], !empty($this->param['smileyoff']));
|
|
$parseurloff = !empty($this->param['parseurloff']);
|
|
$htmlon = $this->group['allowhtml'] && !empty($this->param['htmlon']) ? 1 : 0;
|
|
$usesig = !empty($this->param['usesig']) && $this->group['maxsigsize'] ? 1 : 0;
|
|
|
|
$this->param['isanonymous'] = $this->group['allowanonymous'] && !empty($this->param['isanonymous'])? 1 : 0;
|
|
$author = empty($this->param['isanonymous']) ? $this->member['username'] : '';
|
|
|
|
list(, $this->param['modnewreplies']) = threadmodstatus($this->param['subject']."\t".$this->param['message'].$this->param['extramessage']);
|
|
|
|
if($this->thread['displayorder'] == -4) {
|
|
$this->param['modnewreplies'] = 0;
|
|
}
|
|
$pinvisible = $this->param['modnewreplies'] ? -2 : ($this->thread['displayorder'] == -4 ? -3 : 0);
|
|
$this->param['message'] = preg_replace('/\[attachimg\](\d+)\[\/attachimg\]/is', '[attach]\1[/attach]', $this->param['message']);
|
|
|
|
|
|
if(!empty($this->param['noticetrimstr'])) {
|
|
$this->param['message'] = $this->param['noticetrimstr']."\n\n".$this->param['message'];
|
|
$bbcodeoff = false;
|
|
}
|
|
|
|
$status = (defined('IN_MOBILE') ? 8 : 0);
|
|
|
|
if($this->param['modstatus']) {
|
|
foreach($this->param['modstatus'] as $modbit => $modvalue) {
|
|
$status = setstatus($modbit, $modvalue, $status);
|
|
}
|
|
}
|
|
|
|
$this->pid = insertpost(array(
|
|
'fid' => $this->forum['fid'],
|
|
'tid' => $this->thread['tid'],
|
|
'first' => '0',
|
|
'author' => $this->member['username'],
|
|
'authorid' => $this->member['uid'],
|
|
'subject' => $this->param['subject'],
|
|
'dateline' => $this->param['timestamp'] ? $this->param['timestamp'] : getglobal('timestamp'),
|
|
'message' => $this->param['message'],
|
|
'useip' => $this->param['clientip'] ? $this->param['clientip'] : getglobal('clientip'),
|
|
'port' => $this->param['remoteport'] ? $this->param['remoteport'] : getglobal('remoteport'),
|
|
'invisible' => $pinvisible,
|
|
'anonymous' => $this->param['isanonymous'],
|
|
'usesig' => $usesig,
|
|
'htmlon' => $htmlon,
|
|
'bbcodeoff' => $bbcodeoff,
|
|
'smileyoff' => $smileyoff,
|
|
'parseurloff' => $parseurloff,
|
|
'attachment' => '0',
|
|
'status' => $status,
|
|
));
|
|
|
|
|
|
$this->param['updatethreaddata'] = $heatthreadset ? $heatthreadset : array();
|
|
$this->param['maxposition'] = C::t('forum_post')->fetch_maxposition_by_tid($this->thread['posttableid'], $this->thread['tid']);
|
|
$this->param['updatethreaddata'][] = DB::field('maxposition', $this->param['maxposition']);
|
|
|
|
|
|
useractionlog($this->member['uid'], 'pid');
|
|
|
|
if($this->param['geoloc'] && IN_MOBILE == 2) {
|
|
list($mapx, $mapy, $location) = explode('|', $this->param['geoloc']);
|
|
if($mapx && $mapy && $location) {
|
|
C::t('forum_post_location')->insert(array(
|
|
'pid' => $this->pid,
|
|
'tid' => $this->thread['tid'],
|
|
'uid' => $this->member['uid'],
|
|
'mapx' => $mapx,
|
|
'mapy' => $mapy,
|
|
'location' => $location,
|
|
));
|
|
}
|
|
}
|
|
|
|
$nauthorid = 0;
|
|
if(!empty($this->param['noticeauthor']) && !$this->param['isanonymous'] && !$this->param['modnewreplies']) {
|
|
list($ac, $nauthorid) = explode('|', authcode($this->param['noticeauthor'], 'DECODE'));
|
|
if($nauthorid != $this->member['uid']) {
|
|
if($ac == 'q') {
|
|
notification_add($nauthorid, 'post', 'reppost_noticeauthor', array(
|
|
'tid' => $this->thread['tid'],
|
|
'subject' => $this->thread['subject'],
|
|
'fid' => $this->forum['fid'],
|
|
'pid' => $this->pid,
|
|
'from_id' => $this->pid,
|
|
'from_idtype' => 'quote',
|
|
));
|
|
} elseif($ac == 'r') {
|
|
notification_add($nauthorid, 'post', 'reppost_noticeauthor', array(
|
|
'tid' => $this->thread['tid'],
|
|
'subject' => $this->thread['subject'],
|
|
'fid' => $this->forum['fid'],
|
|
'pid' => $this->pid,
|
|
'from_id' => $this->thread['tid'],
|
|
'from_idtype' => 'post',
|
|
));
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
if($this->thread['authorid'] != $this->member['uid'] && getstatus($this->thread['status'], 6) && empty($this->param['noticeauthor']) && !$this->param['isanonymous'] && !$this->param['modnewreplies']) {
|
|
$thapost = C::t('forum_post')->fetch_threadpost_by_tid_invisible($this->thread['tid'], 0);
|
|
notification_add($thapost['authorid'], 'post', 'reppost_noticeauthor', array(
|
|
'tid' => $this->thread['tid'],
|
|
'subject' => $this->thread['subject'],
|
|
'fid' => $this->forum['fid'],
|
|
'pid' => $this->pid,
|
|
'from_id' => $this->thread['tid'],
|
|
'from_idtype' => 'post',
|
|
));
|
|
}
|
|
|
|
|
|
$this->forum['threadcaches'] && deletethreadcaches($this->thread['tid']);
|
|
|
|
include_once libfile('function/stat');
|
|
updatestat($this->thread['isgroup'] ? 'grouppost' : 'post');
|
|
|
|
|
|
$this->param['showmsgparam']['fid'] = $this->forum['fid'];
|
|
$this->param['showmsgparam']['tid'] = $this->thread['tid'];
|
|
$this->param['showmsgparam']['pid'] = $this->pid;
|
|
$this->param['showmsgparam']['from'] = $this->param['from'];
|
|
$this->param['showmsgparam']['sechash'] = !empty($this->param['sechash']) ? $this->param['sechash'] : '';
|
|
|
|
|
|
dsetcookie('clearUserdata', 'forum');
|
|
|
|
if($this->thread['replies'] <= 0) {
|
|
C::t('forum_sofa')->delete($this->thread['tid']);
|
|
}
|
|
|
|
if($this->param['modnewreplies']) {
|
|
updatemoderate('pid', $this->pid);
|
|
unset($this->param['showmsgparam']['pid']);
|
|
if($this->param['updatethreaddata']) {
|
|
C::t('forum_thread')->update($this->thread['tid'], $this->param['updatethreaddata'], false, false, 0, true);
|
|
}
|
|
C::t('forum_forum')->update_forum_counter($this->forum['fid'], 0, 0, 1, 1);
|
|
|
|
|
|
manage_addnotify('verifypost');
|
|
|
|
|
|
return 'post_reply_mod_succeed';
|
|
|
|
} else {
|
|
|
|
$fieldarr = array(
|
|
'lastposter' => array($author),
|
|
'replies' => 1
|
|
);
|
|
if($this->thread['lastpost'] < getglobal('timestamp')) {
|
|
$fieldarr['lastpost'] = array(getglobal('timestamp'));
|
|
}
|
|
$row = C::t('forum_threadaddviews')->fetch($this->thread['tid']);
|
|
if(!empty($row)) {
|
|
C::t('forum_threadaddviews')->update($this->thread['tid'], array('addviews' => 0));
|
|
$fieldarr['views'] = $row['addviews'];
|
|
}
|
|
$this->param['updatethreaddata'] = array_merge($this->param['updatethreaddata'], C::t('forum_thread')->increase($this->thread['tid'], $fieldarr, false, 0, true));
|
|
if($this->thread['displayorder'] != -4) {
|
|
updatepostcredits('+', $this->member['uid'], 'reply', $this->forum['fid']);
|
|
if($this->forum['status'] == 3) {
|
|
if($this->forum['closed'] > 1) {
|
|
C::t('forum_thread')->increase($this->forum['closed'], $fieldarr, true);
|
|
}
|
|
C::t('forum_groupuser')->update_counter_for_user($this->member['uid'], $this->forum['fid'], 0, 1);
|
|
C::t('forum_forumfield')->update($this->forum['fid'], array('lastupdate' => TIMESTAMP));
|
|
require_once libfile('function/grouplog');
|
|
updategroupcreditlog($this->forum['fid'], $this->member['uid']);
|
|
}
|
|
|
|
$lastpost = $this->thread['tid']."\t".$this->thread['subject']."\t".getglobal('timestamp')."\t".$author;
|
|
C::t('forum_forum')->update($this->forum['fid'], array('lastpost' => $lastpost));
|
|
C::t('forum_forum')->update_forum_counter($this->forum['fid'], 0, 1, 1);
|
|
if($this->forum['type'] == 'sub') {
|
|
C::t('forum_forum')->update($this->forum['fup'], array('lastpost' => $lastpost));
|
|
}
|
|
}
|
|
|
|
|
|
$this->param['page'] = getstatus($this->thread['status'], 4) ? 1 : @ceil(($this->thread['special'] ? $this->thread['replies'] + 1 : $this->thread['replies'] + 2) / getglobal('ppp'));
|
|
|
|
if($this->param['updatethreaddata']) {
|
|
C::t('forum_thread')->update($this->thread['tid'], $this->param['updatethreaddata'], false, false, 0, true);
|
|
}
|
|
|
|
|
|
|
|
|
|
return 'post_reply_succeed';
|
|
}
|
|
}
|
|
|
|
public function replyfeed() {
|
|
if(!$this->feed) {
|
|
if($this->forum['allowfeed'] && !$this->param['isanonymous']) {
|
|
if($this->thread['authorid'] != $this->member['uid']) {
|
|
$post_url = "forum.php?mod=redirect&goto=findpost&pid=".$this->pid."&ptid=".$this->thread['tid'];
|
|
|
|
$this->feed['icon'] = 'post';
|
|
$this->feed['title_template'] = !empty($this->thread['author']) ? 'feed_reply_title' : 'feed_reply_title_anonymous';
|
|
$this->feed['title_data'] = array(
|
|
'subject' => "<a href=\"$post_url\">".$this->thread['subject']."</a>",
|
|
'author' => "<a href=\"home.php?mod=space&uid=".$this->thread['authorid']."\">".$this->thread['author']."</a>"
|
|
);
|
|
$forum_attachexist = getglobal('forum_attachexist');
|
|
if(!empty($forum_attachexist)) {
|
|
$imgattach = C::t('forum_attachment_n')->fetch_max_image('tid:'.$this->thread['tid'], 'pid', $this->pid);
|
|
$firstaid = $imgattach['aid'];
|
|
unset($imgattach);
|
|
if($firstaid) {
|
|
$this->feed['images'] = array(getforumimg($firstaid));
|
|
$this->feed['image_links'] = array($post_url);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->feed['title_data']['hash_data'] = "tid".$this->thread['tid'];
|
|
$this->feed['id'] = $this->pid;
|
|
$this->feed['idtype'] = 'pid';
|
|
if($this->feed['icon']) {
|
|
postfeed($this->feed);
|
|
}
|
|
}
|
|
|
|
public function thread($name = null, $val = null) {
|
|
if(isset($val)) {
|
|
return $this->setvar($this->thread, $name, $val);
|
|
} else {
|
|
return $this->getvar($this->thread, $name);
|
|
}
|
|
}
|
|
|
|
public function forum($name = null, $val = null) {
|
|
if(isset($val)) {
|
|
return $this->setvar($this->forum, $name, $val);
|
|
} else {
|
|
return $this->getvar($this->forum, $name);
|
|
}
|
|
}
|
|
|
|
public function editpost($parameters) {
|
|
|
|
$this->_init_parameters($parameters);
|
|
$isfirstpost = $this->post['first'] ? 1 : 0;
|
|
$isorigauthor = $this->member['uid'] && $this->member['uid'] == $this->post['authorid'];
|
|
$this->param['audit'] = $this->post['invisible'] == -2 || $this->thread['displayorder'] == -2 ? $this->param['audit'] : 0;
|
|
|
|
list($this->param['modnewthreads'], $this->param['modnewreplies']) = threadmodstatus($this->param['subject']."\t".$this->param['message'].$this->param['extramessage']);
|
|
|
|
if($post_invalid = checkpost($this->param['subject'], $this->param['message'], $isfirstpost && ($this->param['special'] || $this->param['sortid']))) {
|
|
showmessage($post_invalid, '', array('minpostsize' => $this->setting['minpostsize'], 'maxpostsize' => $this->setting['maxpostsize']));
|
|
}
|
|
if(!$isorigauthor && !$this->group['allowanonymous']) {
|
|
if($this->post['anonymous'] && !$this->param['isanonymous']) {
|
|
$this->param['isanonymous'] = 0;
|
|
$this->param['threadupdatearr']['author'] = $this->post['author'];
|
|
$anonymousadd = 0;
|
|
} else {
|
|
$this->param['isanonymous'] = $this->post['anonymous'];
|
|
$anonymousadd = '';
|
|
}
|
|
} else {
|
|
$this->param['threadupdatearr']['author'] = $this->param['isanonymous'] ? '' : $this->post['author'];
|
|
$anonymousadd = $this->param['isanonymous'];
|
|
}
|
|
|
|
if($isfirstpost) {
|
|
if(trim($this->param['subject']) == '' && $this->thread['special'] != 2) {
|
|
showmessage('post_sm_isnull');
|
|
}
|
|
|
|
if(!$this->param['sortid'] && !$this->thread['special'] && trim($this->param['message']) == '') {
|
|
showmessage('post_sm_isnull');
|
|
}
|
|
|
|
|
|
$publishdate = null;
|
|
if ($this->group['allowsetpublishdate'] && $this->thread['displayorder'] == -4) {
|
|
$cron_publish_ids = dunserialize($this->cache('cronpublish'));
|
|
if (!$this->param['cronpublish'] && in_array($this->thread['tid'], $cron_publish_ids) || $this->param['modnewthreads']) {
|
|
$this->param['threadupdatearr']['dateline'] = $publishdate = TIMESTAMP;
|
|
unset($cron_publish_ids[$this->thread['tid']]);
|
|
$cron_publish_ids = serialize($cron_publish_ids);
|
|
savecache('cronpublish', $cron_publish_ids);
|
|
} elseif ($this->param['cronpublish'] && $this->param['cronpublishdate']) {
|
|
$this->param['threadupdatearr']['dateline'] = $publishdate = strtotime($this->param['cronpublishdate']);
|
|
$this->param['save'] = 1;
|
|
if (!in_array($this->thread['tid'], $cron_publish_ids)) {
|
|
$cron_publish_ids[$this->thread['tid']] = $this->thread['tid'];
|
|
$cron_publish_ids = serialize($cron_publish_ids);
|
|
savecache('cronpublish', $cron_publish_ids);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
$this->param['readperm'] = $this->group['allowsetreadperm'] ? intval($this->param['readperm']) : ($isorigauthor ? 0 : 'ignore');
|
|
if($this->thread['special'] != 3) {
|
|
$this->param['price'] = intval($this->param['price']);
|
|
$this->param['price'] = $this->thread['price'] < 0 && !$this->thread['special']
|
|
?($isorigauthor || !$this->param['price'] ? -1 : $this->param['price'])
|
|
:($this->group['maxprice'] ? ($this->param['price'] <= $this->group['maxprice'] ? ($this->param['price'] > 0 ? $this->param['price'] : 0) : $this->group['maxprice']) : ($isorigauthor ? $this->param['price'] : $this->thread['price']));
|
|
|
|
if($this->param['price'] > 0 && floor($this->param['price'] * (1 - $this->setting['creditstax'])) == 0) {
|
|
return $this->showmessage('post_net_price_iszero');
|
|
}
|
|
}
|
|
|
|
$this->thread['status'] = setstatus(4, $this->param['ordertype'], $this->thread['status']);
|
|
$this->thread['status'] = setstatus(15, $this->param['imgcontent'], $this->thread['status']);
|
|
if($this->param['imgcontent']) {
|
|
stringtopic($this->param['message'], $this->post['tid'], true, $this->param['imgcontentwidth']);
|
|
}
|
|
|
|
$this->thread['status'] = setstatus(2, $this->param['hiddenreplies'], $this->thread['status']);
|
|
|
|
$this->thread['status'] = setstatus(6, $this->param['allownoticeauthor'] ? 1 : 0, $this->thread['status']);
|
|
|
|
$displayorder = (empty($this->param['save']) || $this->thread['displayorder'] != -4 ) ? ($this->thread['displayorder'] == -4 ? -4 : $this->thread['displayorder']) : -4;
|
|
|
|
|
|
$this->param['threadupdatearr']['typeid'] = $this->param['typeid'];
|
|
$this->param['threadupdatearr']['sortid'] = $this->param['sortid'];
|
|
$this->param['threadupdatearr']['subject'] = $this->param['subject'];
|
|
if($this->param['readperm'] !== 'ignore') {
|
|
$this->param['threadupdatearr']['readperm'] = $this->param['readperm'];
|
|
}
|
|
$this->param['threadupdatearr']['price'] = $this->param['price'];
|
|
$this->param['threadupdatearr']['status'] = $this->thread['status'];
|
|
if(getglobal('forum_auditstatuson') && $this->param['audit'] == 1) {
|
|
$this->param['threadupdatearr']['displayorder'] = 0;
|
|
$this->param['threadupdatearr']['moderated'] = 1;
|
|
} else {
|
|
$this->param['threadupdatearr']['displayorder'] = $displayorder;
|
|
}
|
|
C::t('forum_thread')->update($this->thread['tid'], $this->param['threadupdatearr'], true);
|
|
|
|
if($this->thread['tid'] > 1) {
|
|
if($this->thread['closed'] > 1) {
|
|
C::t('forum_thread')->update($this->thread['closed'], array('subject' => $this->param['subject']), true);
|
|
} elseif(empty($this->thread['isgroup'])) {
|
|
$threadclosed = C::t('forum_threadclosed')->fetch($thread['tid']);
|
|
if($threadclosed['redirect']) {
|
|
C::t('forum_thread')->update($threadclosed['redirect'], array('subject' => $this->param['subject']), true);
|
|
}
|
|
}
|
|
}
|
|
$class_tag = new tag();
|
|
$tagstr = $class_tag->update_field($this->param['tags'], $this->thread['tid'], 'tid', $this->thread);
|
|
|
|
} else {
|
|
if($this->param['subject'] == '' && $this->param['message'] == '' && $this->thread['special'] != 2) {
|
|
showmessage('post_sm_isnull');
|
|
}
|
|
}
|
|
|
|
|
|
$this->param['htmlon'] = $this->group['allowhtml'] && !empty($this->param['htmlon']) ? 1 : 0;
|
|
|
|
if($this->setting['editedby'] && (TIMESTAMP - $this->post['dateline']) > 60 && $this->member['adminid'] != 1) {
|
|
$editor = $this->param['isanonymous'] && $isorigauthor ? lang('forum/misc', 'anonymous') : $this->member['username'];
|
|
$edittime = dgmdate(TIMESTAMP);
|
|
$this->param['message'] = lang('forum/misc', $this->param['htmlon'] ? 'post_edithtml' : (!$this->forum['allowbbcode'] || $this->param['bbcodeoff'] ? 'post_editnobbcode' : 'post_edit'), array('editor' => $editor, 'edittime' => $edittime)) . $this->param['message'];
|
|
}
|
|
|
|
|
|
$this->param['bbcodeoff'] = checkbbcodes($this->param['message'], !empty($this->param['bbcodeoff']));
|
|
$this->param['smileyoff'] = checksmilies($this->param['message'], !empty($this->param['smileyoff']));
|
|
$tagoff = $isfirstpost ? !empty($tagoff) : 0;
|
|
|
|
|
|
if(getglobal('forum_auditstatuson') && $this->param['audit'] == 1) {
|
|
C::t('forum_post')->update($this->thread['posttableid'], $this->post['pid'], array('status' => 4), false, false, null, -2, null, 0);
|
|
updatepostcredits('+', $this->post['authorid'], ($isfirstpost ? 'post' : 'reply'), $this->forum['fid']);
|
|
updatemodworks('MOD', 1);
|
|
updatemodlog($this->thread['tid'], 'MOD');
|
|
}
|
|
|
|
$displayorder = $pinvisible = 0;
|
|
if($isfirstpost) {
|
|
$displayorder = $this->param['modnewthreads'] ? -2 : $this->thread['displayorder'];
|
|
$pinvisible = $this->param['modnewthreads'] ? -2 : (empty($this->param['save']) ? 0 : -3);
|
|
} else {
|
|
$pinvisible = $this->param['modnewreplies'] ? -2 : ($this->thread['displayorder'] == -4 ? -3 : 0);
|
|
}
|
|
|
|
$this->param['message'] = preg_replace('/\[attachimg\](\d+)\[\/attachimg\]/is', '[attach]\1[/attach]', $this->param['message']);
|
|
$this->param['parseurloff'] = !empty($this->param['parseurloff']);
|
|
$setarr = array(
|
|
'message' => $this->param['message'],
|
|
'usesig' => $this->param['usesig'],
|
|
'htmlon' => $this->param['htmlon'],
|
|
'bbcodeoff' => $this->param['bbcodeoff'],
|
|
'parseurloff' => $this->param['parseurloff'],
|
|
'smileyoff' => $this->param['smileyoff'],
|
|
'subject' => $this->param['subject'],
|
|
'tags' => $tagstr,
|
|
'port'=>getglobal('remoteport')
|
|
);
|
|
|
|
$setarr['status'] = $this->post['status'];
|
|
if($this->param['modstatus']) {
|
|
foreach($this->param['modstatus'] as $modbit => $modvalue) {
|
|
$setarr['status'] = setstatus($modbit, $modvalue, $setarr['status']);
|
|
}
|
|
}
|
|
|
|
if($anonymousadd !== '') {
|
|
$setarr['anonymous'] = $anonymousadd;
|
|
}
|
|
if($publishdate) {
|
|
$setarr['dateline'] = $publishdate;
|
|
}
|
|
if(getglobal('forum_auditstatuson') && $this->param['audit'] == 1) {
|
|
$setarr['invisible'] = 0;
|
|
} else {
|
|
$setarr['invisible'] = $pinvisible;
|
|
}
|
|
C::t('forum_post')->update('tid:'.$this->thread['tid'], $this->post['pid'], $setarr);
|
|
|
|
|
|
|
|
$this->forum['lastpost'] = explode("\t", $this->forum['lastpost']);
|
|
|
|
if($this->post['dateline'] == $this->forum['lastpost'][2] && ($this->post['author'] == $this->forum['lastpost'][3] || ($this->forum['lastpost'][3] == '' && $this->post['anonymous']))) {
|
|
$lastpost = $this->thread['tid']."\t".($isfirstpost ? $this->param['subject'] : $this->thread['subject'])."\t".$this->post['dateline']."\t".($this->param['isanonymous'] ? '' : $this->post['author']);
|
|
C::t('forum_forum')->update($this->forum['fid'], array('lastpost' => $lastpost));
|
|
|
|
}
|
|
|
|
if(!getglobal('forum_auditstatuson') || $this->param['audit'] != 1) {
|
|
if($isfirstpost && $this->param['modnewthreads']) {
|
|
C::t('forum_thread')->update($this->thread['tid'], array('displayorder' => -2));
|
|
manage_addnotify('verifythread');
|
|
} elseif(!$isfirstpost && $this->param['modnewreplies']) {
|
|
C::t('forum_thread')->increase($this->thread['tid'], array('replies' => -1));
|
|
manage_addnotify('verifypost');
|
|
}
|
|
if($this->param['modnewreplies'] || $this->param['modnewthreads']) {
|
|
C::t('forum_forum')->update($this->forum['fid'], array('modworks' => '1'));
|
|
}
|
|
}
|
|
|
|
|
|
if($this->thread['lastpost'] == $this->post['dateline'] && ((!$this->post['anonymous'] && $this->thread['lastposter'] == $this->post['author']) || ($this->post['anonymous'] && $this->thread['lastposter'] == '')) && $this->post['anonymous'] != $this->param['isanonymous']) {
|
|
C::t('forum_thread')->update($this->thread['tid'], array('lastposter' => $this->param['isanonymous'] ? '' : $this->post['author']), true);
|
|
}
|
|
|
|
if(!$isorigauthor) {
|
|
updatemodworks('EDT', 1);
|
|
require_once libfile('function/misc');
|
|
modlog($this->thread, 'EDT');
|
|
}
|
|
|
|
if($isfirstpost && $this->thread['displayorder'] == -4 && empty($this->param['save'])) {
|
|
threadpubsave($this->thread['tid']);
|
|
}
|
|
}
|
|
|
|
public function deletepost($parameters) {
|
|
|
|
$this->_init_parameters($parameters);
|
|
if(!$this->setting['editperdel']) {
|
|
return $this->showmessage('post_edit_thread_ban_del', NULL);
|
|
}
|
|
|
|
$isfirstpost = $this->post['first'] ? 1 : 0;
|
|
|
|
if($isfirstpost && $this->thread['replies'] > 0) {
|
|
return $this->showmessage(($this->thread['special'] == 3 ? 'post_edit_reward_already_reply' : 'post_edit_thread_already_reply'), NULL);
|
|
}
|
|
|
|
|
|
if($this->thread['displayorder'] >= 0) {
|
|
updatepostcredits('-', $this->post['authorid'], ($isfirstpost ? 'post' : 'reply'), $this->forum['fid']);
|
|
}
|
|
|
|
|
|
if(!$this->param['handlereplycredit']) {
|
|
if(!$isfirstpost && !$this->param['isanonymous']) {
|
|
$postreplycredit = C::t('forum_post')->fetch('tid:'.$this->thread['tid'], $this->post['pid']);
|
|
$postreplycredit = $postreplycredit['replycredit'];
|
|
if($postreplycredit) {
|
|
C::t('forum_post')->update('tid:'.$this->thread['tid'], $this->post['pid'], array('replycredit' => 0));
|
|
updatemembercount($this->post['authorid'], array($replycredit_rule['extcreditstype'] => '-'.$postreplycredit));
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
C::t('forum_post')->delete('tid:'.$this->thread['tid'], $this->post['pid']);
|
|
|
|
|
|
$forumcounter = array();
|
|
if($isfirstpost) {
|
|
$forumcounter['threads'] = $forumcounter['posts'] = -1;
|
|
$tablearray = array('forum_relatedthread', 'forum_debate', 'forum_debatepost', 'forum_polloption', 'forum_poll');
|
|
foreach ($tablearray as $table) {
|
|
C::t($table)->delete_by_tid($this->thread['tid']);
|
|
}
|
|
C::t('forum_thread')->delete_by_tid($this->thread['tid']);
|
|
C::t('common_moderate')->delete($this->thread['tid'], 'tid');
|
|
C::t('forum_threadmod')->delete_by_tid($this->thread['tid']);
|
|
if($this->setting['globalstick'] && in_array($this->thread['displayorder'], array(2, 3))) {
|
|
require_once libfile('function/cache');
|
|
updatecache('globalstick');
|
|
}
|
|
} else {
|
|
$forumcounter['posts'] = -1;
|
|
$lastpost = C::t('forum_post')->fetch_visiblepost_by_tid('tid:'.$this->thread['tid'], $this->thread['tid'], 0, 1);
|
|
$lastpost['author'] = !$lastpost['anonymous'] ? addslashes($lastpost['author']) : '';
|
|
|
|
$this->param['updatefieldarr']['replies'] = -1;
|
|
$this->param['updatefieldarr']['lastposter'] = array($lastpost['author']);
|
|
$this->param['updatefieldarr']['lastpost'] = array($lastpost['dateline']);
|
|
|
|
C::t('forum_thread')->increase($this->thread['tid'], $this->param['updatefieldarr']);
|
|
}
|
|
|
|
$this->forum['lastpost'] = explode("\t", $this->forum['lastpost']);
|
|
if($this->post['dateline'] == $this->forum['lastpost'][2] && ($this->post['author'] == $this->forum['lastpost'][3] || ($this->forum['lastpost'][3] == '' && $this->post['anonymous']))) {
|
|
$lastthread = C::t('forum_thread')->fetch_by_fid_displayorder($this->forum['fid']);
|
|
C::t('forum_forum')->update($this->forum['fid'], array('lastpost' => "$lastthread[tid]\t$lastthread[subject]\t$lastthread[lastpost]\t$lastthread[lastposter]"));
|
|
}
|
|
C::t('forum_forum')->update_forum_counter($this->forum['fid'], $forumcounter['threads'], $forumcounter['posts']);
|
|
|
|
}
|
|
|
|
}
|
|
?>
|