Linux br942.hostgator.com.br 4.19.286-203.ELK.el7.x86_64 #1 SMP Wed Jun 14 04:33:55 CDT 2023 x86_64
Apache
: 162.241.2.188 | : 13.59.198.133
Cant Read [ /etc/named.conf ]
8.2.22
manoe678
May The Force Be With You
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
MASS DEFACE
+ Create Folder
+ Create File
/
var /
softaculous /
fud /
default /
[ HOME SHELL ]
Name
Size
Permission
Action
admincp.inc
4.2
KB
-rw-r--r--
allowed_user_lnk.inc
3.62
KB
-rw-r--r--
cookies.inc
8.13
KB
-rw-r--r--
draw_forum_list.inc
9.43
KB
-rw-r--r--
draw_forum_path.inc
1.01
KB
-rw-r--r--
drawmsg.inc
24.32
KB
-rw-r--r--
drawpmsg.inc
9.51
KB
-rw-r--r--
err.inc
4.3
KB
-rw-r--r--
errmsg.inc
6.18
KB
-rw-r--r--
forumsel.inc
2.39
KB
-rw-r--r--
get_cur_ppage.inc
1.04
KB
-rw-r--r--
imsg_edt.inc
32.45
KB
-rw-r--r--
logedin.inc
5.92
KB
-rw-r--r--
post_common.inc
4.77
KB
-rw-r--r--
post_opt.inc
2.74
KB
-rw-r--r--
private.inc
7.24
KB
-rw-r--r--
return.inc
1.13
KB
-rw-r--r--
tabs.inc
1.63
KB
-rw-r--r--
th_nav.inc
2.35
KB
-rw-r--r--
thread_view_common.inc
3.62
KB
-rw-r--r--
usercp.inc
1.14
KB
-rw-r--r--
users.inc
21.61
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : imsg_edt.inc
<?php /** * copyright : (C) 2001-2023 Advanced Internet Designs Inc. * email : forum@prohost.org * $Id$ * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; version 2 of the License. **/ class fud_msg { var $id, $thread_id, $poster_id, $reply_to, $ip_addr, $host_name, $post_stamp, $subject, $attach_cnt, $poll_id, $update_stamp, $icon, $apr, $updated_by, $login, $length, $foff, $file_id, $msg_opt, $file_id_preview, $length_preview, $offset_preview, $body, $mlist_msg_id; } $GLOBALS['CHARSET'] = 'utf-8'; class fud_msg_edit extends fud_msg { function add_reply($reply_to, $th_id=null, $perm=0, $autoapprove=1) { if ($perm = 0) { $perm = 64|4096; } if ($reply_to) { $this->reply_to = $reply_to; $fd = db_saq('SELECT t.forum_id, f.message_threshold, f.forum_opt FROM fud30_msg m INNER JOIN fud30_thread t ON m.thread_id=t.id INNER JOIN fud30_forum f ON f.id=t.forum_id WHERE m.id='. $reply_to); } else { $fd = db_saq('SELECT t.forum_id, f.message_threshold, f.forum_opt FROM fud30_thread t INNER JOIN fud30_forum f ON f.id=t.forum_id WHERE t.id='. $th_id); } return $this->add($fd[0], $fd[1], $fd[2], $perm, $autoapprove); } function add($forum_id, $message_threshold, $forum_opt, $perm, $autoapprove=1, $msg_tdescr='') { if (!$this->post_stamp) { $this->post_stamp = __request_timestamp__; } if (!isset($this->ip_addr)) { $this->ip_addr = get_ip(); } $this->host_name = $GLOBALS['FUD_OPT_1'] & 268435456 ? _esc(get_host($this->ip_addr)) : 'NULL'; $this->thread_id = isset($this->thread_id) ? $this->thread_id : 0; $this->reply_to = isset($this->reply_to) ? $this->reply_to : 0; $this->subject = substr($this->subject, 0, 255); // Subject col is VARCHAR(255). if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE $file_id = $file_id_preview = $length_preview = 0; $offset = $offset_preview = -1; $length = strlen($this->body); } else { $file_id = write_body($this->body, $length, $offset, $forum_id); /* Determine if preview needs building. */ if ($message_threshold && $message_threshold < strlen($this->body)) { $thres_body = trim_html($this->body, $message_threshold); $file_id_preview = write_body($thres_body, $length_preview, $offset_preview, $forum_id); } else { $file_id_preview = $offset_preview = $length_preview = 0; } } /* Lookup country and flag. */ if ($GLOBALS['FUD_OPT_3'] & 524288) { // ENABLE_GEO_LOCATION. $flag = db_saq('SELECT cc, country FROM fud30_geoip WHERE '. sprintf('%u', ip2long($this->ip_addr)) .' BETWEEN ips AND ipe'); } if (empty($flag)) { $flag = array(null, null); } $this->id = db_qid('INSERT INTO fud30_msg ( thread_id, poster_id, reply_to, ip_addr, host_name, post_stamp, subject, attach_cnt, poll_id, icon, msg_opt, file_id, foff, length, file_id_preview, offset_preview, length_preview, mlist_msg_id, poll_cache, flag_cc, flag_country ) VALUES( '. $this->thread_id .', '. $this->poster_id .', '. (int)$this->reply_to .', \''. $this->ip_addr .'\', '. $this->host_name .', '. $this->post_stamp .', '. ssn($this->subject) .', '. (int)$this->attach_cnt .', '. (int)$this->poll_id .', '. ssn($this->icon) .', '. $this->msg_opt .', '. $file_id .', '. (int)$offset .', '. (int)$length .', '. $file_id_preview .', '. $offset_preview .', '. $length_preview .', '. ssn($this->mlist_msg_id) .', '. ssn(poll_cache_rebuild($this->poll_id)) .', '. ssn($flag[0]) .', '. ssn($flag[1]) .' )'); if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE $file_id = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc($this->body) .')'); if ($message_threshold && $length > $message_threshold) { $file_id_preview = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc(trim_html($this->body, $message_threshold)) .')'); } q('UPDATE fud30_msg SET file_id='. $file_id .', file_id_preview='. $file_id_preview .' WHERE id='. $this->id); } $thread_opt = (int) ($perm & 4096 && isset($_POST['thr_locked'])); if (!$this->thread_id) { /* New thread. */ if ($perm & 64) { if (isset($_POST['thr_ordertype'], $_POST['thr_orderexpiry']) && (int)$_POST['thr_ordertype']) { $thread_opt |= (int)$_POST['thr_ordertype']; $thr_orderexpiry = (int)$_POST['thr_orderexpiry']; } if (!empty($_POST['thr_always_on_top'])) { $thread_opt |= 8; } } $this->thread_id = th_add($this->id, $forum_id, $this->post_stamp, $thread_opt, (isset($thr_orderexpiry) ? $thr_orderexpiry : 0), 0, 0, 0, $msg_tdescr); q('UPDATE fud30_msg SET thread_id='. $this->thread_id .' WHERE id='. $this->id); } else { th_lock($this->thread_id, $thread_opt & 1); } if ($autoapprove && $forum_opt & 2) { $this->approve($this->id); } return $this->id; } function sync($id, $frm_id, $message_threshold, $perm, $msg_tdescr='') { $this->subject = substr($this->subject, 0, 255); // Subject col is VARCHAR(255). if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE $file_id = $file_id_preview = $length_preview = 0; $offset = $offset_preview = -1; $length = strlen($this->body); } else { $file_id = write_body($this->body, $length, $offset, $frm_id); /* Determine if preview needs building. */ if ($message_threshold && $message_threshold < strlen($this->body)) { $thres_body = trim_html($this->body, $message_threshold); $file_id_preview = write_body($thres_body, $length_preview, $offset_preview, $frm_id); } else { $file_id_preview = $offset_preview = $length_preview = 0; } } q('UPDATE fud30_msg SET file_id='. $file_id .', foff='. (int)$offset .', length='. (int)$length .', mlist_msg_id='. ssn($this->mlist_msg_id) .', file_id_preview='. $file_id_preview .', offset_preview='. $offset_preview .', length_preview='. $length_preview .', updated_by='. $id .', msg_opt='. $this->msg_opt .', attach_cnt='. (int)$this->attach_cnt .', poll_id='. (int)$this->poll_id .', update_stamp='. __request_timestamp__ .', icon='. ssn($this->icon) .' , poll_cache='. ssn(poll_cache_rebuild($this->poll_id)) .', subject='. ssn($this->subject) .' WHERE id='. $this->id); if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE //TODO: Why DELETE? Can't we just UPDATE the DB? q('DELETE FROM fud30_msg_store WHERE id IN('. $this->file_id .','. $this->file_id_preview .')'); $file_id = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc($this->body) .')'); if ($message_threshold && $length > $message_threshold) { $file_id_preview = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc(trim_html($this->body, $message_threshold)) .')'); } q('UPDATE fud30_msg SET file_id='. $file_id .', file_id_preview='. $file_id_preview .' WHERE id='. $this->id); } /* Determine wether or not we should deal with locked & sticky stuff * current approach may seem a little redundant, but for (most) users who * do not have access to locking & sticky this eliminated a query. */ $th_data = db_saq('SELECT orderexpiry, thread_opt, root_msg_id, tdescr FROM fud30_thread WHERE id='. $this->thread_id); $locked = (int) isset($_POST['thr_locked']); if (isset($_POST['thr_ordertype'], $_POST['thr_orderexpiry']) || (($th_data[1] ^ $locked) & 1)) { $thread_opt = (int) $th_data[1]; $orderexpiry = isset($_POST['thr_orderexpiry']) ? (int) $_POST['thr_orderexpiry'] : 0; /* Confirm that user has ability to change lock status of the thread. */ if ($perm & 4096) { if ($locked && !($thread_opt & $locked)) { $thread_opt |= 1; } else if (!$locked && $thread_opt & 1) { $thread_opt &= ~1; } } /* Confirm that user has ability to change sticky status of the thread. */ if ($th_data[2] == $this->id && isset($_POST['thr_ordertype'], $_POST['thr_orderexpiry']) && $perm & 64) { if (!$_POST['thr_ordertype'] && $thread_opt > 1) { $orderexpiry = 0; $thread_opt &= ~6; } else if ($thread_opt < 2 && (int) $_POST['thr_ordertype']) { $thread_opt |= $_POST['thr_ordertype']; } else if (!($thread_opt & (int) $_POST['thr_ordertype'])) { $thread_opt = $_POST['thr_ordertype'] | ($thread_opt & 1); } } if ($perm & 64) { if (!empty($_POST['thr_always_on_top'])) { $thread_opt |= 8; } else { $thread_opt &= ~8; } } /* Determine if any work needs to be done. */ if ($thread_opt != $th_data[1] || $orderexpiry != $th_data[0]) { q('UPDATE fud30_thread SET '. ($th_data[2] == $this->id ? 'tdescr='. _esc($msg_tdescr) .',' : '') .' thread_opt='.$thread_opt.', orderexpiry='. $orderexpiry .' WHERE id='. $this->thread_id); /* Avoid rebuilding the forum view whenever possible, since it's a rather slow process. * Only rebuild if expiry time has changed or message gained/lost sticky status. */ $diff = $thread_opt ^ $th_data[1]; if (($diff > 1 && $diff & 14) || $orderexpiry != $th_data[0]) { rebuild_forum_view_ttl($frm_id); } } else if ($msg_tdescr != $th_data[3] && $th_data[2] == $this->id) { q('UPDATE fud30_thread SET tdescr='. _esc($msg_tdescr) .' WHERE id='. $this->thread_id); } } else if ($msg_tdescr != $th_data[3] && $th_data[2] == $this->id) { q('UPDATE fud30_thread SET tdescr='. _esc($msg_tdescr) .' WHERE id='. $this->thread_id); } if ($GLOBALS['FUD_OPT_1'] & 16777216) { // FORUM_SEARCH enabled? If so, reindex message. q('DELETE FROM fud30_index WHERE msg_id='. $this->id); q('DELETE FROM fud30_title_index WHERE msg_id='. $this->id); index_text((!strncasecmp('Re: ', $this->subject, 4) ? '' : $this->subject), $this->body, $this->id); } } /** Delete a message & cleanup. */ static function delete($rebuild_view=1, $mid=0, $th_rm=0) { if (!$mid) { $mid = $this->id; } if (!($del = db_sab('SELECT m.file_id, m.file_id_preview, m.id, m.attach_cnt, m.poll_id, m.thread_id, m.reply_to, m.apr, m.poster_id, t.replies, t.root_msg_id AS root_msg_id, t.last_post_id AS thread_lip, t.forum_id, f.last_post_id AS forum_lip FROM fud30_msg m LEFT JOIN fud30_thread t ON m.thread_id=t.id LEFT JOIN fud30_forum f ON t.forum_id=f.id WHERE m.id='. $mid))) { return; } if (!db_locked()) { db_lock('fud30_msg_store WRITE, fud30_forum f WRITE, fud30_thr_exchange WRITE, fud30_tv_'. $del->forum_id .' WRITE, fud30_tv_'. $del->forum_id .' tv WRITE, fud30_msg m WRITE, fud30_thread t WRITE, fud30_level WRITE, fud30_forum WRITE, fud30_forum_read WRITE, fud30_thread WRITE, fud30_msg WRITE, fud30_attach WRITE, fud30_poll WRITE, fud30_poll_opt WRITE, fud30_poll_opt_track WRITE, fud30_users WRITE, fud30_thread_notify WRITE, fud30_bookmarks WRITE, fud30_msg_report WRITE, fud30_thread_rate_track WRITE, fud30_index WRITE, fud30_title_index WRITE, fud30_search_cache WRITE'); $ll = 1; } q('DELETE FROM fud30_msg WHERE id='. $mid); /* Remove attachments. */ if ($del->attach_cnt) { $res = q('SELECT location FROM fud30_attach WHERE message_id='. $mid .' AND attach_opt=0'); while ($loc = db_rowarr($res)) { @unlink($loc[0]); } unset($res); q('DELETE FROM fud30_attach WHERE message_id='. $mid .' AND attach_opt=0'); } /* Remove message reports. */ q('DELETE FROM fud30_msg_report WHERE msg_id='. $mid); /* Cleanup index entries. */ if ($GLOBALS['FUD_OPT_1'] & 16777216) { // FORUM_SEARCH enabled? q('DELETE FROM fud30_index WHERE msg_id='. $mid); q('DELETE FROM fud30_title_index WHERE msg_id='. $mid); q('DELETE FROM fud30_search_cache WHERE msg_id='. $mid); } /* Remove poll. */ if ($del->poll_id) { poll_delete($del->poll_id); } /* Check if thread. */ if ($del->root_msg_id == $del->id) { $th_rm = 1; /* Delete all messages in the thread if there is more than 1 message. */ if ($del->replies) { $rmsg = q('SELECT id FROM fud30_msg WHERE thread_id='. $del->thread_id .' AND id != '. $del->id); while ($dim = db_rowarr($rmsg)) { fud_msg_edit::delete(0, $dim[0], 1); } unset($rmsg); } q('DELETE FROM fud30_thread_notify WHERE thread_id='. $del->thread_id); q('DELETE FROM fud30_bookmarks WHERE thread_id='. $del->thread_id); q('DELETE FROM fud30_thread WHERE id='. $del->thread_id); q('DELETE FROM fud30_thread_rate_track WHERE thread_id='. $del->thread_id); q('DELETE FROM fud30_thr_exchange WHERE th='. $del->thread_id); if ($del->apr) { /* We need to determine the last post id for the forum, it can be null. */ $lpi = (int) q_singleval(q_limit('SELECT t.last_post_id FROM fud30_thread t INNER JOIN fud30_msg m ON t.last_post_id=m.id AND m.apr=1 WHERE t.forum_id='.$del->forum_id.' AND t.moved_to=0 ORDER BY m.post_stamp DESC', 1)); q('UPDATE fud30_forum SET last_post_id='. $lpi .', thread_count=thread_count-1, post_count=post_count-'. $del->replies .'-1 WHERE id='. $del->forum_id); } } else if (!$th_rm && $del->apr) { q('UPDATE fud30_msg SET reply_to='. $del->reply_to .' WHERE thread_id='. $del->thread_id .' AND reply_to='. $mid); /* Check if the message is the last in thread. */ if ($del->thread_lip == $del->id) { list($lpi, $lpd) = db_saq(q_limit('SELECT id, post_stamp FROM fud30_msg WHERE thread_id='. $del->thread_id .' AND apr=1 ORDER BY post_stamp DESC', 1)); q('UPDATE fud30_thread SET last_post_id='. $lpi .', last_post_date='. $lpd .', replies=replies-1 WHERE id='. $del->thread_id); } else { q('UPDATE fud30_thread SET replies=replies-1 WHERE id='. $del->thread_id); } /* Check if the message is the last in the forum. */ if ($del->forum_lip == $del->id) { $page = q_singleval('SELECT seq FROM fud30_tv_'. $del->forum_id .' WHERE thread_id='. $del->thread_id); $lp = db_saq(q_limit('SELECT t.last_post_id, t.last_post_date FROM fud30_tv_'. $del->forum_id .' tv INNER JOIN fud30_thread t ON tv.thread_id=t.id WHERE tv.seq IN('. $page .','. ($page - 1) .') AND t.moved_to=0 ORDER BY t.last_post_date DESC', 1)); if (!isset($lpd) || $lp[1] > $lpd) { $lpi = $lp[0]; } q('UPDATE fud30_forum SET post_count=post_count-1, last_post_id='. $lpi .' WHERE id='. $del->forum_id); } else { q('UPDATE fud30_forum SET post_count=post_count-1 WHERE id='. $del->forum_id); } } if ($del->apr) { if ($del->poster_id) { user_set_post_count($del->poster_id); } if ($rebuild_view) { if ($th_rm) { th_delete_rebuild($del->forum_id, $del->thread_id); } else if ($del->thread_lip == $del->id) { rebuild_forum_view_ttl($del->forum_id); } } } if (isset($ll)) { db_unlock(); } if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE q('DELETE FROM fud30_msg_store WHERE id IN('. $del->file_id .','. $del->file_id_preview .')'); } if (!$del->apr || !$th_rm || ($del->root_msg_id != $del->id)) { return; } /* Needed for moved thread pointers. */ $r = q('SELECT forum_id, id FROM fud30_thread WHERE root_msg_id='. $del->root_msg_id); while (($res = db_rowarr($r))) { q('DELETE FROM fud30_thread WHERE id='. $res[1]); q('UPDATE fud30_forum SET thread_count=thread_count-1 WHERE id='. $res[0]); th_delete_rebuild($res[0], $res[1]); } unset($r); } static function approve($id) { /* Fetch info about the message, poll (if one exists), thread & forum. */ $mtf = db_sab('SELECT /* USE MASTER */ m.id, m.poster_id, m.apr, m.subject, m.foff, m.length, m.file_id, m.thread_id, m.poll_id, m.attach_cnt, m.post_stamp, m.reply_to, m.mlist_msg_id, m.msg_opt, t.forum_id, t.last_post_id, t.root_msg_id, t.last_post_date, t.thread_opt, m2.post_stamp AS frm_last_post_date, f.name AS frm_name, f.forum_opt, u.alias, u.email, u.sig, u.name as real_name, n.id AS nntp_id, ml.id AS mlist_id FROM fud30_msg m INNER JOIN fud30_thread t ON m.thread_id=t.id INNER JOIN fud30_forum f ON t.forum_id=f.id LEFT JOIN fud30_msg m2 ON f.last_post_id=m2.id LEFT JOIN fud30_users u ON m.poster_id=u.id LEFT JOIN fud30_mlist ml ON ml.forum_id=f.id AND '. q_bitand('ml.mlist_opt', 2) .' > 0 LEFT JOIN fud30_nntp n ON n.forum_id=f.id AND '. q_bitand('n.nntp_opt', 2) .' > 0 WHERE m.id='. $id .' AND m.apr=0'); /* Nothing to do or bad message id. */ if (!$mtf) { return; } if ($mtf->alias) { $mtf->alias = reverse_fmt($mtf->alias); } else { $mtf->alias = $GLOBALS['ANON_NICK']; } q('UPDATE fud30_msg SET apr=1 WHERE id='.$mtf->id); if ($mtf->poster_id) { user_set_post_count($mtf->poster_id); } if ($mtf->post_stamp > $mtf->frm_last_post_date) { $mtf->last_post_id = $mtf->id; } if ($mtf->root_msg_id == $mtf->id) { /* New thread. */ th_new_rebuild($mtf->forum_id, $mtf->thread_id, $mtf->thread_opt & (2|4|8)); $threads = 1; } else { /* Reply to thread. */ if ($mtf->post_stamp > $mtf->last_post_date) { th_inc_post_count($mtf->thread_id, 1, $mtf->id, $mtf->post_stamp); } else { th_inc_post_count($mtf->thread_id, 1); } th_reply_rebuild($mtf->forum_id, $mtf->thread_id, $mtf->thread_opt & (2|4|8)); $threads = 0; } /* Update forum thread & post count as well as last_post_id field. */ q('UPDATE fud30_forum SET post_count=post_count+1, thread_count=thread_count+'. $threads .', last_post_id='. $mtf->last_post_id .' WHERE id='. $mtf->forum_id); if ($mtf->poll_id) { poll_activate($mtf->poll_id, $mtf->forum_id); } $mtf->body = read_msg_body($mtf->foff, $mtf->length, $mtf->file_id); if ($GLOBALS['FUD_OPT_1'] & 16777216) { // FORUM_SEARCH enabled? index_text((strncasecmp($mtf->subject, 'Re: ', 4) ? $mtf->subject : ''), $mtf->body, $mtf->id); } /* Handle notifications. */ if (!($GLOBALS['FUD_OPT_3'] & 1048576)) { // not DISABLE_NOTIFICATION_EMAIL if ($mtf->root_msg_id == $mtf->id || $GLOBALS['FUD_OPT_3'] & 16384) { // FORUM_NOTIFY_ALL if (empty($mtf->frm_last_post_date)) { $mtf->frm_last_post_date = 0; } /* Send new thread notifications to forum subscribers. */ $to = db_all('SELECT u.email FROM fud30_forum_notify fn INNER JOIN fud30_users u ON fn.user_id=u.id AND '. q_bitand('u.users_opt', 134217728) .' = 0 INNER JOIN fud30_group_cache g1 ON g1.user_id=2147483647 AND g1.resource_id='. $mtf->forum_id . ($GLOBALS['FUD_OPT_3'] & 64 ? ' LEFT JOIN fud30_forum_read r ON r.forum_id=fn.forum_id AND r.user_id=fn.user_id ' : ''). ' LEFT JOIN fud30_group_cache g2 ON g2.user_id=fn.user_id AND g2.resource_id='. $mtf->forum_id . ' LEFT JOIN fud30_mod mm ON mm.forum_id='. $mtf->forum_id .' AND mm.user_id=u.id WHERE fn.forum_id='. $mtf->forum_id .' AND fn.user_id!='. (int)$mtf->poster_id . ($GLOBALS['FUD_OPT_3'] & 64 ? ' AND (CASE WHEN (r.last_view IS NULL AND (u.last_read=0 OR u.last_read >= '. $mtf->frm_last_post_date .')) OR r.last_view > '. $mtf->frm_last_post_date .' THEN 1 ELSE 0 END)=1 ' : ''). ' AND ('. q_bitand('COALESCE(g2.group_cache_opt, g1.group_cache_opt)', 2) .' > 0 OR '. q_bitand('u.users_opt', 1048576) .' > 0 OR mm.id IS NOT NULL)'. ' AND '. q_bitand('u.users_opt', 65536) .' = 0'); if ($GLOBALS['FUD_OPT_3'] & 16384) { $notify_type = 'thr'; } else { $notify_type = 'frm'; } } else { $to = array(); } if ($mtf->root_msg_id != $mtf->id) { /* Send new reply notifications to thread subscribers. */ $tmp = db_all('SELECT u.email FROM fud30_thread_notify tn INNER JOIN fud30_users u ON tn.user_id=u.id AND '. q_bitand('u.users_opt', 134217728) .' = 0 INNER JOIN fud30_group_cache g1 ON g1.user_id=2147483647 AND g1.resource_id='. $mtf->forum_id . ($GLOBALS['FUD_OPT_3'] & 64 ? ' LEFT JOIN fud30_read r ON r.thread_id=tn.thread_id AND r.user_id=tn.user_id ' : ''). ' LEFT JOIN fud30_group_cache g2 ON g2.user_id=tn.user_id AND g2.resource_id='. $mtf->forum_id . ' LEFT JOIN fud30_mod mm ON mm.forum_id='. $mtf->forum_id .' AND mm.user_id=u.id WHERE tn.thread_id='. $mtf->thread_id .' AND tn.user_id!='. (int)$mtf->poster_id . ($GLOBALS['FUD_OPT_3'] & 64 ? ' AND (r.msg_id='. $mtf->last_post_id .' OR (r.msg_id IS NULL AND '. $mtf->post_stamp .' > u.last_read)) ' : ''). ' AND ('. q_bitand('COALESCE(g2.group_cache_opt, g1.group_cache_opt)', 2) .' > 0 OR '. q_bitand('u.users_opt', 1048576) .' > 0 OR mm.id IS NOT NULL)'. ' AND '. q_bitand('u.users_opt', 65536) .' = 0'); $to = !$to ? $tmp : array_unique(array_merge($to, $tmp)); $notify_type = 'thr'; } if ($mtf->forum_opt & 64) { // always_notify_mods $tmp = db_all('SELECT u.email FROM fud30_mod mm INNER JOIN fud30_users u ON u.id=mm.user_id WHERE mm.forum_id='. $mtf->forum_id); $to = !$to ? $tmp : array_unique(array_merge($to, $tmp)); } if ($to) { send_notifications($to, $mtf->id, $mtf->subject, $mtf->alias, $notify_type, ($notify_type == 'thr' ? $mtf->thread_id : $mtf->forum_id), $mtf->frm_name, $mtf->forum_id); } } // Handle Mailing List and/or Newsgroup syncronization. if (($mtf->nntp_id || $mtf->mlist_id) && !$mtf->mlist_msg_id) { fud_use('email_msg_format.inc', 1); $from = $mtf->poster_id ? reverse_fmt($mtf->real_name) .' <'. $mtf->email .'>' : $GLOBALS['ANON_NICK'] .' <'. $GLOBALS['NOTIFY_FROM'] .'>'; $body = $mtf->body . (($mtf->msg_opt & 1 && $mtf->sig) ? "\n-- \n" . $mtf->sig : ''); $body = plain_text($body, '<cite>', '</cite><blockquote>', '</blockquote>'); $mtf->subject = reverse_fmt($mtf->subject); if ($mtf->reply_to) { // Get the parent message's Message-ID: if ( !($replyto_id = q_singleval('SELECT mlist_msg_id FROM fud30_msg WHERE id='. $mtf->reply_to))) { fud_logerror('WARNING: Send reply with no Message-ID. The import script is not running or may be lagging.', 'fud_errors'); } } else { $replyto_id = 0; } if ($mtf->attach_cnt) { $r = uq('SELECT a.id, a.original_name, COALESCE(m.mime_hdr, \'application/octet-stream\') FROM fud30_attach a LEFT JOIN fud30_mime m ON a.mime_type=m.id WHERE a.message_id='. $mtf->id .' AND a.attach_opt=0'); while ($ent = db_rowarr($r)) { $attach[$ent[1]] = file_get_contents($GLOBALS['FILE_STORE'] . $ent[0] .'.atch'); $attach_mime[$ent[1]] = $ent[2]; } unset($r); } else { $attach_mime = $attach = null; } if ($mtf->nntp_id) { // Push out to usenet group. fud_use('nntp.inc', true); $nntp_adm = db_sab('SELECT * FROM fud30_nntp WHERE id='. $mtf->nntp_id); if (!empty($nntp_adm->custom_sig)) { // Add signature marker. $nntp_adm->custom_sig = "\n-- \n". $nntp_adm->custom_sig; } $nntp = new fud_nntp; $nntp->server = $nntp_adm->server; $nntp->newsgroup = $nntp_adm->newsgroup; $nntp->port = $nntp_adm->port; $nntp->timeout = $nntp_adm->timeout; $nntp->nntp_opt = $nntp_adm->nntp_opt; $nntp->user = $nntp_adm->login; $nntp->pass = $nntp_adm->pass; define('sql_p', 'fud30_'); $lock = $nntp->get_lock(); $nntp->post_message($mtf->subject, $body . $nntp_adm->custom_sig, $from, $mtf->id, $replyto_id, $attach, $attach_mime); $nntp->close_connection(); $nntp->release_lock($lock); } else { // Push out to mailing list. fud_use('mlist_post.inc', true); $r = db_saq('SELECT name, additional_headers, custom_sig, fixed_from_address FROM fud30_mlist WHERE id='. $mtf->mlist_id); // Add forum's signature to the messages. if (!empty($r[2])) { $body .= "\n-- \n". $r[2]; } if (!empty($r[3])) { // Use the forum's fixed "From:" address. mail_list_post($r[0], $r[3], $mtf->subject, $body, $mtf->id, $replyto_id, $attach, $attach_mime, $r[1]); } else { // Use poster's e-mail as the "From" address. mail_list_post($r[0], $from, $mtf->subject, $body, $mtf->id, $replyto_id, $attach, $attach_mime, $r[1]); } } } // Message Approved plugins. if (defined('plugins')) { plugin_call_hook('POST_APPROVE', $mtf); } } } function write_body($data, &$len, &$offset, $fid) { $MAX_FILE_SIZE = 2140000000; $len = strlen($data); $i = 1; db_lock('fud30_fl_'. $fid .' WRITE'); $s = $fid * 10000; $e = $s + 100; while ($s < $e) { $fp = fopen($GLOBALS['MSG_STORE_DIR'] .'msg_'. $s, 'ab'); if (!$fp) { exit('FATAL ERROR: could not open message store for forum id#'. $s ."<br />\n"); } fseek($fp, 0, SEEK_END); if (!($off = ftell($fp))) { $off = __ffilesize($fp); } if (!$off || ($off + $len) < $MAX_FILE_SIZE) { break; } fclose($fp); $s++; } if (fwrite($fp, $data) !== $len) { if ($fid) { db_unlock(); } exit("FATAL ERROR: system has ran out of disk space.<br />\n"); } fclose($fp); db_unlock(); if (!$off) { @chmod('msg_'. $s, ($GLOBALS['FUD_OPT_2'] & 8388608 ? 0600 : 0644)); } $offset = $off; return $s; } function trim_html($str, $maxlen) { $n = strlen($str); $ln = 0; $tree = array(); for ($i = 0; $i < $n; $i++) { if ($str[$i] != '<') { $ln++; if ($ln > $maxlen) { break; } continue; } if (($p = strpos($str, '>', $i)) === false) { break; } for ($k = $i; $k < $p; $k++) { switch ($str[$k]) { case ' ': case "\r": case "\n": case "\t": case '>': break 2; } } if ($str[$i+1] == '/') { $tagname = strtolower(substr($str, $i+2, $k-$i-2)); if (@end($tagindex[$tagname])) { $k = key($tagindex[$tagname]); unset($tagindex[$tagname][$k], $tree[$k]); } } else { $tagname = strtolower(substr($str, $i+1, $k-$i-1)); switch ($tagname) { case 'br': case 'img': case 'meta': break; default: $tree[] = $tagname; end($tree); $tagindex[$tagname][key($tree)] = 1; } } $i = $p; } $data = substr($str, 0, $i); if ($tree) { foreach (array_reverse($tree) as $v) { $data .= '</'. $v .'>'; } } return $data; } function make_email_message(&$body, &$obj, $iemail_unsub) { $TITLE_EXTRA = $iemail_poll = $iemail_attach = ''; if ($obj->poll_cache) { $pl = unserialize($obj->poll_cache); if (!empty($pl)) { foreach ($pl as $k => $v) { $length = ($v[1] && $obj->total_votes) ? round($v[1] / $obj->total_votes * 100) : 0; $iemail_poll .= '<tr class="'.alt_var('msg_poll_alt_clr','RowStyleB','RowStyleA').'"> <td>'.$k.'.</td> <td>'.$v[0].'</td> <td> <img src="[[relativeurl]]/theme/default/images/poll_pix.gif" alt="" height="10" width="'.$length.'" /> '.$v[1].' / '.$length.'% </td> </tr>'; } $iemail_poll = '<table cellspacing="1" cellpadding="2" class="PollTable"> <tr> <th colspan="3">'.$obj->poll_name.' <img src="[[relativeurl]]/blank.gif" alt="" height="1" width="10" class="nw" /> <span class="small">[ '.$obj->total_votes.' '.convertPlural($obj->total_votes, array('vote','votes')).' ]</span> </th> </tr> '.$iemail_poll.' </table> <br /><br />'; } } if ($obj->attach_cnt && $obj->attach_cache) { $atch = unserialize($obj->attach_cache); if (!empty($atch)) { foreach ($atch as $v) { $sz = $v[2] / 1024; $sz = $sz < 1000 ? number_format($sz, 2) .'KB' : number_format($sz/1024, 2) .'MB'; $iemail_attach .= '<tr> <td class="vm"><a href="[[softurl]]/index.php?t=getfile&id='.$v[0].'"><img alt="" src="[[relativeurl]]/images/mime/'.$v[4].'" /></a></td> <td> <span class="GenText fb">Attachment:</span> <a href="[[softurl]]/index.php?t=getfile&id='.$v[0].'">'.$v[1].'</a><br /> <span class="SmallText">(Size: '.$sz.', Downloaded '.convertPlural($v[3], array(''.$v[3].' time',''.$v[3].' times')).')</span> </td> </tr>'; } $iemail_attach = '<br /><br /> <table border="0" cellspacing="0" cellpadding="2"> '.$iemail_attach.' </table>'; } } if ($GLOBALS['FUD_OPT_2'] & 32768 && defined('_rsid')) { $pfx = str_repeat('/', substr_count(_rsid, '/')); } // Remove all JavaScript. Spam filters like SpamAssassin don't like them. return preg_replace('#<script[^>]*>.*?</script>#is', '', '<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <meta name=viewport content="width=device-width, initial-scale=1"> <title>'.$GLOBALS['FORUM_TITLE'].$TITLE_EXTRA.'</title> <script src="[[relativeurl]]/js/lib.js"></script> <script async src="[[relativeurl]]/js/jquery.js"></script> <script async src="[[relativeurl]]/js/ui/jquery-ui.js"></script> <link rel="stylesheet" href="[[relativeurl]]/theme/default/forum.css" /> </head> <body> <div class="content"> <table cellspacing="1" cellpadding="2" class="ContentTable"> <tr class="RowStyleB"> <td width="33%"><b>Subject:</b> '.$obj->subject.'</td> <td width="33%"><b>Author:</b> '.$obj->alias.'</td> <td width="33%"><b>Date:</b> '.print_date('%a, %d %B %Y %H:%M', $obj->post_stamp).'</td> </tr> <tr class="RowStyleA"> <td colspan="3"> '.$iemail_poll.' '.$body.' '.$iemail_attach.' </td> </tr> <tr class="RowStyleB"> <td colspan="3"> [ <a href="[[softurl]]/index.php?t=post&reply_to='.$obj->id.'">Reply</a> ][ <a href="[[softurl]]/index.php?t=post&reply_to='.$obj->id.'"e=true">Quote</a> ][ <a href="[[softurl]]/index.php?t=rview&goto='.$obj->id.'#msg_'.$obj->id.'">View Topic/Message</a> ]'.$iemail_unsub.' </td> </tr> </table> </div> </body></html>'); } function poll_cache_rebuild($poll_id) { if (!$poll_id) { return; } $data = array(); $c = uq('SELECT id, name, votes FROM fud30_poll_opt WHERE poll_id='. $poll_id); while ($r = db_rowarr($c)) { $data[$r[0]] = array($r[1], $r[2]); } unset($c); if ($data) { return serialize($data); } else { return; } } function send_notifications($to, $msg_id, $thr_subject, $poster_login, $id_type, $id, $frm_name, $frm_id) { if (!$to) { return; } $goto_url['email'] = ''.$GLOBALS['WWW_ROOT'].'?t=rview&goto='. $msg_id .'#msg_'. $msg_id; $CHARSET = $GLOBALS['CHARSET']; if ($GLOBALS['FUD_OPT_2'] & 64) { // NOTIFY_WITH_BODY $munge_newlines = 0; $obj = db_sab('SELECT p.total_votes, p.name AS poll_name, m.reply_to, m.subject, m.id, m.post_stamp, m.poster_id, m.foff, m.length, m.file_id, u.alias, m.attach_cnt, m.attach_cache, m.poll_cache FROM fud30_msg m LEFT JOIN fud30_users u ON m.poster_id=u.id LEFT JOIN fud30_poll p ON m.poll_id=p.id WHERE m.id='. $msg_id .' AND m.apr=1'); if (!$obj->alias) { /* anon user */ $obj->alias = htmlspecialchars($GLOBALS['ANON_NICK']); } $headers = "MIME-Version: 1.0\r\n"; if ($obj->reply_to) { $headers .= 'In-Reply-To: '. $obj->reply_to ."\r\n"; } $headers .= 'List-Id: '. $frm_id .'.'. (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'localhost') ."\r\n"; $split = get_random_value(128); $headers .= "Content-Type: multipart/alternative;\n boundary=\"------------". $split ."\"\r\n"; $boundry = "\r\n--------------". $split ."\r\n"; $pfx = ''; if ($GLOBALS['FUD_OPT_2'] & 32768 && !empty($_SERVER['PATH_INFO'])) { if ($GLOBALS['FUD_OPT_1'] & 128) { $pfx .= '0/'; } if ($GLOBALS['FUD_OPT_2'] & 8192) { $pfx .= '0/'; } } $plain_text = read_msg_body($obj->foff, $obj->length, $obj->file_id); $iemail_unsub = html_entity_decode($id_type == 'thr' ? '[ <a href="[[softurl]]/index.php?t=rview&th='.$id.'">Unsubscribe from this topic</a> ]' : '[ <a href="[[softurl]]/index.php?t=rview&frm_id='.$id.'">Unsubscribe from this forum</a> ]'); $body_email = $boundry .'Content-Type: text/plain; charset='. $CHARSET ."; format=flowed\r\nContent-Transfer-Encoding: 8bit\r\n\r\n" . html_entity_decode(strip_tags($plain_text)) . "\r\n\r\n" . html_entity_decode('To participate in the discussion, go here:') .' '. ''.$GLOBALS['WWW_ROOT'].'?t=rview&'. ($id_type == 'thr' ? 'th' : 'frm_id') .'='. $id ."\r\n". $boundry .'Content-Type: text/html; charset='. $CHARSET ."\r\nContent-Transfer-Encoding: 8bit\r\n\r\n". make_email_message($plain_text, $obj, $iemail_unsub) ."\r\n". substr($boundry, 0, -2) ."--\r\n"; } else { $munge_newlines = 1; $headers = ''; } $thr_subject = reverse_fmt($thr_subject); $poster_login = reverse_fmt($poster_login); if ($id_type == 'thr') { $subj = html_entity_decode('New reply to '.$thr_subject.' by '.$poster_login.''); if (!isset($body_email)) { $unsub_url['email'] = ''.$GLOBALS['WWW_ROOT'].'?t=rview&th='. $id .'¬ify=1&opt=off'; $body_email = html_entity_decode('To view unread replies go to '.$goto_url['email'].'\n\nIf you do not wish to receive further notifications about replies in this topic, please go here: '.$unsub_url['email'].''); } } else if ($id_type == 'frm') { $frm_name = reverse_fmt($frm_name); $subj = html_entity_decode('New topic in forum '.$frm_name.', called '.$thr_subject.', by '.$poster_login.''); if (!isset($body_email)) { $unsub_url['email'] = ''.$GLOBALS['WWW_ROOT'].'?t=rview&unsub=1&frm_id='. $id; $body_email = html_entity_decode('To view the topic go to:\n'.$goto_url['email'].'\n\nTo stop receiving notifications about new topics in this forum, please go here: '.$unsub_url['email'].''); } } send_email($GLOBALS['NOTIFY_FROM'], $to, $subj, $body_email, $headers, $munge_newlines); } ?>
Close