whoami7 - Manager
:
/
home
/
creaupfw
/
public_html
/
wp-includes
/
assets
/
Upload File:
files >> /home/creaupfw/public_html/wp-includes/assets/fud.zip
PK �Zr-7�� � feed.phpnu �[��� <?php /** * copyright : (C) 2001-2021 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. **/ if (function_exists('mb_internal_encoding')) { mb_internal_encoding('utf-8'); } require('./GLOBALS.php'); fud_use('err.inc'); /* Before we go on, we need to do some very basic activation checks. */ if (!($FUD_OPT_1 & 1)) { // FORUM_ENABLED fud_use('errmsg.inc'); exit_forum_disabled('xml'); } /* Control options. */ $mode = (isset($_GET['mode']) && in_array($_GET['mode'], array('m', 't', 'u'))) ? $_GET['mode'] : 'm'; $basic = isset($_GET['basic']); $format = 'rdf'; // Default syndication type. if (isset($_GET['format'])) { if (strtolower(substr($_GET['format'], 0, 4)) == 'atom') { $format = 'atom'; } else if (strtolower(substr($_GET['format'], 0, 3)) == 'rss') { $format = 'rss'; } } if (!isset($_GET['th'])) { $_GET['l'] = 1; // Unless thread is syndicated, we will always order entries from newest to oldest. } # define('fud_query_stats', 1); class db { public static $db, $slave; } if (empty(db::$db)) { // Use MYSQLI_REPORT_OFF so we can check error codes manually. $driver = new mysqli_driver(); $driver->report_mode = MYSQLI_REPORT_OFF; if (substr($GLOBALS['DBHOST'], 0, 1) == ':') { // Socket connection. $socket = substr($GLOBALS['DBHOST'], 1); $GLOBALS['DBHOST'] = 'localhost'; } else { $socket = NULL; } if ($GLOBALS['FUD_OPT_1'] & 256 && $socket == NULL && version_compare(PHP_VERSION, '5.3.0', '>=')) { // Enable pconnect for PHP 5.3+. $GLOBALS['DBHOST'] = 'p:'. $GLOBALS['DBHOST']; } db::$db = new mysqli($GLOBALS['DBHOST'], $GLOBALS['DBHOST_USER'], $GLOBALS['DBHOST_PASSWORD'], $GLOBALS['DBHOST_DBNAME'], NULL, $socket); if (mysqli_connect_errno()) { fud_sql_error_handler('Failed to establish database connection', 'MySQLi says: '. mysqli_connect_error(), mysqli_connect_errno(), ''); } db::$db->set_charset('utf8'); /* Connect to slave, if specified. */ if (!empty($GLOBALS['DBHOST_SLAVE_HOST']) && !$GLOBALS['is_post']) { db::$slave = new mysqli($GLOBALS['DBHOST'], $GLOBALS['DBHOST_USER'], $GLOBALS['DBHOST_PASSWORD'], $GLOBALS['DBHOST_DBNAME'], NULL, $socket); if (mysqli_connect_errno()) { fud_logerror('Unable to init SlaveDB, fallback to MasterDB: '. mysqli_connect_error(), 'sql_errors'); } else { db::$db->set_charset('utf8'); } } define('__dbtype__', 'mysql'); } function db_close() { db::$db->close(); } function db_version() { if (!defined('__FUD_SQL_VERSION__')) { $ver = q_singleval('SELECT VERSION()'); define('__FUD_SQL_VERSION__', $ver); } return __FUD_SQL_VERSION__; } function db_lock($tables) { if (!empty($GLOBALS['__DB_INC_INTERNALS__']['db_locked'])) { fud_sql_error_handler('Recursive Lock', 'internal', 'internal', db_version()); } else { q('LOCK TABLES '. $tables); $GLOBALS['__DB_INC_INTERNALS__']['db_locked'] = 1; } } function db_unlock() { if (empty($GLOBALS['__DB_INC_INTERNALS__']['db_locked'])) { unset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']); fud_sql_error_handler('DB_UNLOCK: no previous lock established', 'internal', 'internal', db_version()); } if (--$GLOBALS['__DB_INC_INTERNALS__']['db_locked'] < 0) { unset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']); fud_sql_error_handler('DB_UNLOCK: unlock overcalled', 'internal', 'internal', db_version()); } unset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']); q('UNLOCK TABLES'); } function db_locked() { return isset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']); } function db_affected() { return db::$db->affected_rows; } function uq($query) { return q($query); } if (!defined('fud_query_stats')) { function q($query) { // Assume master DB, route SELECT's to slave DB. // Force master if DB is locked (in transaction) or 'SELECT /* USE MASTER */'. $db = db::$db; if (!empty(db::$slave) && !db_locked() && !strncasecmp($query, 'SELECT', 6) && strncasecmp($query, 'SELECT /* USE MASTER */', 23)) { $db = db::$slave; } $r = $db->query($query); if ($db->error) { fud_sql_error_handler($query, $db->error, $db->errno, db_version()); } return $r; } } else { function q($query) { if (!isset($GLOBALS['__DB_INC_INTERNALS__']['query_count'])) { $GLOBALS['__DB_INC_INTERNALS__']['query_count'] = 1; } else { ++$GLOBALS['__DB_INC_INTERNALS__']['query_count']; } if (!isset($GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'])) { $GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'] = 0; } // Assume master DB, route SELECT's to slave DB. // Force master if DB is locked (in transaction) or 'SELECT /* USE MASTER */'. $db = db::$db; if (!empty(db::$slave) && !db_locked() && !strncasecmp($query, 'SELECT', 6) && strncasecmp($query, 'SELECT /* USE MASTER */', 23)) { $db = db::$slave; } $s = microtime(true); $result = $db->query($query); if ($db->error) { fud_sql_error_handler($query, $db->error, $db->errno, db_version()); } $e = microtime(true); $GLOBALS['__DB_INC_INTERNALS__']['last_time'] = ($e - $s); $GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'] += $GLOBALS['__DB_INC_INTERNALS__']['last_time']; echo '<hr><b>Query #'. $GLOBALS['__DB_INC_INTERNALS__']['query_count'] .'</b><small>'; echo ': time taken: <i>'. number_format($GLOBALS['__DB_INC_INTERNALS__']['last_time'], 4) .'</i>'; echo ', affected rows: <i>'. db_affected() .'</i>'; echo ', total sql time: <i>'. number_format($GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'], 4) .'</i>'; echo '<pre>'. preg_replace('!\s+!', ' ', htmlspecialchars($query)) .'</pre></small>'; return $result; } } function db_rowobj($result) { return $result->fetch_object(); } function db_rowarr($result) { return $result->fetch_row(); } function q_singleval($query) { $r = q($query); if (($result = $r->fetch_row()) !== false && isset($result)) { return isset($result) ? $result[0] : ''; } } function q_limit($query, $limit, $off=0) { return $query .' LIMIT '. $limit .' OFFSET '. $off; } function q_concat($arg) { // MySQL badly breaks the SQL standard by redefining || to mean OR. $tmp = func_get_args(); return 'CONCAT('. implode(',', $tmp) .')'; } function q_rownum() { q('SET @seq=0'); // For simulating rownum. return '(@seq:=@seq+1)'; } function q_bitand($fieldLeft, $fieldRight) { return $fieldLeft .' & '. $fieldRight; } function q_bitor($fieldLeft, $fieldRight) { return '('. $fieldLeft .' | '. $fieldRight .')'; } function q_bitnot($bitField) { return '~'. $bitField; } function db_saq($q) { $r = q($q); return $r->fetch_row() ; } function db_sab($q) { $r = q($q); return $r->fetch_object(); } function db_qid($q) { q($q); return db::$db->insert_id; } function db_arr_assoc($q) { $r = q($q); return $r->fetch_array(MYSQLI_ASSOC); } function db_fetch_array($r) { return is_object($r) ? $r->fetch_array(MYSQLI_ASSOC) : null; } function db_li($q, &$ef, $li=0) { $r = db::$db->query($q); if ($r) { return ($li ? db::$db->insert_id : $r); } /* Duplicate key. */ if (db::$db->errno == 1062) { $ef = ltrim(strrchr(db::$db->error, ' ')); return null; } else { fud_sql_error_handler($q, db::$db->error, db::$db->errno, db_version()); } } function ins_m($tbl, $flds, $types, $vals) { q('INSERT IGNORE INTO '. $tbl .' ('. $flds .') VALUES ('. implode('),(', $vals) .')'); } function db_all($q) { $f = array(); $c = uq($q); while ($r = $c->fetch_row()) { $f[] = $r[0]; } return $f; } function _esc($s) { return '\''. db::$db->real_escape_string($s ?? '') .'\''; }function read_msg_body($off, $len, $id) { if ($off == -1) { // Fetch from DB and return. return q_singleval('SELECT data FROM fud30_msg_store WHERE id='. $id); } if (!$len) { // Empty message. return; } // Open file if it's not already open. if (!isset($GLOBALS['__MSG_FP__'][$id])) { $GLOBALS['__MSG_FP__'][$id] = fopen($GLOBALS['MSG_STORE_DIR'] .'msg_'. $id, 'rb'); } // Read from file. fseek($GLOBALS['__MSG_FP__'][$id], $off); return fread($GLOBALS['__MSG_FP__'][$id], $len); }$GLOBALS['__revfs'] = array('"', '<', '>', '&'); $GLOBALS['__revfd'] = array('"', '<', '>', '&'); function reverse_fmt($data) { $s = $d = array(); if (empty($data)) return ''; foreach ($GLOBALS['__revfs'] as $k => $v) { if (strpos($data, $v) !== false) { $s[] = $v; $d[] = $GLOBALS['__revfd'][$k]; } } return $s ? str_replace($s, $d, $data) : $data; } if (!($FUD_OPT_2 & 16777216) || (!($FUD_OPT_2 & 67108864) && $mode == 'u')) { fud_use('cookies.inc'); fud_use('users.inc'); std_error('disabled'); } if ($FUD_OPT_2 & 16384) { ob_start('ob_gzhandler', (int)$PHP_COMPRESSION_LEVEL); } function sp($data) { return '<![CDATA['. str_replace(array('[', ']'), array('[', ']'), $data) .']]>'; } function email_format($data) { return str_replace(array('.', '@'), array(' dot ', ' at '), $data); } function multi_id($data) { $out = array(); foreach (explode(',', (string)$data) as $v) { $out[] = (int) $v; } return implode(',', $out); } $enc_src = array('<br>', '&', "\r", ' ', '<', '>', chr(0)); $enc_dst = array('<br />', '&', ' ', ' ', '<', '>', '�'); function fud_xml_encode($str) { return str_replace($GLOBALS['enc_src'], $GLOBALS['enc_dst'], $str); } function feed_cache_cleanup() { $cache_files = glob($GLOBALS['FORUM_SETTINGS_PATH'].'feed_cache_*'); if (is_array($cache_files)) { foreach ($cache_files as $v) { $filemtime = @filemtime($v); if ($filemtime && $filemtime + $GLOBALS['FEED_CACHE_AGE'] < __request_timestamp__) { unlink($v); } } } } /** Change relative smiley URLs to full ones. */ function smiley_full(&$data) { if (strpos($data, '<img src="images/smiley_icons/') !== false) { $data = str_replace('<img src="images/smiley_icons/', '<img src="'. $GLOBALS['WWW_ROOT'] .'images/smiley_icons/', $data); } } /* supported modes of output * m - messages * t - threads * u - users */ if (@count($_GET) < 2) { $_GET['ds'] = __request_timestamp__ - 86400; $_GET['l'] = 1; $_GET['n'] = 10; } define('__ROOT__', $WWW_ROOT .'index.php'); $res = 0; $offset = isset($_GET['o']) ? (int)$_GET['o'] : 0; if ($FEED_CACHE_AGE) { register_shutdown_function('feed_cache_cleanup'); $key = $_GET; if ($FEED_AUTH_ID) { $key['auth_id'] = $FEED_AUTH_ID; } unset($key['S'], $key['rid'], $key['SQ']); // Remove irrelavent components. $key = array_change_key_case($key, CASE_LOWER); // Cleanup the key. $key = array_map('strtolower', $key); ksort($key); $file_name = $FORUM_SETTINGS_PATH .'feed_cache_'. md5(serialize($key)); if (file_exists($file_name) && (($t = filemtime($file_name)) + $FEED_CACHE_AGE) > __request_timestamp__) { $mod = gmdate('D, d M Y H:i:s', $t) .' GMT'; if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && !isset($_SERVER['HTTP_RANGE']) && $_SERVER['HTTP_IF_MODIFIED_SINCE'] == $mod) { header('HTTP/1.1 304 Not Modified'); header('Status: 304 Not Modified'); return; } header('Content-Type: application/'.$format.'+xml'); header('Last-Modified: '. $mod); readfile($file_name); return; } ob_start(); } if ($FEED_MAX_N_RESULTS < 1) { // Handler for events when the value is not set. $FEED_MAX_N_RESULTS = 10; } $limit = (isset($_GET['n']) && $_GET['n'] <= $FEED_MAX_N_RESULTS) ? (int)$_GET['n'] : $FEED_MAX_N_RESULTS; $feed_data = $feed_header = $join = ''; switch ($mode) { case 'm': $lmt = ' t.moved_to=0 AND m.apr=1'; /* check for various supported limits * cat - category * frm - forum * th - thread * id - message id * ds - start date * de - date end * o - offset * n - number of rows to get * l - latest * sf - subcribed forums based on user id * st - subcribed topics based on user id * basic - output basic info parsable by all rdf parsers */ if (isset($_GET['sf'])) { $_GET['frm'] = db_all('SELECT forum_id FROM fud30_forum_notify WHERE user_id='. (int)$_GET['sf']); } else if (isset($_GET['st'])) { $_GET['th'] = db_all('SELECT thread_id FROM fud30_thread_notify WHERE user_id='. (int)$_GET['sf']); } if (isset($_GET['cat'])) { $lmt .= ' AND f.cat_id IN('. multi_id($_GET['cat']) .')'; } if (isset($_GET['frm'])) { $lmt .= ' AND t.forum_id IN('. multi_id($_GET['frm']) .')'; } if (isset($_GET['th'])) { $lmt .= ' AND m.thread_id IN('. multi_id($_GET['th']) .')'; } if (isset($_GET['id'])) { $lmt .= ' AND m.id IN('. multi_id($_GET['id']) .')'; } if (isset($_GET['ds'])) { $lmt .= ' AND m.post_stamp >='. (int)$_GET['ds']; } if (isset($_GET['de'])) { $lmt .= ' AND m.post_stamp <='. (int)$_GET['de']; } /* This is an optimization so that the forum does not need to * go through the entire message db to fetch latest messages. * So, instead we set an arbitrary search limit of 14 days. */ if (isset($_GET['l']) && $lmt == ' t.moved_to=0 AND m.apr=1') { $lmt .= ' AND t.last_post_date >='. (__request_timestamp__ - 86400 * 14); } if ($FUD_OPT_2 & 33554432) { // FEED_AUTH if ($FEED_AUTH_ID) { $join = ' INNER JOIN fud30_group_cache g1 ON g1.user_id=2147483647 AND g1.resource_id=f.id LEFT JOIN fud30_group_cache g2 ON g2.user_id='. $FEED_AUTH_ID .' AND g2.resource_id=f.id LEFT JOIN fud30_mod mm ON mm.forum_id=f.id AND mm.user_id='. $FEED_AUTH_ID .' '; $lmt .= ' AND (mm.id IS NOT NULL OR '. q_bitand('COALESCE(g2.group_cache_opt, g1.group_cache_opt)', 2) .' > 0)'; } else { $join = ' INNER JOIN fud30_group_cache g1 ON g1.user_id=0 AND g1.resource_id=f.id '; $lmt .= ' AND '. q_bitand('g1.group_cache_opt', 2) .' > 0'; } } $c = q(q_limit('SELECT m.*, u.alias, t.forum_id, p.name AS poll_name, p.total_votes, m2.subject AS th_subject, m3.subject AS reply_subject, f.name AS frm_name, c.name AS cat_name 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 INNER JOIN fud30_cat c ON c.id=f.cat_id INNER JOIN fud30_msg m2 ON t.root_msg_id=m2.id LEFT JOIN fud30_msg m3 ON m3.id=m.reply_to LEFT JOIN fud30_users u ON m.poster_id=u.id LEFT JOIN fud30_poll p ON m.poll_id=p.id '. $join .' WHERE '. $lmt .' ORDER BY m.post_stamp '. (isset($_GET['l']) ? 'DESC' : 'ASC'), $limit, $offset)); while ($r = db_rowobj($c)) { if (!$res) { header('Content-Type: application/'.$format.'+xml'); $res = 1; } $body = read_msg_body($r->foff, $r->length, $r->file_id); smiley_full($body); if ($format == 'rdf') { $feed_header .= '<rdf:li rdf:resource="[[softurl]]/index.phpindex.php?t=rview&goto='.$r->id.'&th='.$r->thread_id.'#msg_'.$r->id.'" />'; $rdf_message_attachments = ''; if ($r->attach_cnt && $r->attach_cache) { if (($al = unserialize($r->attach_cache))) { foreach ($al as $a) { $rdf_message_attachments .= '<rdf:li> <content:item rdf:about="attachments"> <a_title>'.sp($a[1]).'</a_title> <a_id>'.$a[0].'</a_id> <a_size>'.$a[2].'</a_size> <a_nd>'.$a[3].'</a_nd> </content:item> </rdf:li>'; } } } $rdf_message_polls = ''; if ($r->poll_name) { if ($r->poll_cache) { if (($pc = unserialize($r->poll_cache))) { foreach ($pc as $o) { $rdf_message_polls .= '<rdf:li> <content:item rdf:about="poll_opt"> <opt_title>'.sp($o[0]).'</opt_title> <opt_votes>'.$o[1].'</opt_votes> </content:item> </rdf:li>'; } } } } $feed_data .= ($basic ? ' <item rdf:about="[[softurl]]/index.phpindex.php?t=rview&goto='.$r->id.'&th='.$r->thread_id.'#msg_'.$r->id.'"> <title>'.htmlspecialchars($r->subject).'</title> <link>[[softurl]]/index.phpindex.php?t=rview&goto='.$r->id.'&th='.$r->thread_id.'#msg_'.$r->id.'</link> <description>'.sp($body).'</description> <dc:subject></dc:subject> <dc:creator>'.$r->alias.'</dc:creator> <dc:date>'.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00</dc:date> </item> ' : ' <item> <title>'.sp($r->subject).'</title> <topic_id>'.$r->thread_id.'</topic_id> <topic_title>'.sp($r->th_subject).'</topic_title> <message_id>'.$r->id.'</message_id> <reply_to_id>'.$r->reply_to.'</reply_to_id> <reply_to_title>'.$r->reply_subject.'</reply_to_title> <forum_id>'.$r->forum_id.'</forum_id> <forum_title>'.sp($r->frm_name).'</forum_title> <category_title>'.sp($r->cat_name).'</category_title> <author>'.sp($r->alias).'</author> <author_id>'.$r->poster_id.'</author_id> <date>'.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00</date> <body>'.str_replace("\n", "", sp($body)).'</body> '.($rdf_message_attachments ? ' <content:items><rdf:Bag> '.$rdf_message_attachments.' </rdf:Bag></content:items> ' : '' ) .' '.($rdf_message_polls ? ' <content:items><rdf:Bag><poll_name>'.sp($r->poll_name).'</poll_name><total_votes>'.$r->total_votes.'</total_votes> '.$rdf_message_polls.' </rdf:Bag></content:items> ' : '' ) .' </item> ' ) ; } if ($format == 'rss' ) $feed_data .= '<item> <title>'.htmlspecialchars($r->subject).'</title> <link>[[softurl]]/index.phpindex.php?t=rview&goto='.$r->id.'&th='.$r->thread_id.'#msg_'.$r->id.'</link> <author>'.$r->alias.'</author> <pubDate>'.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00</pubDate> <description>'.sp($body).'</description> </item>'; if ($format == 'atom') $feed_data .= '<entry> <title>'.htmlspecialchars($r->subject).'</title> <link href="[[softurl]]/index.phpindex.php?t=rview&goto='.$r->id.'&th='.$r->thread_id.'#msg_'.$r->id.'" /> <id>[[softurl]]/index.phpindex.php?t=rview&goto='.$r->id.'&th='.$r->thread_id.'#msg_'.$r->id.'</id> <author><name>'.$r->alias.'</name></author> <published>'.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00</published> '.($r->update_stamp ? '<updated>'.gmdate('Y-m-d\TH:i:s', $r->update_stamp).'-00:00</updated>' : '' ) .' <content type="html">'.sp($body).'</content> </entry>'; } if ($res) { if ($format == 'rdf') echo '<?xml version="1.0" encoding="utf-8"?> '.($basic ? ' <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns="http://purl.org/rss/1.0/"> ' : ' <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns="http://purl.org/rss/1.0/"> ' ) .' <channel rdf:about="[[softurl]]/index.php"> <title>'.$FORUM_TITLE.' - RDF feed</title> <link>[[softurl]]/index.php</link> <description>'.sp($GLOBALS['FORUM_DESCR']).'</description> '.($basic && $feed_header ? ' <items> <rdf:Seq> '.$feed_header.' </rdf:Seq> </items> ' : '' ) .' </channel> '.$feed_data.' </rdf:RDF>'; if ($format == 'rss') echo '<?xml version="1.0" encoding="utf-8"?> <rss version="2.0"> <channel> <title>'.$FORUM_TITLE.' - RSS2 feed</title> <link>[[softurl]]/index.php</link> <description>'.sp($GLOBALS['FORUM_DESCR']).'</description> <language>en</language> <pubDate>'.gmdate('Y-m-d\TH:i:s', __request_timestamp__).'-00:00</pubDate> <generator>FUDforum '.$FORUM_VERSION.'</generator> '.$feed_data.' </channel> </rss>'; if ($format == 'atom') echo '<?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> <title>'.$FORUM_TITLE.' - ATOM feed</title> <subtitle>'.sp($GLOBALS['FORUM_DESCR']).'</subtitle> <link href="[[softurl]]/index.php" /> <updated>'.gmdate('Y-m-d\TH:i:s', __request_timestamp__).'-00:00</updated> <id>[[softurl]]/index.php</id> <generator uri="http://fudforum.org/" version="'.$FORUM_VERSION.'">FUDforum</generator> '.$feed_data.' </feed>'; } unset($c); break; case 't': /* check for various supported limits * cat - category * frm - forum * id - topic id * ds - start date * de - date end * o - offset * n - number of rows to get * l - latest */ $lmt = ' t.moved_to=0 AND m.apr=1'; if (isset($_GET['cat'])) { $lmt .= ' AND f.cat_id IN('. multi_id($_GET['cat']) .')'; } if (isset($_GET['frm'])) { $lmt .= ' AND t.forum_id IN('. multi_id($_GET['frm']) .')'; } if (isset($_GET['id'])) { $lmt .= ' AND t.id IN ('. multi_id($_GET['id']) .')'; } if (isset($_GET['ds'])) { $lmt .= ' AND t.last_post_date >='. (int)$_GET['ds']; } if (isset($_GET['de'])) { $lmt .= ' AND t.last_post_date <='. (int)$_GET['de']; } /* This is an optimization so that the forum does not need to * go through the entire message db to fetch latest messages. * So, instead we set an arbitrary search limit if 14 days. */ if (isset($_GET['l']) && $lmt == ' t.moved_to=0 AND m.apr=1') { $lmt .= ' AND t.last_post_date >='. (__request_timestamp__ - 86400 * 14); } if ($FUD_OPT_2 & 33554432) { // FEED_AUTH if ($FEED_AUTH_ID) { $join = ' INNER JOIN fud30_group_cache g1 ON g1.user_id=2147483647 AND g1.resource_id=f.id LEFT JOIN fud30_group_cache g2 ON g2.user_id='. $FEED_AUTH_ID .' AND g2.resource_id=f.id LEFT JOIN fud30_mod mm ON mm.forum_id=f.id AND mm.user_id='. $FEED_AUTH_ID .' '; $lmt .= ' AND (mm.id IS NOT NULL OR '. q_bitand('COALESCE(g2.group_cache_opt, g1.group_cache_opt)', 2) .' > 0)'; } else { $join = ' INNER JOIN fud30_group_cache g1 ON g1.user_id=0 AND g1.resource_id=f.id '; $lmt .= ' AND '. q_bitand('g1.group_cache_opt', 2) .' > 0'; } } $c = q(q_limit('SELECT t.*, f.name AS frm_name, c.name AS cat_name, m.subject, m.post_stamp, m.poster_id, m.foff, m.length, m.file_id, m2.subject AS lp_subject, u.alias FROM fud30_thread t INNER JOIN fud30_forum f ON t.forum_id=f.id INNER JOIN fud30_cat c ON c.id=f.cat_id INNER JOIN fud30_msg m ON t.root_msg_id=m.id INNER JOIN fud30_msg m2 ON t.last_post_id=m2.id LEFT JOIN fud30_users u ON m.poster_id=u.id '. $join .' WHERE '. $lmt . (isset($_GET['l']) ? ' ORDER BY m.post_stamp DESC' : ''), $limit, $offset)); $data = ''; while ($r = db_rowobj($c)) { if (!$res) { header('Content-Type: application/'.$format.'+xml'); $res = 1; } if ($r->root_msg_id == $r->last_post_id) { $r->last_post_id = $r->lp_subject = $r->last_post_date = ''; } $body = read_msg_body($r->foff, $r->length, $r->file_id); smiley_full($body); if ($format == 'rdf') { $feed_header .= '<rdf:li rdf:resource="[[softurl]]/index.phpindex.php?t=rview&th='.$r->id.'" />'; $feed_data .= ($basic ? ' <item rdf:about="[[softurl]]/index.phpindex.php?t=rview&th='.$r->id.'"> <title>'.htmlspecialchars($r->subject).'</title> <link>[[softurl]]/index.phpindex.php?t=rview&th='.$r->id.'</link> <description>'.sp($body).'</description> <dc:subject>'.sp($r->frm_name).'</dc:subject> <dc:creator>'.sp($r->alias).'</dc:creator> <dc:date>'.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00</dc:date> </item> ' : ' <item> <topic_id>'.$r->id.'</topic_id> <topic_title>'.sp($r->subject).'</topic_title> <topic_creation_date>'.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00</topic_creation_date> <forum_id>'.$r->forum_id.'</forum_id> <forum_title>'.sp($r->frm_name).'</forum_title> <category_title>'.sp($r->cat_name).'</category_title> <author>'.sp($r->alias).'</author> <author_id>'.$r->poster_id.'</author_id> <replies>'.$r->replies.'</replies> <views>'.$r->views.'</views> '.($r->last_post_id ? '<last_post_id>'.$r->last_post_id.'</last_post_id>' : '' ) .' '.($r->lp_subject ? '<last_post_subj>'.sp($r->lp_subject).'</last_post_subj>' : '' ) .' '.($r->last_post_date ? '<last_post_date>'.gmdate('Y-m-d\TH:i:s', $r->last_post_date).'-00:00</last_post_date>' : '' ) .' <body>'.str_replace("\n", "", sp($body)).'</body> </item> ' ) ; } if ($format == 'rss' ) $feed_data .= '<item> <title>'.htmlspecialchars($r->subject).'</title> <link>[[softurl]]/index.phpindex.php?t=rview&th='.$r->id.'</link> <author>'.sp($r->alias).'</author> <pubDate>'.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00</pubDate> <description>'.sp($body).'</description> </item>'; if ($format == 'atom') $feed_data .= '<entry> <title>'.htmlspecialchars($r->subject).'</title> '.($r->tdescr ? '<subtitle>'.sp($r->tdescr).'</subtitle>' : '' ) .' <link href="[[softurl]]/index.phpindex.php?t=rview&th='.$r->id.'" /> <id>[[softurl]]/index.phpindex.php?t=rview&th='.$r->id.'</id> <author><name>'.sp($r->alias).'</name></author> <published>'.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00</published> '.($r->last_post_date ? '<updated>'.gmdate('Y-m-d\TH:i:s', $r->last_post_date).'-00:00</updated>' : '' ) .' <content type="html">'.sp($body).'</content> </entry>'; } if ($res) { if ($format == 'rdf') echo '<?xml version="1.0" encoding="utf-8"?> '.($basic ? ' <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns="http://purl.org/rss/1.0/"> ' : ' <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns="http://purl.org/rss/1.0/"> ' ) .' <channel rdf:about="[[softurl]]/index.php"> <title>'.$FORUM_TITLE.' - RDF feed</title> <link>[[softurl]]/index.php</link> <description>'.sp($GLOBALS['FORUM_DESCR']).'</description> '.($basic && $feed_header ? ' <items> <rdf:Seq> '.$feed_header.' </rdf:Seq> </items> ' : '' ) .' </channel> '.$feed_data.' </rdf:RDF>'; if ($format == 'rss') echo '<?xml version="1.0" encoding="utf-8"?> <rss version="2.0"> <channel> <title>'.$FORUM_TITLE.' - RSS2 feed</title> <link>[[softurl]]/index.php</link> <description>'.sp($GLOBALS['FORUM_DESCR']).'</description> <language>en</language> <pubDate>'.gmdate('Y-m-d\TH:i:s', __request_timestamp__).'-00:00</pubDate> <generator>FUDforum '.$FORUM_VERSION.'</generator> '.$feed_data.' </channel> </rss>'; if ($format == 'atom') echo '<?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> <title>'.$FORUM_TITLE.' - ATOM feed</title> <subtitle>'.sp($GLOBALS['FORUM_DESCR']).'</subtitle> <link href="[[softurl]]/index.php" /> <updated>'.gmdate('Y-m-d\TH:i:s', __request_timestamp__).'-00:00</updated> <id>[[softurl]]/index.php</id> <generator uri="http://fudforum.org/" version="'.$FORUM_VERSION.'">FUDforum</generator> '.$feed_data.' </feed>'; } unset($c); break; case 'u': /* check for various supported limits * pc - order by post count * rd - order by registration date * cl - show only currently online users * l - limit to 'l' rows * o - offset * n - max rows to fetch */ $lmt .= ' u.id>1 '; if (isset($_GET['pc'])) { $order_by = 'u.posted_msg_count'; } else if (isset($_GET['rd'])) { $order_by = 'u.join_date'; } else { $order_by = 'u.alias'; } if (isset($_GET['cl'])) { $lmt .= ' AND u.last_visit>='. (__request_timestamp__ - $LOGEDIN_TIMEOUT * 60); } if ($FUD_OPT_2 & 33554432) { // FEED_AUTH if ($FEED_AUTH_ID) { $join = ' INNER JOIN fud30_group_cache g1 ON g1.user_id=2147483647 AND g1.resource_id=f.id LEFT JOIN fud30_group_cache g2 ON g2.user_id='. $FEED_AUTH_ID .' AND g2.resource_id=f.id LEFT JOIN fud30_mod mm ON mm.forum_id=f.id AND mm.user_id='. $FEED_AUTH_ID .' '; $perms = ', (CASE WHEN (mm.id IS NOT NULL OR '. q_bitand('COALESCE(g2.group_cache_opt, g1.group_cache_opt)', 2) .' > 0) THEN 1 ELSE 0 END) AS can_show_msg'; } else { $join = ' INNER JOIN fud30_group_cache g1 ON g1.user_id=0 AND g1.resource_id=f.id '; $perms = ', '. q_bitand('g1.group_cache_opt', 2) .' > 0 AS can_show_msg'; } } else { $perms = ', 1 AS can_show_msg'; } $c = q(q_limit('SELECT u.id, u.alias, u.join_date, u.posted_msg_count, u.avatar_loc, u.users_opt, u.home_page, u.birthday, u.last_visit, u.icq, u.facebook, u.yahoo, u.jabber, u.google, u.skype, u.twitter, u.name, u.email, m.id AS msg_id, m.subject, m.thread_id, t.forum_id, f.name AS frm_name, c.name AS cat_name '. $perms .' FROM fud30_users u LEFT JOIN fud30_msg m ON m.id=u.u_last_post_id LEFT JOIN fud30_thread t ON m.thread_id=t.id LEFT JOIN fud30_forum f ON f.id=t.forum_id LEFT JOIN fud30_cat c ON c.id=f.cat_id '. $join .' WHERE '. $lmt .' ORDER BY '. $order_by .' DESC', $limit, $offset)); while ($r = db_rowobj($c)) { if (!$res) { header('Content-Type: application/'.$format.'+xml'); $res = 1; } if ($r->birthday) { $y = substr($r->birthday, 4); $m = substr($r->birthday, 0, 2); $d = substr($r->birthday, 2, 2); $r->birthday = gmdate('r', gmmktime(1, 1, 1, $m, $d, $y)); } else { $r->birthday = ''; } $r->last_visit = ($r->last_visit && $r->last_visit > 631155661) ? $r->last_visit : ''; $r->join_date = ($r->join_date && $r->join_date > 631155661) ? $r->join_date : ''; if ($r->users_opt >= 16777216) { $r->avatar_loc = ''; } if ($format == 'rdf' ) $feed_data .= '<item> <user_id>'.$r->id.'</user_id> <user_login>'.sp($r->alias).'</user_login> <user_name>'.sp($r->name).'</user_name> <user_email>'.sp(email_format($r->email)).'</user_email> <post_count>'.$r->posted_msg_count.'</post_count> <avatar_img>'.sp($r->avatar_loc).'</avatar_img> <homepage>'.sp(htmlspecialchars($r->homepage)).'</homepage> <birthday>'.$r->birthday.'</birthday> '.($r->last_visit ? '<last_visit>'.gmdate('Y-m-d\TH:i:s', $r->last_visit).'</last_visit>' : '' ) .' '.($r->join_date ? '<reg_date>'.gmdate('Y-m-d\TH:i:s', $r->join_date).'</reg_date>' : '' ) .' <im_icq>'.$r->icq.'</im_icq> <im_facebook>'.sp($r->facebook).'</im_facebook> <im_yahoo>'.sp($r->yahoo).'</im_yahoo> <im_jabber>'.sp($r->jabber).'</im_jabber> <im_google>'.sp($r->google).'</im_google> <im_skype>'.sp($r->skype).'</im_skype> <im_twitter>'.sp($r->twitter).'</im_twitter> '.($r->subject && $r->can_show_msg ? ' <m_subject>'.sp($r->subject).'</m_subject> <m_id>'.$r->msg_id.'</m_id> <m_thread_id>'.$r->thread_id.'</m_thread_id> <m_forum_id>'.$r->forum_id.'</m_forum_id> <m_forum_title>'.sp($r->frm_name).'</m_forum_title> <m_cat_title>'.sp($r->cat_name).'</m_cat_title> ' : '' ) .' </item>'; if ($format == 'rss' ) $feed_data .= '<item> <title>'.sp($r->alias).'</title> <link>[[softurl]]/index.phpindex.php?t=usrinfo&id='.$r->id.'</link> <author>'.sp($r->name).'</author> '.($r->last_visit ? '<pubDate>'.gmdate('Y-m-d\TH:i:s', $r->last_visit).'</pubDate>' : '' ) .' </item>'; if ($format == 'atom') $feed_data .= '<entry> <title>'.sp($r->alias).'</title> <link href="[[softurl]]/index.phpindex.php?t=usrinfo&id='.$r->id.'" /> <id>[[softurl]]/index.phpindex.php?t=usrinfo&id='.$r->id.'</id> <author> <name>'.sp($r->name).'</name> <email>'.sp(email_format($r->email)).'</email> '.($r->homepage ? '<uri>'.sp(htmlspecialchars($r->homepage)).'</uri>' : '' ) .' </author> '.($r->last_visit ? '<published>'.gmdate('Y-m-d\TH:i:s', $r->last_visit).'</published>' : '' ) .' '.($r->join_date ? '<updated>'.gmdate('Y-m-d\TH:i:s', $r->join_date).'</updated>' : '' ) .' </entry>'; } if ($res) { if ($format == 'rdf') echo '<?xml version="1.0" encoding="utf-8"?> '.($basic ? ' <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns="http://purl.org/rss/1.0/"> ' : ' <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns="http://purl.org/rss/1.0/"> ' ) .' <channel rdf:about="[[softurl]]/index.php"> <title>'.$FORUM_TITLE.' - RDF feed</title> <link>[[softurl]]/index.php</link> <description>'.sp($GLOBALS['FORUM_DESCR']).'</description> '.($basic && $feed_header ? ' <items> <rdf:Seq> '.$feed_header.' </rdf:Seq> </items> ' : '' ) .' </channel> '.$feed_data.' </rdf:RDF>'; if ($format == 'rss') echo '<?xml version="1.0" encoding="utf-8"?> <rss version="2.0"> <channel> <title>'.$FORUM_TITLE.' - RSS2 feed</title> <link>[[softurl]]/index.php</link> <description>'.sp($GLOBALS['FORUM_DESCR']).'</description> <language>en</language> <pubDate>'.gmdate('Y-m-d\TH:i:s', __request_timestamp__).'-00:00</pubDate> <generator>FUDforum '.$FORUM_VERSION.'</generator> '.$feed_data.' </channel> </rss>'; if ($format == 'atom') echo '<?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> <title>'.$FORUM_TITLE.' - ATOM feed</title> <subtitle>'.sp($GLOBALS['FORUM_DESCR']).'</subtitle> <link href="[[softurl]]/index.php" /> <updated>'.gmdate('Y-m-d\TH:i:s', __request_timestamp__).'-00:00</updated> <id>[[softurl]]/index.php</id> <generator uri="http://fudforum.org/" version="'.$FORUM_VERSION.'">FUDforum</generator> '.$feed_data.' </feed>'; } unset($c); break; } // switch ($mode) if ($res) { if ($FEED_CACHE_AGE) { echo ($out = ob_get_clean()); $fp = fopen($file_name, 'w'); fwrite($fp, $out); fclose($fp); } } else { exit('<?xml version="1.0" encoding="utf-8"?> <errors> <error> <message>No matching data found.</message> </error> </errors>'); } ?> PK �Z.][� php71/edit.phpnu �[��� <?php //004fb if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'<a href="http://www.ioncube.com">ionCube</a>')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'<a href="http://get-loader.ioncube.com">get-loader.ioncube.com</a>')." for install assistance.\n\n");exit(199); ?> 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 +ChNxF4WGj0CQQAfbCYvzhd4WNLGPK �Z� � � php71/import.phpnu �[��� <?php //004fb if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'<a href="http://www.ioncube.com">ionCube</a>')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'<a href="http://get-loader.ioncube.com">get-loader.ioncube.com</a>')." for install assistance.\n\n");exit(199); ?> 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 x9jPJD0IOAAcsvHW5JF3ayerh7Wz6qcqwVIzpm==PK �Z*�%�+ �+ php71/install.phpnu �[��� <?php //004fb if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'<a href="http://www.ioncube.com">ionCube</a>')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'<a href="http://get-loader.ioncube.com">get-loader.ioncube.com</a>')." for install assistance.\n\n");exit(199); ?> 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 fRxcIG==PK �Z[R6\� � edit.phpnu �[��� <?php //0046a if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); ?> 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 LCoIambVcSrX7wVJUy/xPK �Z�>-L L import.phpnu �[��� <?php //0046a if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); ?> 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PK �Z�c�� � .htaccessnu �[��� AddDefaultCharset utf-8 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*) index.php/$1 [L] <IfModule mod_php5.c> #php_value output_buffering 64000 #php_value variables_order GPCS #php_flag implicit_flush 0 #php_flag register_argc_argv 0 #php_flag session.use_trans_sid 0 #php_flag expose_php 0 #php_flag display_errors 0 </IfModule> # Below code is from http://gist.github.com/427761 # An .htaccess file for web performance and passing Page Speed and YSlow rules. # Enable GZIP <ifmodule mod_deflate.c> AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html </ifmodule> # Expires Headers - 2678400s = 31 days <ifmodule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 1 seconds" ExpiresByType text/html "access plus 7200 seconds" ExpiresByType image/gif "access plus 2678400 seconds" ExpiresByType image/jpeg "access plus 2678400 seconds" ExpiresByType image/png "access plus 2678400 seconds" ExpiresByType text/css "access plus 518400 seconds" ExpiresByType text/javascript "access plus 2678400 seconds" ExpiresByType application/x-javascript "access plus 2678400 seconds" </ifmodule> # Cache Headers <ifmodule mod_headers.c> # Cache specified files for 31 days <filesmatch "\.(ico|flv|jpg|jpeg|png|gif|css|swf)$"> Header set Cache-Control "max-age=2678400, public" </filesmatch> # Cache HTML files for a couple hours <filesmatch "\.(html|htm)$"> Header set Cache-Control "max-age=7200, private, must-revalidate" </filesmatch> # Cache PDFs for a day <filesmatch "\.(pdf)$"> Header set Cache-Control "max-age=86400, public" </filesmatch> # Cache Javascripts for 31 days <filesmatch "\.(js)$"> Header set Cache-Control "max-age=2678400, private" </filesmatch> </ifmodule> PK �Z�{Ӆ~ ~ _upgrade.xmlnu �[��� <softupgrade xmlns="http://www.softaculous.com"> <setuplocation>upgrade.php</setuplocation> <settings> <group> <heading>hidden</heading> <input type="hidden" name="dummy" value=""> </input> </group> </settings> <files> <exclude>GLOBALS.php</exclude> <exclude>adm/GLOBALS.php</exclude> <exclude>theme/default/help_index.php</exclude> </files> </softupgrade>PK �Z)�f@[� [� index.phpnu �[��� <?php /** * copyright : (C) 2001-2019 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. **/ if (function_exists('mb_internal_encoding')) { mb_internal_encoding('utf-8'); } require('./GLOBALS.php'); /* Activation check. */ if (!($FUD_OPT_1 & 1)) { // FORUM_ENABLED fud_use('errmsg.inc'); exit_forum_disabled(); } # define('fud_query_stats', 1); class db { public static $db, $slave; } if (empty(db::$db)) { // Use MYSQLI_REPORT_OFF so we can check error codes manually. $driver = new mysqli_driver(); $driver->report_mode = MYSQLI_REPORT_OFF; if (substr($GLOBALS['DBHOST'], 0, 1) == ':') { // Socket connection. $socket = substr($GLOBALS['DBHOST'], 1); $GLOBALS['DBHOST'] = 'localhost'; } else { $socket = NULL; } if ($GLOBALS['FUD_OPT_1'] & 256 && $socket == NULL && version_compare(PHP_VERSION, '5.3.0', '>=')) { // Enable pconnect for PHP 5.3+. $GLOBALS['DBHOST'] = 'p:'. $GLOBALS['DBHOST']; } db::$db = new mysqli($GLOBALS['DBHOST'], $GLOBALS['DBHOST_USER'], $GLOBALS['DBHOST_PASSWORD'], $GLOBALS['DBHOST_DBNAME'], NULL, $socket); if (mysqli_connect_errno()) { fud_sql_error_handler('Failed to establish database connection', 'MySQLi says: '. mysqli_connect_error(), mysqli_connect_errno(), ''); } db::$db->set_charset('utf8'); /* Connect to slave, if specified. */ if (!empty($GLOBALS['DBHOST_SLAVE_HOST']) && !$GLOBALS['is_post']) { db::$slave = new mysqli($GLOBALS['DBHOST'], $GLOBALS['DBHOST_USER'], $GLOBALS['DBHOST_PASSWORD'], $GLOBALS['DBHOST_DBNAME'], NULL, $socket); if (mysqli_connect_errno()) { fud_logerror('Unable to init SlaveDB, fallback to MasterDB: '. mysqli_connect_error(), 'sql_errors'); } else { db::$db->set_charset('utf8'); } } define('__dbtype__', 'mysql'); } function db_close() { db::$db->close(); } function db_version() { if (!defined('__FUD_SQL_VERSION__')) { $ver = q_singleval('SELECT VERSION()'); define('__FUD_SQL_VERSION__', $ver); } return __FUD_SQL_VERSION__; } function db_lock($tables) { if (!empty($GLOBALS['__DB_INC_INTERNALS__']['db_locked'])) { fud_sql_error_handler('Recursive Lock', 'internal', 'internal', db_version()); } else { q('LOCK TABLES '. $tables); $GLOBALS['__DB_INC_INTERNALS__']['db_locked'] = 1; } } function db_unlock() { if (empty($GLOBALS['__DB_INC_INTERNALS__']['db_locked'])) { unset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']); fud_sql_error_handler('DB_UNLOCK: no previous lock established', 'internal', 'internal', db_version()); } if (--$GLOBALS['__DB_INC_INTERNALS__']['db_locked'] < 0) { unset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']); fud_sql_error_handler('DB_UNLOCK: unlock overcalled', 'internal', 'internal', db_version()); } unset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']); q('UNLOCK TABLES'); } function db_locked() { return isset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']); } function db_affected() { return db::$db->affected_rows; } function uq($query) { return q($query); } if (!defined('fud_query_stats')) { function q($query) { // Assume master DB, route SELECT's to slave DB. // Force master if DB is locked (in transaction) or 'SELECT /* USE MASTER */'. $db = db::$db; if (!empty(db::$slave) && !db_locked() && !strncasecmp($query, 'SELECT', 6) && strncasecmp($query, 'SELECT /* USE MASTER */', 23)) { $db = db::$slave; } $r = $db->query($query); if ($db->error) { fud_sql_error_handler($query, $db->error, $db->errno, db_version()); } return $r; } } else { function q($query) { if (!isset($GLOBALS['__DB_INC_INTERNALS__']['query_count'])) { $GLOBALS['__DB_INC_INTERNALS__']['query_count'] = 1; } else { ++$GLOBALS['__DB_INC_INTERNALS__']['query_count']; } if (!isset($GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'])) { $GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'] = 0; } // Assume master DB, route SELECT's to slave DB. // Force master if DB is locked (in transaction) or 'SELECT /* USE MASTER */'. $db = db::$db; if (!empty(db::$slave) && !db_locked() && !strncasecmp($query, 'SELECT', 6) && strncasecmp($query, 'SELECT /* USE MASTER */', 23)) { $db = db::$slave; } $s = microtime(true); $result = $db->query($query); if ($db->error) { fud_sql_error_handler($query, $db->error, $db->errno, db_version()); } $e = microtime(true); $GLOBALS['__DB_INC_INTERNALS__']['last_time'] = ($e - $s); $GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'] += $GLOBALS['__DB_INC_INTERNALS__']['last_time']; echo '<hr><b>Query #'. $GLOBALS['__DB_INC_INTERNALS__']['query_count'] .'</b><small>'; echo ': time taken: <i>'. number_format($GLOBALS['__DB_INC_INTERNALS__']['last_time'], 4) .'</i>'; echo ', affected rows: <i>'. db_affected() .'</i>'; echo ', total sql time: <i>'. number_format($GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'], 4) .'</i>'; echo '<pre>'. preg_replace('!\s+!', ' ', htmlspecialchars($query)) .'</pre></small>'; return $result; } } function db_rowobj($result) { return $result->fetch_object(); } function db_rowarr($result) { return $result->fetch_row(); } function q_singleval($query) { $r = q($query); if (($result = $r->fetch_row()) !== false && isset($result)) { return isset($result) ? $result[0] : ''; } } function q_limit($query, $limit, $off=0) { return $query .' LIMIT '. $limit .' OFFSET '. $off; } function q_concat($arg) { // MySQL badly breaks the SQL standard by redefining || to mean OR. $tmp = func_get_args(); return 'CONCAT('. implode(',', $tmp) .')'; } function q_rownum() { q('SET @seq=0'); // For simulating rownum. return '(@seq:=@seq+1)'; } function q_bitand($fieldLeft, $fieldRight) { return $fieldLeft .' & '. $fieldRight; } function q_bitor($fieldLeft, $fieldRight) { return '('. $fieldLeft .' | '. $fieldRight .')'; } function q_bitnot($bitField) { return '~'. $bitField; } function db_saq($q) { $r = q($q); return $r->fetch_row() ; } function db_sab($q) { $r = q($q); return $r->fetch_object(); } function db_qid($q) { q($q); return db::$db->insert_id; } function db_arr_assoc($q) { $r = q($q); return $r->fetch_array(MYSQLI_ASSOC); } function db_fetch_array($r) { return is_object($r) ? $r->fetch_array(MYSQLI_ASSOC) : null; } function db_li($q, &$ef, $li=0) { $r = db::$db->query($q); if ($r) { return ($li ? db::$db->insert_id : $r); } /* Duplicate key. */ if (db::$db->errno == 1062) { $ef = ltrim(strrchr(db::$db->error, ' ')); return null; } else { fud_sql_error_handler($q, db::$db->error, db::$db->errno, db_version()); } } function ins_m($tbl, $flds, $types, $vals) { q('INSERT IGNORE INTO '. $tbl .' ('. $flds .') VALUES ('. implode('),(', $vals) .')'); } function db_all($q) { $f = array(); $c = uq($q); while ($r = $c->fetch_row()) { $f[] = $r[0]; } return $f; } function _esc($s) { return '\''. db::$db->real_escape_string($s ?? '') .'\''; }function ses_make_sysid() { if ($GLOBALS['FUD_OPT_2'] & 256) { // MULTI_HOST_LOGIN return; } $keys = array('REMOTE_USER', 'HTTP_USER_AGENT', 'SERVER_PROTOCOL', 'HTTP_ACCEPT_CHARSET', 'HTTP_ACCEPT_LANGUAGE'); if ($GLOBALS['FUD_OPT_3'] & 16) { // SESSION_IP_CHECK $keys[] = 'HTTP_X_FORWARDED_FOR'; $keys[] = 'REMOTE_ADDR'; } $pfx = ''; foreach ($keys as $v) { if (isset($_SERVER[$v])) { $pfx .= $_SERVER[$v]; } } return md5($pfx); } function ses_get($id=0) { if (!$id) { /* Cookie or URL session? If not, check for known bots. */ if (!empty($_COOKIE[$GLOBALS['COOKIE_NAME']])) { /* Have cookie */ $q_opt = 's.ses_id='. _esc($_COOKIE[$GLOBALS['COOKIE_NAME']]); } else if ((isset($_GET['S']) || isset($_POST['S'])) && $GLOBALS['FUD_OPT_1'] & 128) { /* Have session string */ $url_session = 1; $q_opt = 's.ses_id='. _esc((isset($_GET['S']) ? (string) $_GET['S'] : (string) $_POST['S'])); /* Do not validate against expired URL sessions. */ $q_opt .= ' AND s.time_sec > '. (__request_timestamp__ - $GLOBALS['SESSION_TIMEOUT']); } else { /* Unknown user, maybe bot? */ // Auto login authorized bots. // To test: wget --user-agent="Googlebot 1.2" http://127.0.0.1:8080/forum $spider_session = 0; $my_ip = get_ip(); include $GLOBALS['FORUM_SETTINGS_PATH'] .'spider_cache'; foreach ($spider_cache as $spider_id => $spider) { if (preg_match('/'. $spider['useragent'] .'/i', $_SERVER['HTTP_USER_AGENT'])) { if (empty($spider['bot_ip'])) { $spider_session = 1; // Agent matched, no IPs to check. break; } else { foreach (explode(',', $spider['bot_ip']) as $bot_ip) { if (!($bot_ip = trim($bot_ip))) { continue; } if (strpos($bot_ip, $my_ip) === 0) { $spider_session = 1; // Agent and an IP matched. break; } } } } } if ($spider_session) { if ($spider['bot_opts'] & 2) { // Access blocked. die('Go away!'); } if ($id = db_li('INSERT INTO fud30_ses (ses_id, time_sec, sys_id, ip_addr, useragent, user_id) VALUES (\''. $spider['botname'] .'\', '. __request_timestamp__ .', '. _esc(ses_make_sysid()) .', '. _esc($my_ip) .', '. _esc(substr($_SERVER['HTTP_USER_AGENT'], 0, 64)) .', '. $spider['user_id'] .')', $ef, 1)) { $q_opt = 's.id='. $id; } else { $q_opt = 's.ses_id='. _esc($spider['botname']); } $GLOBALS['FUD_OPT_1'] ^= 128; // Disable URL sessions for user. } else { /* NeXuS: What is this? Return if user unknown? Function should return only after the query is run. */ //return; // Check sys_id, ip_addr and useragent for a possible match $q_opt = 's.sys_id= '._esc(ses_make_sysid()). ' AND s.ip_addr='._esc(get_ip()). ' AND s.useragent='._esc(substr($_SERVER['HTTP_USER_AGENT'], 0, 64)); } } /* ENABLE_REFERRER_CHECK */ if ($GLOBALS['FUD_OPT_3'] & 4 && isset($_SERVER['HTTP_REFERER']) && strncmp($_SERVER['HTTP_REFERER'], $GLOBALS['WWW_ROOT'], strlen($GLOBALS['WWW_ROOT']))) { /* More checks, we need those because some proxies mangle referer field. */ $host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']; /* $p > 8 https:// or http:// */ if (($p = strpos($_SERVER['HTTP_REFERER'], $host)) === false || $p > 8) { $q_opt .= ' AND s.user_id > 2000000000 '; // Different referrer, force anonymous. } } } else { $q_opt = 's.id='. $id; } $u = db_sab('SELECT s.id AS sid, s.ses_id, s.data, s.returnto, s.sys_id, t.id AS theme_id, t.lang, t.name AS theme_name, t.locale, t.theme, t.pspell_lang, t.theme_opt, u.alias, u.posts_ppg, u.time_zone, u.sig, u.last_visit, u.last_read, u.cat_collapse_status, u.users_opt, u.posted_msg_count, u.topics_per_page, u.ignore_list, u.ignore_list, u.buddy_list, u.id, u.group_leader_list, u.email, u.login, u.sq, u.ban_expiry, u.ban_reason, u.flag_cc FROM fud30_ses s INNER JOIN fud30_users u ON u.id=(CASE WHEN s.user_id>2000000000 THEN 1 ELSE s.user_id END) LEFT OUTER JOIN fud30_themes t ON t.id=u.theme WHERE '. $q_opt); /* Anon user, no session or login. */ if (!$u || $u->id == 1 || $id) { return $u; } if ($u->sys_id == ses_make_sysid()) { return $u; } else if ($GLOBALS['FUD_OPT_3'] & 16 || isset($url_session)) { /* URL sessions must validate sys_id check and SESSION_IP_CHECK must be disabled */ return; } /* Try doing a strict SQ match in last-ditch effort to make things 'work'. */ if (isset($_POST['SQ']) && $_POST['SQ'] == $u->sq) { return $u; } return; } /** Create an anonymous session. */ function ses_anon_make() { // Prevent forum scraping and brute force attacks. if ($GLOBALS['MAX_CALLS_FROM_IP'] > 0) { $ip_count = q_singleval('SELECT count(ip_addr) FROM fud30_ses WHERE ip_addr = '. _esc(get_ip())); if ($ip_count > $GLOBALS['MAX_CALLS_FROM_IP']) { header('HTTP/1.1 429 Too Many Requests', true, 429); echo 'Too Many Requests'; die(); } } do { $uid = 2000000000 + mt_rand(1, 147483647); $ses_id = md5($uid . __request_timestamp__ . getmypid()); } while (!($id = db_li('INSERT INTO fud30_ses (ses_id, time_sec, sys_id, ip_addr, useragent, user_id) VALUES (\''. $ses_id .'\', '. __request_timestamp__ .', '. _esc(ses_make_sysid()) .', '. _esc(get_ip()) .', '. _esc(substr($_SERVER['HTTP_USER_AGENT'], 0, 64)) .', '. $uid .')', $ef, 1))); /* When we have an anon user, we set a special cookie allowing us to see who referred this user. */ if (isset($_GET['rid']) && !isset($_COOKIE['frm_referer_id']) && $GLOBALS['FUD_OPT_2'] & 8192) { setcookie($GLOBALS['COOKIE_NAME'] .'_referer_id', $_GET['rid'], __request_timestamp__+31536000, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } if ($GLOBALS['FUD_OPT_3'] & 1) { // SESSION_COOKIES setcookie($GLOBALS['COOKIE_NAME'], $ses_id, 0, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } else { setcookie($GLOBALS['COOKIE_NAME'], $ses_id, __request_timestamp__+$GLOBALS['COOKIE_TIMEOUT'], $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } return ses_get($id); } /** Update session status to indicate last known action. */ function ses_update_status($ses_id, $action=null, $forum_id=0, $ret='') { if (empty($ses_id)) { die('FATAL ERROR: No session, check your forum\'s URL and COOKIE settings.'); } if (strlen($_SERVER['QUERY_STRING']) > 255) { // Query string exceeds 'returnto' column length. die('FATAL ERROR: QUERY_STRING too long!'); } $sys_id = ses_make_sysid(); q('UPDATE fud30_ses SET sys_id=\''. $sys_id .'\', forum_id='. $forum_id .', time_sec='. __request_timestamp__ .', action='. ($action ? _esc($action) : 'NULL') .', returnto='. (!is_int($ret) ? (isset($_SERVER['QUERY_STRING']) ? _esc($_SERVER['QUERY_STRING']) : 'NULL') : 'returnto') .' WHERE id='. $ses_id); } /** Save or clear a session variable. */ function ses_putvar($ses_id, $data) { $cond = is_int($ses_id) ? 'id='. (int)$ses_id : 'ses_id=\''. $ses_id .'\''; if (empty($data)) { q('UPDATE fud30_ses SET data=NULL WHERE '. $cond); } else { q('UPDATE fud30_ses SET data='. _esc(serialize($data)) .' WHERE '. $cond); } } /** Destroy a session. */ function ses_delete($ses_id) { // Delete all forum sessions. // Regardless of MULTI_HOST_LOGIN, all sessions will be terminated. q('DELETE FROM fud30_ses WHERE id='. $ses_id); setcookie($GLOBALS['COOKIE_NAME'], '', __request_timestamp__-100000, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); return 1; } function ses_anonuser_auth($id, $error) { if (!empty($_POST)) { $_SERVER['QUERY_STRING'] = ''; } q('UPDATE fud30_ses SET data='. _esc(serialize($error)) .', returnto='. ssn($_SERVER['QUERY_STRING']) .' WHERE id='. $id); if ($GLOBALS['FUD_OPT_2'] & 32768) { // USE_PATH_INFO header('Location: [[relativeurl]]/index.php/l/'. _rsidl); } else { header('Location: [[relativeurl]]/index.php?t=login&'. _rsidl); } exit; }function &init_user() { $o1 =& $GLOBALS['FUD_OPT_1']; $o2 =& $GLOBALS['FUD_OPT_2']; $o3 =& $GLOBALS['FUD_OPT_3']; $o4 =& $GLOBALS['FUD_OPT_4']; if ($o2 & 32768 && empty($_SERVER['PATH_INFO']) && !empty($_SERVER['ORIG_PATH_INFO'])) { $_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO']; } /* We need to parse S & rid right away since they are used during user init. */ if ($o2 & 32768 && !empty($_SERVER['PATH_INFO']) && empty($_GET['t'])) { // USE_PATH_INFO $pb = $p = explode('/', trim($_SERVER['PATH_INFO'], '/')); if ($o1 & 128) { // SESSION_USE_URL $_GET['S'] = array_pop($p); } if ($o2 & 8192) { // TRACK_REFERRALS $_GET['rid'] = array_pop($p); } $_SERVER['QUERY_STRING'] = htmlspecialchars($_SERVER['PATH_INFO']) .'?'. $_SERVER['QUERY_STRING']; /* Default to index or blog page. */ if (!isset($p[0])) { if ($o4 & 16 && $o4 & 32) { // Blog enabled and set as home page. $p[0] = 'blog'; } else { $p[0] = 'i'; } } /* Notice prevention code. */ for ($i = 1; $i < 5; $i++) { if (!isset($p[$i])) { $p[$i] = null; } } switch ($p[0]) { case 'm': /* goto specific message */ $_GET['t'] = 0; $_GET['goto'] = $p[1]; if (isset($p[2])) { $_GET['th'] = $p[2]; if (isset($p[3]) && is_numeric($p[3])) { $_GET['start'] = $p[3]; if ($p[3]) { $_GET['t'] = 'msg'; unset($_GET['goto']); } if (isset($p[4])) { if ($p[4] === 'prevloaded') { $_GET['prevloaded'] = 1; $i = 5; } else { $i = 4; } if (isset($p[$i])) { $_GET['rev'] = $p[$i]; if (isset($p[$i+1])) { $_GET['reveal'] = $p[$i+1]; } } } } } break; case 't': /* view thread */ $_GET['t'] = 0; $_GET['th'] = $p[1]; if (isset($p[2]) && is_numeric($p[2])) { // START is not currently used for thread paging. // Set to 0, but keep code for possible future implementation. // $_GET['start'] = $p[2]; $_GET['start'] = 0; if (!empty($p[3])) { $_GET[$p[3]] = 1; } } break; case 'f': /* view forum */ $_GET['t'] = 1; $_GET['frm_id'] = $p[1]; if (isset($p[2])) { $_GET['start'] = $p[2]; if (isset($p[3])) { if ($p[3] === '0') { $_GET['sub'] = 1; } else { $_GET['unsub'] = 1; } } } break; case 'r': $_GET['t'] = 'post'; $_GET[$p[1]] = $p[2]; if (isset($p[3])) { $_GET['reply_to'] = $p[3]; if (isset($p[4])) { if ($p[4]) { $_GET['quote'] = 'true'; } if (isset($p[5])) { $_GET['start'] = $p[5]; } } } break; case 'u': /* view user's info */ $_GET['t'] = 'usrinfo'; $_GET['id'] = $p[1]; break; case 'i': $_GET['t'] = 'index'; if (isset($p[1])) { $_GET['cat'] = (int) $p[1]; } break; case 'fa': $_GET['t'] = 'getfile'; $_GET['id'] = isset($p[1]) ? $p[1] : $pb[1]; if (!empty($p[2])) { $_GET['private'] = 1; } break; case 'sp': /* show posts */ $_GET['t'] = 'showposts'; $_GET['id'] = $p[1]; if (isset($p[2])) { $_GET['so'] = $p[2]; if (isset($p[3])) { $_GET['start'] = $p[3]; } } break; case 'l': /* login/logout */ $_GET['t'] = 'login'; if (isset($p[1])) { $_GET['logout'] = 1; } break; case 'e': $_GET['t'] = 'error'; break; case 'st': $_GET['t'] = $p[1]; $_GET['th'] = $p[2]; $_GET['notify'] = $p[3]; $_GET['opt'] = $p[4] ? 'on' : 'off'; if (isset($p[5])) { $_GET['start'] = $p[5]; } break; case 'sf': $_GET['t'] = $p[1]; $_GET['frm_id'] = $p[2]; $_GET[$p[3]] = 1; $_GET['start'] = $p[4]; break; case 'sl': /* subscribed topic list */ $_GET['t'] = 'subscribed'; if ($p[1] == 'start') { $_GET['start'] = $p[2]; } else { if (isset($p[2])) { $_GET['th'] = $p[2]; } else if (isset($p[1])) { $_GET['frm_id'] = $p[1]; } } break; case 'bml': /* bookmark list */ $_GET['t'] = 'bookmarked'; if ($p[1] == 'start') { $_GET['start'] = $p[2]; } else { if (isset($p[2])) { $_GET['th'] = $p[2]; } } break; case 'pmm': $_GET['t'] = 'ppost'; if (isset($p[1], $p[2])) { $_GET[$p[1]] = $p[2]; if (isset($p[3])) { $_GET['rmid'] = $p[3]; } } break; case 'pmv': $_GET['t'] = 'pmsg_view'; $_GET['id'] = $p[1]; if (isset($p[2])) { $_GET['dr'] = 1; } break; case 'pdm': $_GET['t'] = 'pmsg'; if (isset($p[1])) { if ($p[1] !== 'btn_delete') { $_GET['folder_id'] = $p[1]; } else { $_GET['btn_delete'] = 1; $_GET['sel'] = $p[2]; } if (isset($p[3])) { $_GET['s'] = $p[3]; $_GET['o'] = $p[4]; $_GET['start'] = $p[5]; } } break; case 'pl': /* poll list */ $_GET['t'] = 'polllist'; if (isset($p[1])) { $_GET['uid'] = $p[1]; if (isset($p[2])) { $_GET['start'] = $p[2]; if (isset($p[3])) { $_GET['oby'] = $p[3]; } } } break; case 'ml': /* member list */ $_GET['t'] = 'finduser'; if (isset($p[1])) { switch ($p[1]) { case 1: case 2: $_GET['pc'] = $p[1]; break; case 3: case 4: $_GET['us'] = $p[1]; break; case 5: case 6: $_GET['rd'] = $p[1]; break; case 7: case 8: $_GET['fl'] = $p[1]; break; case 9: case 10: $_GET['lv'] = $p[1]; break; } if (isset($p[2])) { $_GET['start'] = $p[2]; if (isset($p[3])) { $_GET['usr_login'] = urldecode($p[3]); if (isset($p[4])) { $_GET['js_redr'] = $p[5]; } } } } break; case 'h': /* help */ $_GET['t'] = 'help_index'; if (isset($p[1])) { $_GET['section'] = $p[1]; } break; case 'cv': /* change thread view mode */ $_GET['t'] = $p[1]; $_GET['frm_id'] = $p[2]; break; case 'mv': /* change message view mode */ $_GET['t'] = $p[1]; $_GET['th'] = $p[2]; if (isset($p[3])) { if ($p[3] !== '0') { $_GET['goto'] = $p[3]; } else { $_GET['prevloaded'] = 1; $_GET['start'] = $p[4]; if (isset($p[5])) { $_GET['rev'] = $p[5]; if (isset($p[6])) { $_GET['reveal'] = $p[6]; } } } } break; case 'pv': $_GET['t'] = 0; if (isset($p[1])) { $_GET['goto'] = q_singleval('SELECT id FROM fud30_msg WHERE poll_id='.(int)$p[1]); $_GET['pl_view'] = empty($p[2]) ? 0 : (int)$p[2]; } break; case 'rm': /* report message */ $_GET['t'] = 'report'; $_GET['msg_id'] = $p[1]; break; case 'rl': /* list of reported messages */ $_GET['t'] = 'reported'; if (isset($p[1])) { $_GET['del'] = $p[1]; } break; case 'd': /* delete thread/message */ $_GET['t'] = 'mmod'; $_GET['del'] = $p[1]; if (isset($p[2])) { $_GET['th'] = $p[2]; } break; case 'em': /* email forum member */ $_GET['t'] = 'email'; $_GET['toi'] = $p[1]; break; case 'mar': /* mark all/forum read */ $_GET['t'] = 'markread'; if (isset($p[1])) { $_GET['id'] = $p[1]; if (isset($p[2])) { $_GET['cat'] = $p[2]; } } break; case 'bl': /* buddy list */ $_GET['t'] = 'buddy_list'; if (isset($p[1])) { if (!empty($p[2])) { $_GET['add'] = $p[1]; } else { $_GET['del'] = $p[1]; } if (isset($p[3])) { $_GET['redr'] = 1; } } break; case 'il': /* ignore list */ $_GET['t'] = 'ignore_list'; if (isset($p[1])) { if (!empty($p[2])) { $_GET['add'] = $p[1]; } else { $_GET['del'] = $p[1]; } if (isset($p[3])) { $_GET['redr'] = 1; } } break; case 'lk': /* lock/unlock thread */ $_GET['t'] = 'mmod'; $_GET['th'] = $p[1]; $_GET[$p[2]] = 1; break; case 'stt': /* split thread */ $_GET['t'] = 'split_th'; if (isset($p[1])) { $_GET['th'] = $p[1]; } break; case 'ef': /* email to friend */ $_GET['t'] = 'remail'; $_GET['th'] = $p[1]; break; case 'lr': /* list referers */ $_GET['t'] = 'list_referers'; if (isset($p[1])) { $_GET['start'] = $p[1]; } break; case 'a': $_GET['t'] = 'actions'; if (isset($p[1], $p[2])) { $_GET['o'] = $p[1]; $_GET['s'] = $p[2]; } break; case 's': $_GET['t'] = 'search'; if (isset($p[1])) { $_GET['srch'] = urldecode($p[1]); $_GET['field'] = isset($p[2]) ? $p[2] : ''; $_GET['search_logic'] = isset($p[3]) ? $p[3] : ''; $_GET['sort_order'] = isset($p[4]) ? $p[4] : ''; $_GET['forum_limiter'] = isset($p[5]) ? $p[5] : ''; $_GET['start'] = isset($p[6]) ? $p[6] : ''; $_GET['author'] = isset($p[7]) ? $p[7] : ''; } break; case 'p': if (!is_numeric($p[1])) { $_GET[$p[1]] = $p[2]; } else { $_GET['frm'] = $p[1]; $_GET['page'] = $p[2]; } break; case 'ot': $_GET['t'] = 'online_today'; if (isset($p[1], $p[2])) { $_GET['o'] = $p[1]; $_GET['s'] = $p[2]; } break; case 're': $_GET['t'] = 'register'; if (isset($p[1])) { $_GET['reg_coppa'] = $p[1]; } break; case 'tt': $_GET['t'] = $p[1]; $_GET['frm_id'] = $p[2]; break; case 'mh': $_GET['t'] = 'mvthread'; $_GET['th'] = $p[1]; if (isset($p[2], $p[3])) { $_GET[$p[2]] = $p[3]; } break; case 'mn': $_GET['t'] = $p[1]; $_GET['th'] = $p[2]; $_GET['notify'] = $p[3]; $_GET['opt'] = $p[4]; if (isset($p[5])) { if ($p[1] == 'msg') { $_GET['start'] = $p[5]; } else { $_GET['mid'] = $p[5]; } } break; case 'bm': /* bookmark/unbookmark a topic */ $_GET['t'] = $p[1]; $_GET['th'] = $p[2]; $_GET['bookmark'] = $p[3]; $_GET['opt'] = $p[4]; if (isset($p[5])) { if ($p[1] == 'msg') { $_GET['start'] = $p[5]; } else { $_GET['mid'] = $p[5]; } } break; case 'tr': $_GET['t'] = 'ratethread'; break; case 'gm': $_GET['t'] = 'groupmgr'; if (isset($p[1], $p[2], $p[3])) { $_GET[$p[1]] = $p[2]; $_GET['group_id'] = $p[3]; } break; case 'te': $_GET['t'] = 'thr_exch'; if (isset($p[1], $p[2])) { $_GET[$p[1]] = $p[2]; } break; case 'mq': $_GET['t'] = 'modque'; if (isset($p[1], $p[2])) { $_GET[$p[1]] = $p[2]; } break; case 'pr': $_GET['t'] = 'pre_reg'; $_GET['coppa'] = $p[1]; break; case 'qb': $_GET['t'] = 'qbud'; break; case 'po': $_GET['t'] = 'poll'; $_GET['frm_id'] = $p[1]; if (isset($p[2])) { $_GET['pl_id'] = $p[2]; if (isset($p[3], $p[4])) { $_GET[$p[3]] = $p[4]; } } break; case 'sm': $_GET['t'] = 'smladd'; break; case 'mk': $_GET['t'] = 'mklist'; $_GET['tp'] = $p[1]; break; case 'rp': $_GET['t'] = 'rpasswd'; break; case 'as': $_GET['t'] = 'avatarsel'; break; case 'sel': $_GET['t'] = 'selmsg'; $c = count($p) - 1; if ($c % 2) { --$c; } $c /= 2; $i = 0; while ($c--) { $_GET[$p[++$i]] = $p[++$i]; } break; case 'pml': $_GET['t'] = 'pmuserloc'; $_GET['js_redr'] = $p[1]; if (isset($p[2])) { $_GET['overwrite'] = 1; } break; case 'rst': $_GET['t'] = 'reset'; if (isset($p[1])) { $_GET['email'] = urldecode($p[1]); } break; case 'cpf': $_GET['t'] = 'coppa_fax'; break; case 'cp': $_GET['t'] = 'coppa'; break; case 'rc': $_GET['t'] = 'reg_conf'; break; case 'ma': $_GET['t'] = 'mnav'; if (isset($p[1])) { $_GET['rng'] = isset($p[1]) ? $p[1] : 0; $_GET['rng2'] = isset($p[2]) ? $p[2] : 0; $_GET['u'] = isset($p[3]) ? $p[3] : 0; $_GET['start'] = isset($p[4]) ? $p[4] : 0; $_GET['sub'] = !empty($p[5]); } break; case 'ip': $_GET['t'] = 'ip'; if (isset($p[1])) { $_GET[($p[1][0] == 'i' ? 'ip' : 'user')] = isset($p[2]) ? $p[2] : ''; } break; case 'met': $_GET['t'] = 'merge_th'; if (isset($p[1])) { $_GET['frm_id'] = $p[1]; } break; case 'uc': $_GET['t'] = 'uc'; if (isset($p[1], $p[2])) { $_GET[$p[1]] = $p[2]; } break; case 'mmd': $_GET['t'] = 'mmd'; break; case 'cal': /* Calendar */ $_GET['t'] = 'calendar'; break; case 'blog': /* Blog */ $_GET['t'] = 'blog'; if ($p[1] == 'u' && isset($p[2])) { $_GET['user'] = $p[2]; $_GET['start'] = isset($p[3]) ? $p[3] : 0; } if ($p[1] == 'f' && isset($p[2])) { $_GET['forum'] = $p[2]; $_GET['start'] = isset($p[3]) ? $p[3] : 0; } else { $_GET['start'] = $p[1]; } break; case 'page': /* Static page */ $_GET['t'] = 'page'; if (isset($p[1])) { $_GET['id'] = $p[1]; } break; default: // Page not specified, redirect to front page. $_GET['t'] = 'index'; break; } $GLOBALS['t'] = $_GET['t']; } else if (isset($_GET['t'])) { $GLOBALS['t'] = (string) $_GET['t']; } else if (isset($_POST['t'])) { $GLOBALS['t'] = (string) $_POST['t']; } else { if ($o4 & 16 && $o4 & 32) { // Blog enabled and set as home page. $GLOBALS['t'] = 'blog'; } else { $GLOBALS['t'] = 'index'; } } if ($GLOBALS['t'] == 'register') { $GLOBALS['THREADS_PER_PAGE_F'] = $GLOBALS['THREADS_PER_PAGE']; // Store old value. } header('P3P: CP="ALL CUR OUR IND UNI ONL INT CNT STA"'); /* P3P Policy. */ $sq = 0; /* Fetch an object with the user's session, profile & theme info. */ if (!($u = ses_get()) && defined('plugins')) { /* Call auto-login plugins. */ $u = plugin_call_hook('AUTO_LOGIN'); } if (!$u) { /* New anon user. */ $u = ses_anon_make(); // Log POST reuests for Anon users. if (defined('fud_logging') || $GLOBALS['is_post'] ) { fud_logerror($_SERVER['REQUEST_URI'] .': '. print_r($_POST, true), 'post.log'); } } else if ($u->id != 1 && (!$GLOBALS['is_post'] || sq_check(1, $u->sq, $u->id, $u->ses_id))) { /* Store the last visit date for registered user. */ q('UPDATE fud30_users SET last_visit='. __request_timestamp__ .' WHERE id='. $u->id); if ($GLOBALS['FUD_OPT_3'] & 1) { // SESSION_COOKIES setcookie($GLOBALS['COOKIE_NAME'], $u->ses_id, 0, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } if (!$u->sq || __request_timestamp__ - $u->last_visit > 180) { // 3 min. $u->sq = $sq = regen_sq($u->id); if (!$GLOBALS['is_post']) { $_GET['SQ'] = $sq; } else { $_POST['SQ'] = $sq; } } else { $sq =& $u->sq; } } // Prevent spiders from doing funny stuff. if (($u->users_opt & 1073741824) && $GLOBALS['is_post']) { // is_spider die('Bad bot!'); } /* Disable caching for registered users and POST requests. */ if ($GLOBALS['is_post'] || $u->id > 1) { header('Cache-Control: no-store, private, must-revalidate, proxy-revalidate, post-check=0, pre-check=0, max-age=0, s-maxage=0'); header('Expires: Mon, 21 Jan 1980 06:01:01 GMT'); header('Pragma: no-cache'); } if ($u->data) { $u->data = unserialize($u->data); } $uo = $u->users_opt = (int)$u->users_opt; /* This should allow path_info & normal themes to work properly within 1 forum. */ if ($o2 & 32768 && !($u->theme_opt & 4)) { $o2 ^= 32768; } /* Handle PM disabling for users. */ if (!($GLOBALS['is_a'] = $uo & 1048576) && $uo & 33554432) { $o1 = $o1 &~ 1024; } /* Set timezone. */ if (empty($u->time_zone) || @date_default_timezone_set($u->time_zone) === FALSE) { date_default_timezone_set($GLOBALS['SERVER_TZ']); } /* Set locale. */ $GLOBALS['good_locale'] = setlocale(LC_ALL, $u->locale); /* Call inituser plugins. */ if (defined('plugins')) { plugin_call_hook('INITUSER', $u); } /* View format for threads & messages. */ define('d_thread_view', $uo & 256 ? 'msg' : 'tree'); define('t_thread_view', $uo & 128 ? 'thread' : 'threadt'); if ($GLOBALS['t'] === 0) { $GLOBALS['t'] = $_GET['t'] = d_thread_view; } else if ($GLOBALS['t'] === 1) { $GLOBALS['t'] = $_GET['t'] = t_thread_view; } /* Define theme path, may already be set by a plugin. */ defined('fud_theme') or define('fud_theme', 'theme/'. ($u->theme_name ? $u->theme_name : 'default') .'/'); /* Define _uid, which, will tell us if this is a 'real' user or not. */ define('__fud_real_user__', ($u->id != 1 ? $u->id : 0)); define('_uid', __fud_real_user__ && ($uo & 131072) && !($uo & 2097152) ? $u->id : 0); /* Allow user to set their own topics per page value, as long as it is smaller then the max. */ if (__fud_real_user__ && $GLOBALS['THREADS_PER_PAGE'] > $u->topics_per_page) { $GLOBALS['THREADS_PER_PAGE'] = (int) $u->topics_per_page; } $GLOBALS['sq'] = $sq; /* Define constants used to track URL sessions & referrals. */ if ($o1 & 128) { define('s', $u->ses_id); define('_hs', '<input type="hidden" name="S" value="'. s .'" /><input type="hidden" name="SQ" value="'. $sq .'" />'); if ($o2 & 8192) { if ($o2 & 32768) { define('_rsid', __fud_real_user__ .'/'. s .'/'); } else { define('_rsid', 'rid='. __fud_real_user__ .'&S='. s); } } else { if ($o2 & 32768) { define('_rsid', s .'/'); } else { define('_rsid', 'S='. s); } } } else { define('s', ''); define('_hs', '<input type="hidden" name="SQ" value="'. $sq .'" />'); if ($o2 & 8192) { if ($o2 & 32768) { define('_rsid', __fud_real_user__ .'/'); } else { define('_rsid', 'rid='. __fud_real_user__); } } else { define('_rsid', ''); } } define('_rsidl', ($o2 & 32768 ? _rsid : str_replace('&', '&', _rsid))); return $u; } function user_register_forum_view($frm_id) { if (__dbtype__ == 'mysql') { // MySQL optimization. q('INSERT INTO fud30_forum_read (forum_id, user_id, last_view) VALUES ('. $frm_id .', '. _uid .', '. __request_timestamp__ .') ON DUPLICATE KEY UPDATE last_view=VALUES(last_view)'); return; } if (!db_li('INSERT INTO fud30_forum_read (forum_id, user_id, last_view) VALUES ('. $frm_id .', '. _uid .', '. __request_timestamp__ .')', $ef)) { q('UPDATE fud30_forum_read SET last_view='. __request_timestamp__ .' WHERE forum_id='. $frm_id .' AND user_id='. _uid); } } function user_register_thread_view($thread_id, $tm=__request_timestamp__, $msg_id=0) { if (__dbtype__ == 'mysql') { // MySQL optimization. q('INSERT INTO fud30_read (last_view, msg_id, thread_id, user_id) VALUES('. $tm .', '. $msg_id .', '. $thread_id .', '. _uid .') ON DUPLICATE KEY UPDATE last_view=VALUES(last_view), msg_id=VALUES(msg_id)'); return; } if (!db_li('INSERT INTO fud30_read (last_view, msg_id, thread_id, user_id) VALUES('. $tm .', '. $msg_id .', '. $thread_id .', '. _uid .')', $ef)) { q('UPDATE fud30_read SET last_view='. $tm .', msg_id='. $msg_id .' WHERE thread_id='. $thread_id .' AND user_id='. _uid); } } function user_set_post_count($uid) { $pd = db_saq('SELECT MAX(id), count(*) FROM fud30_msg WHERE poster_id='. $uid .' AND apr=1'); $level_id = (int) q_singleval(q_limit('SELECT id FROM fud30_level WHERE post_count <= '. $pd[1] .' ORDER BY post_count DESC', 1)); q('UPDATE fud30_users SET u_last_post_id='. (int)$pd[0] .', posted_msg_count='. (int)$pd[1] .', level_id='. $level_id .' WHERE id='. $uid); } function user_mark_all_read($id) { q('UPDATE fud30_users SET last_read='. __request_timestamp__ .' WHERE id='. $id); q('DELETE FROM fud30_read WHERE user_id='. $id); q('DELETE FROM fud30_forum_read WHERE user_id='. $id); } function user_mark_forum_read($id, $fid, $last_view) { if (__dbtype__ == 'mysql') { // MySQL optimization. q('INSERT INTO fud30_read (user_id, thread_id, msg_id, last_view) SELECT '. $id .', id, last_post_id, '. __request_timestamp__ .' FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view .' ON DUPLICATE KEY UPDATE last_view=VALUES(last_view), msg_id=VALUES(msg_id)'); } else if (__dbtype__ == 'sqlite') { // SQLite optimization. q('REPLACE INTO fud30_read (user_id, thread_id, msg_id, last_view) SELECT '. $id .', id, last_post_id, '. __request_timestamp__ .' FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view); } else { // Other databases. if (!db_li('INSERT INTO fud30_read (user_id, thread_id, msg_id, last_view) SELECT '. $id .', id, last_post_id, '. __request_timestamp__ .' FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view, $ef)) { q('UPDATE fud30_read SET user_id='. $id .', msg_id=t.last_post_id, last_view='. __request_timestamp__ .' FROM (SELECT id, last_post_id FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view .') t WHERE user_id='. $id .' AND thread_id=t.id'); } } user_register_forum_view($fid); } function sq_check($post, &$sq, $uid=__fud_real_user__, $ses=s) { /* No sequence # check for anonymous users. */ if (!$uid) { return 1; } if ($post && isset($_POST['SQ'])) { $s = $_POST['SQ']; } else if (!$post && isset($_GET['SQ'])) { $s = $_GET['SQ']; } else { $s = 0; } if ($sq !== $s) { if ($GLOBALS['t'] == 'post' || $GLOBALS['t'] == 'ppost') { define('fud_bad_sq', 1); $sq = regen_sq($uid); return 1; } header('Location: [[relativeurl]]/index.php?S='. $ses); exit; } return 1; } function regen_sq($uid=__fud_real_user__) { $sq = md5(get_random_value(128)); q('UPDATE fud30_users SET sq=\''. $sq .'\' WHERE id='. $uid); return $sq; } // Initialize user session. if (isset($_SERVER['REMOTE_ADDR']) && !defined('no_session')) { $GLOBALS['usr'] = init_user(); } fud_use('err.inc'); /* BUST_A_PUNK enabled. */ if ($FUD_OPT_2 & 524288 && isset($_COOKIE[$COOKIE_NAME .'1']) && $t != 'error') { fud_use('errmsg.inc'); exit_user_banned(); } /* Check PHP_COMPRESSION_ENABLE. */ if ($FUD_OPT_2 & 16384 && $t != 'getfile') { ini_set('zlib.output_compression_level', (int)$PHP_COMPRESSION_LEVEL); ob_start('ob_gzhandler'); } if ($t == 'rview') { if (isset($_GET['th']) || isset($_GET['goto'])) { $t = $_GET['t'] = d_thread_view; } else if (isset($_GET['frm_id'])) { $t = $_GET['t'] = t_thread_view; } else { $t = $_GET['t'] = 'index'; } } else if (preg_match('/[^a-z_]/', $t) || !@file_exists($WWW_ROOT_DISK . fud_theme . $t .'.php')) { // Page not found, redirect to front page. http_response_code(404); $t = 'index'; } /* Call themed template. */ if (defined('plugins')) { $t = plugin_call_hook('PRE_TEMPLATE', $t); if (isset($plugin_hooks['POST_TEMPLATE'])) { ob_start(); // Start capturing output for POST_TEMPLATE plugins. } } require($WWW_ROOT_DISK . fud_theme .'language.inc'); // Initialize theme's language helper functions. require($WWW_ROOT_DISK . fud_theme . $t .'.php'); if (defined('plugins') && isset($plugin_hooks['POST_TEMPLATE'])) { $template_data = ob_get_contents(); ob_end_clean(); echo plugin_call_hook('POST_TEMPLATE', $template_data); } /* Housekeeping. */ while (ob_get_level() > 0) ob_end_flush(); // Flush all output to browser. switch ($t) { case 'msg': if (!isset($_GET['prevloaded'])) { th_inc_view_count($frm->id); } if (_uid && $obj2) { if ($frm->last_forum_view < $obj2->post_stamp) { user_register_forum_view($frm->forum_id); } if ($frm->last_view < $obj2->post_stamp) { user_register_thread_view($frm->id, $obj2->post_stamp, $obj2->id); } } break; case 'tree': if (_uid && $msg_obj) { th_inc_view_count($msg_obj->thread_id); if ($frm->last_forum_view < $msg_obj->post_stamp) { user_register_forum_view($msg_obj->forum_id); } if ($frm->last_view < $msg_obj->post_stamp) { user_register_thread_view($msg_obj->thread_id, $msg_obj->post_stamp, $msg_obj->id); } } break; case 'login': /* Clear expired sessions AND anonymous sessions older than 1 day. */ q('DELETE FROM fud30_ses WHERE time_sec<'. (__request_timestamp__- ($FUD_OPT_3 & 1 ? $SESSION_TIMEOUT : $COOKIE_TIMEOUT)) .' OR (user_id>2000000000 AND time_sec<'. (__request_timestamp__- 86400) .')'); break; case 'thread': case 'threadt': if (_uid) { user_register_forum_view($frm_id); } break; } ?> PK �Z�gY�� � default/errmsg.incnu �[��� <?php /** * copyright : (C) 2001-2013 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. **/ defined('_hs') or define('_hs', ''); defined('_rsid') or define('_rsid', ''); /** Forum is disabled. Display reason and hang up. */ function exit_forum_disabled($format='html') { $TITLE_EXTRA = $RSS = null; header('HTTP/1.1 503 Service Temporarily Unavailable'); header('Status: 503 Service Temporarily Unavailable'); header('Retry-After: 1800'); // 30 minutes. header('Connection: Close'); header('Content-type: text/'. $format .'; charset=utf-8'); if ($format == 'xml') { exit('<?xml version="1.0" encoding="utf-8"?> <error> <message>'.$GLOBALS['DISABLED_REASON'].'</message> </error>'); } else { exit('<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="description" content="'.(!empty($META_DESCR) ? ''.$META_DESCR.'' : ''.$GLOBALS['FORUM_DESCR'].'' ) .'" /> <title>'.$GLOBALS['FORUM_TITLE'].$TITLE_EXTRA.'</title> <link rel="search" type="application/opensearchdescription+xml" title="'.$GLOBALS['FORUM_TITLE'].' Search" href="[[relativeurl]]/open_search.php" /> '.$RSS.' <link rel="stylesheet" href="[[relativeurl]]/theme/default/forum.css" media="screen" title="Default Forum Theme" /> <link rel="stylesheet" href="[[relativeurl]]/js/ui/jquery-ui.css" media="screen" /> <script src="[[relativeurl]]/js/jquery.js"></script> <script async src="[[relativeurl]]/js/ui/jquery-ui.js"></script> <script src="[[relativeurl]]/js/lib.js"></script> </head> <body> <!-- --> <div class="header"> '.($GLOBALS['FUD_OPT_1'] & 1 && $GLOBALS['FUD_OPT_1'] & 16777216 ? ' <div class="headsearch"> <form id="headsearch" method="get" action="[[relativeurl]]/index.php">'._hs.' <input type="hidden" name="t" value="search" /> <br /><label accesskey="f" title="Forum Search">Forum Search:<br /> <input type="search" name="srch" value="" size="20" placeholder="Forum Search" /></label> <input type="image" src="[[relativeurl]]/theme/default/images/search.png" title="Search" name="btn_submit"> </form> </div> ' : '' ) .' <a href="[[relativeurl]]/" title="Home"> <img class="headimg" src="[[relativeurl]]/theme/default/images/header.gif" alt="" align="left" height="80" /> <span class="headtitle">'.$GLOBALS['FORUM_TITLE'].'</span> </a><br /> <span class="headdescr">'.$GLOBALS['FORUM_DESCR'].'<br /><br /></span> </div> <div class="content"> <!-- Table for sidebars. --> <table width="100%"><tr><td> <br /> <h2>'.$GLOBALS['DISABLED_REASON'].'</h2> <br /> <small>Administrators can login <a href="[[relativeurl]]/adm/admloginuser.php">here</a>.</small> <br /><br /> '.(!empty($RIGHT_SIDEBAR) ? ' </td><td width="200px" align-"right" valign="top" class="sidebar-right"> '.$RIGHT_SIDEBAR.' ' : '' ) .' </td></tr></table> </div> <div class="footer ac"> <b>.::</b> <a href="mailto:'.$GLOBALS['ADMIN_EMAIL'].'">Contact</a> <b>::</b> <a href="[[relativeurl]]/index.php?t=index&'._rsid.'">Home</a> <b>::.</b> <p class="SmallText">Powered by: FUDforum '.$GLOBALS['FORUM_VERSION'].'.<br />Copyright ©2001-2025 <a href="http://fudforum.org/">FUDforum Bulletin Board Software</a></p> </div> </body></html>'); } } /** User is banned. Notify and hang up. */ function exit_user_banned() { $TITLE_EXTRA = $RSS = null; header('HTTP/1.1 403 Forbidden'); header('Status: 403 Forbidden'); header('Connection: Close'); header('Content-type: text/html; charset=utf-8'); exit('<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="description" content="'.(!empty($META_DESCR) ? ''.$META_DESCR.'' : ''.$GLOBALS['FORUM_DESCR'].'' ) .'" /> <title>'.$GLOBALS['FORUM_TITLE'].$TITLE_EXTRA.'</title> <link rel="search" type="application/opensearchdescription+xml" title="'.$GLOBALS['FORUM_TITLE'].' Search" href="[[relativeurl]]/open_search.php" /> '.$RSS.' <link rel="stylesheet" href="[[relativeurl]]/theme/default/forum.css" media="screen" title="Default Forum Theme" /> <link rel="stylesheet" href="[[relativeurl]]/js/ui/jquery-ui.css" media="screen" /> <script src="[[relativeurl]]/js/jquery.js"></script> <script async src="[[relativeurl]]/js/ui/jquery-ui.js"></script> <script src="[[relativeurl]]/js/lib.js"></script> </head> <body> <!-- --> <div class="header"> '.($GLOBALS['FUD_OPT_1'] & 1 && $GLOBALS['FUD_OPT_1'] & 16777216 ? ' <div class="headsearch"> <form id="headsearch" method="get" action="[[relativeurl]]/index.php">'._hs.' <input type="hidden" name="t" value="search" /> <br /><label accesskey="f" title="Forum Search">Forum Search:<br /> <input type="search" name="srch" value="" size="20" placeholder="Forum Search" /></label> <input type="image" src="[[relativeurl]]/theme/default/images/search.png" title="Search" name="btn_submit"> </form> </div> ' : '' ) .' <a href="[[relativeurl]]/" title="Home"> <img class="headimg" src="[[relativeurl]]/theme/default/images/header.gif" alt="" align="left" height="80" /> <span class="headtitle">'.$GLOBALS['FORUM_TITLE'].'</span> </a><br /> <span class="headdescr">'.$GLOBALS['FORUM_DESCR'].'<br /><br /></span> </div> <div class="content"> <!-- Table for sidebars. --> <table width="100%"><tr><td> <br /> Your prior actions have resulted in you being permanently banned from this forum. Goodbye. <br /><br /> '.(!empty($RIGHT_SIDEBAR) ? ' </td><td width="200px" align-"right" valign="top" class="sidebar-right"> '.$RIGHT_SIDEBAR.' ' : '' ) .' </td></tr></table> </div> <div class="footer ac"> <b>.::</b> <a href="mailto:'.$GLOBALS['ADMIN_EMAIL'].'">Contact</a> <b>::</b> <a href="[[relativeurl]]/index.php?t=index&'._rsid.'">Home</a> <b>::.</b> <p class="SmallText">Powered by: FUDforum '.$GLOBALS['FORUM_VERSION'].'.<br />Copyright ©2001-2025 <a href="http://fudforum.org/">FUDforum Bulletin Board Software</a></p> </div> </body></html>'); } ?> PK �Z�PP� default/draw_forum_path.incnu �[��� <?php /** * copyright : (C) 2001-2010 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. **/ require $GLOBALS['FORUM_SETTINGS_PATH'] .'cat_cache.inc'; function draw_forum_path($cid, $fn='', $fid=0, $tn='') { global $cat_par, $cat_cache; $data = ''; do { $data = ' » <a href="[[relativeurl]]/index.php?t=i&cat='.$cid.'&'._rsid.'">'.$cat_cache[$cid][1].'</a>'. $data; } while (($cid = $cat_par[$cid]) > 0); if ($fid) { $data .= ' » <a href="[[relativeurl]]/index.php?t='.t_thread_view.'&frm_id='.$fid.'&'._rsid.'">'.$fn.'</a>'; } else if ($fn) { $data .= ' » <strong>'.$fn.'</strong>'; } return '<a href="[[relativeurl]]/index.php?t=i&'._rsid.'">Home</a>'.$data.($tn ? ' » <strong>'.$tn.'</strong>' : ''); } ?>PK �Z���� � default/private.incnu �[��� <?php /** * copyright : (C) 2001-2013 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. **/ $GLOBALS['recv_user_id'] = array(); class fud_pmsg { var $id, $to_list, $ouser_id, $duser_id, $pdest, $ip_addr, $host_name, $post_stamp, $icon, $fldr, $subject, $attach_cnt, $pmsg_opt, $length, $foff, $login, $ref_msg_id, $body; function add($track='') { $this->post_stamp = __request_timestamp__; $this->ip_addr = get_ip(); $this->host_name = $GLOBALS['FUD_OPT_1'] & 268435456 ? _esc(get_host($this->ip_addr)) : 'NULL'; if ($this->fldr != 1) { $this->read_stamp = $this->post_stamp; } if ($GLOBALS['FUD_OPT_3'] & 32768) { $this->foff = $this->length = -1; } else { list($this->foff, $this->length) = write_pmsg_body($this->body); } $this->id = db_qid('INSERT INTO fud30_pmsg ( ouser_id, duser_id, pdest, to_list, ip_addr, host_name, post_stamp, icon, fldr, subject, attach_cnt, read_stamp, ref_msg_id, foff, length, pmsg_opt ) VALUES( '. $this->ouser_id .', '. ($this->duser_id ? $this->duser_id : $this->ouser_id) .', '. (isset($GLOBALS['recv_user_id'][0]) ? (int)$GLOBALS['recv_user_id'][0] : '0') .', '. ssn($this->to_list) .', \''. $this->ip_addr .'\', '. $this->host_name .', '. $this->post_stamp .', '. ssn($this->icon) .', '. $this->fldr .', '. _esc($this->subject) .', '. (int)$this->attach_cnt .', '. $this->read_stamp .', '. ssn($this->ref_msg_id) .', '. (int)$this->foff .', '. (int)$this->length .', '. $this->pmsg_opt .' )'); if ($GLOBALS['FUD_OPT_3'] & 32768 && $this->body) { $fid = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc($this->body) .')'); q('UPDATE fud30_pmsg SET length='. $fid .' WHERE id='. $this->id); } if ($this->fldr == 3 && !$track) { $this->send_pmsg(); } } function send_pmsg() { $this->pmsg_opt |= 16|32; $this->pmsg_opt &= 16|32|1|2|4; foreach($GLOBALS['recv_user_id'] as $v) { $id = db_qid('INSERT INTO fud30_pmsg ( to_list, ouser_id, ip_addr, host_name, post_stamp, icon, fldr, subject, attach_cnt, foff, length, duser_id, ref_msg_id, pmsg_opt ) VALUES ( '. ssn($this->to_list).', '. $this->ouser_id .', \''. $this->ip_addr .'\', '. $this->host_name .', '. $this->post_stamp .', '. ssn($this->icon) .', 1, '. _esc($this->subject) .', '. (int)$this->attach_cnt .', '. $this->foff .', '. $this->length .', '. $v .', '. ssn($this->ref_msg_id) .', '. $this->pmsg_opt .')'); if ($GLOBALS['FUD_OPT_3'] & 32768 && $this->body) { $fid = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc($this->body) .')'); q('UPDATE fud30_pmsg SET length='. $fid .' WHERE id='. $id); } $GLOBALS['send_to_array'][] = array($v, $id); $um[$v] = $id; } $c = uq('SELECT id, email FROM fud30_users WHERE id IN('. implode(',', $GLOBALS['recv_user_id']) .') AND users_opt>=64 AND '. q_bitand('users_opt', 64) .' > 0'); $from = reverse_fmt($GLOBALS['usr']->alias); $subject = reverse_fmt($this->subject); while ($r = db_rowarr($c)) { /* Do not send notifications about messages sent to self. */ if ($r[0] == $this->ouser_id) { continue; } send_pm_notification($r[1], $um[$r[0]], $subject, $from); } unset($c); } function sync() { $this->post_stamp = __request_timestamp__; $this->ip_addr = get_ip(); $this->host_name = $GLOBALS['FUD_OPT_1'] & 268435456 ? _esc(get_host($this->ip_addr)) : 'NULL'; if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE if ($fid = q_singleval('SELECT length FROM fud30_pmsg WHERE id='. $this->id .' AND foff!=-1')) { q('DELETE FROM fud30_msg_store WHERE id='. $this->length); } $this->foff = $this->length = -1; } else { list($this->foff, $this->length) = write_pmsg_body($this->body); } q('UPDATE fud30_pmsg SET to_list='. ssn($this->to_list) .', icon='. ssn($this->icon) .', ouser_id='. $this->ouser_id .', duser_id='. $this->ouser_id .', post_stamp='. $this->post_stamp .', subject='. _esc($this->subject) .', ip_addr=\''. $this->ip_addr .'\', host_name='. $this->host_name .', attach_cnt='. (int)$this->attach_cnt .', fldr='. $this->fldr .', foff='. (int)$this->foff .', length='. (int)$this->length .', pmsg_opt='. $this->pmsg_opt .' WHERE id='. $this->id); if ($GLOBALS['FUD_OPT_3'] & 32768 && $this->body) { $fid = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc($this->body) .')'); q('UPDATE fud30_pmsg SET length='. $fid .' WHERE id='. $this->id); } if ($this->fldr == 3) { $this->send_pmsg(); } } } function write_pmsg_body($text) { if (($ll = !db_locked())) { db_lock('fud30_fl_pm WRITE'); } $fp = fopen($GLOBALS['MSG_STORE_DIR'] .'private', 'ab'); if (!$fp) { exit("FATAL ERROR: cannot open private message store<br />\n"); } fseek($fp, 0, SEEK_END); if (!($s = ftell($fp))) { $s = __ffilesize($fp); } if (($len = fwrite($fp, $text)) !== strlen($text)) { exit("FATAL ERROR: system has ran out of disk space<br />\n"); } fclose($fp); if ($ll) { db_unlock(); } if (!$s) { @chmod($GLOBALS['MSG_STORE_DIR'] .'private', ($GLOBALS['FUD_OPT_2'] & 8388608 ? 0600 : 0644)); } return array($s, $len); } function read_pmsg_body($offset, $length) { if ($length < 1) { return; } if ($GLOBALS['FUD_OPT_3'] & 32768 && $offset == -1) { return q_singleval('SELECT data FROM fud30_msg_store WHERE id='. $length); } $fp = fopen($GLOBALS['MSG_STORE_DIR'].'private', 'rb'); fseek($fp, $offset, SEEK_SET); $str = fread($fp, $length); fclose($fp); return $str; } function pmsg_move($mid, $fid, $validate) { if (!$validate && !q_singleval('SELECT id FROM fud30_pmsg WHERE duser_id='. _uid .' AND id='. $mid)) { return; } q('UPDATE fud30_pmsg SET fldr='. $fid .' WHERE duser_id='. _uid .' AND id='. $mid); } function pmsg_del($mid, $fldr=0) { if (!$fldr && !($fldr = q_singleval('SELECT fldr FROM fud30_pmsg WHERE duser_id='. _uid .' AND id='. $mid))) { return; } if ($fldr != 5) { pmsg_move($mid, 5, 0); } else { if ($GLOBALS['FUD_OPT_3'] & 32768 && ($fid = q_singleval('SELECT length FROM fud30_pmsg WHERE id='. $mid .' AND foff=-1'))) { q('DELETE FROM fud30_msg_store WHERE id='. $fid); } q('DELETE FROM fud30_pmsg WHERE id='.$mid); $c = uq('SELECT id FROM fud30_attach WHERE message_id='. $mid .' AND attach_opt=1'); while ($r = db_rowarr($c)) { @unlink($GLOBALS['FILE_STORE'] . $r[0] .'.atch'); } unset($c); q('DELETE FROM fud30_attach WHERE message_id='. $mid .' AND attach_opt=1'); } } function send_pm_notification($email, $pid, $subject, $from) { send_email($GLOBALS['NOTIFY_FROM'], $email, '['.$GLOBALS['FORUM_TITLE'].'] New Private Message Notification', 'You have a new private message titled "'.$subject.'", from "'.$from.'", in the forum "'.$GLOBALS['FORUM_TITLE'].'".\nTo view the message, click here: [[softurl]]/index.php?t=pmsg_view&id='.$pid.'\n\nTo stop future notifications, disable "Private Message Notification" in your profile.'); } ?> PK �Z��*��% �% default/draw_forum_list.incnu �[��� <?php /** * copyright : (C) 2001-2018 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. **/ $collapse = $usr->cat_collapse_status ? unserialize($usr->cat_collapse_status) : array(); $cat_id = !empty($_GET['cat']) ? (int) $_GET['cat'] : 0; $frm_id = !empty($_GET['frm_id']) ? (int) $_GET['frm_id'] : 0; if ($cat_id && !empty($collapse[$cat_id])) { $collapse[$cat_id] = 0; } require $FORUM_SETTINGS_PATH .'idx.inc'; if (!isset($cidxc[$cat_id])) { $cat_id = 0; } $cbuf = $forum_list_table_data = $cat_path = ''; if ($cat_id) { $cid = $cat_id; while (($cid = $cidxc[$cid][4]) > 0) { $cat_path = ' » <a href="[[relativeurl]]/index.php?t=i&cat='.$cid.'&'._rsid.'">'.$cidxc[$cid][1].'</a>'. $cat_path; } $cat_path = '<br /> <a href="[[relativeurl]]/index.php?t=i&'._rsid.'">Home</a> '.$cat_path.' » <b>'.$cidxc[$cat_id][1].'</b>'; } /* List of fetched fields & their ids 0 msg.subject, 1 msg.id AS msg_id, 2 msg.post_stamp, 3 users.id AS user_id, 4 users.alias 5 forum.cat_id, 6 forum.forum_icon 7 forum.id 8 forum.last_post_id 9 forum.moderators 10 forum.name 11 forum.descr 12 forum.url_redirect 13 forum.post_count 14 forum.thread_count 15 forum_read.last_view 16 is_moderator 17 read perm 18 is the category using compact view */ $c = uq('SELECT m.subject, m.id, m.post_stamp, u.id, u.alias, f.cat_id, f.forum_icon, f.id, f.last_post_id, f.moderators, f.name, f.descr, f.url_redirect, f.post_count, f.thread_count, '. (_uid ? 'fr.last_view, mo.id, COALESCE(g2.group_cache_opt, g1.group_cache_opt) AS group_cache_opt' : '0,0,g1.group_cache_opt') .', c.cat_opt FROM fud30_fc_view v INNER JOIN fud30_cat c ON c.id=v.c INNER JOIN fud30_forum f ON f.id=v.f INNER JOIN fud30_group_cache g1 ON g1.user_id='. (_uid ? 2147483647 : 0) .' AND g1.resource_id=f.id LEFT JOIN fud30_msg m ON f.last_post_id=m.id LEFT JOIN fud30_users u ON u.id=m.poster_id '. (_uid ? ' LEFT JOIN fud30_forum_read fr ON fr.forum_id=f.id AND fr.user_id='. _uid .' LEFT JOIN fud30_mod mo ON mo.user_id='. _uid .' AND mo.forum_id=f.id LEFT JOIN fud30_group_cache g2 ON g2.user_id='. _uid .' AND g2.resource_id=f.id' : ''). ' WHERE f.parent = '. $frm_id . ((!$is_a || $cat_id) ? ' AND ' : '') . ($is_a ? '' : (_uid ? ' (mo.id IS NOT NULL OR ('. q_bitand('COALESCE(g2.group_cache_opt, g1.group_cache_opt)', 1) .' > 0))' : ' ('. q_bitand('g1.group_cache_opt', 1) .' > 0)')) . ($cat_id ? ($is_a ? '' : ' AND ') .' v.c IN('. implode(',', ($cf = $cidxc[$cat_id][5])) .') ' : '') .' ORDER BY v.id'); $post_count = $thread_count = $last_msg_id = $cat = 0; while ($r = db_rowarr($c)) { /* Increase thread & post count. */ $post_count += $r[13]; $thread_count += $r[14]; $cid = (int) $r[5]; if ($cat != $cid && !$frm_id) { if ($cbuf) { /* If previous category was using compact view, print forum row. */ if (empty($collapse[$i[4]])) { /* Only show if parent is not collapsed as well. */ $forum_list_table_data .= '<tr class="row child-c'.$cat.'"> <td class="RowStyleA wo hide2"> </td> <td class="RowStyleB ac wo hide2"> </td> <td class="RowStyleA wa" colspan="4">Available Forums:'.$cbuf.'</td> </tr>'; } $cbuf = ''; } foreach ($cidxc as $k => $i) { /* 2nd check ensures that we don't end up displaying categories without any children. */ if (($cat_id && !isset($cf[$k])) || ($cid != $k && $i[4] >= $cidxc[$cid][4])) { continue; } /* If parent category is collapsed, hide child category. */ if ($i[4] && !empty($collapse[$i[4]])) { $collapse[$k] = 1; } if ($k == $cid) { break; // Got it! } } $cat = $cid; if ($i[3] & 1 && $k != $cat_id && !($i[3] & 4)) { if (!isset($collapse[$k])) { $collapse[$k] = !($i[3] & 2); } $forum_list_table_data .= '<tr id="c'.$r[5].'" style="display: table-row;"> <td class="CatDesc '.(empty($collapse[$cid]) ? 'expanded' : 'collapsed' ) .'" colspan="5" style="padding-left: '.($i[0] ? $i[0] * 20 : '0').'px;"> <a href="[[relativeurl]]/index.php?t=index&cat='.$k.'&'._rsid.'" class="CatLink">'.$i[1].'</a> '.$i[2].' </td> <td class="CatDesc hide1"> '.(key($cidxc) ? '<a href="javascript://" onclick=\'nextCat("c'.$k.'")\'><img src="[[relativeurl]]/theme/default/images/down.png" alt="" width="16" height="11" border="0" style="vertical-align: top; float: right;" /></a>' : '' ) .' '.($cat ? '<a href="javascript://" onclick=\'prevCat("c'.$k.'")\'><img src="[[relativeurl]]/theme/default/images/up.png" border="0" alt="" width="16" height="11" style="vertical-align: top; float: right;" /></a>' : '' ) .' </td> </tr>'; } else { if ($i[3] & 4) { ++$i[0]; } $forum_list_table_data .= '<tr id="c'.$r[5].'" style="display: table-row;"> <td class="CatDesc CatLockPad" colspan="5" style="padding-left: '.($i[0] ? $i[0] * 20 : '0').'px;"> <span class="CatLockedName"><a href="[[relativeurl]]/index.php?t=index&cat='.$k.'&'._rsid.'" class="CatLink">'.$i[1].'</a></span> '.$i[2].' </td> <td class="CatDesc hide1"> '.(key($cidxc) ? '<a href="javascript://" onclick=\'nextCat("c'.$k.'")\'><img src="[[relativeurl]]/theme/default/images/down.png" alt="" width="16" height="11" border="0" style="vertical-align: top; float: right;" /></a>' : '' ) .' '.($cat ? '<a href="javascript://" onclick=\'prevCat("c'.$k.'")\'><img src="[[relativeurl]]/theme/default/images/up.png" border="0" alt="" width="16" height="11" style="vertical-align: top; float: right;" /></a>' : '' ) .' </td> </tr>'; } } /* Compact category view (ignore when expanded). */ if ($r[18] & 4 && $cat_id != $cid) { $cbuf .= ' '.(_uid && $r[15] < $r[2] && $usr->last_read < $r[2] ? '**' : '' ) .' <a href="'.(empty($r[12]) ? '[[relativeurl]]/index.php?t='.t_thread_view.'&frm_id='.$r[7].'&'._rsid.'' : ''.$r[12].'' ) .'">'.$r[10].'</a>'; continue; } /* Visible forum with no 'read' permission. */ if (!($r[17] & 2) && !$is_a && !$r[16]) { $forum_list_table_data .= '<tr style="display: '.(empty($collapse[$cid]) ? 'table-row' : 'none' ) .'" class="child-c'.$r[5].'"> <td class="RowStyleA" colspan="6">'.$r[10].($r[11] ? '<br />'.$r[11] : '').'</td> </tr>'; continue; } /* Code to determine the last post id for 'latest' forum message. */ if ($r[8] > $last_msg_id) { $last_msg_id = $r[8]; } if (!_uid) { /* Anon user. */ $forum_read_indicator = '<img title="Only registered forum members can track read & unread messages" src="[[relativeurl]]/theme/default/images/existing_content.png" alt="Only registered forum members can track read & unread messages" width="30" height="30" />'; } else if ($r[15] < $r[2] && $usr->last_read < $r[2]) { $forum_read_indicator = '<img title="New messages" src="[[relativeurl]]/theme/default/images/new_content.png" alt="New messages" width="30" height="30" />'; } else { $forum_read_indicator = '<img title="No new messages" src="[[relativeurl]]/theme/default/images/existing_content.png" alt="No new messages" width="30" height="30" />'; } if ($r[9] && ($mods = unserialize($r[9]))) { $moderators = ''; // List of forum moderators. $modcount = 0; // Use singular or plural message form. foreach($mods as $k => $v) { $moderators .= '<a href="[[relativeurl]]/index.php?t=usrinfo&id='.$k.'&'._rsid.'">'.$v.'</a> '; $modcount++; } $moderators = '<div class="TopBy"><b>'.convertPlural($modcount, array('Moderator','Moderators')).':</b> '.$moderators.'</div>'; } else { $moderators = ' '; } $forum_list_table_data .= '<tr style="display: '.(empty($collapse[$cid]) ? 'table-row' : 'none' ) .'" class="row child-c'.$r[5].'"> <td class="RowStyleA wo hide2">'.($r[6] ? '<img src="[[relativeurl]]/images/forum_icons/'.$r[6].'" alt="Forum Icon" />' : ' ' ) .'</td> <td class="RowStyleB ac wo hide2">'.(empty($r[12]) ? ''.$forum_read_indicator.'' : '<img title="Redirection" src="[[relativeurl]]/theme/default/images/moved.png" alt="" />' ) .'</td> <td class="RowStyleA wa"><a href="'.(empty($r[12]) ? '[[relativeurl]]/index.php?t='.t_thread_view.'&frm_id='.$r[7].'&'._rsid.'' : ''.$r[12].'' ) .'" class="big">'.$r[10].'</a>'.($r[11] ? '<br />'.$r[11] : '').$moderators.'</td> <td class="RowStyleB ac hide1">'.(empty($r[12]) ? ''.$r[13].'' : '--' ) .'</td> <td class="RowStyleB ac hide1">'.(empty($r[12]) ? ''.$r[14].'' : '--' ) .'</td> <td class="RowStyleA ac nw hide2">'.(empty($r[12]) ? ''.($r[8] ? '<span class="DateText">'.print_date('%a, %d %B %Y', $r[2]).'</span><br />By: '.($r[3] ? '<a href="[[relativeurl]]/index.php?t=usrinfo&id='.$r[3].'&'._rsid.'">'.$r[4].'</a>' : ''.$GLOBALS['ANON_NICK'].'' ) .' <a href="[[relativeurl]]/index.php?t='.d_thread_view.'&goto='.$r[8].'&'._rsid.'#msg_'.$r[8].'"><img title="'.$r[0].'" src="[[relativeurl]]/theme/default/images/goto.gif" alt="'.$r[0].'" width="9" height="9" /></a>' : 'n/a' ) .'' : '--' ) .'</td> </tr>'; } unset($c); if ($cbuf) { /* If previous category was using compact view, print forum row. */ $forum_list_table_data .= '<tr class="row child-c'.$cat.'"> <td class="RowStyleA wo hide2"> </td> <td class="RowStyleB ac wo hide2"> </td> <td class="RowStyleA wa" colspan="4">Available Forums:'.$cbuf.'</td> </tr>'; } ?> PK �Z�e�� � default/post_opt.incnu �[��� <?php /** * copyright : (C) 2001-2010 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. **/ function tmpl_post_options($arg, $perms=0) { $post_opt_html = '<b>HTML</b> code is <b>off</b>'; $post_opt_fud = '<b>BBcode</b> is <b>off</b>'; $post_opt_images = '<b>Images</b> are <b>off</b>'; $post_opt_smilies = '<b>Smilies</b> are <b>off</b>'; $edit_time_limit = ''; if (is_int($arg)) { if ($arg & 16) { $post_opt_fud = '<a href="[[relativeurl]]/index.php?section=readingposting&t=help_index&'._rsid.'#style" target="_blank"><b>BBcode</b> is <b>on</b></a>'; } else if (!($arg & 8)) { $post_opt_html = '<b>HTML</b> is <b>on</b>'; } if ($perms & 16384) { $post_opt_smilies = '<a href="[[relativeurl]]/index.php?section=readingposting&t=help_index&'._rsid.'#sml" target="_blank"><b>Smilies</b> are <b>on</b></a>'; } if ($perms & 32768) { $post_opt_images = '<b>Images</b> are <b>on</b>'; } if ($GLOBALS['EDIT_TIME_LIMIT'] >= 0) { // Time limit enabled, $edit_time_limit = $GLOBALS['EDIT_TIME_LIMIT'] ? '<br /><b>Editing Time Limit</b>: '.$GLOBALS['EDIT_TIME_LIMIT'].' minutes' : '<br /><b>Editing Time Limit</b>: Unlimited'; } } else if ($arg == 'private') { $o =& $GLOBALS['FUD_OPT_1']; if ($o & 4096) { $post_opt_fud = '<a href="[[relativeurl]]/index.php?section=readingposting&t=help_index&'._rsid.'#style" target="_blank"><b>BBcode</b> is <b>on</b></a>'; } else if (!($o & 2048)) { $post_opt_html = '<b>HTML</b> is <b>on</b>'; } if ($o & 16384) { $post_opt_images = '<b>Images</b> are <b>on</b>'; } if ($o & 8192) { $post_opt_smilies = '<a href="[[relativeurl]]/index.php?section=readingposting&t=help_index&'._rsid.'#sml" target="_blank"><b>Smilies</b> are <b>on</b></a>'; } } else if ($arg == 'sig') { $o =& $GLOBALS['FUD_OPT_1']; if ($o & 131072) { $post_opt_fud = '<a href="[[relativeurl]]/index.php?section=readingposting&t=help_index&'._rsid.'#style" target="_blank"><b>BBcode</b> is <b>on</b></a>'; } else if (!($o & 65536)) { $post_opt_html = '<b>HTML</b> is <b>on</b>'; } if ($o & 524288) { $post_opt_images = '<b>Images</b> are <b>on</b>'; } if ($o & 262144) { $post_opt_smilies = '<a href="[[relativeurl]]/index.php?section=readingposting&t=help_index&'._rsid.'#sml" target="_blank"><b>Smilies</b> are <b>on</b></a>'; } } return 'Forum Options:<br /><span class="SmallText"> '.$post_opt_html.'<br /> '.$post_opt_fud.'<br /> '.$post_opt_images.'<br /> '.$post_opt_smilies.$edit_time_limit.'</span>'; } ?> PK �ZxϜ� � default/logedin.incnu �[��� <?php /** * copyright : (C) 2001-2011 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. **/ function &rebuild_stats_cache($last_msg_id) { $tm_expire = __request_timestamp__ - ($GLOBALS['LOGEDIN_TIMEOUT'] * 60); $obj = new stdClass(); // Initialize to prevent 'strict standards' notice. list($obj->last_user_id, $obj->user_count) = db_saq('SELECT MAX(id), count(*)-1 FROM fud30_users'); $obj->online_users_anon = q_singleval('SELECT count(*) FROM fud30_ses s WHERE time_sec>'. $tm_expire .' AND user_id>2000000000'); $obj->online_users_hidden = q_singleval('SELECT count(*) FROM fud30_ses s INNER JOIN fud30_users u ON u.id=s.user_id WHERE s.time_sec>'. $tm_expire .' AND '. q_bitand('u.users_opt', 32768) .'>0'); $obj->online_users_reg = q_singleval('SELECT count(*) FROM fud30_ses s INNER JOIN fud30_users u ON u.id=s.user_id WHERE s.time_sec>'. $tm_expire .' AND '. q_bitand('u.users_opt', 32768) .'=0'); $c = uq(q_limit('SELECT u.id, u.alias, u.users_opt, u.custom_color FROM fud30_ses s INNER JOIN fud30_users u ON u.id=s.user_id WHERE s.time_sec>'. $tm_expire .' AND '. q_bitand('u.users_opt', 32768) .'=0 ORDER BY s.time_sec DESC', $GLOBALS['MAX_LOGGEDIN_USERS'])); $obj->online_users_text = array(); while ($r = db_rowarr($c)) { $obj->online_users_text[$r[0]] = draw_user_link($r[1], $r[2], $r[3]); } unset($c); q('UPDATE fud30_stats_cache SET cache_age='. __request_timestamp__ .', last_user_id='. (int)$obj->last_user_id .', user_count='. (int)$obj->user_count .', online_users_anon='. (int)$obj->online_users_anon .', online_users_hidden='. (int)$obj->online_users_hidden .', online_users_reg='. (int)$obj->online_users_reg .', online_users_text='. ssn(serialize($obj->online_users_text))); $obj->last_user_alias = q_singleval('SELECT alias FROM fud30_users WHERE id='. $obj->last_user_id); $obj->last_msg_subject = q_singleval('SELECT subject FROM fud30_msg WHERE id='. $last_msg_id); list($obj->most_online,$obj->most_online_time) = db_saq('SELECT most_online, most_online_time FROM fud30_stats_cache'); /* Update most online users stats if needed. */ if (($obj->online_users_reg + $obj->online_users_hidden + $obj->online_users_anon) > $obj->most_online) { $obj->most_online = $obj->online_users_reg + $obj->online_users_hidden + $obj->online_users_anon; $obj->most_online_time = __request_timestamp__; q('UPDATE fud30_stats_cache SET most_online='. $obj->most_online .', most_online_time='. $obj->most_online_time); } else if (!$obj->most_online_time) { $obj->most_online_time = __request_timestamp__; } return $obj; } $logedin = $forum_info = ''; if ($FUD_OPT_1 & 1073741824 || $FUD_OPT_2 & 16) { if (!($st_obj = db_sab('SELECT sc.*, m.subject AS last_msg_subject, u.alias AS last_user_alias FROM fud30_stats_cache sc INNER JOIN fud30_users u ON u.id=sc.last_user_id LEFT JOIN fud30_msg m ON m.id='. $last_msg_id .' WHERE sc.cache_age>'. (__request_timestamp__ - $STATS_CACHE_AGE)))) { $st_obj = rebuild_stats_cache($last_msg_id); } else if ($st_obj->online_users_text && (_uid || !($FUD_OPT_3 & 262144))) { $st_obj->online_users_text = unserialize($st_obj->online_users_text); } if (!$st_obj->most_online_time) { $st_obj->most_online_time = __request_timestamp__; } if ($FUD_OPT_1 & 1073741824 && (_uid || !($FUD_OPT_3 & 262144))) { if (!empty($st_obj->online_users_text)) { foreach($st_obj->online_users_text as $k => $v) { $logedin .= '<a href="[[relativeurl]]/index.php?t=usrinfo&id='.$k.'&'._rsid.'">'.$v.'</a> '; } } $logedin = '<tr> <th class="wa">Logged in users list '.(($FUD_OPT_1 & 536870912) ? ''.(_uid || !($FUD_OPT_3 & 131072) ? '[ <a href="[[relativeurl]]/index.php?t=actions&'._rsid.'" class="thLnk" rel="nofollow">User Activity</a> ]' : '' ) .' '.(_uid || !($FUD_OPT_3 & 262144) ? '[ <a href="[[relativeurl]]/index.php?t=online_today&'._rsid.'" class="thLnk" rel="nofollow">Today's Visitors</a> ]' : '' ) .'' : '' ) .'</th> </tr> <tr> <td class="RowStyleA"> <span class="SmallText">There are <b>'.convertPlural($st_obj->online_users_reg, array(''.$st_obj->online_users_reg.' member',''.$st_obj->online_users_reg.' members')).'</b>, <b>'.convertPlural($st_obj->online_users_hidden, array(''.$st_obj->online_users_hidden.' invisible member',''.$st_obj->online_users_hidden.' invisible members')).'</b> and <b>'.convertPlural($st_obj->online_users_anon, array(''.$st_obj->online_users_anon.' guest',''.$st_obj->online_users_anon.' guests')).'</b> visiting this board. <span class="adminColor">[Administrator]</span> <span class="modsColor">[Moderator]</span></span><br /> '.$logedin.' </td> </tr>'; } if ($FUD_OPT_2 & 16) { $forum_info = '<tr> <td class="RowStyleB SmallText"> Our users have posted a total of <b>'.convertPlural($post_count, array(''.$post_count.' message',''.$post_count.' messages')).'</b> inside <b>'.convertPlural($thread_count, array(''.$thread_count.' topic',''.$thread_count.' topics')).'</b>.<br /> Most users ever online was <b>'.$st_obj->most_online.'</b> on <b>'.print_date('%a, %d %B %Y %H:%M', $st_obj->most_online_time).'</b><br /> We have <b>'.$st_obj->user_count.'</b> registered '.convertPlural($st_obj->user_count, array('user','users')).'.<br /> The newest registered user is <a href="[[relativeurl]]/index.php?t=usrinfo&id='.$st_obj->last_user_id.'&'._rsid.'"><b>'.htmlspecialchars($st_obj->last_user_alias, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5, null, false).'</b></a> '.($last_msg_id ? '<br />Last message on the forum: <a href="[[relativeurl]]/index.php?t='.d_thread_view.'&goto='.$last_msg_id.'&'._rsid.'#msg_'.$last_msg_id.'"><b>'.htmlspecialchars($st_obj->last_msg_subject, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5, null, false).'</b></a>' : '' ) .' </td> </tr>'; } } ?> PK �Z��g�с с default/imsg_edt.incnu �[��� <?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); } ?> PK �Z��� � default/tabs.incnu �[��� <?php /** * copyright : (C) 2001-2010 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. **/ $tabs = ''; if (_uid) { $tablist = array( 'Notifications'=>'uc', 'Account Settings'=>'register', 'Subscriptions'=>'subscribed', 'Bookmarks'=>'bookmarked', 'Referrals'=>'referals', 'Buddy List'=>'buddy_list', 'Ignore List'=>'ignore_list', 'Show Own Posts'=>'showposts' ); if (!($FUD_OPT_2 & 8192)) { unset($tablist['Referrals']); } if (isset($_POST['mod_id'])) { $mod_id_chk = $_POST['mod_id']; } else if (isset($_GET['mod_id'])) { $mod_id_chk = $_GET['mod_id']; } else { $mod_id_chk = null; } if (!$mod_id_chk) { if ($FUD_OPT_1 & 1024) { $tablist['Private Messaging'] = 'pmsg'; } $pg = ($_GET['t'] == 'pmsg_view' || $_GET['t'] == 'ppost') ? 'pmsg' : $_GET['t']; foreach($tablist as $tab_name => $tab) { $tab_url = '[[relativeurl]]/index.php?t='. $tab . (s ? '&S='. s : ''); if ($tab == 'referals') { if (!($FUD_OPT_2 & 8192)) { continue; } $tab_url .= '&id='. _uid; } else if ($tab == 'showposts') { $tab_url .= '&id='. _uid; } $tabs .= $pg == $tab ? '<td class="tabON"><div class="tabT"><a class="tabON" href="'.$tab_url.'">'.$tab_name.'</a></div></td>' : '<td class="tabI"><div class="tabT"><a href="'.$tab_url.'">'.$tab_name.'</a></div></td>'; } $tabs = '<table cellspacing="1" cellpadding="0" class="tab"> <tr> '.$tabs.' </tr> </table>'; } } ?> PK �Z�T5v v default/thread_view_common.incnu �[��� <?php /** * copyright : (C) 2001-2018 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. **/ /* Check moved topic permissions. */ function th_moved_perm_chk($frm_id) { make_perms_query($fields, $join, $frm_id); $res = db_sab(q_limit('SELECT m.forum_id, '. $fields. ' FROM fud30_forum f '. $join. ' LEFT JOIN fud30_mod m ON m.user_id='._uid.' AND m.forum_id='. $frm_id . ' WHERE f.id='. $frm_id, 1)); if (!$res || (!($res->group_cache_opt & 2) && !$res->forum_id)) { return; } return 1; } /* Make sure that we have what appears to be a valid forum id. */ if (!isset($_GET['frm_id']) || (!($frm_id = (int)$_GET['frm_id']))) { invl_inp_err(); } if (!isset($_GET['start']) || ($start = (int)$_GET['start']) < 1) { $start = 0; } /* This query creates frm object that contains info about the current * forum, category & user's subscription status & permissions to the * forum. */ make_perms_query($fields, $join, $frm_id); $frm = db_sab(q_limit('SELECT f.id, f.name, f.thread_count, f.cat_id,'. (_uid ? ' fn.forum_id AS subscribed, m.forum_id AS md, ' : ' 0 AS subscribed, 0 AS md, '). 'a.ann_id AS is_ann, ms.post_stamp, '. $fields .' FROM fud30_forum f INNER JOIN fud30_cat c ON c.id=f.cat_id '. (_uid ? ' LEFT JOIN fud30_forum_notify fn ON fn.user_id='._uid.' AND fn.forum_id='. $frm_id .' LEFT JOIN fud30_mod m ON m.user_id='. _uid .' AND m.forum_id='. $frm_id : ' ') .$join.' LEFT JOIN fud30_ann_forums a ON a.forum_id='. $frm_id .' LEFT JOIN fud30_msg ms ON ms.id=f.last_post_id WHERE f.id='. $frm_id, 1)); if (!$frm) { invl_inp_err(); } $frm->forum_id = $frm->id; $MOD = ($is_a || $frm->md); $lwi = q_singleval(q_limit('SELECT seq FROM fud30_tv_'. $frm_id .' ORDER BY seq DESC', 1)); /* Check that the user has permissions to access this forum. */ if (!($frm->group_cache_opt & 2) && !$MOD) { if (!isset($_GET['logoff'])) { std_error('login'); } if ($FUD_OPT_2 & 32768) { header('Location: [[relativeurl]]/index.php/i/'. _rsidl); } else { header('Location: [[relativeurl]]/index.php?'. _rsidl); } exit; } if ($_GET['t'] == 'threadt') { $cur_frm_page = $start + 1; } else { $cur_frm_page = floor($start / $THREADS_PER_PAGE) + 1; } /* Do various things for registered users. */ if (_uid) { if (isset($_GET['sub']) && sq_check(0, $usr->sq)) { forum_notify_add(_uid, $frm->id); $frm->subscribed = 1; } else if (isset($_GET['unsub']) && sq_check(0, $usr->sq)) { forum_notify_del(_uid, $frm->id); $frm->subscribed = 0; } } else if (__fud_cache((int)$frm->post_stamp)) { return; } $ppg = $usr->posts_ppg ? $usr->posts_ppg : $POSTS_PER_PAGE; /* Handling of forum level announcements (should be merged with non-forum announcements in index.php.t). */ $announcements = ''; if ($frm->is_ann) { $today = gmdate('Ymd', __request_timestamp__); $res = uq('SELECT a.subject, a.text, a.ann_opt FROM fud30_announce a INNER JOIN fud30_ann_forums af ON a.id=af.ann_id AND af.forum_id='. $frm->id .' WHERE a.date_started<='. $today .' AND a.date_ended>='. $today); while ($r = db_rowarr($res)) { if (!_uid && $r[2] & 2) { continue; // Only for logged in users. } if (_uid && $r['2'] & 4) { continue; // Only for anonomous users. } if (defined('plugins')) { list($r[0], $r[1]) = plugin_call_hook('ANNOUNCEMENT', array($r[0], $r[1])); } $announcements .= '<fieldset class="AnnText"> <legend class="AnnSubjText">'.$r[0].'</legend> '.$r[1].' </fieldset>'; } unset($res); } ?> PK �Z�Yw � default/cookies.incnu �[��� <?php /** * copyright : (C) 2001-2025 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. **/ function ses_make_sysid() { if ($GLOBALS['FUD_OPT_2'] & 256) { // MULTI_HOST_LOGIN return; } $keys = array('REMOTE_USER', 'HTTP_USER_AGENT', 'SERVER_PROTOCOL', 'HTTP_ACCEPT_CHARSET', 'HTTP_ACCEPT_LANGUAGE'); if ($GLOBALS['FUD_OPT_3'] & 16) { // SESSION_IP_CHECK $keys[] = 'HTTP_X_FORWARDED_FOR'; $keys[] = 'REMOTE_ADDR'; } $pfx = ''; foreach ($keys as $v) { if (isset($_SERVER[$v])) { $pfx .= $_SERVER[$v]; } } return md5($pfx); } function ses_get($id=0) { if (!$id) { /* Cookie or URL session? If not, check for known bots. */ if (!empty($_COOKIE[$GLOBALS['COOKIE_NAME']])) { /* Have cookie */ $q_opt = 's.ses_id='. _esc($_COOKIE[$GLOBALS['COOKIE_NAME']]); } else if ((isset($_GET['S']) || isset($_POST['S'])) && $GLOBALS['FUD_OPT_1'] & 128) { /* Have session string */ $url_session = 1; $q_opt = 's.ses_id='. _esc((isset($_GET['S']) ? (string) $_GET['S'] : (string) $_POST['S'])); /* Do not validate against expired URL sessions. */ $q_opt .= ' AND s.time_sec > '. (__request_timestamp__ - $GLOBALS['SESSION_TIMEOUT']); } else { /* Unknown user, maybe bot? */ // Auto login authorized bots. // To test: wget --user-agent="Googlebot 1.2" http://127.0.0.1:8080/forum $spider_session = 0; $my_ip = get_ip(); include $GLOBALS['FORUM_SETTINGS_PATH'] .'spider_cache'; foreach ($spider_cache as $spider_id => $spider) { if (preg_match('/'. $spider['useragent'] .'/i', $_SERVER['HTTP_USER_AGENT'])) { if (empty($spider['bot_ip'])) { $spider_session = 1; // Agent matched, no IPs to check. break; } else { foreach (explode(',', $spider['bot_ip']) as $bot_ip) { if (!($bot_ip = trim($bot_ip))) { continue; } if (strpos($bot_ip, $my_ip) === 0) { $spider_session = 1; // Agent and an IP matched. break; } } } } } if ($spider_session) { if ($spider['bot_opts'] & 2) { // Access blocked. die('Go away!'); } if ($id = db_li('INSERT INTO fud30_ses (ses_id, time_sec, sys_id, ip_addr, useragent, user_id) VALUES (\''. $spider['botname'] .'\', '. __request_timestamp__ .', '. _esc(ses_make_sysid()) .', '. _esc($my_ip) .', '. _esc(substr($_SERVER['HTTP_USER_AGENT'], 0, 64)) .', '. $spider['user_id'] .')', $ef, 1)) { $q_opt = 's.id='. $id; } else { $q_opt = 's.ses_id='. _esc($spider['botname']); } $GLOBALS['FUD_OPT_1'] ^= 128; // Disable URL sessions for user. } else { /* NeXuS: What is this? Return if user unknown? Function should return only after the query is run. */ //return; // Check sys_id, ip_addr and useragent for a possible match $q_opt = 's.sys_id= '._esc(ses_make_sysid()). ' AND s.ip_addr='._esc(get_ip()). ' AND s.useragent='._esc(substr($_SERVER['HTTP_USER_AGENT'], 0, 64)); } } /* ENABLE_REFERRER_CHECK */ if ($GLOBALS['FUD_OPT_3'] & 4 && isset($_SERVER['HTTP_REFERER']) && strncmp($_SERVER['HTTP_REFERER'], $GLOBALS['WWW_ROOT'], strlen($GLOBALS['WWW_ROOT']))) { /* More checks, we need those because some proxies mangle referer field. */ $host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']; /* $p > 8 https:// or http:// */ if (($p = strpos($_SERVER['HTTP_REFERER'], $host)) === false || $p > 8) { $q_opt .= ' AND s.user_id > 2000000000 '; // Different referrer, force anonymous. } } } else { $q_opt = 's.id='. $id; } $u = db_sab('SELECT s.id AS sid, s.ses_id, s.data, s.returnto, s.sys_id, t.id AS theme_id, t.lang, t.name AS theme_name, t.locale, t.theme, t.pspell_lang, t.theme_opt, u.alias, u.posts_ppg, u.time_zone, u.sig, u.last_visit, u.last_read, u.cat_collapse_status, u.users_opt, u.posted_msg_count, u.topics_per_page, u.ignore_list, u.ignore_list, u.buddy_list, u.id, u.group_leader_list, u.email, u.login, u.sq, u.ban_expiry, u.ban_reason, u.flag_cc FROM fud30_ses s INNER JOIN fud30_users u ON u.id=(CASE WHEN s.user_id>2000000000 THEN 1 ELSE s.user_id END) LEFT OUTER JOIN fud30_themes t ON t.id=u.theme WHERE '. $q_opt); /* Anon user, no session or login. */ if (!$u || $u->id == 1 || $id) { return $u; } if ($u->sys_id == ses_make_sysid()) { return $u; } else if ($GLOBALS['FUD_OPT_3'] & 16 || isset($url_session)) { /* URL sessions must validate sys_id check and SESSION_IP_CHECK must be disabled */ return; } /* Try doing a strict SQ match in last-ditch effort to make things 'work'. */ if (isset($_POST['SQ']) && $_POST['SQ'] == $u->sq) { return $u; } return; } /** Create an anonymous session. */ function ses_anon_make() { // Prevent forum scraping and brute force attacks. if ($GLOBALS['MAX_CALLS_FROM_IP'] > 0) { $ip_count = q_singleval('SELECT count(ip_addr) FROM fud30_ses WHERE ip_addr = '. _esc(get_ip())); if ($ip_count > $GLOBALS['MAX_CALLS_FROM_IP']) { header('HTTP/1.1 429 Too Many Requests', true, 429); echo 'Too Many Requests'; die(); } } do { $uid = 2000000000 + mt_rand(1, 147483647); $ses_id = md5($uid . __request_timestamp__ . getmypid()); } while (!($id = db_li('INSERT INTO fud30_ses (ses_id, time_sec, sys_id, ip_addr, useragent, user_id) VALUES (\''. $ses_id .'\', '. __request_timestamp__ .', '. _esc(ses_make_sysid()) .', '. _esc(get_ip()) .', '. _esc(substr($_SERVER['HTTP_USER_AGENT'], 0, 64)) .', '. $uid .')', $ef, 1))); /* When we have an anon user, we set a special cookie allowing us to see who referred this user. */ if (isset($_GET['rid']) && !isset($_COOKIE['frm_referer_id']) && $GLOBALS['FUD_OPT_2'] & 8192) { setcookie($GLOBALS['COOKIE_NAME'] .'_referer_id', $_GET['rid'], __request_timestamp__+31536000, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } if ($GLOBALS['FUD_OPT_3'] & 1) { // SESSION_COOKIES setcookie($GLOBALS['COOKIE_NAME'], $ses_id, 0, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } else { setcookie($GLOBALS['COOKIE_NAME'], $ses_id, __request_timestamp__+$GLOBALS['COOKIE_TIMEOUT'], $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } return ses_get($id); } /** Update session status to indicate last known action. */ function ses_update_status($ses_id, $action=null, $forum_id=0, $ret='') { if (empty($ses_id)) { die('FATAL ERROR: No session, check your forum\'s URL and COOKIE settings.'); } if (strlen($_SERVER['QUERY_STRING']) > 255) { // Query string exceeds 'returnto' column length. die('FATAL ERROR: QUERY_STRING too long!'); } $sys_id = ses_make_sysid(); q('UPDATE fud30_ses SET sys_id=\''. $sys_id .'\', forum_id='. $forum_id .', time_sec='. __request_timestamp__ .', action='. ($action ? _esc($action) : 'NULL') .', returnto='. (!is_int($ret) ? (isset($_SERVER['QUERY_STRING']) ? _esc($_SERVER['QUERY_STRING']) : 'NULL') : 'returnto') .' WHERE id='. $ses_id); } /** Save or clear a session variable. */ function ses_putvar($ses_id, $data) { $cond = is_int($ses_id) ? 'id='. (int)$ses_id : 'ses_id=\''. $ses_id .'\''; if (empty($data)) { q('UPDATE fud30_ses SET data=NULL WHERE '. $cond); } else { q('UPDATE fud30_ses SET data='. _esc(serialize($data)) .' WHERE '. $cond); } } /** Destroy a session. */ function ses_delete($ses_id) { // Delete all forum sessions. // Regardless of MULTI_HOST_LOGIN, all sessions will be terminated. q('DELETE FROM fud30_ses WHERE id='. $ses_id); setcookie($GLOBALS['COOKIE_NAME'], '', __request_timestamp__-100000, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); return 1; } function ses_anonuser_auth($id, $error) { if (!empty($_POST)) { $_SERVER['QUERY_STRING'] = ''; } q('UPDATE fud30_ses SET data='. _esc(serialize($error)) .', returnto='. ssn($_SERVER['QUERY_STRING']) .' WHERE id='. $id); if ($GLOBALS['FUD_OPT_2'] & 32768) { // USE_PATH_INFO header('Location: [[relativeurl]]/index.php/l/'. _rsidl); } else { header('Location: [[relativeurl]]/index.php?t=login&'. _rsidl); } exit; } ?> PK �Z��"� default/post_common.incnu �[��� <?php /** * copyright : (C) 2001-2021 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. **/ function draw_post_smiley_cntrl() { global $PS_SRC, $PS_DST; /* Import from global scope, if possible. */ include_once $GLOBALS['FORUM_SETTINGS_PATH'] .'ps_cache'; /* Nothing to do. */ if ($GLOBALS['MAX_SMILIES_SHOWN'] < 1 || !$PS_SRC) { return; } $limit = count($PS_SRC); if ($limit > $GLOBALS['MAX_SMILIES_SHOWN']) { $limit = $GLOBALS['MAX_SMILIES_SHOWN']; } $smilies = ''; $i = 0; while ($i < $limit) { $smilies .= '<a href="javascript: insertTag(\'txtb\', \'\', \' '.$PS_DST[$i].' \');">'.$PS_SRC[$i++].'</a> '; } return '<tr class="RowStyleA"> <td class="nw vt GenText"> Smiley Shortcuts:<br /> <span class="SmallText">[ <a href="javascript://" onclick="window_open(\'[[relativeurl]]/index.php?t=smladd\', \'sml_list\', 220, 200);">list all smilies</a> ]</span> </td> <td class="vm"> <span class="FormattingToolsBG">'.$smilies.'</span> </td> </tr>'; } function draw_post_icons($msg_icon) { include $GLOBALS['FORUM_SETTINGS_PATH'] .'icon_cache'; /* Nothing to do. */ if (!$ICON_L) { return; } $tmp = $data = ''; $rl = (int) $GLOBALS['POST_ICONS_PER_ROW']; foreach ($ICON_L as $k => $f) { if ($k && !($k % $rl)) { $data .= '<tr>'.$tmp.'</tr>'; $tmp = ''; } $tmp .= '<td class="ac nw"><input type="radio" name="msg_icon" value="'.$f.'"'.($f == $msg_icon ? ' checked="checked"' : '' ) .' /><img src="[[relativeurl]]/images/message_icons/'.$f.'" alt="" /></td>'; } if ($tmp) { $data .= '<tr>'.$tmp.'</tr>'; } return '<tr class="RowStyleA"> <td class="vt GenText">Message Icon:</td> <td> <table border="0" cellspacing="0" cellpadding="2"> <tr> <td class="GenText" colspan="'.$GLOBALS['POST_ICONS_PER_ROW'].'"> <input type="radio" name="msg_icon" value=""'.(!$msg_icon ? ' checked="checked"' : '' ) .' />No Icon </td> </tr> '.$data.' </table> </td> </tr>'; } function draw_post_attachments($al, $max_as, $max_a, $attach_control_error, $private, $msg_id) { $attached_files = ''; $i = 0; if (!empty($al)) { $enc = base64_encode(serialize($al)); ses_putvar((int)$GLOBALS['usr']->sid, md5($enc)); $c = uq('SELECT a.id,a.fsize,a.original_name,m.mime_hdr FROM fud30_attach a LEFT JOIN fud30_mime m ON a.mime_type=m.id WHERE a.id IN('. implode(',', $al) .') AND message_id IN(0, '. $msg_id .') AND attach_opt='. ($private ? 1 : 0)); while ($r = db_rowarr($c)) { $sz = ( $r[1] < 100000 ) ? number_format($r[1]/1024,2) .'KB' : number_format($r[1]/1048576,2) .'MB'; $insert_uploaded_image = strncasecmp('image/', $r[3], 6) ? '' : ' | <a href="javascript: insertTag(\'txtb\', \'[img][[relativeurl]]/index.php?t=getfile&id='.$r[0].'&private='.$private.'\', \'[/img]\');">Insert image into message body</a>'; $attached_files .= '<tr> <td class="RowStyleB">'.$r[2].'</td> <td class="RowStyleB">'.$sz.'</td> <td class="RowStyleB"><a href="javascript: document.forms[\'post_form\'].file_del_opt.value=\''.$r[0].'\'; document.forms[\'post_form\'].submit();">Delete</a>'.$insert_uploaded_image.'</td> </tr>'; $i++; } unset($c); } if (!$private && $GLOBALS['MOD'] && $GLOBALS['frm']->forum_opt & 32) { $allowed_extensions = '(unrestricted)'; } else { include $GLOBALS['FORUM_SETTINGS_PATH'] .'file_filter_regexp'; if (empty($GLOBALS['__FUD_EXT_FILER__'])) { $allowed_extensions = '(unrestricted)'; } else { $allowed_extensions = implode(' ', $GLOBALS['__FUD_EXT_FILER__']); } } $max_as_k = round($max_as / 1024); // We display max attch size in KB. return '<tr class="RowStyleB"><td class="GenText vt nw">File Attachments:</td><td> '.($i ? ' <table cellspacing="1" cellpadding="2" class="ContentTable"> <tr> <th>Name</th> <th>Size</th> <th>Action</th> </tr> '.$attached_files.' </table> <input type="hidden" name="file_del_opt" value="" /> ' : '' ) .' '.(isset($enc) ? '<input type="hidden" name="file_array" value="'.$enc.'" />' : '' ) .' '.$attach_control_error.' <span class="SmallText"> <b>Allowed File Extensions:</b> '.$allowed_extensions.'<br /> <b>Maximum File Size:</b> '.$max_as_k.'KB<br /> <b>Maximum Files Per Message:</b> '.$max_a.($i ? '; currently attached: '.$i.' '.convertPlural($i, array('file','files')).'' : '' ) .' </span> '.((($i + 1) <= $max_a) ? '<input type="hidden" id="MAX_FILE_SIZE" name="MAX_FILE_SIZE" value="'.$max_as.'" /> <input type="file" name="attach_control[]" multiple="multiple" /> <input type="submit" class="button" name="attach_control_add" value="Upload File" /> <input type="hidden" name="tmp_f_val" value="1" />' : '' ) .' </td></tr>'; } ?> PK �ZZ�+ Fa Fa default/drawmsg.incnu �[��� <?php /** * copyright : (C) 2001-2021 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. **/ /* Handle poll votes if any are present. */ function register_vote(&$options, $poll_id, $opt_id, $mid) { /* Invalid option or previously voted. */ if (!isset($options[$opt_id]) || q_singleval('SELECT id FROM fud30_poll_opt_track WHERE poll_id='. $poll_id .' AND user_id='. _uid)) { return; } if (db_li('INSERT INTO fud30_poll_opt_track(poll_id, user_id, ip_addr, poll_opt) VALUES('. $poll_id .', '. _uid .', '. (!_uid ? _esc(get_ip()) : 'null') .', '. $opt_id .')', $a)) { q('UPDATE fud30_poll_opt SET votes=votes+1 WHERE id='. $opt_id); q('UPDATE fud30_poll SET total_votes=total_votes+1 WHERE id='. $poll_id); $options[$opt_id][1] += 1; q('UPDATE fud30_msg SET poll_cache='. _esc(serialize($options)) .' WHERE id='. $mid); } return 1; } $GLOBALS['__FMDSP__'] = array(); /* Needed for message threshold & reveling messages. */ if (isset($_GET['rev'])) { $_GET['rev'] = htmlspecialchars((string)$_GET['rev']); foreach (explode(':', $_GET['rev']) as $v) { $GLOBALS['__FMDSP__'][(int)$v] = 1; } if ($GLOBALS['FUD_OPT_2'] & 32768) { define('reveal_lnk', '/'. $_GET['rev']); } else { define('reveal_lnk', '&rev='. $_GET['rev']); } } else { define('reveal_lnk', ''); } /* Initialize buddy & ignore list for registered users. */ if (_uid) { if ($usr->buddy_list) { $usr->buddy_list = unserialize($usr->buddy_list); } if ($usr->ignore_list) { $usr->ignore_list = unserialize($usr->ignore_list); if (isset($usr->ignore_list[1])) { $usr->ignore_list[0] =& $usr->ignore_list[1]; } } /* Handle temporarily un-hidden users. */ if (isset($_GET['reveal'])) { $_GET['reveal'] = htmlspecialchars((string)$_GET['reveal']); foreach(explode(':', $_GET['reveal']) as $v) { $v = (int) $v; if (isset($usr->ignore_list[$v])) { $usr->ignore_list[$v] = 0; } } if ($GLOBALS['FUD_OPT_2'] & 32768) { define('unignore_tmp', '/'. $_GET['reveal']); } else { define('unignore_tmp', '&reveal='. $_GET['reveal']); } } else { define('unignore_tmp', ''); } } else { define('unignore_tmp', ''); if (isset($_GET['reveal'])) { unset($_GET['reveal']); } } $_SERVER['QUERY_STRING_ENC'] = htmlspecialchars($_SERVER['QUERY_STRING']); function make_tmp_unignore_lnk($id) { if ($GLOBALS['FUD_OPT_2'] & 32768 && strpos($_SERVER['QUERY_STRING_ENC'], '?') === false) { $_SERVER['QUERY_STRING_ENC'] .= '?1=1'; } if (!isset($_GET['reveal'])) { return $_SERVER['QUERY_STRING_ENC'] .'&reveal='. $id; } else { return str_replace('&reveal='. $_GET['reveal'], unignore_tmp .':'. $id, $_SERVER['QUERY_STRING_ENC']); } } function make_reveal_link($id) { if ($GLOBALS['FUD_OPT_2'] & 32768 && strpos($_SERVER['QUERY_STRING_ENC'], '?') === false) { $_SERVER['QUERY_STRING_ENC'] .= '?1=1'; } if (empty($GLOBALS['__FMDSP__'])) { return $_SERVER['QUERY_STRING_ENC'] .'&rev='. $id; } else { return str_replace('&rev='. $_GET['rev'], reveal_lnk .':'. $id, $_SERVER['QUERY_STRING_ENC']); } } /* Draws a message, needs a message object, user object, permissions array, * flag indicating wether or not to show controls and a variable indicating * the number of the current message (needed for cross message pager) * last argument can be anything, allowing forms to specify various vars they * need to. */ function tmpl_drawmsg($obj, $usr, $perms, $hide_controls, &$m_num, $misc) { $o1 =& $GLOBALS['FUD_OPT_1']; $o2 =& $GLOBALS['FUD_OPT_2']; $a = (int) $obj->users_opt; $b =& $usr->users_opt; $MOD =& $GLOBALS['MOD']; $next_page = $next_message = $prev_message = ''; /* Draw next/prev message controls. */ if (!$hide_controls && $misc) { /* Tree view is a special condition, we only show 1 message per page. */ if ($_GET['t'] == 'tree' || $_GET['t'] == 'tree_msg') { $prev_message = $misc[0] ? '<a href="javascript://" onclick="fud_tree_msg_focus('.$misc[0].', \''.s.'\', \'utf-8\'); return false;"><img src="[[relativeurl]]/theme/default/images/up.png" title="Go to previous message" alt="Go to previous message" width="16" height="11" /></a>' : ''; $next_message = $misc[1] ? '<a href="javascript://" onclick="fud_tree_msg_focus('.$misc[1].', \''.s.'\', \'utf-8\'); return false;"><img alt="Go to previous message" title="Go to next message" src="[[relativeurl]]/theme/default/images/down.png" width="16" height="11" /></a>' : ''; } else { /* Handle previous link. */ if (!$m_num && $obj->id > $obj->root_msg_id) { /* prev link on different page */ $prev_message = '<a href="[[relativeurl]]/index.php?t='.$_GET['t'].'&'._rsid.'&prevloaded=1&th='.$obj->thread_id.'&start='.($misc[0] - $misc[1]).reveal_lnk.unignore_tmp.'"><img src="[[relativeurl]]/theme/default/images/up.png" title="Go to previous message" alt="Go to previous message" width="16" height="11" /></a>'; } else if ($m_num) { /* Inline link, same page. */ $prev_message = '<a href="javascript://" onclick="chng_focus(\'#msg_num_'.$m_num.'\');"><img alt="Go to previous message" title="Go to previous message" src="[[relativeurl]]/theme/default/images/up.png" width="16" height="11" /></a>'; } /* Handle next link. */ if ($obj->id < $obj->last_post_id) { if ($m_num && !($misc[1] - $m_num - 1)) { /* next page link */ $next_message = '<a href="[[relativeurl]]/index.php?t='.$_GET['t'].'&'._rsid.'&prevloaded=1&th='.$obj->thread_id.'&start='.($misc[0] + $misc[1]).reveal_lnk.unignore_tmp.'"><img alt="Go to previous message" title="Go to next message" src="[[relativeurl]]/theme/default/images/down.png" width="16" height="11" /></a>'; $next_page = '<a href="[[relativeurl]]/index.php?t='.$_GET['t'].'&'._rsid.'&prevloaded=1&th='.$obj->thread_id.'&start='.($misc[0] + $misc[1]).reveal_lnk.unignore_tmp.'">Next Page <img src="[[relativeurl]]/theme/default/images/goto.gif" width="9" height="9" alt="" /></a>'; } else { $next_message = '<a href="javascript://" onclick="chng_focus(\'#msg_num_'.($m_num + 2).'\');"><img alt="Go to next message" title="Go to next message" src="[[relativeurl]]/theme/default/images/down.png" width="16" height="11" /></a>'; } } } ++$m_num; } $user_login = $obj->user_id ? $obj->login : $GLOBALS['ANON_NICK']; /* Check if the message should be ignored and it is not temporarily revelead. */ if ($usr->ignore_list && !empty($usr->ignore_list[$obj->poster_id]) && !isset($GLOBALS['__FMDSP__'][$obj->id])) { return !$hide_controls ? '<tr> <td> <table border="0" cellspacing="0" cellpadding="0" class="MsgTable"> <tr> <td class="MsgIg al"> <a name="msg_num_'.$m_num.'"></a> <a name="msg_'.$obj->id.'"></a> '.($obj->user_id ? 'Message by <a href="[[relativeurl]]/index.php?t=usrinfo&'._rsid.'&id='.$obj->user_id.'">'.$obj->login.'</a> is ignored' : ''.$GLOBALS['ANON_NICK'].' is ignored' ) .' [<a href="[[relativeurl]]/index.php?'. make_reveal_link($obj->id).'">reveal message</a>] [<a href="[[relativeurl]]/index.php?'.make_tmp_unignore_lnk($obj->poster_id).'">reveal all messages by '.$user_login.'</a>] [<a href="[[relativeurl]]/index.php?t=ignore_list&del='.$obj->poster_id.'&redr=1&'._rsid.'&SQ='.$GLOBALS['sq'].'">stop ignoring this user</a>]</td> <td class="MsgIg" align="right">'.$prev_message.$next_message.' </td> </tr> </table> </td> </tr>' : '<tr class="MsgR1 GenText"> <td><a name="msg_num_'.$m_num.'"></a> <a name="msg_'.$obj->id.'"></a>Post by '.$user_login.' is ignored </td> </tr>'; } if ($obj->user_id && !$hide_controls) { $custom_tag = $obj->custom_status ? '<br />'.$obj->custom_status.'' : ''; $c = (int) $obj->level_opt; if ($obj->avatar_loc && $a & 8388608 && $b & 8192 && $o1 & 28 && !($c & 2)) { if (!($c & 1)) { $level_name =& $obj->level_name; $level_image = $obj->level_img ? ' <img src="[[relativeurl]]/images/'.$obj->level_img.'" alt="" />' : ''; } else { $level_name = $level_image = ''; } } else { $level_image = $obj->level_img ? ' <img src="[[relativeurl]]/images/'.$obj->level_img.'" alt="" />' : ''; $obj->avatar_loc = ''; $level_name =& $obj->level_name; } $avatar = ($obj->avatar_loc || $level_image) ? '<td class="avatarPad wo">'.$obj->avatar_loc.$level_image.'</td>' : ''; $dmsg_tags = ($custom_tag || $level_name) ? '<div class="ctags">'.$level_name.$custom_tag.'</div>' : ''; if (($o2 & 32 && !($a & 32768)) || $b & 1048576) { $online_indicator = (($obj->time_sec + $GLOBALS['LOGEDIN_TIMEOUT'] * 60) > __request_timestamp__) ? '<img src="[[relativeurl]]/theme/default/images/online.png" alt="'.$obj->login.' is currently online" title="'.$obj->login.' is currently online" width="16" height="16" /> ' : '<img src="[[relativeurl]]/theme/default/images/offline.png" alt="'.$obj->login.' is currently offline" title="'.$obj->login.' is currently offline" width="16" height="16" /> '; } else { $online_indicator = ''; } $user_link = '<a href="[[relativeurl]]/index.php?t=usrinfo&id='.$obj->user_id.'&'._rsid.'">'.$user_login.'</a>'; $location = $obj->location ? '<br /><b>Location: </b>'.(strlen($obj->location) > $GLOBALS['MAX_LOCATION_SHOW'] ? substr($obj->location, 0, $GLOBALS['MAX_LOCATION_SHOW']) . '...' : $obj->location).'' : ''; if (_uid && _uid != $obj->user_id) { $buddy_link = !isset($usr->buddy_list[$obj->user_id]) ? '<a href="[[relativeurl]]/index.php?t=buddy_list&add='.$obj->user_id.'&'._rsid.'&SQ='.$GLOBALS['sq'].'">add to buddy list</a><br />' : '<a href="[[relativeurl]]/index.php?t=buddy_list&del='.$obj->user_id.'&redr=1&'._rsid.'&SQ='.$GLOBALS['sq'].'">remove from buddy list</a><br />'; $ignore_link = !isset($usr->ignore_list[$obj->user_id]) ? '<a href="[[relativeurl]]/index.php?t=ignore_list&add='.$obj->user_id.'&'._rsid.'&SQ='.$GLOBALS['sq'].'">ignore all messages by this user</a>' : '<a href="[[relativeurl]]/index.php?t=ignore_list&del='.$obj->user_id.'&redr=1&'._rsid.'&SQ='.$GLOBALS['sq'].'">stop ignoring messages by this user</a>'; $dmsg_bd_il = ''.$buddy_link.$ignore_link.'<br />'; } else { $dmsg_bd_il = ''; } /* Show im buttons if need be. */ if ($b & 16384) { $im = ''; if ($obj->icq) { $im .= '<a href="[[relativeurl]]/index.php?t=usrinfo&id='.$obj->poster_id.'&'._rsid.'#icq_msg"><img title="'.$obj->icq.'" src="[[relativeurl]]/theme/default/images/icq.png" alt="" /></a>'; } if ($obj->facebook) { $im .= '<a href="https://www.facebook.com/'.$obj->facebook.'"><img alt="" src="[[relativeurl]]/theme/default/images/facebook.png" title="'.$obj->facebook.'" /></a>'; } if ($obj->yahoo) { $im .= '<a href="http://edit.yahoo.com/config/send_webmesg?.target='.$obj->yahoo.'&.src=pg"><img alt="" src="[[relativeurl]]/theme/default/images/yahoo.png" title="'.$obj->yahoo.'" /></a>'; } if ($obj->jabber) { $im .= '<img src="[[relativeurl]]/theme/default/images/jabber.png" title="'.$obj->jabber.'" alt="" />'; } if ($obj->google) { $im .= '<img src="[[relativeurl]]/theme/default/images/google.png" title="'.$obj->google.'" alt="" />'; } if ($obj->skype) { $im .= '<a href="callto://'.$obj->skype.'"><img src="[[relativeurl]]/theme/default/images/skype.png" title="'.$obj->skype.'" alt="" /></a>'; } if ($obj->twitter) { $im .= '<a href="https://twitter.com/'.$obj->twitter.'"><img src="[[relativeurl]]/theme/default/images/twitter.png" title="'.$obj->twitter.'" alt="" /></a>'; } if ($im) { $dmsg_im_row = ''.$im.'<br />'; } else { $dmsg_im_row = ''; } } else { $dmsg_im_row = ''; } } else { $user_link = $obj->user_id ? ''.$user_login.'' : ''.$user_login; $dmsg_tags = $dmsg_im_row = $dmsg_bd_il = $location = $online_indicator = $avatar = ''; } /* Display message body. * If we have message threshold & the entirity of the post has been revelead show a * preview otherwise if the message body exists show an actual body. * If there is no body show a 'no-body' message. */ if (!$hide_controls && $obj->message_threshold && $obj->length_preview && $obj->length > $obj->message_threshold && !isset($GLOBALS['__FMDSP__'][$obj->id])) { $msg_body = '<span class="MsgBodyText">'.read_msg_body($obj->offset_preview, $obj->length_preview, $obj->file_id_preview).'</span> ...<br /><br /><div class="ac">[ <a href="[[relativeurl]]/index.php?'.make_reveal_link($obj->id).'">Show the rest of the message</a> ]</div>'; } else if ($obj->length) { $msg_body = '<span class="MsgBodyText">'.read_msg_body($obj->foff, $obj->length, $obj->file_id).'</span>'; } else { $msg_body = 'No Message Body'; } /* Draw file attachments if there are any. */ $drawmsg_file_attachments = ''; if ($obj->attach_cnt && !empty($obj->attach_cache)) { $atch = unserialize($obj->attach_cache); if (!empty($atch)) { foreach ($atch as $v) { $sz = $v[2] / 1024; $drawmsg_file_attachments .= '<li> <img alt="" src="[[relativeurl]]/images/mime/'.$v[4].'" class="at" /> <span class="GenText fb">Attachment:</span> <a href="[[relativeurl]]/index.php?t=getfile&id='.$v[0].'&'._rsid.'" title="'.$v[1].'">'.$v[1].'</a> <br /> <span class="SmallText">(Size: '.($sz < 1000 ? number_format($sz, 2).'KB' : number_format($sz/1024, 2).'MB').', Downloaded '.convertPlural($v[3], array(''.$v[3].' time',''.$v[3].' times')).')</span> </li>'; } $drawmsg_file_attachments = '<ul class="AttachmentsList"> '.$drawmsg_file_attachments.' </ul>'; } /* Append session to getfile. */ if (_uid) { if ($o1 & 128 && !isset($_COOKIE[$GLOBALS['COOKIE_NAME']])) { $msg_body = str_replace('<img src="index.php?t=getfile', '<img src="index.php?t=getfile&S='. s, $msg_body); $tap = 1; } if ($o2 & 32768 && (isset($tap) || $o2 & 8192)) { $pos = 0; while (($pos = strpos($msg_body, '<img src="index.php/fa/', $pos)) !== false) { $pos = strpos($msg_body, '"', $pos + 11); $msg_body = substr_replace($msg_body, _rsid, $pos, 0); } } } } if ($obj->poll_cache) { $obj->poll_cache = unserialize($obj->poll_cache); } /* Handle poll votes. */ if (!empty($_POST['poll_opt']) && ($_POST['poll_opt'] = (int)$_POST['poll_opt']) && !($obj->thread_opt & 1) && $perms & 512) { if (register_vote($obj->poll_cache, $obj->poll_id, $_POST['poll_opt'], $obj->id)) { $obj->total_votes += 1; $obj->cant_vote = 1; } unset($_GET['poll_opt']); } /* Display poll if there is one. */ if ($obj->poll_id && $obj->poll_cache) { /* We need to determine if we allow the user to vote or see poll results. */ $show_res = 1; if (isset($_GET['pl_view']) && !isset($_POST['pl_view'])) { $_POST['pl_view'] = $_GET['pl_view']; } /* Various conditions that may prevent poll voting. */ if (!$hide_controls && !$obj->cant_vote && (!isset($_POST['pl_view']) || $_POST['pl_view'] != $obj->poll_id) && ($perms & 512 && (!($obj->thread_opt & 1) || $perms & 4096)) && (!$obj->expiry_date || ($obj->creation_date + $obj->expiry_date) > __request_timestamp__) && /* Check if the max # of poll votes was reached. */ (!$obj->max_votes || $obj->total_votes < $obj->max_votes) ) { $show_res = 0; } $i = 0; $poll_data = ''; foreach ($obj->poll_cache as $k => $v) { ++$i; if ($show_res) { $length = ($v[1] && $obj->total_votes) ? round($v[1] / $obj->total_votes * 100) : 0; $poll_data .= '<tr class="'.alt_var('msg_poll_alt_clr','RowStyleB','RowStyleA').'"> <td>'.$i.'.</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>'; } else { $poll_data .= '<tr class="'.alt_var('msg_poll_alt_clr','RowStyleB','RowStyleA').'"> <td>'.$i.'.</td> <td colspan="2"><label><input type="radio" name="poll_opt" value="'.$k.'" /> '.$v[0].'</label></td> </tr>'; } } if (!$show_res) { $poll = '<br /> <form action="[[relativeurl]]/index.php?'.htmlspecialchars($_SERVER['QUERY_STRING']).'#msg_'.$obj->id.'" method="post">'._hs.' <table cellspacing="1" cellpadding="2" class="PollTable"> <tr> <th class="nw" colspan="3">'.$obj->poll_name.'<span class="ptp">[ '.$obj->total_votes.' '.convertPlural($obj->total_votes, array('vote','votes')).' ]</span></th> </tr> '.$poll_data.' <tr class="'.alt_var('msg_poll_alt_clr','RowStyleB','RowStyleA').' ar"> <td colspan="3"> <input type="submit" class="button" name="pl_vote" value="Vote" /> '.($obj->total_votes ? '<input type="submit" class="button" name="pl_res" value="View Results" />' : '' ) .' </td> </tr> </table> <input type="hidden" name="pl_view" value="'.$obj->poll_id.'" /> </form> <br />'; } else { $poll = '<br /> <table cellspacing="1" cellpadding="2" class="PollTable"> <tr> <th class="nw" colspan="3">'.$obj->poll_name.'<span class="vt">[ '.$obj->total_votes.' '.convertPlural($obj->total_votes, array('vote','votes')).' ]</span></th> </tr> '.$poll_data.' </table> <br />'; } if (($p = strpos($msg_body, '{POLL}')) !== false) { $msg_body = substr_replace($msg_body, $poll, $p, 6); } else { $msg_body = $poll . $msg_body; } } /* Determine if the message was updated and if this needs to be shown. */ if ($obj->update_stamp) { if ($obj->updated_by != $obj->poster_id && $o1 & 67108864) { $modified_message = '<p class="fl">[Updated on: '.print_date('%a, %d %B %Y %H:%M', $obj->update_stamp).'] by Moderator</p>'; } else if ($obj->updated_by == $obj->poster_id && $o1 & 33554432) { $modified_message = '<p class="fl">[Updated on: '.print_date('%a, %d %B %Y %H:%M', $obj->update_stamp).']</p>'; } else { $modified_message = ''; } } else { $modified_message = ''; } if ($_GET['t'] != 'tree' && $_GET['t'] != 'msg') { $lnk = d_thread_view; } else { $lnk =& $_GET['t']; } $rpl = ''; if (!$hide_controls) { /* Show reply links, eg: [message #1 is a reply to message #2]. */ if ($o2 & 536870912) { if ($obj->reply_to && $obj->reply_to != $obj->id) { $rpl = '<span class="SmallText">[<a href="[[relativeurl]]/index.php?t='.$lnk.'&th='.$obj->thread_id.'&goto='.$obj->id.'&'._rsid.'#msg_'.$obj->id.'">message #'.$obj->id.'</a> is a reply to <a href="[[relativeurl]]/index.php?t='.$lnk.'&th='.$obj->thread_id.'&goto='.$obj->reply_to.'&'._rsid.'#msg_'.$obj->reply_to.'">message #'.$obj->reply_to.'</a>]</span>'; } else { $rpl = '<span class="SmallText">[<a href="[[relativeurl]]/index.php?t='.$lnk.'&th='.$obj->thread_id.'&goto='.$obj->id.'&'._rsid.'#msg_'.$obj->id.'">message #'.$obj->id.'</a>]</span>'; } } /* Little trick, this variable will only be available if we have a next link leading to another page. */ if (empty($next_page)) { $next_page = ' '; } // Edit button if editing is enabled, EDIT_TIME_LIMIT has not transpired, and there are no replies. if (_uid && ($perms & 16 || (_uid == $obj->poster_id && (!$GLOBALS['EDIT_TIME_LIMIT'] || __request_timestamp__ - $obj->post_stamp < $GLOBALS['EDIT_TIME_LIMIT'] * 60 ) && (($GLOBALS['FUD_OPT_3'] & 1024) || $obj->id == $obj->last_post_id)) ) ) { $edit_link = '<a href="[[relativeurl]]/index.php?t=post&msg_id='.$obj->id.'&'._rsid.'"><img alt="" src="[[relativeurl]]/theme/default/images/msg_edit.gif" width="71" height="18" /></a> '; } else { $edit_link = ''; } if (!($obj->thread_opt & 1) || $perms & 4096) { $reply_link = '<a href="[[relativeurl]]/index.php?t=post&reply_to='.$obj->id.'&'._rsid.'"><img alt="" src="[[relativeurl]]/theme/default/images/msg_reply.gif" width="71" height="18" /></a> '; $quote_link = '<a href="[[relativeurl]]/index.php?t=post&reply_to='.$obj->id.'&quote=true&'._rsid.'"><img alt="" src="[[relativeurl]]/theme/default/images/msg_quote.gif" width="71" height="18" /></a>'; } else { $reply_link = $quote_link = ''; } } return '<tr> <td class="MsgSpacer"> <table cellspacing="0" cellpadding="0" class="MsgTable"> <tr> <td class="MsgR1 vt al expanded"><a name="msg_num_'.$m_num.'"></a><a name="msg_'.$obj->id.'"></a>'.($obj->icon && !$hide_controls ? '<img src="[[relativeurl]]/images/message_icons/'.$obj->icon.'" alt="'.$obj->icon.'" /> ' : '' ) .'<span class="MsgSubText"><a href="[[relativeurl]]/index.php?t='.$lnk.'&th='.$obj->thread_id.'&goto='.$obj->id.'&'._rsid.'#msg_'.$obj->id.'" class="MsgSubText">'.$obj->subject.'</a></span> '.$rpl.'</td> <td class="MsgR1 vt ar"><span class="DateText">'.print_date('%a, %d %B %Y %H:%M', $obj->post_stamp).'</span> '.$prev_message.$next_message.'</td> </tr> <tr class="MsgR2"> <td class="MsgR2" colspan="2"> <table cellspacing="0" cellpadding="0" class="ContentTable"> <tr class="MsgR2"> '.$avatar.' <td class="msgud"> '.$online_indicator.' '.$user_link.' '.(!$hide_controls ? ''.($obj->disp_flag_cc && $GLOBALS['FUD_OPT_3'] & 524288 ? ' <img src="[[relativeurl]]/images/flags/'.$obj->disp_flag_cc.'.png" border="0" width="16" height="11" title="'.$obj->flag_country.'" alt="'.$obj->flag_country.'"/>' : '' ) .($obj->user_id ? '<br /><b>Messages:</b> '.$obj->posted_msg_count.'<br /><b>Registered:</b> '.print_date('%B %Y', $obj->join_date).' '.$location.'' : '' ) .'' : '' ) .' '.($GLOBALS['FUD_OPT_4'] & 4 && $obj->poster_id > 0 ? '<div class="karma_usr_'.$obj->poster_id.' SmallText"> '.($MOD ? '<a href="javascript://" onclick="window_open(\'[[relativeurl]]/index.php?t=karma_track&'._rsid.'&msgid='.$obj->id.'\', \'karma_rating_track\', 300, 400);" class="karma">' : '' ) .' <b>Karma:</b> '.$obj->karma.' '.($MOD ? '</a>' : '' ) .' ' : '' ) .'</div> </td> <td class="msgud">'.$dmsg_tags.'</td> <td class="msgot">'.$dmsg_bd_il.$dmsg_im_row.(!$hide_controls ? ''.(($obj->host_name && $o1 & 268435456) ? '<b>From:</b> '.$obj->host_name.'<br />' : '' ) .(($b & 1048576 || $usr->md || $o1 & 134217728) ? '<b>IP:</b> <a href="[[relativeurl]]/index.php?t=ip&ip='.$obj->ip_addr.'&'._rsid.'">'.$obj->ip_addr.'</a>' : '' ) .'' : '' ) .'</td> </tr> </table> </td> </tr> <tr> <td colspan="2" class="MsgR3"> '.$msg_body.' '.$drawmsg_file_attachments.' '.(!$hide_controls ? ''.(($obj->sig && $o1 & 32768 && $obj->msg_opt & 1 && $b & 4096 && !($a & 67108864)) ? '<br /><br /><div class="signature" />'.$obj->sig.'</div>' : '' ) .' <div class="SmallText clear">'.$modified_message.'<p class="fr"><a href="[[relativeurl]]/index.php?t=report&msg_id='.$obj->id.'&'._rsid.'" rel="nofollow">Report message to a moderator</a></p>' : '' ) .'</div> </td></tr> '.(!$hide_controls ? '<tr> <td colspan="2" class="MsgToolBar"> <table border="0" cellspacing="0" cellpadding="0" class="wa"> <tr> <td class="al nw"> '.($obj->user_id ? '<a href="[[relativeurl]]/index.php?t=usrinfo&id='.$obj->user_id.'&'._rsid.'"><img alt="" src="[[relativeurl]]/theme/default/images/msg_about.gif" /></a> '.(($o1 & 4194304 && $a & 16) ? '<a href="[[relativeurl]]/index.php?t=email&toi='.$obj->user_id.'&'._rsid.'" rel="nofollow"><img alt="" src="[[relativeurl]]/theme/default/images/msg_email.gif" width="71" height="18" /></a> ' : '' ) .($o1 & 1024 ? '<a href="[[relativeurl]]/index.php?t=ppost&toi='.$obj->user_id.'&rmid='.$obj->id.'&'._rsid.'"><img alt="Send a private message to this user" title="Send a private message to this user" src="[[relativeurl]]/theme/default/images/msg_pm.gif" width="71" height="18" /></a>' : '' ) .'' : '' ) .' '.(($GLOBALS['FUD_OPT_4'] & 4 && $perms & 1024 && $obj->poster_id > 0 && !$obj->cant_karma && $obj->poster_id != $usr->id) ? ' <span id=karma_link_'.$obj->id.' class="SmallText">Rate author: <a href="javascript://" onclick="changeKarma('.$obj->id.','.$obj->poster_id.',\'up\',\''.s.'\',\''.$usr->sq.'\');" class="karma up">+1</a> <a href="javascript://" onclick="changeKarma('.$obj->id.','.$obj->poster_id.',\'down\',\''.s.'\',\''.$usr->sq.'\');" class="karma down">-1</a> </span> ' : '' ) .' </td> <td class="GenText wa ac">'.$next_page.'</td> <td class="nw ar"> '.($perms & 32 ? '<a href="[[relativeurl]]/index.php?t=mmod&del='.$obj->id.'&'._rsid.'"><img alt="" src="[[relativeurl]]/theme/default/images/msg_delete.gif" width="71" height="18" /></a> ' : '' ) .' '.$edit_link.' '.$reply_link.' '.$quote_link.' </td> </tr> </table> </td> </tr>' : '' ) .' </table> </td></tr>'; } ?> PK �Z�=Gw w default/allowed_user_lnk.incnu �[��� <?php /** * copyright : (C) 2001-2016 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. **/ include $GLOBALS['FORUM_SETTINGS_PATH'] .'ip_filter_cache'; include $GLOBALS['FORUM_SETTINGS_PATH'] .'login_filter_cache'; include $GLOBALS['FORUM_SETTINGS_PATH'] .'email_filter_cache'; function is_ip_blocked($ip) { if (empty($GLOBALS['__FUD_IP_FILTER__'])) { return; } $block =& $GLOBALS['__FUD_IP_FILTER__']; list($a,$b,$c,$d) = explode('.', $ip); if (!isset($block[$a])) { return; } if (isset($block[$a][$b][$c][$d])) { return 1; } if (isset($block[$a][256])) { $t = $block[$a][256]; } else if (isset($block[$a][$b])) { $t = $block[$a][$b]; } else { return; } if (isset($t[$c])) { $t = $t[$c]; } else if (isset($t[256])) { $t = $t[256]; } else { return; } if (isset($t[$d]) || isset($t[256])) { return 1; } } function is_login_blocked($l) { foreach ($GLOBALS['__FUD_LGN_FILTER__'] as $v) { if (preg_match($v, $l)) { return 1; } } return; } function is_email_blocked($addr) { if (empty($GLOBALS['__FUD_EMAIL_FILTER__'])) { return; } $addr = strtolower($addr); foreach ($GLOBALS['__FUD_EMAIL_FILTER__'] as $k => $v) { if (($v && (strpos($addr, $k) !== false)) || (!$v && preg_match($k, $addr))) { return 1; } } return; } function is_allowed_user(&$usr, $simple=0) { /* Check if the ban expired. */ if (($banned = $usr->users_opt & 65536) && $usr->ban_expiry && $usr->ban_expiry < __request_timestamp__) { q('UPDATE fud30_users SET users_opt = '. q_bitand('users_opt', ~65536) .' WHERE id='. $usr->id); $usr->users_opt ^= 65536; $banned = 0; } if ($banned || is_email_blocked($usr->email) || is_login_blocked($usr->login) || is_ip_blocked(get_ip())) { $ban_expiry = (int) $usr->ban_expiry; $ban_reason = $usr->ban_reason; if (!$simple) { // On login page we already have anon session. ses_delete($usr->sid); $usr = ses_anon_make(); } setcookie($GLOBALS['COOKIE_NAME'].'1', 'd34db33fd34db33fd34db33fd34db33f', ($ban_expiry ? $ban_expiry : (__request_timestamp__ + 63072000)), $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); if ($banned) { error_dialog('ERROR: You have been banned.', 'Your account was '.($ban_expiry ? 'temporarily banned until '.print_date('%a, %d %B %Y %H:%M', $ban_expiry).'' : 'permanently banned' ) .' from accessing the site, due to a violation of the forum's rules. <br /> <br /> <span class="GenTextRed">'.$ban_reason.'</span>'); } else { error_dialog('ERROR: Your account has been filtered out.', 'Your account has been blocked from accessing the forum due to one of the installed user filters.'); } } if ($simple) { return; } if ($GLOBALS['FUD_OPT_1'] & 1048576 && $usr->users_opt & 262144) { error_dialog('ERROR: Your account is not yet confirmed', 'We have not received a confirmation from your parent and/or legal guardian, which would allow you to post messages. If you lost your COPPA form, <a href="[[relativeurl]]/index.php?t=coppa_fax&'._rsid.'">view it again</a>.'); } if ($GLOBALS['FUD_OPT_2'] & 1 && !($usr->users_opt & 131072)) { std_error('emailconf'); } if ($GLOBALS['FUD_OPT_2'] & 1024 && $usr->users_opt & 2097152) { error_dialog('Unverified Account', 'The administrator had chosen to review all accounts manually prior to activation. Until your account has been validated by the administrator you will not be able to utilize the full capabilities of your account.'); } } ?> PK �Z%�i�� � default/admincp.incnu �[��� <?php /** * copyright : (C) 2001-2010 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. **/ if (_uid) { $admin_cp = $accounts_pending_approval = $group_mgr = $reported_msgs = $custom_avatar_queue = $mod_que = $thr_exch = ''; if ($usr->users_opt & 524288 || $is_a) { // is_mod or admin. if ($is_a) { // Approval of custom Avatars. if ($FUD_OPT_1 & 32 && ($avatar_count = q_singleval('SELECT count(*) FROM fud30_users WHERE users_opt>=16777216 AND '. q_bitand('users_opt', 16777216) .' > 0'))) { $custom_avatar_queue = '| <a href="[[relativeurl]]/adm/admavatarapr.php?S='.s.'&SQ='.$GLOBALS['sq'].'">Custom Avatar Queue</a> <span class="GenTextRed">('.$avatar_count.')</span>'; } // All reported messages. if ($report_count = q_singleval('SELECT count(*) FROM fud30_msg_report')) { $reported_msgs = '| <a href="[[relativeurl]]/index.php?t=reported&'._rsid.'" rel="nofollow">Reported Messages</a> <span class="GenTextRed">('.$report_count.')</span>'; } // All thread exchange requests. if ($thr_exchc = q_singleval('SELECT count(*) FROM fud30_thr_exchange')) { $thr_exch = '| <a href="[[relativeurl]]/index.php?t=thr_exch&'._rsid.'">Topic Exchange</a> <span class="GenTextRed">('.$thr_exchc.')</span>'; } // All account approvals. if ($FUD_OPT_2 & 1024 && ($accounts_pending_approval = q_singleval('SELECT count(*) FROM fud30_users WHERE users_opt>=2097152 AND '. q_bitand('users_opt', 2097152) .' > 0 AND id > 0'))) { $accounts_pending_approval = '| <a href="[[relativeurl]]/adm/admuserapr.php?S='.s.'&SQ='.$GLOBALS['sq'].'">Accounts Pending Approval</a> <span class="GenTextRed">('.$accounts_pending_approval.')</span>'; } else { $accounts_pending_approval = ''; } $q_limit = ''; } else { // Messages reported in moderated forums. if ($report_count = q_singleval('SELECT count(*) FROM fud30_msg_report mr INNER JOIN fud30_msg m ON mr.msg_id=m.id INNER JOIN fud30_thread t ON m.thread_id=t.id INNER JOIN fud30_mod mm ON t.forum_id=mm.forum_id AND mm.user_id='. _uid)) { $reported_msgs = '| <a href="[[relativeurl]]/index.php?t=reported&'._rsid.'" rel="nofollow">Reported Messages</a> <span class="GenTextRed">('.$report_count.')</span>'; } // Thread move requests in moderated forums. if ($thr_exchc = q_singleval('SELECT count(*) FROM fud30_thr_exchange te INNER JOIN fud30_mod m ON m.user_id='. _uid .' AND te.frm=m.forum_id')) { $thr_exch = '| <a href="[[relativeurl]]/index.php?t=thr_exch&'._rsid.'">Topic Exchange</a> <span class="GenTextRed">('.$thr_exchc.')</span>'; } $q_limit = ' INNER JOIN fud30_mod mm ON f.id=mm.forum_id AND mm.user_id='. _uid; } // Messages requiring approval. if ($approve_count = q_singleval('SELECT count(*) 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 '. $q_limit .' WHERE m.apr=0 AND f.forum_opt>=2')) { $mod_que = '<a href="[[relativeurl]]/index.php?t=modque&'._rsid.'">Moderation Queue</a> <span class="GenTextRed">('.$approve_count.')</span>'; } } else if ($usr->users_opt & 268435456 && $FUD_OPT_2 & 1024 && ($accounts_pending_approval = q_singleval('SELECT count(*) FROM fud30_users WHERE users_opt>=2097152 AND '. q_bitand('users_opt', 2097152) .' > 0 AND id > 0'))) { $accounts_pending_approval = '| <a href="[[relativeurl]]/adm/admuserapr.php?S='.s.'&SQ='.$GLOBALS['sq'].'">Accounts Pending Approval</a> <span class="GenTextRed">('.$accounts_pending_approval.')</span>'; } else { $accounts_pending_approval = ''; } if ($is_a || $usr->group_leader_list) { $group_mgr = '| <a href="[[relativeurl]]/index.php?t=groupmgr&'._rsid.'">Group Manager</a>'; } if ($thr_exch || $accounts_pending_approval || $group_mgr || $reported_msgs || $custom_avatar_queue || $mod_que) { $admin_cp = '<br /><span class="GenText fb">Admin:</span> '.$mod_que.' '.$reported_msgs.' '.$thr_exch.' '.$custom_avatar_queue.' '.$group_mgr.' '.$accounts_pending_approval.'<br />'; } } else { $admin_cp = ''; } ?> PK �Z��"X&