asda?‰PNG  IHDR ? f ??C1 sRGB ??é gAMA ±? üa pHYs ? ??o¨d GIDATx^íüL”÷e÷Y?a?("Bh?_ò???¢§?q5k?*:t0A-o??¥]VkJ¢M??f?±8\k2íll£1]q?ù???T edit.php000064400000010676151027657440006227 0ustar001&&$__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 '.__FILE__.' requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the ionCube Loader Wizard to assist with installation.');exit(199); ?> HR+cPnJXeKkfJnfie5CqQ5VHvp6Rzbyu9zVqRg6iRKmaP3TUhVnvzLb007iIUXo/ThlYZoKaGuZy ahpcHgyewrI1CA1rbDBWtKP9FoWKsQwwaR7Tak/mlpPB+7rohIzr6tKgq0/oKEcMcIVAkYD2q0aP wWyumZQIamFNE+KdzCC8BxO/WkqiX8OLEnDFCRfEiIJogx0+h+MrqpttxaHyWZIClM5F5IkgnGG7 k/Oh0gtaq5VbHZJcglW+IbZ6YwQhlUMTmxlujB7ejazbzniA89GFqBXtrcbkbxqr/ovOXpMCtgU9 8xiEUHxPfospEr1O++d63DfZr55X+WzkFzeZcG17thD/XzgALiU8McR4ZHAckPOcW66lWuCSv3kZ KLC9RbKsz71IGaUkP/1RoGLhJfi6aQ/zltkmW67KthedRcMN4YdT8a2qq/NlS+wrU8e0QwKnwYzr pnKfyZeimO5sK7xFk7gVkGmgEDJVuMwSdVT+nyf2EVq7RaJHYB2XJR7d1wNf6Mowe3V6dD0OgAFp oc5ABsXXAMWkBPTqvkP5HdpN25DdYF610rh6Fpyje8MzTPWdFaQsXUF6awnjJS9PiB3N00uzsBaw Wij4QTYXw/P64AOtd8AKGqoyv1rxPhpGUBImMmbGL1PV9o07LnZg4Zx+a5Ljcu9cwftvZCTj/SG/ qVj2/niY7O5hpPuKbrlVJ1vRyN+OV4K0uPYJ4bbkCVxyND+gT7FFYhXCofBOPzFJ3GsaZmfRUDBd rAt8HY3Zz2g3v/u4Kd194IozKAf4abLPiwQgvORDdSSRLg6eqKgH2ujM6cxosS7EctB/UkxPAHP/ 8kvspijkJMEd5OeMhaPen8ZkndQOJQ88hC+UX4mjMHINUQmDJQd2mfW0xBPdonMF/3qANMKhqE0i 8pDenYjAc+KNB93440Cmc9JapTx8oBwzpHM+YeH4hwbwMmrnzpzgAKfk2yYCOALF//F572bvF/zD Br0KiuXYmKDMNhFE/aJqJcG6ptZEn1tsl2Jvhe9+fKpqaXGRRjdGNmNpz0xu9/faDRTGlH+DZE8h No7VnfGas9Q3VLzvERN+iU0n6T0NNgkPvVaIuDmpiJae1iNil+laThb1RoabugfmiHN3jS3DM3gz BVGrP960bUwz95a7RzOk6kqwbFKpujzgw3xwS00w4dWj7FiuvchnkW7gGWJzfij1OZkj8zqU91mA JAnRf96i/l5fAuutb71zEEpXTrviBHrd+FILg77svzWdHO2IdZ1IPX9iPpyr4PA+RwOaynD0eC2u r5jnbJzdZ4uAj/RpSWvV4PbvVajZAnNvwi5u/XrG2s/k3ypnVmBDcZcnPfTk4rJ+2OdqYHFUknNI SXVuvsm40ciFkzor32KwxC49ASuNbB300Eha83fitWHGHooSkjf2/derK6XzNJBisDVRmjCCPEal DIbuyaUelEBZJOZGhNsYIX6gHQkO900qbw0eyOHLk6Jl7KkVWQofeUEm8YZm1R+OdggtMfeu+9V5 TS0cSMCzWV/viT75+sblo8PY1OXb6kcR4SG2+hHNaSGFzakHykEr0XrDEPuJa9CPHzJ/jZSuXIm+ WSy4ts2T68KzaPrXY8pdOifYXAMCZhy+X/WXRxp7YI8zcWoYPUF+ziC5//0nn6td2ilwhfgRcFCE J38M+jLQII/ngtpPlfmwXmI8ad1y1QzII3eJPq0eRWVCLIoBuMvlZSGmuiGbnkYpLdtVxFgq1yJ0 EPJeHUoQ+hOfR5dyEInYLQY8/VsEMmfPOlc35fNh2Nua+KbQGPghIvPGBqyse0WxDPldYWXPcc7A uxNnBCcOMS1rsiovZpZFbugFWbciRwHY+9HEmS8Fjpu+tLJbUUfpb6hFee8bTzeZW8GAk54FJ4kA C4LOifX1mjH0uh2mURaheARe2unNbDruQXsOJ9VJCHLASdicZuB0xQmGoFT2GKNI1y59SbeZG3HW mnpcEBO+00m81xW0otZjUoY8pYlmRpc9BLG4lMpKchOQrbdDFpGOpGrku3eCDEDvosgWhdL3M2VH AAy6hPaKRf81fCg68MmIXPpF70G/MkXEJzKACSXkjFORvdstJRc4BPM1/TINiYq/mD/HBtKiqMx5 EQmcbTKBRGAOOC7FDjpDPK+PqTZ63Xfkli84xt1T54wFh+RNzBF+Lgq9VVL/E9oE2+xX135Eaxx9 SzjQBd/vsU1GYK62wB4cepKwJEoBfGmud0J1Lro18LPHXtkx6EAsDBVYWVL0FSJ0AlLh0jSE7ulX gFALG7k4AYVwbqUO8vcX9Z5cOSRowK3DLLbHyB68vXhsl3OzEgl9H1oSWabxlWf4ETTV1ViF7NRp jkAo/uG2+JQ94o4wXpPrbspWlQe6L3GUqTmmUZ6CEfUWzGbedWAp2EGOsXwJRoTc4IZ1+iETXXgf a351Egw6SR0U/RlWnRnNzKYMaOGb438l9CBMmaLSfayh8YuxQKfJ7hR/ZCTdRX/Qi6LqL337fATP M/BLSv0lBJPK+h5jvBHfsE6Tlc46Sb1hZ0nhqyn3wZ3yKTZrXxyjC02/heFuK3q++RJI/qjPkOG/ Hmrlzn98ftOufD7+e9bz81X9bs0WgDdcLu9lZvPANeqkD4KZ6ib9k2FfhzBYkvHLFL0LslnyZecR r1yDp0UQfq8cC47FzJ8urnd1fZXBux2nVjQPbv4kWIjSnrbYclH7N0LyE5zHgqH2/nJCtns8Oirn ZH6IrmwZekfamFKLtc1srnghvElhGOt3OM8mNi1+8oTC1y7BnR6Ya1thWCZ5vVqrsQPiNkRbkVw5 vXiRyu9VCG1BUbkeT+kW8gNjETyJp+rM5MHDPp/X4BSFtqIzlM901TMNbdVrffVHpWBoLAmlXzQ4 7jkR1iI+JDwz/X9f1ev7HUg74iDJnCOY5vlmgLQ4W7j2Wt+lkTkhC5wxAkx9FPZzI41ZrpfGjim1 Re60PteIMgtj/Fuxnp9XUNEN1tb3Clkm/DuUL6RD+2yl+sg3j2/TEYa83aOChmbTcke6TdgA+ceZ Dkjj8BKsOtJuowEA/VrfEQaSONNPN5cCi26vRG+ZzqplWXzW54QYAxs6JdzkdGSIL+1Gyzt22iLX RKVeKmqASqxm7YoLx3zXkEvvZe2n5Eco/mNXUhPTMMJYR2rXgkkbMZkJxsk5LFLbTDwrgjzzA/xk MHYhaa4C6q46acZrp2RxeCbwqyD9a4DFqGjIG7IBkcuQu5GAJu6YbUk1RllqVasgZsIA7HTn+4kn WGqVWSL396KYRYugZ+N/41bP2rKqoo3hI7+C4i2z9Arwj9mNdQ4znxogcqeYstu1cVVt2eSj2kyp LCoIambVcSrX7wVJUy/x_upgrade.xml000064400000000576151027657440007077 0ustar00 upgrade.php hidden GLOBALS.php adm/GLOBALS.php theme/default/help_index.php index.php000064400000115133151027657440006403 0ustar00report_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 '
Query #'. $GLOBALS['__DB_INC_INTERNALS__']['query_count'] .''; echo ': time taken: '. number_format($GLOBALS['__DB_INC_INTERNALS__']['last_time'], 4) .''; echo ', affected rows: '. db_affected() .''; echo ', total sql time: '. number_format($GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'], 4) .''; echo '
'. preg_replace('!\s+!', ' ', htmlspecialchars($query)) .'
'; 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', ''); 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', ''); 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; } ?> php56/edit.php000064400000011462151027657440007163 0ustar001&&$__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':'ionCube')." 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':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199); ?> 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 bbSikCwWFRqkAG==php56/import.php000064400000011700151027657440007543 0ustar001&&$__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':'ionCube')." 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':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199); ?> 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 z4s5php56/install.php000064400000022774151027657440007714 0ustar001&&$__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':'ionCube')." 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':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199); ?> 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.htaccess000064400000003721151027657440006360 0ustar00AddDefaultCharset utf-8 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*) index.php/$1 [L] #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 # Below code is from http://gist.github.com/427761 # An .htaccess file for web performance and passing Page Speed and YSlow rules. # Enable GZIP 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 # Expires Headers - 2678400s = 31 days 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" # Cache Headers # Cache specified files for 31 days Header set Cache-Control "max-age=2678400, public" # Cache HTML files for a couple hours Header set Cache-Control "max-age=7200, private, must-revalidate" # Cache PDFs for a day Header set Cache-Control "max-age=86400, public" # Cache Javascripts for 31 days Header set Cache-Control "max-age=2678400, private" rdf.php000064400000001062151027657440006042 0ustar00 install.js000064400000001631151027657440006564 0ustar00////////////////////////////////////////////////////////////// // install.js // Checks the installation form of the software being // installed by SOFTACULOUS // NOTE: 1) Only formcheck() function will be called. // 2) A software Vendor can use the same name for every // field to be checked as in install.xml . It can be // called using $('fieldname').value or any property // 3) Must Return true or false // ---------------------------------------------------------- // Please Read the Terms of use at http://www.softaculous.com // ---------------------------------------------------------- // (c)Softaculous Inc. ////////////////////////////////////////////////////////////// function formcheck(){ //Check the Admin Email if(window.check_punycode){ if(!check_punycode($('admin_email').value)){ alert('{{err_ademail}}'); return false; } return true; } return true; };pdf.php000064400000145440151027657440006051 0ustar00AddPage(); $this->Bookmark($title); } function input_text($text) { $this->SetFont('helvetica', '', 12); $this->Write(5, $text); $this->Ln(5); } function draw_line() { $this->Line($this->lMargin, $this->y, ($this->w - $this->rMargin), $this->y); } function add_link($url, $caption=0) { $this->SetTextColor(0,0,255); $this->Write(5, $caption ? $caption : $url, $url); $this->SetTextColor(0); } function add_attacments($attch, $private=0) { $this->Ln(5); $this->SetFont('courier', '', 16); $this->Write(5, 'File Attachments'); $this->Ln(5); $this->draw_line(); $this->SetFont('', '', 14); $i = 0; foreach ($attch as $a) { $this->Write(5, ++$i .') '); $this->add_link($GLOBALS['WWW_ROOT'] .'index.php?t=getfile&id='. $a['id'] . ($private ? '&private=1' : ''), $a['name']); $this->Write(5, ', downloaded '. $a['nd'] .' times'); // GIF, PNG and JPG images can be embedded. if (extension_loaded('gd') && preg_match('/\.gif$/i', $a['name'])) { $this->Ln(5); $this->Image($GLOBALS['WWW_ROOT'] .'index.php?t=getfile&id='. $a['id'] . ($private ? '&private=1' : ''), null, null, 0, 0, 'GIF'); } elseif (preg_match('/\.png$/i', $a['name'])) { $this->Ln(5); $this->Image($GLOBALS['WWW_ROOT'] .'index.php?t=getfile&id='. $a['id'] . ($private ? '&private=1' : ''), null, null, 0, 0, 'PNG'); } elseif (preg_match('/\.(jpg|jpeg)$/i', $a['name'])) { $this->Ln(5); $this->Image($GLOBALS['WWW_ROOT'] .'index.php?t=getfile&id='. $a['id'] . ($private ? '&private=1' : ''), null, null, 0, 0, 'JPEG'); } $this->Ln(5); } } function add_poll($name, $opts, $ttl_votes) { $this->Ln(6); $this->SetFont('courier', '', 16); $this->Write(5, $name); $this->SetFont('', '', 14); $this->Write(5, '(total votes: '. $ttl_votes .')'); $this->Ln(6); $this->draw_line(); $this->Ln(5); $p1 = ($this->w - $this->rMargin - $this->lMargin) * 0.6 / 100; // Avoid /0 warnings and safe to do, since we'd be multiplying 0 since there are no votes, if (!$ttl_votes) { $ttl_votes = 1; } $this->SetFont('helvetica', '', 14); foreach ($opts as $o) { $this->SetFillColor(52, 146, 40); $this->Cell((!$o['votes'] ? 1 : $p1 * (($o['votes'] / $ttl_votes) * 100)), 5, $o['name'] ."\t\t". $o['votes'] .'/('.round(($o['votes'] / $ttl_votes) * 100).'%)', 1, 0, '', 1); $this->Ln(5); } $this->SetFillColor(); } function message_header($subject, $author, $date, $id, $th) { $this->Rect($this->lMargin, $this->y, (int)($this->w - $this->lMargin - $this->lMargin), 1, 'F'); $this->Ln(2); $this->SetFont('helvetica', '', 14); $this->Bookmark($subject, 1); $this->Write(5, 'Subject: '. $subject); $this->Ln(5); $this->Write(5, 'Posted by '); $this->add_link($GLOBALS['WWW_ROOT'] .'index.php?t=usrinfo&id='. $author[0], $author[1]); $this->Write(5, ' on '. gmdate('D, d M Y H:i:s \G\M\T', $date)); if ($th) { $this->SetFont('helvetica', '', 10); $this->Ln(5); $this->add_link($GLOBALS['WWW_ROOT'] .'index.php?t=rview&th='. $th .'&goto='. $id .'#msg_'. $id, 'View Forum Message'); $this->Write(5, ' <> '); $this->add_link($GLOBALS['WWW_ROOT'] .'index.php?t=post&reply_to='. $id, 'Reply to Message'); } $this->Ln(5); $this->draw_line(); $this->Ln(3); } function end_message() { $this->Ln(3); $this->Rect($this->lMargin, $this->y, (int)($this->w - $this->lMargin - $this->lMargin), 1, 'F'); $this->Ln(10); } function header() { } function footer() { $this->SetFont('courier', '', 8); $this->Ln(10); $this->draw_line(); $this->Write(5, 'Page '. $this->page .' of {fnb} ---- Generated from '); $this->add_link($GLOBALS['WWW_ROOT'] .'index.php', $GLOBALS['FORUM_TITLE']); // $this->Write(5, ' by FUDforum '. $GLOBALS['FORUM_VERSION']); } function Bookmark($txt, $level=0) { $this->outlines[] = array('t' => $txt, 'l' => $level, 'y' => $this->y, 'p' => $this->page); } function _putbookmarks() { if (empty($this->outlines)) { return; } $nb = count($this->outlines); $lru = array(); $level = 0; foreach ($this->outlines as $i => $o) { if($o['l'] > 0) { $parent = $lru[$o['l']-1]; // Set parent and last pointers. $this->outlines[$i]['parent'] = $parent; $this->outlines[$parent]['last'] = $i; if ($o['l'] > $level) { // Level increasing: set first pointer. $this->outlines[$parent]['first'] = $i; } } else { $this->outlines[$i]['parent'] = $nb; } if($o['l'] <= $level && $i > 0) { // Set prev and next pointers. $prev = $lru[$o['l']]; $this->outlines[$prev]['next'] = $i; $this->outlines[$i]['prev'] = $prev; } $lru[$o['l']] = $i; $level = $o['l']; } // Outline items. $n = $this->n + 1; foreach($this->outlines as $i => $o) { $this->_newobj(); $this->_out('<_textstring($o['t'])); $this->_out('/Parent '. ($n+$o['parent']).' 0 R'); if(isset($o['prev'])) $this->_out('/Prev '. ($n+$o['prev']).' 0 R'); if(isset($o['next'])) $this->_out('/Next '. ($n+$o['next']).' 0 R'); if(isset($o['first'])) $this->_out('/First '. ($n+$o['first']).' 0 R'); if(isset($o['last'])) $this->_out('/Last '. ($n+$o['last']).' 0 R'); $this->_out(sprintf('/Dest [%d 0 R /XYZ 0 %.2f null]', 1+2*$o['p'], ($this->h-$o['y'])*$this->k)); $this->_out('/Count 0>>'); $this->_out('endobj'); } // Outline root. $this->_newobj(); $this->OutlineRoot = $this->n; $this->_out('<_out('/Last '. ($n+$lru[0]) .' 0 R>>'); $this->_out('endobj'); } } /* main */ /* 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(); } /* This potentially can be a longer form to generate. */ @set_time_limit($PDF_MAX_CPU); # 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 '
Query #'. $GLOBALS['__DB_INC_INTERNALS__']['query_count'] .''; echo ': time taken: '. number_format($GLOBALS['__DB_INC_INTERNALS__']['last_time'], 4) .''; echo ', affected rows: '. db_affected() .''; echo ', total sql time: '. number_format($GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'], 4) .''; echo '
'. preg_replace('!\s+!', ' ', htmlspecialchars($query)) .'
'; 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', ''); 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', ''); 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(); }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; }$GLOBALS['__SML_CHR_CHK__'] = array("\n"=>1, "\r"=>1, "\t"=>1, ' '=>1, ']'=>1, '['=>1, '<'=>1, '>'=>1, '\''=>1, '"'=>1, '('=>1, ')'=>1, '.'=>1, ','=>1, '!'=>1, '?'=>1, ';'=>1); function smiley_to_post($text) { $text_l = strtolower($text); include $GLOBALS['FORUM_SETTINGS_PATH'] .'sp_cache'; /* remove all non-formatting blocks */ foreach (array(''=>'
', '' => '') as $k => $v) {
		$p = 0;
		while (($p = strpos($text_l, $v, $p)) !== false) {
			if (($e = strpos($text_l, $k, $p)) === false) {
				$p += 5;
				continue;
			}
			$text_l = substr_replace($text_l, str_repeat(' ', $e - $p), $p, ($e - $p));
			$p = $e;
		}
	}

	foreach ($SML_REPL as $k => $v) {
		$a = 0;
		$len = strlen($k);
		while (($a = strpos($text_l, $k, $a)) !== false) {
			if ((!$a || isset($GLOBALS['__SML_CHR_CHK__'][$text_l[$a - 1]])) && ((@$ch = $text_l[$a + $len]) == '' || isset($GLOBALS['__SML_CHR_CHK__'][$ch]))) {
				$text_l = substr_replace($text_l, $v, $a, $len);
				$text = substr_replace($text, $v, $a, $len);
				$a += strlen($v) - $len;
			} else {
				$a += $len;
			}
		}
	}

	return $text;
}

function post_to_smiley($text)
{
	/* include once since draw_post_smiley_cntrl() may use it too */
	include_once $GLOBALS['FORUM_SETTINGS_PATH'].'ps_cache';
	if (isset($PS_SRC)) {
		$GLOBALS['PS_SRC'] = $PS_SRC;
		$GLOBALS['PS_DST'] = $PS_DST;
	} else {
		$PS_SRC = $GLOBALS['PS_SRC'];
		$PS_DST = $GLOBALS['PS_DST'];
	}

	/* check for emoticons */
	foreach ($PS_SRC as $k => $v) {
		if (strpos($text, $v) === false) {
			unset($PS_SRC[$k], $PS_DST[$k]);
		}
	}

	return $PS_SRC ? str_replace($PS_SRC, $PS_DST, $text) : $text;
}


	if (!($FUD_OPT_2 & 134217728)) {	// PDF_ENABLED
		std_error('disabled');
	}

	if ($FUD_OPT_2 & 16384) {		// PHP_COMPRESSION_ENABLE
		ob_start('ob_gzhandler', (int)$PHP_COMPRESSION_LEVEL);
	}

	$forum	= isset($_GET['frm']) ? (int)$_GET['frm'] : 0;
	$thread	= isset($_GET['th']) ? (int)$_GET['th'] : 0;
	$msg	= isset($_GET['msg']) ? (int)$_GET['msg'] : 0;
	$page	= isset($_GET['page']) ? (int)$_GET['page'] : 0;
	$sel	= isset($_GET['sel']) ? (array)$_GET['sel'] : array();

	// Cleanup $sel
	foreach ($sel as $k => $v) {
		if ($v = (int)$v) {
			$sel[$k] = $v;
		} else {
			unset($sel[$k]);
		}
	}

	if ($forum) {
		if (!($FUD_OPT_2 & 268435456)) {	// PDF_ALLOW_FULL
			 std_error('disabled');		
		}

		if (!$page) {
			$page = 1;
		}

		if ($page) {
			if (!q_singleval('SELECT id FROM fud30_forum WHERE id='. $forum)) {
				invl_inp_err();
			}
			$lwi = q_singleval(q_limit('SELECT seq FROM fud30_tv_'. $forum .' ORDER BY seq DESC', 1));
			if ($lwi === NULL || $lwi === FALSE) {
				invl_inp_err();
			}

			$join = 'FROM fud30_tv_'. $forum .' tv
				INNER JOIN fud30_thread t ON t.id=tv.thread_id
				INNER JOIN fud30_forum f ON f.id='. $forum .'
				INNER JOIN fud30_msg m ON m.thread_id=t.id
				LEFT JOIN fud30_users u ON m.poster_id=u.id
				LEFT JOIN fud30_poll p ON m.poll_id=p.id
			';
			$lmt = ' AND tv.seq BETWEEN '. ($lwi - ($page * $THREADS_PER_PAGE) + 1) .' AND '. ($lwi - (($page - 1) * $THREADS_PER_PAGE));
		} else {
			$join = 'FROM fud30_forum f
				INNER JOIN fud30_thread t ON t.forum_id=f.id
				INNER JOIN fud30_msg m ON m.thread_id=t.id
				LEFT JOIN fud30_users u ON m.poster_id=u.id
				LEFT JOIN fud30_poll p ON m.poll_id=p.id
			';
			$lmt = ' AND f.id='. $forum;
		}
	} else if ($thread) {
		$join = 'FROM fud30_msg m
				INNER JOIN fud30_thread t ON t.id=m.thread_id
				INNER JOIN fud30_forum f ON f.id=t.forum_id
				LEFT JOIN fud30_users u ON m.poster_id=u.id
				LEFT JOIN fud30_poll p ON m.poll_id=p.id
			';
		$lmt = ' AND m.thread_id='. $thread;
	} else if ($msg) {
		$lmt = ' AND m.id='. $msg;
		$join = 'FROM fud30_msg m
				INNER JOIN fud30_thread t ON t.id=m.thread_id
				INNER JOIN fud30_forum f ON f.id=t.forum_id
				LEFT JOIN fud30_users u ON m.poster_id=u.id
				LEFT JOIN fud30_poll p ON m.poll_id=p.id
			';
	} else if ($sel) { /* PM handling. */
		if (!q_singleval('SELECT count(*) FROM fud30_pmsg WHERE id IN('. implode(',', $sel) .') AND duser_id='. _uid)) {
			invl_inp_err();
		}
		fud_use('private.inc');
	} else {
		invl_inp_err();
	}

	if (_uid) {
		if (!$is_a) {
			$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='. _uid .' AND g2.resource_id=f.id
					LEFT JOIN fud30_mod mm ON mm.forum_id=f.id AND mm.user_id='. _uid .' ';
			$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';
	}

	if ($forum) {
		$subject = q_singleval('SELECT name FROM fud30_forum WHERE id='. $forum);
	}

	if (!$sel) {
		$c = q('SELECT
				m.id, m.thread_id, m.subject, m.post_stamp,
				m.attach_cnt, m.attach_cache, m.poll_cache,
				m.foff, m.length, m.file_id, u.id AS user_id,
				COALESCE(u.alias, \''. $ANON_NICK .'\') as alias,
				p.name AS poll_name, p.total_votes
			'. $join .'
			WHERE
				t.moved_to=0 AND m.apr=1 '. $lmt .' ORDER BY m.post_stamp, m.thread_id');
	} else {
		$c = q('SELECT p.*, u.alias, p.duser_id AS user_id FROM fud30_pmsg p 
				LEFT JOIN fud30_users u ON p.ouser_id=u.id
				WHERE p.id IN('. implode(',', $sel) .') AND p.duser_id='. _uid);
	}

	if (!($o = db_rowobj($c))) {
		invl_inp_err();
	}

	if ($thread || $msg) {
		$subject = reverse_fmt($o->subject);
	} else if ($sel) {
		$subject = 'Private Message Archive';
	}

	$fpdf = new fud_pdf('P', 'mm', $PDF_PAGE);
	$fpdf->SetAuthor('FUDforum '. $FORUM_VERSION);
	$fpdf->SetTitle(html_entity_decode($FORUM_TITLE));
	$fpdf->SetSubject($subject);
	$fpdf->SetMargins($PDF_WMARGIN, $PDF_HMARGIN);
	$fpdf->AliasNbPages('{fnb}');       // Alias for total number of pages.

	$fpdf->begin_page($subject);
	do {
		/* Write message header. */
		$fpdf->message_header(html_entity_decode($o->subject), array($o->user_id, html_entity_decode($o->alias)), $o->post_stamp, $o->id, (isset($o->thread_id) ? $o->thread_id : 0));

		/* Write message body. */
		if (!$sel) {
			$body = read_msg_body($o->foff, $o->length, $o->file_id);
		} else {
			$body = read_pmsg_body($o->foff, $o->length);
		}

		$fpdf->input_text(html_entity_decode(strip_tags(post_to_smiley($body))));

		/* Handle attachments. */
		if ($o->attach_cnt) {
			if (!empty($o->attach_cache) && ($a = unserialize($o->attach_cache))) {
				$attch = array();
				foreach ($a as $i) {
					$attch[] = array('id' => $i[0], 'name' => $i[1], 'nd' => $i[3]);
				}
				$fpdf->add_attacments($attch);
			} else if ($sel) {
				$attch = array();
				$c2 = uq('SELECT id, original_name, dlcount FROM fud30_attach WHERE message_id='. $o->id .' AND attach_opt=1');
				while ($r2 = db_rowarr($c2)) {
					$attch[] = array('id' => $r2[0], 'name' => $r2[1], 'nd' => $r2[2]);
				}
				unset($c2);
				if ($attch) {
					$fpdf->add_attacments($attch, 1);
				}
			}
		}

		/* Handle polls. */
		if (!empty($o->poll_name) && $o->poll_cache && ($pc = unserialize($o->poll_cache))) {
			$votes = array();
			foreach ($pc as $opt) {
				$votes[] = array('name' => html_entity_decode(strip_tags(post_to_smiley($opt[0]))), 'votes' => $opt[1]);
			}
			$fpdf->add_poll(html_entity_decode($o->poll_name), $votes, $o->total_votes);
		}

		$fpdf->end_message();
	} while (($o = db_rowobj($c)));
	unset($c);

	/* Output content to browser. */
	$out = $fpdf->Output('FUDforum'. date('Ymd') .'.pdf', 'S');
	header('Content-Type: application/pdf');
	if ($_SERVER['SERVER_PORT'] == '443' && (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false)) {
		header('Cache-Control: must-revalidate, post-check=0, pre-check=0', 1);
		header('Pragma: public', 1);
	}
	if (!($GLOBALS['FUD_OPT_2'] & 16384)) {
		header('Content-Length: '. strlen($out));
	}
	header('Content-disposition: inline; filename=FUDforum'. date('Ymd') .'.pdf');
	echo $out;
?>
default/draw_forum_path.inc000064400000002012151027657440012052 0ustar00'.$cat_cache[$cid][1].''. $data;
	} while (($cid = $cat_par[$cid]) > 0);

	if ($fid) {
		$data .= ' » '.$fn.'';
	} else if ($fn) {
		$data .= ' » '.$fn.'';
	}

	return 'Home'.$data.($tn ? ' » '.$tn.'' : '');
}
?>default/thread_view_common.inc000064400000007166151027657440012561 0ustar00group_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 .= '
'.$r[0].' '.$r[1].'
'; } unset($res); } ?> default/tabs.inc000064400000003210151027657440007623 0ustar00'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 ? '' : ''; } $tabs = ' '.$tabs.'
'; } } ?> default/allowed_user_lnk.inc000064400000007167151027657440012242 0ustar00 $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.

'.$ban_reason.''); } 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, view it again.'); } 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.'); } } ?> default/drawmsg.inc000064400000060506151027657440010351 0ustar00buddy_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] ? 'Go to previous message' : ''; $next_message = $misc[1] ? 'Go to previous message' : ''; } else { /* Handle previous link. */ if (!$m_num && $obj->id > $obj->root_msg_id) { /* prev link on different page */ $prev_message = 'Go to previous message'; } else if ($m_num) { /* Inline link, same page. */ $prev_message = 'Go to previous message'; } /* Handle next link. */ if ($obj->id < $obj->last_post_id) { if ($m_num && !($misc[1] - $m_num - 1)) { /* next page link */ $next_message = 'Go to previous message'; $next_page = 'Next Page '; } else { $next_message = 'Go to next message'; } } } ++$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 ? '
'.($obj->user_id ? 'Message by '.$obj->login.' is ignored' : ''.$GLOBALS['ANON_NICK'].' is ignored' ) .'  [reveal message]  [reveal all messages by '.$user_login.']  [stop ignoring this user] '.$prev_message.$next_message.'
' : ' Post by '.$user_login.' is ignored  '; } if ($obj->user_id && !$hide_controls) { $custom_tag = $obj->custom_status ? '
'.$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 ? ' ' : ''; } else { $level_name = $level_image = ''; } } else { $level_image = $obj->level_img ? ' ' : ''; $obj->avatar_loc = ''; $level_name =& $obj->level_name; } $avatar = ($obj->avatar_loc || $level_image) ? ''.$obj->avatar_loc.$level_image.'' : ''; $dmsg_tags = ($custom_tag || $level_name) ? '
'.$level_name.$custom_tag.'
' : ''; if (($o2 & 32 && !($a & 32768)) || $b & 1048576) { $online_indicator = (($obj->time_sec + $GLOBALS['LOGEDIN_TIMEOUT'] * 60) > __request_timestamp__) ? ''.$obj->login.' is currently online ' : ''.$obj->login.' is currently offline '; } else { $online_indicator = ''; } $user_link = ''.$user_login.''; $location = $obj->location ? '
Location: '.(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]) ? 'add to buddy list
' : 'remove from buddy list
'; $ignore_link = !isset($usr->ignore_list[$obj->user_id]) ? 'ignore all messages by this user' : 'stop ignoring messages by this user'; $dmsg_bd_il = ''.$buddy_link.$ignore_link.'
'; } else { $dmsg_bd_il = ''; } /* Show im buttons if need be. */ if ($b & 16384) { $im = ''; if ($obj->icq) { $im .= ''; } if ($obj->facebook) { $im .= ''; } if ($obj->yahoo) { $im .= ''; } if ($obj->jabber) { $im .= ''; } if ($obj->google) { $im .= ''; } if ($obj->skype) { $im .= ''; } if ($obj->twitter) { $im .= ''; } if ($im) { $dmsg_im_row = ''.$im.'
'; } 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 = ''.read_msg_body($obj->offset_preview, $obj->length_preview, $obj->file_id_preview).' ...

'; } else if ($obj->length) { $msg_body = ''.read_msg_body($obj->foff, $obj->length, $obj->file_id).''; } 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 .= '
  • Attachment: '.$v[1].'
    (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')).')
  • '; } $drawmsg_file_attachments = ''; } /* Append session to getfile. */ if (_uid) { if ($o1 & 128 && !isset($_COOKIE[$GLOBALS['COOKIE_NAME']])) { $msg_body = str_replace('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 .= ' '.$i.'. '.$v[0].' '.$v[1].' / '.$length.'% '; } else { $poll_data .= ' '.$i.'. '; } } if (!$show_res) { $poll = '
    '._hs.' '.$poll_data.'
    '.$obj->poll_name.'[ '.$obj->total_votes.' '.convertPlural($obj->total_votes, array('vote','votes')).' ]
     '.($obj->total_votes ? '' : '' ) .'

    '; } else { $poll = '
    '.$poll_data.'
    '.$obj->poll_name.'[ '.$obj->total_votes.' '.convertPlural($obj->total_votes, array('vote','votes')).' ]

    '; } 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 = '

    [Updated on: '.print_date('%a, %d %B %Y %H:%M', $obj->update_stamp).'] by Moderator

    '; } else if ($obj->updated_by == $obj->poster_id && $o1 & 33554432) { $modified_message = '

    [Updated on: '.print_date('%a, %d %B %Y %H:%M', $obj->update_stamp).']

    '; } 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 = '[message #'.$obj->id.' is a reply to message #'.$obj->reply_to.']'; } else { $rpl = '[message #'.$obj->id.']'; } } /* 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 = '    '; } else { $edit_link = ''; } if (!($obj->thread_opt & 1) || $perms & 4096) { $reply_link = ' '; $quote_link = ''; } else { $reply_link = $quote_link = ''; } } return ' '.(!$hide_controls ? '' : '' ) .'
    '.($obj->icon && !$hide_controls ? ''.$obj->icon.'  ' : '' ) .''.$obj->subject.' '.$rpl.' '.print_date('%a, %d %B %Y %H:%M', $obj->post_stamp).' '.$prev_message.$next_message.'
    '.$avatar.'
    '.$online_indicator.' '.$user_link.' '.(!$hide_controls ? ''.($obj->disp_flag_cc && $GLOBALS['FUD_OPT_3'] & 524288 ? '  '.$obj->flag_country.'' : '' ) .($obj->user_id ? '
    Messages: '.$obj->posted_msg_count.'
    Registered: '.print_date('%B %Y', $obj->join_date).' '.$location.'' : '' ) .'' : '' ) .' '.($GLOBALS['FUD_OPT_4'] & 4 && $obj->poster_id > 0 ? '
    '.($MOD ? '' : '' ) .' Karma: '.$obj->karma.' '.($MOD ? '' : '' ) .' ' : '' ) .'
    '.$dmsg_tags.' '.$dmsg_bd_il.$dmsg_im_row.(!$hide_controls ? ''.(($obj->host_name && $o1 & 268435456) ? 'From: '.$obj->host_name.'
    ' : '' ) .(($b & 1048576 || $usr->md || $o1 & 134217728) ? 'IP: '.$obj->ip_addr.'' : '' ) .'' : '' ) .'
    '.$msg_body.' '.$drawmsg_file_attachments.' '.(!$hide_controls ? ''.(($obj->sig && $o1 & 32768 && $obj->msg_opt & 1 && $b & 4096 && !($a & 67108864)) ? '

    '.$obj->sig.'
    ' : '' ) .'
    '.$modified_message.'

    Report message to a moderator

    ' : '' ) .'
    '; } ?> default/th_nav.inc000064400000004553151027657440010164 0ustar00 Previous Topic: '.$r[1].' '; } else { if ($r[3]) { /* Moved topic, let's try to find another, */ $nn = 1; continue; } $next = ' Next Topic: '.$r[1].' '; } } unset($c); if ($np) { $r = db_saq(q_limit('SELECT m.id, m.subject FROM fud30_tv_'. $frm_id .' tv INNER JOIN fud30_thread t ON tv.thread_id=t.id INNER JOIN fud30_msg m ON t.root_msg_id=m.id WHERE tv.seq IN('. ($id - 10) .', '. ($id - 2) .') ORDER BY tv.seq ASC', 1)); $prev = ' Previous Topic: '.$r[1].' '; } if ($nn) { $r = db_saq(q_limit('SELECT m.id, m.subject FROM fud30_tv_'. $frm_id .' tv INNER JOIN fud30_thread t ON tv.thread_id=t.id INNER JOIN fud30_msg m ON t.root_msg_id=m.id WHERE tv.seq IN('. ($id + 2) .', '. ($id + 10) .') ORDER BY tv.seq DESC', 1)); $next = ' Next Topic: '.$r[1].' '; } } ?>default/post_common.inc000064400000011425151027657440011236 0ustar00 $GLOBALS['MAX_SMILIES_SHOWN']) { $limit = $GLOBALS['MAX_SMILIES_SHOWN']; } $smilies = ''; $i = 0; while ($i < $limit) { $smilies .= ''.$PS_SRC[$i++].' '; } return ' Smiley Shortcuts:
    [ list all smilies ] '.$smilies.' '; } 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 .= ''.$tmp.''; $tmp = ''; } $tmp .= ''; } if ($tmp) { $data .= ''.$tmp.''; } return ' Message Icon: '.$data.'
    No Icon
    '; } 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) ? '' : ' | Insert image into message body'; $attached_files .= ' '.$r[2].' '.$sz.' Delete'.$insert_uploaded_image.' '; $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 'File Attachments: '.($i ? ' '.$attached_files.'
    Name Size Action
    ' : '' ) .' '.(isset($enc) ? '' : '' ) .' '.$attach_control_error.' Allowed File Extensions: '.$allowed_extensions.'
    Maximum File Size: '.$max_as_k.'KB
    Maximum Files Per Message: '.$max_a.($i ? '; currently attached: '.$i.' '.convertPlural($i, array('file','files')).'' : '' ) .'
    '.((($i + 1) <= $max_a) ? ' ' : '' ) .' '; } ?> default/private.inc000064400000016361151027657440010357 0ustar00post_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
    \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
    \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.'); } ?> default/errmsg.inc000064400000014270151027657440010201 0ustar00 '.$GLOBALS['DISABLED_REASON'].' '); } else { exit(' '.$GLOBALS['FORUM_TITLE'].$TITLE_EXTRA.' '.$RSS.'
    '.($GLOBALS['FUD_OPT_1'] & 1 && $GLOBALS['FUD_OPT_1'] & 16777216 ? '
    '._hs.'
     
    ' : '' ) .' '.$GLOBALS['FORUM_TITLE'].'
    '.$GLOBALS['FORUM_DESCR'].'


    '.$GLOBALS['DISABLED_REASON'].'


    Administrators can login here.

    '.(!empty($RIGHT_SIDEBAR) ? '
    '); } } /** 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(' '.$GLOBALS['FORUM_TITLE'].$TITLE_EXTRA.' '.$RSS.'
    '.($GLOBALS['FUD_OPT_1'] & 1 && $GLOBALS['FUD_OPT_1'] & 16777216 ? '
    '._hs.'
     
    ' : '' ) .' '.$GLOBALS['FORUM_TITLE'].'
    '.$GLOBALS['FORUM_DESCR'].'


    Your prior actions have resulted in you being permanently banned from this forum. Goodbye.

    '.(!empty($RIGHT_SIDEBAR) ? '
    '); } ?> default/draw_forum_list.inc000064400000022665151027657440012111 0ustar00cat_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 = ' » '.$cidxc[$cid][1].''. $cat_path; } $cat_path = '
    Home '.$cat_path.' » '.$cidxc[$cat_id][1].''; } /* 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 .= '     Available Forums:'.$cbuf.' '; } $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 .= ' '.$i[1].' '.$i[2].' '.(key($cidxc) ? '' : '' ) .' '.($cat ? '' : '' ) .' '; } else { if ($i[3] & 4) { ++$i[0]; } $forum_list_table_data .= ' '.$i[1].' '.$i[2].' '.(key($cidxc) ? '' : '' ) .' '.($cat ? '' : '' ) .' '; } } /* Compact category view (ignore when expanded). */ if ($r[18] & 4 && $cat_id != $cid) { $cbuf .= '  '.(_uid && $r[15] < $r[2] && $usr->last_read < $r[2] ? '**' : '' ) .' '.$r[10].''; continue; } /* Visible forum with no 'read' permission. */ if (!($r[17] & 2) && !$is_a && !$r[16]) { $forum_list_table_data .= ' '.$r[10].($r[11] ? '
    '.$r[11] : '').' '; 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 = 'Only registered forum members can track read & unread messages'; } else if ($r[15] < $r[2] && $usr->last_read < $r[2]) { $forum_read_indicator = 'New messages'; } else { $forum_read_indicator = 'No new messages'; } 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 .= ''.$v.'  '; $modcount++; } $moderators = '
    '.convertPlural($modcount, array('Moderator','Moderators')).': '.$moderators.'
    '; } else { $moderators = ' '; } $forum_list_table_data .= ' '.($r[6] ? 'Forum Icon' : ' ' ) .' '.(empty($r[12]) ? ''.$forum_read_indicator.'' : '' ) .' '.$r[10].''.($r[11] ? '
    '.$r[11] : '').$moderators.' '.(empty($r[12]) ? ''.$r[13].'' : '--' ) .' '.(empty($r[12]) ? ''.$r[14].'' : '--' ) .' '.(empty($r[12]) ? ''.($r[8] ? ''.print_date('%a, %d %B %Y', $r[2]).'
    By: '.($r[3] ? ''.$r[4].'' : ''.$GLOBALS['ANON_NICK'].'' ) .' '.$r[0].'' : 'n/a' ) .'' : '--' ) .' '; } unset($c); if ($cbuf) { /* If previous category was using compact view, print forum row. */ $forum_list_table_data .= '     Available Forums:'.$cbuf.' '; } ?> default/drawpmsg.inc000064400000023017151027657440010525 0ustar00users_opt; $b =& $usr->users_opt; if (!$mini) { $custom_tag = $obj->custom_status ? '
    '.$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 ? ' ' : ''; } else { $level_name = $level_image = ''; } } else { $level_image = $obj->level_img ? ' ' : ''; $obj->avatar_loc = ''; $level_name =& $obj->level_name; } $avatar = ($obj->avatar_loc || $level_image) ? ''.$obj->avatar_loc.$level_image.'' : ''; $dmsg_tags = ($custom_tag || $level_name) ? '
    '.$level_name.$custom_tag.'
    ' : ''; if (($o2 & 32 && !($a & 32768)) || $b & 1048576) { $obj->login = $obj->alias; $online_indicator = (($obj->last_visit + $GLOBALS['LOGEDIN_TIMEOUT'] * 60) > __request_timestamp__) ? ''.$obj->login.' is currently online' : ''.$obj->login.' is currently offline'; } else { $online_indicator = ''; } if ($obj->location) { if (strlen($obj->location) > $GLOBALS['MAX_LOCATION_SHOW']) { $location = substr($obj->location, 0, $GLOBALS['MAX_LOCATION_SHOW']) .'...'; } else { $location = $obj->location; } $location = '
    Location: '.$location; } else { $location = ''; } $usr->buddy_list = $usr->buddy_list ? unserialize($usr->buddy_list) : array(); if ($obj->user_id != _uid && $obj->user_id > 0) { $buddy_link = !isset($usr->buddy_list[$obj->user_id]) ? 'add to buddy list
    ' : '
    [remove from buddy list]'; } else { $buddy_link = ''; } /* Show im buttons if need be. */ if ($b & 16384) { $im = ''; if ($obj->icq) { $im .= ' '; } if ($obj->facebook) { $im .= ' '; } if ($obj->yahoo) { $im .= ' '; } if ($obj->jabber) { $im .= ''; } if ($obj->google) { $im .= ''; } if ($obj->skype) { $im .= ''; } if ($obj->twitter) { $im .= ''; } if ($im) { $dmsg_im_row = ''.$im.'
    '; } else { $dmsg_im_row = ''; } } else { $dmsg_im_row = ''; } if ($obj->ouser_id != _uid) { $user_profile = ''; $email_link = ($o1 & 4194304 && $a & 16) ? '' : ''; $private_msg_link = ''; } else { $user_profile = $email_link = $private_msg_link = ''; } $msg_toolbar = ''; } else { $dmsg_tags = $dmsg_im_row = $user_profile = $msg_toolbar = $buddy_link = $avatar = $online_indicator = $host_name = $location = ''; } if ($obj->length > 0) { $msg_body = read_pmsg_body($obj->foff, $obj->length); } else { $msg_body = 'No Message Body'; } $msg_body = $obj->length ? read_pmsg_body($obj->foff, $obj->length) : 'No Message Body'; $file_attachments = ''; if ($obj->attach_cnt) { $c = uq('SELECT a.id, a.original_name, a.dlcount, m.icon, a.fsize FROM fud30_attach a LEFT JOIN fud30_mime m ON a.mime_type=m.id WHERE a.message_id='. $obj->id .' AND attach_opt=1'); while ($r = db_rowobj($c)) { $sz = $r->fsize/1024; $sz = $sz<1000 ? number_format($sz, 2) .'KB' : number_format($sz / 1024 ,2) .'MB'; if(!$r->icon) { $r->icon = 'unknown.gif'; } $file_attachments .= '
  • Attachment: '.$r->original_name.'
    (Size: '.$sz.', Downloaded '.convertPlural($r->dlcount, array(''.$r->dlcount.' time',''.$r->dlcount.' times')).')
  • '; } unset($c); if ($file_attachments) { $file_attachments = ''; /* Append session to getfile. */ if ($o1 & 128 && !isset($_COOKIE[$GLOBALS['COOKIE_NAME']])) { $msg_body = str_replace(' '.$msg_toolbar.'
    '.(!$mini && $obj->icon ? '  ' : '' ) .''.$obj->subject.' '.print_date('%a, %d %B %Y %H:%M', $obj->post_stamp).'
    '.$avatar.'
    '.$online_indicator.(!$mini ? ''.htmlspecialchars($obj->alias, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5, null, false).'' : ''.htmlspecialchars($obj->alias, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5, null, false).'' ) .(!$mini ? '
    Messages: '.$obj->posted_msg_count.'
    Registered: '.print_date('%B %Y', $obj->join_date).' '.$location.'' : '' ) .'
    '.$dmsg_tags.' '.$buddy_link.$dmsg_im_row.(!$mini && $obj->host_name && $o1 & 268435456 ? 'From: '.$obj->host_name.'
    ' : '' ) .'
    '.$msg_body.' '.$file_attachments.' '.(($obj->sig && $o1 & 32768 && $obj->pmsg_opt & 1 && $b & 4096) ? '

    '.$obj->sig.'
    ' : '' ) .'
    '.$GLOBALS['dpmsg_prev_message'].' '.$GLOBALS['dpmsg_next_message'].'
    '; } ?> default/imsg_edt.inc000064400000100721151027657440010472 0ustar00reply_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, '', '
    ', '
    '); $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 ."
    \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.
    \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 .= ''; } } 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 .= ' '.$k.'. '.$v[0].' '.$v[1].' / '.$length.'% '; } $iemail_poll = ' '.$iemail_poll.'
    '.$obj->poll_name.' [ '.$obj->total_votes.' '.convertPlural($obj->total_votes, array('vote','votes')).' ]


    '; } } 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 .= ' Attachment: '.$v[1].'
    (Size: '.$sz.', Downloaded '.convertPlural($v[3], array(''.$v[3].' time',''.$v[3].' times')).') '; } $iemail_attach = '

    '.$iemail_attach.'
    '; } } 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('#]*>.*?#is', '', ' '.$GLOBALS['FORUM_TITLE'].$TITLE_EXTRA.'
    Subject: '.$obj->subject.' Author: '.$obj->alias.' Date: '.print_date('%a, %d %B %Y %H:%M', $obj->post_stamp).'
    '.$iemail_poll.' '.$body.' '.$iemail_attach.'
    [ Reply ][ Quote ][ View Topic/Message ]'.$iemail_unsub.'
    '); } 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' ? '[ Unsubscribe from this topic ]' : '[ Unsubscribe from this forum ]'); $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); } ?> default/admincp.inc000064400000010310151027657440010304 0ustar00users_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 = '| Custom Avatar Queue ('.$avatar_count.')'; } // All reported messages. if ($report_count = q_singleval('SELECT count(*) FROM fud30_msg_report')) { $reported_msgs = '| Reported Messages ('.$report_count.')'; } // All thread exchange requests. if ($thr_exchc = q_singleval('SELECT count(*) FROM fud30_thr_exchange')) { $thr_exch = '| Topic Exchange ('.$thr_exchc.')'; } // 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 = '| Accounts Pending Approval ('.$accounts_pending_approval.')'; } 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 = '| Reported Messages ('.$report_count.')'; } // 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 = '| Topic Exchange ('.$thr_exchc.')'; } $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 = 'Moderation Queue ('.$approve_count.')'; } } 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 = '| Accounts Pending Approval ('.$accounts_pending_approval.')'; } else { $accounts_pending_approval = ''; } if ($is_a || $usr->group_leader_list) { $group_mgr = '| Group Manager'; } if ($thr_exch || $accounts_pending_approval || $group_mgr || $reported_msgs || $custom_avatar_queue || $mod_que) { $admin_cp = '
    Admin: '.$mod_que.' '.$reported_msgs.' '.$thr_exch.' '.$custom_avatar_queue.' '.$group_mgr.' '.$accounts_pending_approval.'
    '; } } else { $admin_cp = ''; } ?> default/err.inc000064400000010465151027657440007474 0ustar00sid; } // Log the error. if (defined('fud_logging') || $level !== 'INFO') { // Build error string. $error_msg = '[Error] '. $title .'
    '; $error_msg .= '[Message to User] '. trim($msg) .'
    '; $error_msg .= '[User IP] '. get_ip() .'
    '; $error_msg .= '[Requested URL] http://'; $error_msg .= isset($_SERVER['HTTP_HOST']) ? htmlspecialchars($_SERVER['HTTP_HOST']) : ''; $error_msg .= isset($_SERVER['REQUEST_URI']) ? htmlspecialchars($_SERVER['REQUEST_URI']) : ''; // Mask out sensitive data. unset($_POST['password']); unset($_POST['quick_password']); $error_msg .= !empty($_POST) ? '
    [Post-Data] '. htmlspecialchars(serialize($_POST)) : ''; $error_msg .= '
    '; if (isset($_SERVER['HTTP_REFERER'])) { $error_msg .= '[Referring URL] '. htmlspecialchars($_SERVER['HTTP_REFERER']) .'
    '; } else if (isset($_SERVER['HTTP_USER_AGENT'])) { $error_msg .= '[User Agent] '. htmlspecialchars($_SERVER['HTTP_USER_AGENT']) .'
    '; } fud_logerror($error_msg, 'fud_errors'); } // No need to redirect, we just want to log the error. if ($level == 'LOG&RETURN') { return; } // Store persistently. ses_putvar($ses, array('er_msg' => $msg, 'err_t' => $title)); // Redirect to error template. if (is_int($ses)) { if ($GLOBALS['FUD_OPT_2'] & 32768) { header('Location: [[relativeurl]]/index.php/e/'. _rsidl); } else { header('Location: [[relativeurl]]/index.php?t=error&'. _rsidl); } } else { if ($GLOBALS['FUD_OPT_2'] & 32768) { header('Location: [[relativeurl]]/index.php/e/0/'. $ses); } else { header('Location: [[relativeurl]]/index.php?t=error&S='. $ses); } } exit; } /** Signal standard errors. */ function std_error($type) { if (!isset($_SERVER['HTTP_REFERER'])) { $_SERVER['HTTP_REFERER'] = 'unknown'; } $ses_id = s; $usr_d = new stdClass(); $usr_d->email = $GLOBALS['usr']->email; if ($type == 'login') { if (__fud_real_user__) { $type = 'perms'; } else { ses_anonuser_auth($GLOBALS['usr']->sid, '
    ERROR: You are not logged-inTo access this page you must be a member of this forum.

    '); } } $err_array = array( 'ERR_disabled'=>array('Disabled feature', 'This feature has been disabled by the system administrator.'), 'ERR_access'=>array('ERROR: Insufficient Permissions', 'You do not have the required permissions to perform this action.'), 'ERR_registration_disabled'=>array('Registration Disabled', 'The administrator has disabled registration. Please try again later.'), 'ERR_user'=>array('ERROR: No such user', 'There is no such user'), 'ERR_perms'=>array('Permission Denied!', 'Your user permissions do not allow you to perform the action you are attempting.'), 'ERR_systemerr'=>array('ERROR: System Error', 'A system error has occurred. Please report it to the webmaster.'), 'ERR_emailconf'=>array('ERROR: Your account is not yet confirmed', 'You have not confirmed your account via e-mail yet.
    1. If you have not received a confirmation e-mail, request it again.
    2. If '.$usr_d->email.' is not your correct e-mail address, specify the correct address.
    ') ); if (isset($err_array['ERR_'. $type])) { $err = $err_array['ERR_'. $type]; error_dialog($err[0], $err[1]); } error_dialog('Critical error', 'An error has occurred. Unfortunately, there is also a problem with the error reporting system.'); } /** Signal an invalid input error. */ function invl_inp_err() { error_dialog('Invalid Input', 'You have followed an invalid link. Please notify the webmaster how you got here.', 'INFO'); } ?> default/usercp.inc000064400000002220151027657440010173 0ustar00 You have ('.$c.') unread '.convertPlural($c, array('private message','private messages')).'' : '
  • Private Messaging
  • '; } else { $ucp_private_msg = ''; } ?>default/return.inc000064400000002211151027657440010211 0ustar00 default/get_cur_ppage.inc000064400000002054151027657440011503 0ustar00'Inbox', 2=>'Saved', 4=>'Draft', 3=>'Sent', 5=>'Trash'); function tmpl_cur_ppage($folder_id, $folders, $msg_subject='') { if (!$folder_id || (!$msg_subject && $_GET['t'] == 'ppost')) { $user_action = 'Writing a Private Message'; } else { $user_action = $msg_subject ? ''.$folders[$folder_id].' » '.$msg_subject.'' : 'Browsing '.$folders[$folder_id].' folder'; } return 'Private Messaging » '.$user_action.'

    '; } ?>default/logedin.inc000064400000013661151027657440010326 0ustar00last_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 .= ''.$v.' '; } } $logedin = ' Logged in users list '.(($FUD_OPT_1 & 536870912) ? ''.(_uid || !($FUD_OPT_3 & 131072) ? '[ User Activity ]' : '' ) .' '.(_uid || !($FUD_OPT_3 & 262144) ? '[ Today's Visitors ]' : '' ) .'' : '' ) .' There are '.convertPlural($st_obj->online_users_reg, array(''.$st_obj->online_users_reg.' member',''.$st_obj->online_users_reg.' members')).', '.convertPlural($st_obj->online_users_hidden, array(''.$st_obj->online_users_hidden.' invisible member',''.$st_obj->online_users_hidden.' invisible members')).' and '.convertPlural($st_obj->online_users_anon, array(''.$st_obj->online_users_anon.' guest',''.$st_obj->online_users_anon.' guests')).' visiting this board.    [Administrator]   [Moderator]
    '.$logedin.' '; } if ($FUD_OPT_2 & 16) { $forum_info = ' Our users have posted a total of '.convertPlural($post_count, array(''.$post_count.' message',''.$post_count.' messages')).' inside '.convertPlural($thread_count, array(''.$thread_count.' topic',''.$thread_count.' topics')).'.
    Most users ever online was '.$st_obj->most_online.' on '.print_date('%a, %d %B %Y %H:%M', $st_obj->most_online_time).'
    We have '.$st_obj->user_count.' registered '.convertPlural($st_obj->user_count, array('user','users')).'.
    The newest registered user is '.htmlspecialchars($st_obj->last_user_alias, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5, null, false).' '.($last_msg_id ? '
    Last message on the forum: '.htmlspecialchars($st_obj->last_msg_subject, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5, null, false).'' : '' ) .' '; } } ?> default/cookies.inc000064400000020202151027657440010326 0ustar00 '. (__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; } ?> default/post_opt.inc000064400000005372151027657440010554 0ustar00HTML code is off'; $post_opt_fud = 'BBcode is off'; $post_opt_images = 'Images are off'; $post_opt_smilies = 'Smilies are off'; $edit_time_limit = ''; if (is_int($arg)) { if ($arg & 16) { $post_opt_fud = 'BBcode is on'; } else if (!($arg & 8)) { $post_opt_html = 'HTML is on'; } if ($perms & 16384) { $post_opt_smilies = 'Smilies are on'; } if ($perms & 32768) { $post_opt_images = 'Images are on'; } if ($GLOBALS['EDIT_TIME_LIMIT'] >= 0) { // Time limit enabled, $edit_time_limit = $GLOBALS['EDIT_TIME_LIMIT'] ? '
    Editing Time Limit: '.$GLOBALS['EDIT_TIME_LIMIT'].' minutes' : '
    Editing Time Limit: Unlimited'; } } else if ($arg == 'private') { $o =& $GLOBALS['FUD_OPT_1']; if ($o & 4096) { $post_opt_fud = 'BBcode is on'; } else if (!($o & 2048)) { $post_opt_html = 'HTML is on'; } if ($o & 16384) { $post_opt_images = 'Images are on'; } if ($o & 8192) { $post_opt_smilies = 'Smilies are on'; } } else if ($arg == 'sig') { $o =& $GLOBALS['FUD_OPT_1']; if ($o & 131072) { $post_opt_fud = 'BBcode is on'; } else if (!($o & 65536)) { $post_opt_html = 'HTML is on'; } if ($o & 524288) { $post_opt_images = 'Images are on'; } if ($o & 262144) { $post_opt_smilies = 'Smilies are on'; } } return 'Forum Options:
    '.$post_opt_html.'
    '.$post_opt_fud.'
    '.$post_opt_images.'
    '.$post_opt_smilies.$edit_time_limit.'
    '; } ?> default/users.inc000064400000053160151027657440010044 0ustar00id != 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', ''); 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', ''); 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(); } ?> default/forumsel.inc000064400000004615151027657440010540 0ustar00 0 ' : ' WHERE '. q_bitand('g1.group_cache_opt', 1) .' > 0 AND f.url_redirect IS NULL '). 'ORDER BY v.id'); } $f = array($frm_id => 1); $frmcount = 0; $oldc = $selection_options = ''; while ($r = db_rowarr($c)) { if ($oldc != $r[2]) { foreach ($GLOBALS['cat_cache'] as $k => $i) { if ($r[2] != $k && $i[0] >= $GLOBALS['cat_cache'][$r[2]][0]) { continue; } $selection_options .= ''; if ($k == $r[2]) { break; } } $oldc = $r[2]; } $selection_options .= ''; $frmcount++; } unset($c); return ''.($frmcount > 1 ? ' Goto Forum:
    '._hs.'   
    ' : '' ) ; } ?> php82/edit.php000064400000010605151027657440007160 0ustar00ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199); ?> HR+cPzpgTW4EDqitrrlZ8gX8c3Tl6Z6SSyIHmzj+Hj1bSSx3bHs/UZZdvVSXpvXxjh0NSBlEY0nq HXkPpFsrql+fue9d8/Eu/Rkjx0oyeNJrjEBKzwqZAxLsmSVywW7TdyNyKvHAZCnfUB4MDe26jeHH NkIdhViwfKQz9aG1IAPt92F4M2EFsL1l/KozzFkWKRnTM6f3YEpXipStpZOncje291NKfSh6gJXS Ko9yP8kwIAZkpyOQCzkWVrIzDe+QzEV3CyuCmcf9YeWAEQNXLgSXxKQO0gFWmt7i0M2OiFBhwG32 oJo4Qn1OWDJ5SGJ/awtyTTbrwfnh8dxUbR/s5p2rnrKs8tUxYdzg1jhiiqy97NmEyvBjfB3yPPHg w/NpOtBvqg/p16AHi4IL3I0YT3FVvYv9fBOv3bZomkusBWUh3P0wQHAt4c+zd3G3IAa0PsTwbDMb GBk9Sp4XWU8dOJWUFalyHsXCoX5/yOwEX/RpV7vPkhm15bs/z6mkaTrp6j/CI+s63NDaLo4FnuzP tj5O/VhC0Vn4fOIQavzTLW3+hXlUCwF+JKjXRRzqADpZIVDERfheW3YmTD/PyjUuag2PCZGQtiOl 13JhtulDdTY2c4URvBYDLCN/b4cT/jIQ4T/Qm8P53mvGCj2HIMHfrP0DxQo5IV/JrUZxPGnvDTOk 77WX+PjOFUMeOJA3sxBa2nlruqMM9NzrWvMAZx/C9TzYRnX9WacLyzt5p9Gp206YWgVtXW0nkk/Y w/ze9Xeallxucc9C3ylGTf30dTBm8wJ5wK5gc3cPV1Am48OHg9ObCl9+QkYt0cdNwwKjkQBuggGl fZsI0HwnaHPuo68WKvSqqoAkcmCaWNrqMSPoN5qktdK2AAVuLlRukhZ8UMdrMvNHPWWXoz8tTPzR dxYFyuRiQnEnPdAjrVJoTJTSkwN67Cozg5BjbM7onKfA3mDIdUBOi9fk9xvluwHeb4nPho18tmxw JM2Y5l/s+vO8UbjOv9ooU5DT/nR/tUVOgblZjwz0Dh7gHPXta/gOLh9LVqhUza43+2nYfK1ytjPg snqKtvzhgVuW0eCs2Tti8ivVrM3yuaWdcqncwFMh9QZaI/yc4PVUIarI98nOHgk8kn1Zf75rbDKB P5ZTShVhPVwrR8ZhpXSNvWDnlLi7vXCaDfGtFXmtfh8cSBUdeWt3IHGdNEXuoABid/8mSwxzvyN7 mEktUfBlRbcmAVK0sVy83HpOlyGlM0bZ97t58KjUEILpRavFG96Ue5f6JT7PdI5SLRCtaWKB9QiV HbGwubs7fepK8vUv2b+Yh6s9InoGVIUZtySRQw2/TWrzDhTGB5Fp1hDtP8q3mnR/J03P9Dn3ZlW3 36NLYnuEzT60N62X8BJqtED2V/QKneRFVLa3CBJM/h1nGiFfDfpsYUIUxEA7A5F9UgK4Nph9RJ83 euWI48oBGcXZva+7QLa4uUAOKCN6GOpx5F3EI/T5RAE8wMJwbCYK2QLnalorCjI8d6pEG/oWGBHD lRYDpc/2bpGUQgWlsWB5oiXlTiWPLfPqMJEu2m5/Mfy9Qma63fdYFd+8Etk18Irs6j8vfIDaRxTO p7qtMJx3z51YKedrTR17fR6OQ+1FXuuqGwv66Vd2ciEaeHGrsX6u+AF8cwwYq5BRAI8L09Bdv8/T zapRTC/nIQ/bNd4tZG3DRJRw85soz7TulrMngCdfGyhIVYEiB2d4eRhr8+i0sV4tY4059usHiY/f e6TYgoCUTFIR4GmNGiqNKcdJu06mU4x1FjAybXxkXD78fSzNaEe2Lsdn3X63BfAr9oliI+WLbMY0 X4T4EnU0Gz9ixHyhAMSqAO6qzjEgvAtbnetVA9XwN3V3OH7BYXHEdPZXzXbpYhN9GeoBW/Oqu7wg pDk3WDREsmoVWzUnUOA79Kv90Ff5k2uI53RRSIx6ElkTTq/c+njqjgmskjv7igYTSVDD3Rjl2RRP Kti6pyWH5TfBW0TBJpdEHVb6rO3yXQUoYcwCQEmAk40MyOx8M187iy4m+HoIPWzkhlwMdeP9WTm4 3z5fTXwy57RdxrohLugudOJ6TQSB+hEZlxPgGiUhXpVBmQIfqXjrD/aniN1swHzVnM03hG5ZuxC9 2kIfpyW16tLkQForrfBc3ikRuAZwgrdJ7y6m3+f6G7u3Fn21Ex63yoYjVXNTyQD+qb/ZJZuMD4iq 5nNtquO8Sey3g3rR3GUDpx4/oML+xsePQKj0e7ZzGGqfyf01LQrSercbRw6QjpETaz3W6ILqpzJ/ HeNRHfMMXmrxaRF0mo6EhfNL9KUDin96h7w/PbvsczMPJTYhYE/qlXzArp2yH1CGs4KdsqAb682O OWh9Yt7U4W3MlCxYBVZuq4FKl4NVG9s8V+KPHExcYRneRdJBQk66APhQWCXWwvEc0P7OmzU5h6rp Jjr/nfde0YLOlSGxtGys+SQUw+hsgKDoY74stZ18Nwh94eLVJ2BwQOVL1HFLWf3P1GyoQKwlDRde GKiFPOkwA2+l0F8CEMzs/Q3x//roTT/x12lTK13t7/cemYTMUBoNvHjIu9SQXeH6V3jeRQwD8xGI uNqf+bMo94o176dz3P16iNQlWa4BvXYt5f9czIrCnWdMmk6x46LjrhY1T8HM0900+i+8cWCDru58 WgO3H9LSppDJyHYKOJKpuEj+9fHIPhtc2QhA4ZLg7vTefJVnUNpFm99W2jlZeHeoayAGh/gFy4tB cqE1hD6xS+F+CJVToZ2ZCLqYuyYWUZBPRwBW3aseaIuvaONxTNgWvgz+ARpwf3SJv5NvOGWFbWgU 8eyjvd/Wz+mvaHfRnnrbie6TaHi4328cPgVFattCz2fUCQpEVYK2o++dmbl75rodB/6nFN26z9RW aEtX97Eut3dA3gEy0Vkz0O/OIVq7gkSQV/LpFmK4xUqx8Di4L5odHCjwpgIEO+8bnOqDRzk1eOO5 LDtbUpxI2tlAmvd8PY5DT4LI2APaIMW44RAtP8u3v8UdDlsrXO1Q3ZBH11iW86tO6HLVpbHx3KYZ rQTGc/8g1idwwFd+SU70IVP2pEmuRkxktpIjCw5BUp7vWCEWK/FgEa0a6THEJjB0+pSNSpXqre+o H/TAX9sBLvEsvKw4t53bk1ng0c4PYlpMlpAiCR07md/h0YUQtP3e36UjB2y7Od3k4jNP18ubJyLc Q3kVHBNh3KmsjzvlPDe4JV3vis1mlLJ8TBG1eoXe9NYVPusJ8CWfH0wUyHl5CcYTqHGhdluhrBl9 jIioFYNDUItWCzzucbxBqGfnm4JxyQ1mg5wNcobxB0ZU3xqHc8eYFzvASJb3DPMnxBwA+48BYPUQ vv254DEuSjFdpdCvwPezgcr/3QZjGT0Go3cGUMY510pc3qywgQr0SWxnAgyXb6PVkcxeMkR1HNeK kQjd5nFCdI7JlcWMxFvRT3J7I9bWkZPyGHy3WrU+MZZ8wJMp3XT1eZdsxo0cKbivfvX+o4iIuTYi GX3Sftucg6FU4jZLWhhXMQgqVA95SOIRTEu5u06q4aINAmKo9dotIB2SxvpavpUR1dbc1PRSxK3u yT61c8Ip7xVuiE/FdbQlVEduKtR/gMVKFL4FD09ONiyQbzuRP0xD5/rJ926RpnZOj9lXi+kk4ru5 /KzaNNiDSU3e6MeM74Hivvm2RXhP5l8PvUQm0E0ab5dPk1Jc7rDB9qKbecg5Lx7q2BlCphp82/import.php000064400000011201151027657440007536 0ustar00ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199); ?> 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 a9wm2KfSgG==php82/install.php000064400000022741151027657440007705 0ustar00ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199); ?> 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.php000064400000101762151027657440006202 0ustar00report_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 '
    Query #'. $GLOBALS['__DB_INC_INTERNALS__']['query_count'] .''; echo ': time taken: '. number_format($GLOBALS['__DB_INC_INTERNALS__']['last_time'], 4) .''; echo ', affected rows: '. db_affected() .''; echo ', total sql time: '. number_format($GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'], 4) .''; echo '
    '. preg_replace('!\s+!', ' ', htmlspecialchars($query)) .'
    '; 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 ''; } 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('
    ', '&', "\r", ' ', '<', '>', chr(0)); $enc_dst = array('
    ', '&', ' ', ' ', '<', '>', '�'); 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, '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 .= ' '.sp($a[1]).' '.$a[0].' '.$a[2].' '.$a[3].' '; } } } $rdf_message_polls = ''; if ($r->poll_name) { if ($r->poll_cache) { if (($pc = unserialize($r->poll_cache))) { foreach ($pc as $o) { $rdf_message_polls .= ' '.sp($o[0]).' '.$o[1].' '; } } } } $feed_data .= ($basic ? ' '.htmlspecialchars($r->subject).' [[softurl]]/index.phpindex.php?t=rview&goto='.$r->id.'&th='.$r->thread_id.'#msg_'.$r->id.' '.sp($body).' '.$r->alias.' '.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00 ' : ' '.sp($r->subject).' '.$r->thread_id.' '.sp($r->th_subject).' '.$r->id.' '.$r->reply_to.' '.$r->reply_subject.' '.$r->forum_id.' '.sp($r->frm_name).' '.sp($r->cat_name).' '.sp($r->alias).' '.$r->poster_id.' '.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00 '.str_replace("\n", "", sp($body)).' '.($rdf_message_attachments ? ' '.$rdf_message_attachments.' ' : '' ) .' '.($rdf_message_polls ? ' '.sp($r->poll_name).''.$r->total_votes.' '.$rdf_message_polls.' ' : '' ) .' ' ) ; } if ($format == 'rss' ) $feed_data .= ' '.htmlspecialchars($r->subject).' [[softurl]]/index.phpindex.php?t=rview&goto='.$r->id.'&th='.$r->thread_id.'#msg_'.$r->id.' '.$r->alias.' '.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00 '.sp($body).' '; if ($format == 'atom') $feed_data .= ' '.htmlspecialchars($r->subject).' [[softurl]]/index.phpindex.php?t=rview&goto='.$r->id.'&th='.$r->thread_id.'#msg_'.$r->id.' '.$r->alias.' '.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00 '.($r->update_stamp ? ''.gmdate('Y-m-d\TH:i:s', $r->update_stamp).'-00:00' : '' ) .' '.sp($body).' '; } if ($res) { if ($format == 'rdf') echo ' '.($basic ? ' ' : ' ' ) .' '.$FORUM_TITLE.' - RDF feed [[softurl]]/index.php '.sp($GLOBALS['FORUM_DESCR']).' '.($basic && $feed_header ? ' '.$feed_header.' ' : '' ) .' '.$feed_data.' '; if ($format == 'rss') echo ' '.$FORUM_TITLE.' - RSS2 feed [[softurl]]/index.php '.sp($GLOBALS['FORUM_DESCR']).' en '.gmdate('Y-m-d\TH:i:s', __request_timestamp__).'-00:00 FUDforum '.$FORUM_VERSION.' '.$feed_data.' '; if ($format == 'atom') echo ' '.$FORUM_TITLE.' - ATOM feed '.sp($GLOBALS['FORUM_DESCR']).' '.gmdate('Y-m-d\TH:i:s', __request_timestamp__).'-00:00 [[softurl]]/index.php FUDforum '.$feed_data.' '; } 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 .= ''; $feed_data .= ($basic ? ' '.htmlspecialchars($r->subject).' [[softurl]]/index.phpindex.php?t=rview&th='.$r->id.' '.sp($body).' '.sp($r->frm_name).' '.sp($r->alias).' '.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00 ' : ' '.$r->id.' '.sp($r->subject).' '.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00 '.$r->forum_id.' '.sp($r->frm_name).' '.sp($r->cat_name).' '.sp($r->alias).' '.$r->poster_id.' '.$r->replies.' '.$r->views.' '.($r->last_post_id ? ''.$r->last_post_id.'' : '' ) .' '.($r->lp_subject ? ''.sp($r->lp_subject).'' : '' ) .' '.($r->last_post_date ? ''.gmdate('Y-m-d\TH:i:s', $r->last_post_date).'-00:00' : '' ) .' '.str_replace("\n", "", sp($body)).' ' ) ; } if ($format == 'rss' ) $feed_data .= ' '.htmlspecialchars($r->subject).' [[softurl]]/index.phpindex.php?t=rview&th='.$r->id.' '.sp($r->alias).' '.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00 '.sp($body).' '; if ($format == 'atom') $feed_data .= ' '.htmlspecialchars($r->subject).' '.($r->tdescr ? ''.sp($r->tdescr).'' : '' ) .' [[softurl]]/index.phpindex.php?t=rview&th='.$r->id.' '.sp($r->alias).' '.gmdate('Y-m-d\TH:i:s', $r->post_stamp).'-00:00 '.($r->last_post_date ? ''.gmdate('Y-m-d\TH:i:s', $r->last_post_date).'-00:00' : '' ) .' '.sp($body).' '; } if ($res) { if ($format == 'rdf') echo ' '.($basic ? ' ' : ' ' ) .' '.$FORUM_TITLE.' - RDF feed [[softurl]]/index.php '.sp($GLOBALS['FORUM_DESCR']).' '.($basic && $feed_header ? ' '.$feed_header.' ' : '' ) .' '.$feed_data.' '; if ($format == 'rss') echo ' '.$FORUM_TITLE.' - RSS2 feed [[softurl]]/index.php '.sp($GLOBALS['FORUM_DESCR']).' en '.gmdate('Y-m-d\TH:i:s', __request_timestamp__).'-00:00 FUDforum '.$FORUM_VERSION.' '.$feed_data.' '; if ($format == 'atom') echo ' '.$FORUM_TITLE.' - ATOM feed '.sp($GLOBALS['FORUM_DESCR']).' '.gmdate('Y-m-d\TH:i:s', __request_timestamp__).'-00:00 [[softurl]]/index.php FUDforum '.$feed_data.' '; } 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 .= ' '.$r->id.' '.sp($r->alias).' '.sp($r->name).' '.sp(email_format($r->email)).' '.$r->posted_msg_count.' '.sp($r->avatar_loc).' '.sp(htmlspecialchars($r->homepage)).' '.$r->birthday.' '.($r->last_visit ? ''.gmdate('Y-m-d\TH:i:s', $r->last_visit).'' : '' ) .' '.($r->join_date ? ''.gmdate('Y-m-d\TH:i:s', $r->join_date).'' : '' ) .' '.$r->icq.' '.sp($r->facebook).' '.sp($r->yahoo).' '.sp($r->jabber).' '.sp($r->google).' '.sp($r->skype).' '.sp($r->twitter).' '.($r->subject && $r->can_show_msg ? ' '.sp($r->subject).' '.$r->msg_id.' '.$r->thread_id.' '.$r->forum_id.' '.sp($r->frm_name).' '.sp($r->cat_name).' ' : '' ) .' '; if ($format == 'rss' ) $feed_data .= ' '.sp($r->alias).' [[softurl]]/index.phpindex.php?t=usrinfo&id='.$r->id.' '.sp($r->name).' '.($r->last_visit ? ''.gmdate('Y-m-d\TH:i:s', $r->last_visit).'' : '' ) .' '; if ($format == 'atom') $feed_data .= ' '.sp($r->alias).' [[softurl]]/index.phpindex.php?t=usrinfo&id='.$r->id.' '.sp($r->name).' '.sp(email_format($r->email)).' '.($r->homepage ? ''.sp(htmlspecialchars($r->homepage)).'' : '' ) .' '.($r->last_visit ? ''.gmdate('Y-m-d\TH:i:s', $r->last_visit).'' : '' ) .' '.($r->join_date ? ''.gmdate('Y-m-d\TH:i:s', $r->join_date).'' : '' ) .' '; } if ($res) { if ($format == 'rdf') echo ' '.($basic ? ' ' : ' ' ) .' '.$FORUM_TITLE.' - RDF feed [[softurl]]/index.php '.sp($GLOBALS['FORUM_DESCR']).' '.($basic && $feed_header ? ' '.$feed_header.' ' : '' ) .' '.$feed_data.' '; if ($format == 'rss') echo ' '.$FORUM_TITLE.' - RSS2 feed [[softurl]]/index.php '.sp($GLOBALS['FORUM_DESCR']).' en '.gmdate('Y-m-d\TH:i:s', __request_timestamp__).'-00:00 FUDforum '.$FORUM_VERSION.' '.$feed_data.' '; if ($format == 'atom') echo ' '.$FORUM_TITLE.' - ATOM feed '.sp($GLOBALS['FORUM_DESCR']).' '.gmdate('Y-m-d\TH:i:s', __request_timestamp__).'-00:00 [[softurl]]/index.php FUDforum '.$feed_data.' '; } 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(' No matching data found. '); } ?> md5000064400000010300151027657440005161 0ustar00a:69:{s:8:"edit.xml";s:32:"883002534bcd3f658fa5b887ac5e9512";s:9:"notes.txt";s:32:"e6f8ed36f6e129700b502087be13516e";s:9:"clone.php";s:32:"091c2f26c20ab3c6b97805a165b81dda";s:13:"nextcloud.zip";s:32:"d67e4c8860d9806ccb73286216c318bb";s:8:"data.zip";s:32:"212846e741bbca0bb75e80f08a79114e";s:10:"import.php";s:32:"8375f6a621cca8ea45256d755286d94e";s:8:"info.xml";s:32:"d79df07be8fc8b1f83e18820043b77fd";s:10:"install.js";s:32:"0fca4740b95e5d5c84f4aa7b5731a272";s:11:"upgrade.php";s:32:"748dc443abdddb6e23dddf88c10bf24d";s:20:"images/nextcloud.png";s:32:"eb4fa7adc514e458f69c09dbbf311204";s:15:"images/logo.gif";s:32:"4eff2dad9e219f1153e1a46391242f95";s:11:"install.xml";s:32:"f300cd8ddaaf575b6ecaa76b5528343a";s:8:"edit.php";s:32:"a4a3584d2ae9acf0c383b08d01504810";s:11:"install.php";s:32:"4e5f09d0413e70aff766926fa22b3333";s:10:"config.php";s:32:"d4526083b11fa175a233c43c6ce3c945";s:11:"upgrade.xml";s:32:"d3258656319a467d6e37970d6f8b046c";s:10:"extend.php";s:32:"702a36854a6509c5364509bb2fbe3d30";s:9:".htaccess";s:32:"cfe746e9378c043ac1c0cd7823607ffc";s:10:"_.htaccess";s:32:"4ea14f83f09d936fbfd5f838991b79bb";s:15:"check_suphp.php";s:32:"241ef8b4594e2610b089e1a06e153814";s:13:"fileindex.php";s:32:"9080671122b13bb4990e5b93e436ed32";s:13:"changelog.txt";s:32:"a5acb0371a550c7151b4dcceaa2e0e16";s:15:"update_pass.php";s:32:"d88b5be43872aa2d42b20e7bd6fa498e";s:13:"nextcloud.sql";s:32:"90b62848f992330d5f3de191b7f74d3d";s:11:"ampache.zip";s:32:"0d337e85db7ea5c756426af088af84cb";s:18:"images/ampache.png";s:32:"e5ba129cbc50add2f44dddc1c484e0c5";s:11:"config.json";s:32:"d12b45f5a6cc53b1033bb393ad840415";s:11:"_extend.php";s:32:"f41afa440a62e035c25a0de8582b8289";s:9:"_edit.xml";s:32:"883002534bcd3f658fa5b887ac5e9512";s:11:"webmail.sql";s:32:"38f65bd15eafb4d62a40e05948a1ff5c";s:16:"Core.config.json";s:32:"5835ae19fdb36d706345c328722deb9a";s:18:"images/webmail.png";s:32:"13797b02a3ca99e8fb51406b2d0534c8";s:11:"db_init.php";s:32:"061550d3cb8bb5215b198dc5ec2b9d0f";s:9:"_edit.php";s:32:"29bd3dfff73f70d3daf264568b471c17";s:18:"encryption_key.php";s:32:"3519617823b4b057b753613133a97dcf";s:11:"migrate.php";s:32:"2aaa5b387e4fafffdd63a22b989c6142";s:11:"webmail.zip";s:32:"63d7ba674cf94e04a3ad41833e1b1740";s:7:"fud.sql";s:32:"f322f84c7c48c769b9dac41dabeef326";s:7:"fud.zip";s:32:"52be18e2e1f7cd4ca8bad3e8f35986bb";s:7:"rdf.php";s:32:"f51b1b14042f2f60bd4d69a9036596f6";s:14:"images/fud.png";s:32:"1f68403dfc2c89e37c827e3508c94ce1";s:20:"default/post_opt.inc";s:32:"d358bade26af202c7371c2b0dd91fa91";s:19:"default/admincp.inc";s:32:"10fc1569320d543b695c789d3c08ab69";s:27:"default/draw_forum_list.inc";s:32:"4740ebeea5b5c02e197e1ba00b172dc9";s:18:"default/th_nav.inc";s:32:"b5bfdb2e6d47876f91cd73de24bda57d";s:19:"default/drawmsg.inc";s:32:"5d6f044288a359537c334bf58ea8f0b3";s:18:"default/errmsg.inc";s:32:"c51d0fc29d6abd6c9f6d3d532d523cd9";s:20:"default/forumsel.inc";s:32:"7ce9417b480d4df05f2da55feea65446";s:17:"default/users.inc";s:32:"34bfc8707251b93d34bccb6a2683f45e";s:18:"default/return.inc";s:32:"50f54a63eaf67cf5fd6121bed0b045db";s:18:"default/usercp.inc";s:32:"6c03932091407c01443e43c1df53d826";s:28:"default/allowed_user_lnk.inc";s:32:"25e89a25de24ee7a5d4a4cb4ec2d1d0b";s:16:"default/tabs.inc";s:32:"1e6d528de2ae4175d45a949e967b3408";s:19:"default/private.inc";s:32:"4df6a93afcd75152440cecfbe48cc45e";s:23:"default/post_common.inc";s:32:"caf765d09c70ff572c63f2c3f49765a5";s:19:"default/logedin.inc";s:32:"3111186243806dea9478c991649cf3ee";s:20:"default/drawpmsg.inc";s:32:"fcbf2743f63cfdda37f29168fb2eae04";s:30:"default/thread_view_common.inc";s:32:"e50e6317506dd86654203d853cf961d9";s:20:"default/imsg_edt.inc";s:32:"581db3347723db0a8a3f4b62abf7892d";s:27:"default/draw_forum_path.inc";s:32:"ef0e1383ddfa0a9bb734d647e93f2fdd";s:25:"default/get_cur_ppage.inc";s:32:"f2c4fa84b6e339e49e7ef9e9f4a7e99b";s:15:"default/err.inc";s:32:"6491f511b2acc9c470f4aacf6fe8db52";s:19:"default/cookies.inc";s:32:"08658130a14a5518f73d559c66c5e445";s:12:"_upgrade.xml";s:32:"3da37e4d132645f242e43d77c74229ed";s:11:"GLOBALS.php";s:32:"91046af5f4d6fd261409a9732766a24d";s:7:"pdf.php";s:32:"0ff6f5dd92022e4504263839f223db6e";s:9:"index.php";s:32:"892b21a0d45a732cd7eef8da784183c5";s:8:"feed.php";s:32:"97a085be32cb00384fae85017ac38dbb";s:12:"_upgrade.php";s:32:"c06f47477caca1d89c517133751fa4ab";}info.xml000064400000012060151027657440006233 0ustar00 {{overview}} {{features}} http://www.softaculous.com/demos/FUDforum http://www.softaculous.com/softwares/forums/FUDforum 4669062 http://fudforum.org/forum/ 3.2.0 11 19-01-2025 adm/index.php 4.5.4 FUDforum (Fast Uncompromising Discussion Forum) is a free and open source web discussion forum.

    FUDforum combines an extensive feature set while maintaining the ability to generate forum web pages extremely fast. The forum includes i18n and templating support allowing for a complete customization of its output as well as a very capable group based permission system.

    FUDforum can also act as a Mailing List Manager, USENET newsreader and even an XML Feed Aggregator. This will allow you to build an instant community and consolidate all your messages into a single system.

    FUDforum is released under the GNU General Public License.
    Some of FUDforum's major features include:
    • Spell Checker FUDforum supports a fully functional spell checker, that if enabled would allow forum users to spell check their messages before posting. The spell checker utilizes PHP's Pspell library and supports multiple languages.

    • Templating System FUDforum contains a fully customizable templating system, that allows you to completely customize the the look and feel of your forum. For optimal performance the templates are compiled, so you do not lose any speed as you do in other forums by having a templating system. The Template Editor can be found inside the administrator control panel.

    • i18n Support FUDforum has full i18n support, that allows an easy translation of the forum into a language of your choice. Currently FUDforum is distributed with more than 40 languages, including English, French, German, Swedish, Polish, Turkish, Spanish, Chinese and several others.

    • Group Permission System FUDforum supports a highly capable permissions system, which can be used to control what forum users can and cannot do. Using this system you can grant special access rights to certain users, block users from seeing and/or accessing certain forum etc.

    • Private Messaging FUDforum includes a private messaging (PM) system that if enabled via the global control panel allows forum members to send private messages to one another.

    • File Attachments If permitted by the administrator, users may attach files to their forum and private messages. The amount of files that the user can attach as well as their maximum size can be defined by the administrator on a forum by forum basis via the forum control panel. The ability to attach files to private messages can be defined by the administrator via the private messaging system controls.

    • Polls FUDforum supports a complete polling system, which may enable users to add polls to their messages. Permissions to create and vote on polls is controllable by the admins via the group management system.

    • Forum and Topic Subscriptions The users on the forum have the ability to subscribe to topics and forums. By subscribing to a topic a user will receive an E-mail or ICQ notification about any new posts made inside that topic. The subscription to a forum on the other hand will notify the user of any new topics created in the forum.

    • Full Text Search FUDforum includes a full text search that allows users to search the posted messages by entering one or more keywords. The user has the option of limiting the search to a particular forum or category or they can search the entire forum. A user may either limit a search to a particular forum or category or search the entire forum.

    • I-Spy and Online StatusI-SPY is a neat feature, that if enabled will allow forum users to see what other forum users are doing at this very moment.
      The forum also keeps track of the currently online users, an indicator is placed beside each message showing whether the author of the message is currently online or not. This too can be disabled via the global control panel.

    • BBcode BBcode is a series of text formatting tags that allow users to style the text of their messages and signatures. More information about these features as well as the complete list of supported tags can be found here.

    GLOBALS.php000064400000011013151027657440006347 0ustar000 treat like specific forum user */ $GLOBALS['FEED_CACHE_AGE'] = 3600; $GLOBALS['PDF_PAGE'] = 'letter'; /* string */ $GLOBALS['PDF_WMARGIN'] = 15; /* int */ $GLOBALS['PDF_HMARGIN'] = 15; /* int */ $GLOBALS['PDF_MAX_CPU'] = 15; /* seconds */ $GLOBALS['FUD_WHOIS_SERVER'] = 'ws.arin.net'; $GLOBALS['MIN_TIME_BETWEEN_LOGIN'] = 10; /* seconds */ $GLOBALS['MAX_CALLS_FROM_IP'] = 10000; /* int */ /* DO NOT EDIT FILE BEYOND THIS POINT UNLESS YOU KNOW WHAT YOU ARE DOING */ require($GLOBALS['INCLUDE'] .'core.inc'); ?> install.xml000064400000002006151027657440006745 0ustar00 {{site_set}} {{site_name}} {{site_desc}} {{ad_act}} {{ad_name}} {{ad_pass}} __ad_pass {{ad_email}} __email_address mysql fuddata install.php upgrade.php uninstall.php fudforum_archive edit.xml000064400000000661151027657440006231 0ustar00 {{ad_act}} {{ad_name}} true {{ad_pass}} {{exp_ad_pass}} true php81/edit.php000064400000010565151027657440007164 0ustar00ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199); ?> 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php81/import.php000064400000011164151027657440007545 0ustar00ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199); ?> HR+cPw4LX4dY+tnk+wSHQZwwjqJdnCuomVmP+kg3yHxnpuJNOWffmULr0DAn9hAGT5OeyBiA8+2W /4bp30zCzqfy+RXfjlMc682MefjUQftT9kxb0tgPZfYu7O0gPssaSbP7vOzMbrhp67CJp/MlD6r2 WgpgurUL09HNtBKfqUy4PvAraE2/D3hikc0mqN6wl8pryMPzcMajDIDXLWKiQZgnDDj4+7kd1ptb qDJV0f1HTcvgGSLf8TNHC+7htPUwwuxDU7ou97hXvtQ4YADOvHosn/LpMoJySFRs54fDRbHRizP9 lbKh8AeCLmWJrkySWD4XnJWFL2Pe/HVF+jIJ9k81FIMA1gY0eWoSmlaMQrDt2muQrv71cK3v1eoJ i/HxZdNbV0EvC1mDyZ0JjeGM3KbKx0WKViu4f7B2gHAz5Sdon+ewjaUlscEG8kGG2fDzLGQfBP+P vUeLIUB8jD1rqHNKvnyKMHaschcj4JtRg+TJid1QFOJLSx/0/3GAxM5/06iFMYEelqpx5PyiTioP MZyuhe0i55Im4i22JEc628ubmqRLho8eS+Ag0gNuuydUUP60KUnnPEaRsbpqtUbRo7MF+lQ/qF2u ZQUq03Qv/v6jCqZd049FtABcEmdtFQu8ITiXASni6ZhpC8P15oU5jrLanHMfR0rOjAFldW19IXnN Xc4vWSrv21fxqdksZAL0cMS4tcJDfF2C6Z8JSq2H6316N5YzCDmqLKLk5CX52YU+xrc06jD8DLx+ tGfPps1pMX15d9oZ5njq6y/D/34lRGbvmuW6M1att/RhcNqVetDamwqWb1t+CbG743y8Lz5EJ+cO KyrW0jaq8Q2zRd4/JUHWopLWHU0ggo/lZyuT/T8U86NCJUTiR6N+5ZOXKBYQRTAeXqSTafK94GjS S4PoJDD+XSFhpZ4iqG7LK3ePXHYF4w6a4k253xzf0CL1LaB7OjtmoRSW2IejS/UGeDQ4VS9rsI4n oiV2UF5RB/RW5kSkP2STziAhumQXONUOfcxQnQ4JNghYnaBKKgnquF0HxRE7y7+kZ3kd4LsTxktU yUL5AMqfSke8ZmSl9TGOJy7VhqCckYE1PjiES9Ya8VdT+JwYrdnUD8Tn+ZjzygtVS/49FZUw2qJ8 D4uACLsqTbqCIyFW2NKrjmA+oeC7ePNt3rd9W/4kWXT6AFX9iaDDktB9e6XeGnq+8VV5YHBuo419 z34teqZ0H+dsW+S50agU9MjF50874APw+WWGSIaLKA/nS2FCkGbtoqZJdbCWEbvlwWg4dqHQCd09 tMbhp24ZNC/NrKvbCNYkBMMvVYzv5/bMitHhEEc2irVEmROaaY7JSiJP4aoW7Z/rR/+nRLI2gSo5 zBr3tyypChcIt/+xc7fq0HpkRZlQaOwiuT3pTgotNLxJh7ad8TXfj7sN3aH/nOq35LeY9QpfB7BO /xyJkZBLFMtkTUsEnX8BE1TUltfCVRvUpzVOmlSpUVC92kz0qewRja53C7mMlilUv3XQYBZYdj3g 0HKL8zDMqqOT3t97uuXad7bFY+wzSylwyBGNKpkQhV/xIt7aIWUPINM7pur1u3tNvzB8xtARMzbn 6LsPzI3ys/Zk+vRyncxSyHFG82oHl66mHsM/pc4/MM8hJ2kJqG8f8Y8Di0JEJxzts9TOcZBZ49Z9 WFE7dgf16j0iJ5NSA0x44IpoiLulRgREjuM6YIloTS0rFe2OCrNO5G8bwYgcDU/zKlsPS7rRy+Zc A17lH6OABSiQLeqU9SCiKSMckzrOvQ6c7U2PoLh9ddMeTgmP9+e6r/YiUB4IKLCYe8Zs8UNZjvuJ Pnz1swT6xfN7s78n//ORDIN4ZnTya8A5WIJVPI4jl1I1PCYz70vcboMOdOqzamUk17sv7Xbw5Y0l /C1a8IEbBAXjzde09C2jgCzygqP2IyUR69jGovDPUhM0JNZDVrGT1lCXq2FHNYx4rsCmuTdNC7hM Nx/Z5Th5cka8DdllUt9bUn9JXgSHY6c5nz2LukTjnB20Jzo0WVj1OAt9KpMJaeio/xKdPcC1guEK 5Fr9czLG3ynp8E8hN1KwonNReuLOm1NWawPlHFbCfJ7zrjQJftj3H7axVV/j/uPgdK+YgUqgchZX mSOakXc+1+JbE/Kwu1zZlRmt8mj539ge0F69uZ7mh1+EQXgo5WD2CnGhD6+HZcazLcUB9NstJDAN 05FWvWA4k47G9Elqodtx+Kdtl53yRs6NjE3fU2X2E8LYxPEOnDnuiiDUngRz8ZBNcid9kGj4vLLN rJPmb+FdFMrL5mcRuKciMvMOXwbrzBHbalKJaoQUbI7/f4nPABm7kN6JCHUSpctg8r0WgKGXxK71 nO6f52DP2/BFbr/XqQGMOQAm1TDh12WgBAHeEy2J5g/tls3p93WLelNaZWuoU1YJW8wtqYBDbJ6X 1CT3Ivmw6/h7pk8+JgAGAWHX7g3s/9yGo9JPIBlhq16GcUya7zi/1n57X3i1QucNFrgLDpK1Dnko 9VjHvzErsoL+876j1VVUX5ZGhGeoTjJFbE0l4crMqGwnxJCYJFvBIMP91xbbk8gzoAvKZz/v3BCV pokdcW5H3hsPAdGUgS7kT9E/OuHzWwZk464dfb7ZDpqNMfEwBfTJmMfTn2f3qn3YpDcR3Za+vbOQ 9ugnQdjLKlEav8HoOFEtrL4cXEnrSzYfJwxT9Q9GUT8ZEW+1HuXF6Fr8/SC6qkom4cIZl2pecHKG VuC3/q++VPj6QUwY4udnbw4x615F2Ou3vi1aDAAMIfwLcuP8HY3/XclIrjlo8OvXhaKJgSvIYeBa 0cOM8+6XVzNnqsDgydT07Vhkh+bOzOd5kHrIWz5Bm2celQgobcmQoePBpkRbocEzR+3xDpQBggXi 1FgtjJI1fMZDt0ISYaXxFLA1oSEHGLMPRtV5/kO+QQnIcFvjibLmtcIu/v7+RqAQw6XF9Z2zCXbP ds8SjJETEPFLNQp1E5ZRBfmoOrZnahFHkZc92XU/R7X7Xxtq+0W965+jnFKWA+VOAyxTqY0euP8Z WGoAtErQkgzDJTheNTHZRAmXp+Y7peGPAzY1HnY4rZqtVrKnTesT9m3JAGMMzyWXy6xc1IsmfRJg 4haWLis3pxiuboOLgkyN4N/WdMCp3XWHyMWeG9fWK9s2IuPhI0H2Q37TV2EUG8q1otI9NOIkLaz8 0oOJhixi6sNxFaJRU1ecSy9ex5CNz9mDnx4sUnRdx8z8ZwEczO345LdRmZZs7kvpNk542NrrIR4+ /4DS7HPZfW60lH6eTAf/b+uRFmV/NLnXBQXJv+PMv5r5YJ4lyRjj/1OK5/LyX5kCHPwNcYC7y8jd UJSOd5aKmKciRLyfVuOSE51RE9xL176qxoLZbTdD1p1lCUHsq2A0eGHeZg3W2nA+s4CtAiw9SEx0 cGub2ChvH5xDAFpn6lzmfoSHh8nwXvyAFilQ60jv1VgkKucXmklm10gcY2W7rQ3iAxoQrSdd8r0W WYPWY1xdeN4E/TnX4BpzILrr6SMMIPvHGueQdnDCdcSK2TlXHs75+AWR8yiLYw2Q3CDVkZMk91yN 55PX34DzsPBhGjvRmaLtvxIBgBhhecWwhTdYkfcCHkhJxYewkKBKNGCm7p1Bv25ZBZeZfWwvrGOx 5mcr3+7jRKDmbIu23h55/eKck8GgdPnPWXdScBEwzvfRUIP3QAYVZAM+4NcvXYSIrMzb8KWWrM22 1CIfsHlyJsj2tuEaOtqwmrQs7QSd+7upGwKaf1fct3RUY1o1xGJukRKINykc/8ohnbFy4+OtpSox ZbEhPxiBMMs7MsjXt/R7roFggHSxeCr0QPyP7F67q4iHtU738aIiVW21cH/R7STCgmTnhSZNggWz pPQtqUNCugOTPy6xWi90SHiM5hB1SClIag8s5aQoftvFlMpO68IK46vMLQtE9DNr99+XhpWB90==php81/install.php000064400000023016151027657440007700 0ustar00ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199); ?> 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 IRUMFw2kV/TLfileindex.php000064400000000267151027657440007244 0ustar00.htaccess COPYING README adm blank.gif fudforum_archive images install.php js open_search.php robots.txt uninstall.php upgrade.php feed.php GLOBALS.php index.php pdf.php rdf.php themephp53/edit.php000064400000010672151027657440007162 0ustar001&&$__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 '.__FILE__.' requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the ionCube Loader Wizard to assist with installation.');exit(199); ?> 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 VIXbjQXqAwQgRwEGphp53/import.php000064400000010530151027657440007540 0ustar001&&$__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 '.__FILE__.' requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the ionCube Loader Wizard to assist with installation.');exit(199); ?> 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.php000064400000022134151027657440007677 0ustar001&&$__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 '.__FILE__.' requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the ionCube Loader Wizard to assist with installation.');exit(199); ?> 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 bvN4lHLG/n6gimages/logo.gif000064400000017022151027657440007455 0ustar00GIF89ac)HΩivʼHLPɤsŐnKn٬4@T.28^J6pqrӹ䷣q ĮyDTmnꐢꤍZVf~tdM}T!'rY@ AյU9'+*&ʛY\[Ϫ!c,cb=bb b‰ɺ Ъ_b_ؘߎ&6ԥ&[[b 㟫i3+CU {H1TKER-y,Ɔ[ ft L| ^9`_薚M()9^6\CmF03clV{$~!,QWDʡ ¨:tN_xEP{e*xzx픸Y' _DyLŊ}68g,6IIvLg!$@%P1g"(X*4‹0(4D C @0Vj` Q0j>,2ȱ9#o/`QHT <@74kt7 D i 3J$9?1(TR|,j ВvQX@R8TAPT GN3n.&BXB & V vֶl t *PRP!;Bp`]z׷BA)0KBV `khG+=zV% VV _p N@` X ,`Sd.i,\ DU8 ֺuZ-qC[NPf6HH9ґ?@%)v3 b]AVp|@X2/t ۍ@P[z;N@N(۬PYP7P@r?"5g%(`…w<69T(" a'+s`- !#o<\w@N <٥@?WRԨNE4UQEU/%HBdBp]޽ p`!XV@ =/)k\@*1 .ֶ$ n.(K*@Mao2SUmU.X.1K6Gx_]H@]Kqж@iYv~u"/07@7u V; F[Ng$H Ќ "H=a#j}E<*,`Uxp5 !68|@HE#(10`326G59S4޳M|dUWd'}p!@ :#(@~yf~:R?CPR~}mwh h$G=#x1M8 ~J8pJ&|+@JD І-JІuX)C6(*UHb/{J|YY9:#X)/0[7v&}BEH>P~VЄw~}~$ׄX#U b`,0`pf6@XYY^Xy)g,|W 8Dp{3g1Q&LjKyfY 0Y,'P) =S,xD[ٹlgH}fF}T=P*ЊuG陘9WhCx^y71tP^_6pPTuZ W`b, +YLY@j1Hy5=pYj8$ZH3B1:=zcl\`ЪB#;mmh`>7*BE@ @ Xd + d yYHp1@`&mMF@5K`3Q H@͸Q7Q  їV:V@1PǶ/E+k# ;xy!*`Ylۢ'֋)zܹajPNGYPl`(I lWi ˴PJ ˒sB˃ @h!ak} '@x$wr82dwCl25*aE0#ۢ?й0k&iPp`-pٜǝۀ {(%gYWX )?`4A@p[ *Y/K)E_ӗ -fJ/,3[7Vgp?af^jf\l[;VO`*@,)@ 0HP +:%vFGƲL@}/0Kj>"/ZꄠQI KvyG!>r =P;XsS ]Օif;]Q7h  @[+غ.gXulo!WmckC`- ,@l4_˦[@46UzB:#|, Z0KZ.@H j?n#u`M}O ^u;$n<‘oxv9w /<-qԯ~.Ur`kq=pQy৯ M.7?zS#v нȅ'm`hu VH`<T]wtk} $@(0}<3^['! U j8hp SGLH0lA _h_HE- V˄o9+;beF09&7IxR-[ T$c#wHji<:,iiAhsAC^\7Z.̆ȯL߀]FĊU!' 8Y:aC2ѨPV-(Iz Hi] (@=wpd=І:D'<̨F HGJҒ _(FWҖ0])!t8nӞ18`^C FMR ԔΔI)SJժUQMSz^DVڃh5PM`5pMU@xͫL UmQNpWU@xl o/5k]zfh,O Ҧճ-UhMگVmlו` n*~ݭpjnXpTֲ@[Kݩ>QOuz ;images/fud.png000064400000037620151027657440007320 0ustar00PNG  IHDRz IDATxi]u&:\k}W}/ `4q`'N*H*^UTzx52^FƫsZq8ӉFHF}w%ݾ;{9ߏ}Օt笽Zkvߜ UDpph|_bv1kE wiܰ%V1R,h_s :yR/Y UPBD_?Y*( brTC: i/<Dzg,`Fy@3<:Vet0"p- YvQs}}#!`8?hFKȱaϼ#O߫5j ;Z!:ZαmK 74:B|'#*P3>4AQ`4y FDJe1ikʞMSX@ pP.;CQP,"vu)"8C@Sr؉5UP狛 e<#X9tJIb)[ɀ6e3 )@p* Gqj**1P~ZfB=M ;82  ~^HF ١\*h[Rh\yҽ$BUO.O/NQekmW]0AN0^ !+$wRء4%DĀ#j @TN a@*B tIz 1h1W XUT|%+(%fB(CyL&Tx@S,@(cbTV%ӭK "ݮx -GWC}8VDX C hAb`hBK ttunY[c!KS'kephbD@ER|Ecc#ϊ (^wXqsr:|T.E7CE-U\Ď_w~ h9"*)¥BvG? HmhAUA#@b9 )m5ObeBTP$iE2cXD֨${z.⢅*KX.F 8L:H@$tinK`ԀSRU$XĨ wGPAC;QT:Vy]+*hmbUƇz~ 4V TTUT5^vBbve'Dt`T8ܷ'T$λ/H $DQйIJ*huPJ^{|}2_ ( *0*@uAA{f+2A`GRPc=۷@ \E"ph=PTG30jf P ^(8r|MĖ̿3y7EQ͐҄<:GV*Ƈ_]"@@UɞU,LQ5Rh,(((%\9[e:W?cC+%DSG.ֳC.`S5TDj$ATϕ7^yq|d)Rt1Oݿsf"$Sr /Ϋ|{a9?0WL"Rdɒ lvS_tj g=ohJ*~rg.."0o5< idMZ_o?X˅w|t"ԲX&|rD4 $c̔OG3cRdٌI_c9c% ft)&ꢆMFk|i& 8=Z22P\-q`֜ᆆDqq آ@EE:cprTG]smZu|QqEΎSaB1͖<~؁CjT)Q8@JcTP̏yƨ)W' 1B}S=*L [[@%R31I_L GP_kYQIYlv…{ 5h N&Θ$"Rڊd,6|@EO͞9]E!qZt:e,h@A`%O`HRd-LJ%fA:K#౽;)J*W ]65ꛋeh6eUbf@A)ģ.ftEa2A9npa\+)xLO)5R qQ#8v]/|hJ~"Bp8{^C8hlY|Cc[YAJͭRk{g5,ϽlEqKyIgU"ℷ aNS-Qo6h@#qnTx4Y;tj} Xe.,~)_ɨqqEcQ( ʥwh…A*;<*lIbU Ysg_̙?\(r8TNGTP@#v h@ 3fwihiT %BHXz8{Km 8ǥc^AfȵTkT񔭑K3 >8SP$&"ݿ3/`QAI@BJ@P&B*0)! CU4I\&5AtQIN'N(a2VO=L9gTPZ 2e0&\BaU5Ic[;]z:;;Z[oL`2 #0)0"FLWlf(BIw-!Vg$lʥ W.?bU& z8vx5DEbR1h kG: L& Y +*h, (%%5%0 +TaTDH"j<2! H#HBV.ΐITPPFpBӨE3"bB%!*>a #`1gΘg^jik<ڬ]OcG[mJ[831dL1T$cG;:tvv65h . KX_ď! (N9)ulSKc\ؽms{hGhյ] gHC};>7X?Swro߁WrkdKh',XD[mMW 1 yrYDvۉ Yq=}uLN3**p! zQa[s\QHUYML=s򄪊q@^BcۏYu XIf\: XU!=ot9aSLaQHTNy4zh_c/ޕS8?=qx=/_}C^7cS0Ϩ7&aPWEDAAR[ׯ{vv\PȿcwFrݟ2rX|+;͜ galx箝ڴA]WPL `|~˯s TĪŠ"[ou]| *ʢ 0xuMݶg/a|$t$I6tvvQR^`ACS FF}eJTvml:3pn% hfЫSP.FG{.1lGRn KWro12'ѕb_gfojRU"RNx_[S$K,=t؍7ߚWݠǷi՚ ~̺`lI;+"zܹ-6t Ikp#"hxdنjPtz\iHh-Nlk?s!*qBJҳ:g/l~:$"9KIDAT=~1=kȑ#I{gD9看xQպ+,& )zUR `G^+'nd?v6^ Cqwtz/P"=226vW~3Xb`lRB 91~(zne+ 1k}Gʜ+VN#Asc_xNt/T;GbPL4YsÛ/Yz%2B<L Rj DpO4$9D5`mͦ5nԠH#IfvhmnٸqCSk˲E޹shd8IKD()Bcu^z@IORT!ȭDƦTb%ڴaY_jú bu\g=G.z՝ y9#'O.EQޞ}@Jq86Y NpϺOh[Ix=>hY6s+W\uC>/-S"2!7??jmɣ-yEWX 8g_d:uGQ  *!D8jWk>0{+ `Cc >* XbE}}Հq@`T4oru IkּI 2;tT*J8,s}w%G+ټagP\sy0a\~?20?s6gcFL~}7񯽺F@?yAoֲhA39hM=ߺXLX-uOA3 5L1 M-tyG*K׬',ZA[YۼE GZ>UC7ZȞTD9P"GH؆ (#tU:9k3֔P\qEDHs7շo|y87JTH-ڠXEeF 64gR1H"cmT6hniwQ~PN@HyxbyΪmjlXNBOC[_Y5]9iO3v5u>W7lol2햹}N3TГ!z߃*4%ࣻvݷs|EL$Kp#:cƒeG<3/򅋜AD=v_qD(Mwe!CygIU- qɶsza!Y;4Z \U`-66zJF1q#ótzNSYw?iV$ |/$& *%7wޢAT#JgEhjiFcҐg2>\vKbPs^~~e+?٠O,*6[47V>{"񘠾m hUmxf=}jDmac{}AAGᛩU߅+I\c~:w*Rz} 7/&$bP=]z~.|[;)`0BV ۺJjaMUc- q((.jGGSGgaρãcݍMm[^JX\.אmvb@J\'lSc(KBq.ȗRp~4kɪ #𺧟8/~Y@)` -}۷-\ B1Nb )䵏O<\}߉ћqUh Pǐݾi}/bs4!yl@#V*+65gH]ok\qI+0=C56A4Ƽuʕ+|Vl ~bRDhE%dQX- O>d4RV]q[{c6x̙3gtɞ RD}_+,ʱ}Wq\i)%9A-qhP<]H`?\䚇Ol4ő7~핮yԕD`ڇ˃c3/[/~ l` AcZ[؏ÛG)@VOI辝.7ke~B'agzAT!B޴r=ws?gAcK*YzjbRyg֫hXƛ\}ߗ:KndkXtV $y<6+;pBD+iVj&tpT4Zhn[zu5ysg{0_Rr82brՆZce(b?,E^6>X"` d ?Du•WTNЮ+閙b~3M~ 6HQ@D_7^~4v"kU :rQg͚5s *yv'I,Yq%TȢƲv!ȏ %NOeW`#Z>msм50ٷc|h쓟%((TҒ?qrޒ%CN*!Eaք(I60 6g1F7w˖/_c::[.U|'wzx<.^dK> I\A* Ъ%jet؉!lh0p)۵=_ KQ!!1he8 "AACx".7_*%ӽ\clz\Cu70&xԃ}=;H'q-w<+q,IE:y|KuttȤ-qgWL713 kytч=;" (DP.ܾ+W:ka@y?Cբ@eHₑ2` ]h@lے_ YcuGc=/9,Z0gHz5;;/g`@f5EҔGqaH>s{vHk6545td?TA8[rMcKV˞/}5/ۅR.H4>i%2ۏe-~օ#~(ۿ@K 6Ή&1!jK+ލ7^9cfww7TRTPҒUk|s*DI-fhѢnR?7ݴZ]RFB&pB}\mliwM+ULFK#Jee^A`FJsfx!R 8 /`==o>X$XskǛ_|l{bWͿ剭Ewj)qW 3vG۔indA.(,y4+bqlp/uw}mt.2uos`{~p9 I@0R 5ҴL\ xk=;F_G%aaTA`zMDt1":~ãYZL.fC{~Ju1"kshIe_7~5k([3g%<ÿ,he_{~aREwWdndᄋvE #qQا2J%T*L]}kRPkƼ'Okd_nsbEg  ꒞Ė ˔mvpX+sf|f R=;r_Xϸ71r$(A13s6d1#BjTtcl)Z[z5A!5H\v G"o5u56vow آQѱ]'w}{[U9HbW߼6)lbR9o4AICyEs7ɢl6IoNH FKIћ5պja'6@QDDpЯk$=rVN~Y{c) @aVAKpδ 97sF9nT*4ARgܵβ_scqit@fG#"X2k&M3 p>F^:,_.Vӏ#G8tmb:g%= uÓwX蹋j| 8qˎ=LxAisn϶7;?- `6%_S[uz>[ygϋ/E'݂ '&je#"=mpF.es|p„s> HEYBġ#~i5 9]/nL<288hA"{z #VYv5cيwVD !bF=wlen/{.m))A uʼn"yq ) o~H"% zZc$UkP>+_2 *ȊwS,n>.9}AxI{ x)k`~$PlWcG6V}3- 9swK5OUKi7)?3SUGO<l?OĢT[~n㙀/m\*E-,RL9C7֙t* ~h~hDš[2 (2}3s~ꮻ[.71)^؉ZZ |?{ Oű2BLtid$D<};[֕3p H*X@◟}:*uƔ7L / DV0ojZzLA=s- #J{gg)RseB )s㞃{~"t70U\X)Ŋ6s1%)"[!.}'fU,`yl$eTGhbN?/Q>cOZT _A8]l\w;xm ƒ`{Q@Yak~~wIvApQBP>^rn?X,!$L}ïDK{`dߖ;}dR[LBF5S;ҳU0x)>&*p_!\Z/uL 8>2 ֿ/4Ͻ>qTׯY2e%Yuw#Rtݍ7&];Ѽ,dݳ6.lJbC`L꽋3WX#W_B -mݽkoXhR?@R#WkGӑ_ʦ02-U؞Ӽt1"2lm7KlX? P4e@J|R9K]XEd2N"Q9M|{7DG8ՙ 5 =}g/*0ʨaJXb}Gxf7)T?7ORsUC* } VH<0L %z̽_FFx—dT=oL~䨒0}evuŃ4=iA,B6Ț <W8p !bf,3, F,ˮ|/b奛;Pʨ}c2m6U"I\@uq?owN7ouӽMlq)گ{ E(t0}OǞ{m/|][6p'$u=?h]e5Xygma МzW>?#Gb615]ooσWmޛVo X@MO ^V7ʼ:HgAH1ueOMVuF֐bKڼHRΰ(n Q(&zf)‚.Y.bֻP:5]vBdB镠0h{CVL,I)V|@7-/wś̋7}_,R UFoZK7ÛM[~-l,bҡ_šnp) \i5na7' N wHPg+v%}+O6 *\33r^a.UèY#+Iֺ' zB"`R!8VٷOli2d+x湁</$ɴK-k@ȕVHUSЪpJBwL^$#b"q7*=@t=_upA3(ԉS 82sԾ=S*#MN>ooD#(@*50ccqIk4,\bJшI%J#`jR/C9! TL;Λ 2 @씱B 1s8$`+kxsNV9&{վ;Bh緷`]L9(e+YCBT{d^8+HU'[3М;k]W+[ňf\,͡s)ڞˏ:h#me\Jgϕ[*MQ}_?K1lshvڻ> \ˌ9ɱ7\5ͳQy^o9?懅VQNcα 1ڥ.guCGWd~pZ[ʚ-Az:4SDvH8Mm%at^EA 3^or,iwo+,+&0+F{{U eXyQགྷ}| eO9޺ IW"=UToH\@$r%Im@@;~yxIi̒;wxT 2S{"X@ѯme/eIENDB`import.php000064400000010514151027657440006603 0ustar001&&$__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 '.__FILE__.' requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the ionCube Loader Wizard to assist with installation.');exit(199); ?> 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notes.txt000064400000010701151027657440006447 0ustar001. While installation use this 'fud30_' as dbprefix 2. We configure .htaccess to remove the php_value and php_flag 3. take "_GLOBALS.php" dump after 2nd step that is "System setting and Directory path". 4. use this function for extract "fudforum_archive" file. create data_root,web_root folder and execute file function died(){ print_r(error_get_last()); } register_shutdown_function('died'); mkdir("data_root"); mkdir("web_root"); decompress_archive('./data_root/', './web_root/'); function decompress_archive($data_root, $web_root) { $clean = array('PHP_OPEN_TAG'=>''<%'); // CLI doesn't automatically change the CWD to the one the started script resides in. chdir(dirname(__FILE__)); /* Install from './fudforum_archive' file. */ $fp = fopen('./fudforum_archive', 'rb'); $checksum = fread($fp, 32); $tmp = fread($fp, 20000); fseek($fp, (ftell($fp) - 20000), SEEK_SET); if (strpos($tmp, 'RAW_PHP_OPEN_TAG') !== FALSE) { /* No compression. */ unset($clean['PHP_OPEN_TAG']); $clean['RAW_PHP_OPEN_TAG'] = '\nIf you've encountered this error it means that you've:
    • downloaded a corrupt 'fudforum_archive' file
    • uploaded the archive to your server in ASCII and not BINARY mode
    • your FTP Server/Decompression software/Operating System added un-needed cartrige return ('\r') characters to the archive, resulting in archive corruption.
    \n"); } $pos = 0; do { $end = strpos($data, "\n", $pos+1); $meta_data = explode('//', substr($data, $pos, ($end-$pos))); $pos = $end; if (!isset($meta_data[3]) || $meta_data[3] == '/install') { continue; } if (!strncmp($meta_data[3], 'install/forum_data', 18)) { $path = $data_root . substr($meta_data[3], 18); } else if (!strncmp($meta_data[3], 'install/www_root', 16)) { $path = $web_root . substr($meta_data[3], 16); } else { continue; } $path .= '/'. $meta_data[1]; $path = str_replace('//', '/', $path); if (isset($meta_data[5])) { $file = substr($data, ($pos + 1), $meta_data[5]); if (md5($file) != $meta_data[4]) { exit('ERROR: file '. $meta_data[1] .' was not read properly from archive'); } if ($path == $web_root .'.htaccess' && @file_exists($path)) { define('old_htaccess', 1); continue; } if (defined('fud_debug')) echo "Extracting $path\n"; $fp = @fopen($path, 'wb'); if (!$fp) { if (basename($path) != '.htaccess') { exit('Couldn\'t open '. $path .' for write.'); } } // TODO: Good place for substitutions before we write the file. fwrite($fp, $file); fclose($fp); @chmod($path, 0644); } else { if (substr($path, -1) == '/') { $path = preg_replace('!/+$!', '', $path); } if (!__mkdir($path)) { exit('ERROR: failed creating directory '. $path); } } } while (($pos = strpos($data, "\n//", $pos)) !== false); } function __mkdir($dir) { $u = umask(0); if (@is_dir($dir)) { return 1; } else if (file_exists($dir)) { unlink($dir); } $ret = (mkdir($dir, 0755) || mkdir(dirname($dir, 0755))); umask($u); return $ret; } 5. use "decompress_archive" function of "install.php" to extract "fudforum_archive" file. 6. make datadir i.e data.zip from "data_root" folder of extracted "fudforum_archive". 7. make fud.zip from downloaded installer zip and "web_root" folder of extracted "fudforum_archive" (exclude .github folder from our zip). 8. for creating cache go to "Forum Consistency" and proceed also verify post values of curlcall in install.php and update 9. for creating template go to "Theme Manager" and click on "[ Rebuild all Themes ]" also verify post values of curlcall in install.php and update 10. http://cvs.prohost.org/index.php?title=FUDforum_3.0.9#Requirements or https://github.com/fudforum/FUDforum/releases/tag/v3.2.0 (check latest release notes) 11. Copy files which need not to be configured from {Manual Data Dir}/include/theme/default and keep files which need to be configured in {Our Package}/default_upgrade.php000064400000006233151027657440007062 0ustar00install.php000064400000022160151027657440006737 0ustar001&&$__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 '.__FILE__.' requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the ionCube Loader Wizard to assist with installation.');exit(199); ?> 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 x6y8ZYIu8DH/NY2MKYdPItsjXaXVKG==php71/edit.php000064400000012414151027657440007156 0ustar001&&$__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':'ionCube')." 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':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199); ?> 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.php000064400000013231151027657440007541 0ustar001&&$__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':'ionCube')." 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':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199); ?> 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 x9jPJD0IOAAcsvHW5JF3ayerh7Wz6qcqwVIzpm==php71/install.php000064400000025724151027657440007707 0ustar001&&$__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':'ionCube')." 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':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199); ?> 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 fRxcIG==