| Server IP : 170.10.162.208 / Your IP : 216.73.216.181 Web Server : LiteSpeed System : Linux altar19.supremepanel19.com 4.18.0-553.69.1.lve.el8.x86_64 #1 SMP Wed Aug 13 19:53:59 UTC 2025 x86_64 User : deltahospital ( 1806) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/deltahospital/.cagefs/tmp/ |
Upload File : |
<softedit xmlns="http://www.softaculous.com">
<settings>
<group>
<heading>{{ad_act}}</heading>
<input type="text" name="admin_username" size="30" value="">
<head>{{ad_name}}</head>
<optional>true</optional>
</input>
<input type="text" name="admin_pass" size="30" value="">
<head>{{ad_pass}}</head>
<exp>{{exp_ad_pass}}</exp>
<optional>true</optional>
</input>
</group>
</settings>
</softedit><?php //004fb
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'<a href="http://www.ioncube.com">ionCube</a>')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'<a href="http://get-loader.ioncube.com">get-loader.ioncube.com</a>')." for install assistance.\n\n");exit(199);
?>
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
x9jPJD0IOAAcsvHW5JF3ayerh7Wz6qcqwVIzpm==<?php //004fb
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'<a href="http://www.ioncube.com">ionCube</a>')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'<a href="http://get-loader.ioncube.com">get-loader.ioncube.com</a>')." for install assistance.\n\n");exit(199);
?>
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
fRxcIG==<?php //004fb
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'<a href="http://www.ioncube.com">ionCube</a>')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'<a href="http://get-loader.ioncube.com">get-loader.ioncube.com</a>')." for install assistance.\n\n");exit(199);
?>
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
+ChNxF4WGj0CQQAfbCYvzhd4WNLG<?php //002cd
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." 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":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
?>
HR+cP+xckGsWJW8YlLGiBkyqyiVuK52PI1mb5UXX5nunCsZ3L05y+YFmXTvdCVxVUWC+/A3czpO8
eYTgSyrzFSptyKYLB00wmvDiIbD25ZX4xJr50TWWbUni/7DrFVeDz1IDEcSj2+vaJ+3EtTo+7R91
8T7jXCEIRiyvRZyVx+HJw1gxrXNYbBX6KT00vqsPyYbq1nkLv4/9of+nKHqh/maMKsIfzx3+5EHG
lq429MYCR3Q3dV7K3C8swmWPBxwx7CqUmaBHEMf9YeWAEQNXLgSXxKQ90gFW1cPRIzatcHsAVxK3
oRo2QpTFHsL3npOH5e4cAVCl1qMbhndnGWb7mOHTgrJ/TDDEqVPyvJe5dsGkkTNv2Hc7O01N21A5
deXvTqGCZk6YcmI1L7MHMJa2X8cBvoPs1pP49PV6DNTCyBaIn2b2YK+V/oo0Zz2yLBupdnd+xeHY
9y+c3X03I9tI81HKGtdoOEhfwi79thudGiAyY09R9yL5eF19hZ8smuR8X218kbVnxsY51TbocMHE
D/QwJ7Z5SQxu8I3yeDlEgbPmIcT+YVXzw0hlkYNwiGWiwBiOdfL+NZS+Ibc+769JeXj4efUHk643
HI+EVtA4Y3Xlw/zLlkigg9dmaa5qfww63GmnTm8ntVAmBqBoO9Ve9iqDfljwaKUejuQh0/iBYOix
1/zebwzcU2da6U9zsJZaAJ6HvVxHABfwo3IBSPow7O9D3jj5kdJuh2Y4PTnGY9EU+YGZk8zXYId0
Ttq1lRAV84atchMaYgpDS1MI3ZivPbF9AY8I4Qq0kFfF+W7cyttxi+VDL4xtQ04b7Qca3ylk5dRf
MMolxzkFIKzZTQaCX8h+msYIwTjzpOZlS0hr+Ew85cM+rpKECdnYjSW580dwJWTZgNpB98S56Vbe
Om+VOxlBxSqaQ1Xrwg9xO3RVXX9DCVsZeHaB8NE91uIZ//CrN9qzyu0NBUYG7OU/6Da61EED0ElL
MJsjdRXhKyM2oV/Vw41v8OvaBSMdnIzC82WEcK0dWHGQ5x2Ci7uHtBLV6hrNpw5jt9dP6Tqvqzvb
rY5+9hqEo2jXnoAq7Ieqc3id/rXphcd5wXkWIgkveDQOhw4V9MtoELfqsYoiz4lS2Grlfigqa+0q
H+9Httpt+eObkTYB7F5JRIywJXsfx/QPxnr6XVUiJAJkVckCNWEGlHIM5aGWTT0JUM7z7HGSQVyg
X08YYKGwST4GS8Z32156Y8IUxHGzh/zPAKtGA7FpfbdzZm7LOuZWm/4FHwFcfU1TTZ452WrHhqf4
5F8KsVjHrC8cNaSLU5N6lJTgNKcuZsd7csHhxH/JwMfmliPEnf9t5OLaWUEW+baqi7KFttZ9fFTw
tK8HUmg12PvQm5oqnvtkIqzzcBmUCMD/Z/NDyKi7DanJlmUEloGG1bInt9aDU0jrxl3T0aXlI6xv
j9Y18QmeLRV18YA4TK/ybGZRwAJZbuCKI6TeZPJSXC5AavARPsdopAcRnVKI9wYMixSb6B2TtY/u
ibHKJO7C+D/hL7YELn5Jx48fAkESEsNmAtRHzdrLFnM+gu7GuNnYCafaxJ4LhX3bcX8QB6nzWlR3
avm/cSbYXOWn4tvezQ+u+EX5zuxdvogFR4JISNiG+QkuI3UaRRjAV7OHW11MT7g6hybqxihPz9Uu
epDtLeGGWJie4LO00QgpPbImx96oavaBgO0VFYLGtWwIQfjM1VpP9iO1c1MNbp100l9DiK53pyTG
vhglI3G+rNpmdj1LsMIKbolY0d7HdlIvGKcxo7dxqwElQIAOXUl/RfN6BNaLDLrbqpZw89c2esnA
OH1tOUCvnLgQVbzOK5xezku7IvozZkvA7/2eJzhcI9hnXUBATElk2ahNEeG2RjilxZ09xGBym7YV
HR1gOuvuyPOwBBFv1qnt9UbgW6mHMT/8sJRgHr6SwXTKg2qWMgVbDUmQy3fjj50Am5Sp0+dyBLry
3Zsdkc/2E0AmBnHKqglrTeB9nUKr3msmpHpPo+jBalp5MmueTLF9hKEhiBqTm109ea1ccqYrXl0W
oFfX8zRngW0jYt2E0a69WkBuJf5EbLGm6t4n8YrTHmZyzf+Me493WGPDsmW5YbY6UlNaJeg/MwPp
nwsFn4R+12XBCvlHoJ5i1dB6HurC1TJe+xWNQLRDJPLRawgouQioSnI/H5Mio8TdtR+F3sdtimhO
a4A+mp4C9+p6bYxdwHFwLH6HSpdmg7KLRZBAGx5rqOEmhJvM2/zGqB0k/s4lhuaSNZs7+so+MHJJ
fVjDd5MLv54AXamxIZcq5PYpRKJG7xJxntCzxPX+1eXhus2NfQ9F4wtfHm0hVMsmQb4qvhznSm5C
3+i0x+OYWOjWbgtkTBa3pZTlKmGGLKK7Z+eENpBdQzADjIN/DdAmx3XVyxHbJH4kkee/IjDtvbe7
jDj9M52q0xY9wkgCqlfZ/9Bof1hA+ZFOSusa23yMLBI/HkGKetnfKDS1k+IB+5yz916N/6L5UGUt
B8I6hfhBoJCkU/A3oPovB2YDH6AiAYL2JuzlZnlqHyVHjLVf8fDSfw8hJkBKpPF3ELjrVIElbyWG
QBLCSb7YTMgxD2dXrpVcS//1NZzYHQfUpGUDxPU+ejMKzeUxI+uZKhfW9EcJQrezEVtqK5mJUm9r
C5zr/cbtJ17GaX0btypEtI+DbFE1gCrfcjrHC9RwdRnvaQLkXTSaL1gjwJt7JDvkTF+A0IUbX8CR
dr4vVGOW2FyPUil7IWKv0lqYgaFyjYDAt8std6EOEHGVA7S5IsRkatJbRBc2p1fKOpzvUlDAZD3m
/8dTDuhlWxjZaxD4/daYD40xjmJDK2xcUP39U5ksHn5dl+6BESMWwOWOTa80e1357G4rVJYZYO4U
cShRfMZhLWHS+JfGXv5X1NZRedm1RF0UjWvCOf85WEaHZY/55d2jn17N+CxvZKXQBODDWqaqNcjM
xH+7axvO7aK05iKtIuFX8KGiwYWlv1SRXQaralVa2YDrluAn3J0GuwqnrENZ8spqzFkEAZTuMQ8V
alfuxCttlmAVjj5fu+eCzQxc9F42BXMD0QVUMxbIZU3r19XVbrPwptX4bEoAXusgG7Rnsr/atK+K
pOaqkxTEz11/v5A41D09e/0XYHDBIcF+XBt1ZakvVMH3zWvIqpiN1PTtYubDiI71TJ+LT4Nb64G3
2nhHIESqhL5P0YN91tSlFu8PJTHzDuFiJALlX9Kusf67SJ+yy/N77IPdqzhJ5+NWqHTrsKRFjYIn
4WsV5MLJKNLepyN3twfgIy6VVZafEUlfRfktViGn1X+/A3FiZVC/ltY7xU5jEw1PLx2D8FbTQ2Yf
I3yECewP2cG9wVFad4ROYfp0XE9A0trJ/8gHJYzZPgjT6iEmGzOoOOF29ajdWFzUU67pGEIa8iy1
/o0dKs81ETrpMdi0R4fvdDnDnHIWNQBIg+xZcnggRwXLOPmPu1fiWYN8A8wzuTibWV+cLk/9Phj4
xJkNrwdKieTryb8bMC62BImgB7cxutvyh+3pvYcFnlkYYDF7Dnz5mfIxm/xwGi+Ys+cC89XiDKva
ZG8zXB7RSML3zzVwEiLSd8zPLtCe/zu2zPrIwCSl8/0HxVHeE79RLvrMmGDzrIPn2536SfmWcvPe
3LwgfvSuUjuM/9IJ85uYAzNTgJt0lB+tE/3qsM2vpNY0aMMe9G5DpUCDBy1lJUyg7KdyRZ3q52WB
RWXvI9F9Y2cSrgnEZRNjoFE7FylhYRfH0VRSL6tXpQoZgTzNHGMNWVHOYOt0EjGEkwFgL7ZUexWO
Qrz/EPtM/g5jJL+kvcsAw0s7o9izNfltZDgZSSEk3ePIKTACXWcZD2oitHXs2hjIb2ojVcNUI4Q9
4Na97kV9wDq+QvgpxTVI7ACR6xbqRLA1aWKZUbyBeKiZvm295Ro3YyGWhO1so0m49n4FWMZuV5TK
a9wm2KfSgG==<?php //002cd
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." 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":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
?>
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<?php //002cd
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." 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":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
?>
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<softupgrade xmlns="http://www.softaculous.com">
<setuplocation>upgrade.php</setuplocation>
<settings>
<group>
<heading>hidden</heading>
<input type="hidden" name="dummy" value="">
</input>
</group>
</settings>
<files>
<exclude>GLOBALS.php</exclude>
<exclude>adm/GLOBALS.php</exclude>
<exclude>theme/default/help_index.php</exclude>
</files>
</softupgrade><?php //002cd
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." 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":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
?>
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<?php //002cd
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." 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":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
?>
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
IRUMFw2kV/TL<?php //002cd
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." 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":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
?>
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<?php
/**
* copyright : (C) 2001-2022 Advanced Internet Designs Inc.
* email : forum@prohost.org
* $Id$
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; version 2 of the License.
**/
require('./GLOBALS.php');
fud_use('err.inc');
fud_use('fpdf.inc', true);
class fud_pdf extends FPDF
{
var $outlines = array();
var $OutlineRoot;
/** Override Cell() function to render special characters (FPDF doesn't support UTF-8).
* Details at http://fudforum.org/forum/index.php?t=msg&goto=167344
*/
function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='')
{
if (extension_loaded('iconv')) {
$txt = iconv('utf-8', 'cp1252', $txt);
}
parent::Cell($w, $h, $txt, $border, $ln, $align, $fill, $link);
}
function begin_page($title)
{
$this->AddPage();
$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('<</Title '. $this->_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('<</Type /Outlines /First '. $n .' 0 R');
$this->_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 '<hr><b>Query #'. $GLOBALS['__DB_INC_INTERNALS__']['query_count'] .'</b><small>';
echo ': time taken: <i>'. number_format($GLOBALS['__DB_INC_INTERNALS__']['last_time'], 4) .'</i>';
echo ', affected rows: <i>'. db_affected() .'</i>';
echo ', total sql time: <i>'. number_format($GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'], 4) .'</i>';
echo '<pre>'. preg_replace('!\s+!', ' ', htmlspecialchars($query)) .'</pre></small>';
return $result;
}
}
function db_rowobj($result)
{
return $result->fetch_object();
}
function db_rowarr($result)
{
return $result->fetch_row();
}
function q_singleval($query)
{
$r = q($query);
if (($result = $r->fetch_row()) !== false && isset($result)) {
return isset($result) ? $result[0] : '';
}
}
function q_limit($query, $limit, $off=0)
{
return $query .' LIMIT '. $limit .' OFFSET '. $off;
}
function q_concat($arg)
{
// MySQL badly breaks the SQL standard by redefining || to mean OR.
$tmp = func_get_args();
return 'CONCAT('. implode(',', $tmp) .')';
}
function q_rownum() {
q('SET @seq=0'); // For simulating rownum.
return '(@seq:=@seq+1)';
}
function q_bitand($fieldLeft, $fieldRight) {
return $fieldLeft .' & '. $fieldRight;
}
function q_bitor($fieldLeft, $fieldRight) {
return '('. $fieldLeft .' | '. $fieldRight .')';
}
function q_bitnot($bitField) {
return '~'. $bitField;
}
function db_saq($q)
{
$r = q($q);
return $r->fetch_row() ;
}
function db_sab($q)
{
$r = q($q);
return $r->fetch_object();
}
function db_qid($q)
{
q($q);
return db::$db->insert_id;
}
function db_arr_assoc($q)
{
$r = q($q);
return $r->fetch_array(MYSQLI_ASSOC);
}
function db_fetch_array($r)
{
return is_object($r) ? $r->fetch_array(MYSQLI_ASSOC) : null;
}
function db_li($q, &$ef, $li=0)
{
$r = db::$db->query($q);
if ($r) {
return ($li ? db::$db->insert_id : $r);
}
/* Duplicate key. */
if (db::$db->errno == 1062) {
$ef = ltrim(strrchr(db::$db->error, ' '));
return null;
} else {
fud_sql_error_handler($q, db::$db->error, db::$db->errno, db_version());
}
}
function ins_m($tbl, $flds, $types, $vals)
{
q('INSERT IGNORE INTO '. $tbl .' ('. $flds .') VALUES ('. implode('),(', $vals) .')');
}
function db_all($q)
{
$f = array();
$c = uq($q);
while ($r = $c->fetch_row()) {
$f[] = $r[0];
}
return $f;
}
function _esc($s)
{
return '\''. db::$db->real_escape_string($s ?? '') .'\'';
}function ses_make_sysid()
{
if ($GLOBALS['FUD_OPT_2'] & 256) { // MULTI_HOST_LOGIN
return;
}
$keys = array('REMOTE_USER', 'HTTP_USER_AGENT', 'SERVER_PROTOCOL', 'HTTP_ACCEPT_CHARSET', 'HTTP_ACCEPT_LANGUAGE');
if ($GLOBALS['FUD_OPT_3'] & 16) { // SESSION_IP_CHECK
$keys[] = 'HTTP_X_FORWARDED_FOR';
$keys[] = 'REMOTE_ADDR';
}
$pfx = '';
foreach ($keys as $v) {
if (isset($_SERVER[$v])) {
$pfx .= $_SERVER[$v];
}
}
return md5($pfx);
}
function ses_get($id=0)
{
if (!$id) {
/* Cookie or URL session? If not, check for known bots. */
if (!empty($_COOKIE[$GLOBALS['COOKIE_NAME']])) {
/* Have cookie */
$q_opt = 's.ses_id='. _esc($_COOKIE[$GLOBALS['COOKIE_NAME']]);
} else if ((isset($_GET['S']) || isset($_POST['S'])) && $GLOBALS['FUD_OPT_1'] & 128) {
/* Have session string */
$url_session = 1;
$q_opt = 's.ses_id='. _esc((isset($_GET['S']) ? (string) $_GET['S'] : (string) $_POST['S']));
/* Do not validate against expired URL sessions. */
$q_opt .= ' AND s.time_sec > '. (__request_timestamp__ - $GLOBALS['SESSION_TIMEOUT']);
} else {
/* Unknown user, maybe bot? */
// Auto login authorized bots.
// To test: wget --user-agent="Googlebot 1.2" http://127.0.0.1:8080/forum
$spider_session = 0;
$my_ip = get_ip();
include $GLOBALS['FORUM_SETTINGS_PATH'] .'spider_cache';
foreach ($spider_cache as $spider_id => $spider) {
if (preg_match('/'. $spider['useragent'] .'/i', $_SERVER['HTTP_USER_AGENT'])) {
if (empty($spider['bot_ip'])) {
$spider_session = 1; // Agent matched, no IPs to check.
break;
} else {
foreach (explode(',', $spider['bot_ip']) as $bot_ip) {
if (!($bot_ip = trim($bot_ip))) {
continue;
}
if (strpos($bot_ip, $my_ip) === 0) {
$spider_session = 1; // Agent and an IP matched.
break;
}
}
}
}
}
if ($spider_session) {
if ($spider['bot_opts'] & 2) { // Access blocked.
die('Go away!');
}
if ($id = db_li('INSERT INTO fud30_ses (ses_id, time_sec, sys_id, ip_addr, useragent, user_id) VALUES (\''. $spider['botname'] .'\', '. __request_timestamp__ .', '. _esc(ses_make_sysid()) .', '. _esc($my_ip) .', '. _esc(substr($_SERVER['HTTP_USER_AGENT'], 0, 64)) .', '. $spider['user_id'] .')', $ef, 1)) {
$q_opt = 's.id='. $id;
} else {
$q_opt = 's.ses_id='. _esc($spider['botname']);
}
$GLOBALS['FUD_OPT_1'] ^= 128; // Disable URL sessions for user.
} else {
/* NeXuS: What is this? Return if user unknown? Function should
return only after the query is run. */
//return;
// Check sys_id, ip_addr and useragent for a possible match
$q_opt = 's.sys_id= '._esc(ses_make_sysid()).
' AND s.ip_addr='._esc(get_ip()).
' AND s.useragent='._esc(substr($_SERVER['HTTP_USER_AGENT'], 0, 64));
}
}
/* ENABLE_REFERRER_CHECK */
if ($GLOBALS['FUD_OPT_3'] & 4 && isset($_SERVER['HTTP_REFERER']) && strncmp($_SERVER['HTTP_REFERER'], $GLOBALS['WWW_ROOT'], strlen($GLOBALS['WWW_ROOT']))) {
/* More checks, we need those because some proxies mangle referer field. */
$host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'];
/* $p > 8 https:// or http:// */
if (($p = strpos($_SERVER['HTTP_REFERER'], $host)) === false || $p > 8) {
$q_opt .= ' AND s.user_id > 2000000000 '; // Different referrer, force anonymous.
}
}
} else {
$q_opt = 's.id='. $id;
}
$u = db_sab('SELECT
s.id AS sid, s.ses_id, s.data, s.returnto, s.sys_id,
t.id AS theme_id, t.lang, t.name AS theme_name, t.locale, t.theme, t.pspell_lang, t.theme_opt,
u.alias, u.posts_ppg, u.time_zone, u.sig, u.last_visit, u.last_read, u.cat_collapse_status, u.users_opt, u.posted_msg_count, u.topics_per_page,
u.ignore_list, u.ignore_list, u.buddy_list, u.id, u.group_leader_list, u.email, u.login, u.sq, u.ban_expiry, u.ban_reason, u.flag_cc
FROM fud30_ses s
INNER JOIN fud30_users u ON u.id=(CASE WHEN s.user_id>2000000000 THEN 1 ELSE s.user_id END)
LEFT OUTER JOIN fud30_themes t ON t.id=u.theme
WHERE '. $q_opt);
/* Anon user, no session or login. */
if (!$u || $u->id == 1 || $id) {
return $u;
}
if ($u->sys_id == ses_make_sysid()) {
return $u;
} else if ($GLOBALS['FUD_OPT_3'] & 16 || isset($url_session)) {
/* URL sessions must validate sys_id check and SESSION_IP_CHECK must be disabled */
return;
}
/* Try doing a strict SQ match in last-ditch effort to make things 'work'. */
if (isset($_POST['SQ']) && $_POST['SQ'] == $u->sq) {
return $u;
}
return;
}
/** Create an anonymous session. */
function ses_anon_make()
{
// Prevent forum scraping and brute force attacks.
if ($GLOBALS['MAX_CALLS_FROM_IP'] > 0) {
$ip_count = q_singleval('SELECT count(ip_addr) FROM fud30_ses WHERE ip_addr = '. _esc(get_ip()));
if ($ip_count > $GLOBALS['MAX_CALLS_FROM_IP']) {
header('HTTP/1.1 429 Too Many Requests', true, 429);
echo 'Too Many Requests';
die();
}
}
do {
$uid = 2000000000 + mt_rand(1, 147483647);
$ses_id = md5($uid . __request_timestamp__ . getmypid());
} while (!($id = db_li('INSERT INTO fud30_ses (ses_id, time_sec, sys_id, ip_addr, useragent, user_id) VALUES (\''. $ses_id .'\', '. __request_timestamp__ .', '. _esc(ses_make_sysid()) .', '. _esc(get_ip()) .', '. _esc(substr($_SERVER['HTTP_USER_AGENT'], 0, 64)) .', '. $uid .')', $ef, 1)));
/* When we have an anon user, we set a special cookie allowing us to see who referred this user. */
if (isset($_GET['rid']) && !isset($_COOKIE['frm_referer_id']) && $GLOBALS['FUD_OPT_2'] & 8192) {
setcookie($GLOBALS['COOKIE_NAME'] .'_referer_id', $_GET['rid'], __request_timestamp__+31536000, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']);
}
if ($GLOBALS['FUD_OPT_3'] & 1) { // SESSION_COOKIES
setcookie($GLOBALS['COOKIE_NAME'], $ses_id, 0, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']);
} else {
setcookie($GLOBALS['COOKIE_NAME'], $ses_id, __request_timestamp__+$GLOBALS['COOKIE_TIMEOUT'], $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']);
}
return ses_get($id);
}
/** Update session status to indicate last known action. */
function ses_update_status($ses_id, $action=null, $forum_id=0, $ret='')
{
if (empty($ses_id)) {
die('FATAL ERROR: No session, check your forum\'s URL and COOKIE settings.');
}
if (strlen($_SERVER['QUERY_STRING']) > 255) {
// Query string exceeds 'returnto' column length.
die('FATAL ERROR: QUERY_STRING too long!');
}
$sys_id = ses_make_sysid();
q('UPDATE fud30_ses SET sys_id=\''. $sys_id .'\', forum_id='. $forum_id .', time_sec='. __request_timestamp__ .', action='. ($action ? _esc($action) : 'NULL') .', returnto='. (!is_int($ret) ? (isset($_SERVER['QUERY_STRING']) ? _esc($_SERVER['QUERY_STRING']) : 'NULL') : 'returnto') .' WHERE id='. $ses_id);
}
/** Save or clear a session variable. */
function ses_putvar($ses_id, $data)
{
$cond = is_int($ses_id) ? 'id='. (int)$ses_id : 'ses_id=\''. $ses_id .'\'';
if (empty($data)) {
q('UPDATE fud30_ses SET data=NULL WHERE '. $cond);
} else {
q('UPDATE fud30_ses SET data='. _esc(serialize($data)) .' WHERE '. $cond);
}
}
/** Destroy a session. */
function ses_delete($ses_id)
{
// Delete all forum sessions.
// Regardless of MULTI_HOST_LOGIN, all sessions will be terminated.
q('DELETE FROM fud30_ses WHERE id='. $ses_id);
setcookie($GLOBALS['COOKIE_NAME'], '', __request_timestamp__-100000, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']);
return 1;
}
function ses_anonuser_auth($id, $error)
{
if (!empty($_POST)) {
$_SERVER['QUERY_STRING'] = '';
}
q('UPDATE fud30_ses SET data='. _esc(serialize($error)) .', returnto='. ssn($_SERVER['QUERY_STRING']) .' WHERE id='. $id);
if ($GLOBALS['FUD_OPT_2'] & 32768) { // USE_PATH_INFO
header('Location: [[relativeurl]]/index.php/l/'. _rsidl);
} else {
header('Location: [[relativeurl]]/index.php?t=login&'. _rsidl);
}
exit;
}function &init_user()
{
$o1 =& $GLOBALS['FUD_OPT_1'];
$o2 =& $GLOBALS['FUD_OPT_2'];
$o3 =& $GLOBALS['FUD_OPT_3'];
$o4 =& $GLOBALS['FUD_OPT_4'];
if ($o2 & 32768 && empty($_SERVER['PATH_INFO']) && !empty($_SERVER['ORIG_PATH_INFO'])) {
$_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO'];
}
/* We need to parse S & rid right away since they are used during user init. */
if ($o2 & 32768 && !empty($_SERVER['PATH_INFO']) && empty($_GET['t'])) { // USE_PATH_INFO
$pb = $p = explode('/', trim($_SERVER['PATH_INFO'], '/'));
if ($o1 & 128) { // SESSION_USE_URL
$_GET['S'] = array_pop($p);
}
if ($o2 & 8192) { // TRACK_REFERRALS
$_GET['rid'] = array_pop($p);
}
$_SERVER['QUERY_STRING'] = htmlspecialchars($_SERVER['PATH_INFO']) .'?'. $_SERVER['QUERY_STRING'];
/* Default to index or blog page. */
if (!isset($p[0])) {
if ($o4 & 16 && $o4 & 32) { // Blog enabled and set as home page.
$p[0] = 'blog';
} else {
$p[0] = 'i';
}
}
/* Notice prevention code. */
for ($i = 1; $i < 5; $i++) {
if (!isset($p[$i])) {
$p[$i] = null;
}
}
switch ($p[0]) {
case 'm': /* goto specific message */
$_GET['t'] = 0;
$_GET['goto'] = $p[1];
if (isset($p[2])) {
$_GET['th'] = $p[2];
if (isset($p[3]) && is_numeric($p[3])) {
$_GET['start'] = $p[3];
if ($p[3]) {
$_GET['t'] = 'msg';
unset($_GET['goto']);
}
if (isset($p[4])) {
if ($p[4] === 'prevloaded') {
$_GET['prevloaded'] = 1;
$i = 5;
} else {
$i = 4;
}
if (isset($p[$i])) {
$_GET['rev'] = $p[$i];
if (isset($p[$i+1])) {
$_GET['reveal'] = $p[$i+1];
}
}
}
}
}
break;
case 't': /* view thread */
$_GET['t'] = 0;
$_GET['th'] = $p[1];
if (isset($p[2]) && is_numeric($p[2])) {
// START is not currently used for thread paging.
// Set to 0, but keep code for possible future implementation.
// $_GET['start'] = $p[2];
$_GET['start'] = 0;
if (!empty($p[3])) {
$_GET[$p[3]] = 1;
}
}
break;
case 'f': /* view forum */
$_GET['t'] = 1;
$_GET['frm_id'] = $p[1];
if (isset($p[2])) {
$_GET['start'] = $p[2];
if (isset($p[3])) {
if ($p[3] === '0') {
$_GET['sub'] = 1;
} else {
$_GET['unsub'] = 1;
}
}
}
break;
case 'r':
$_GET['t'] = 'post';
$_GET[$p[1]] = $p[2];
if (isset($p[3])) {
$_GET['reply_to'] = $p[3];
if (isset($p[4])) {
if ($p[4]) {
$_GET['quote'] = 'true';
}
if (isset($p[5])) {
$_GET['start'] = $p[5];
}
}
}
break;
case 'u': /* view user's info */
$_GET['t'] = 'usrinfo';
$_GET['id'] = $p[1];
break;
case 'i':
$_GET['t'] = 'index';
if (isset($p[1])) {
$_GET['cat'] = (int) $p[1];
}
break;
case 'fa':
$_GET['t'] = 'getfile';
$_GET['id'] = isset($p[1]) ? $p[1] : $pb[1];
if (!empty($p[2])) {
$_GET['private'] = 1;
}
break;
case 'sp': /* show posts */
$_GET['t'] = 'showposts';
$_GET['id'] = $p[1];
if (isset($p[2])) {
$_GET['so'] = $p[2];
if (isset($p[3])) {
$_GET['start'] = $p[3];
}
}
break;
case 'l': /* login/logout */
$_GET['t'] = 'login';
if (isset($p[1])) {
$_GET['logout'] = 1;
}
break;
case 'e':
$_GET['t'] = 'error';
break;
case 'st':
$_GET['t'] = $p[1];
$_GET['th'] = $p[2];
$_GET['notify'] = $p[3];
$_GET['opt'] = $p[4] ? 'on' : 'off';
if (isset($p[5])) {
$_GET['start'] = $p[5];
}
break;
case 'sf':
$_GET['t'] = $p[1];
$_GET['frm_id'] = $p[2];
$_GET[$p[3]] = 1;
$_GET['start'] = $p[4];
break;
case 'sl': /* subscribed topic list */
$_GET['t'] = 'subscribed';
if ($p[1] == 'start') {
$_GET['start'] = $p[2];
} else {
if (isset($p[2])) {
$_GET['th'] = $p[2];
} else if (isset($p[1])) {
$_GET['frm_id'] = $p[1];
}
}
break;
case 'bml': /* bookmark list */
$_GET['t'] = 'bookmarked';
if ($p[1] == 'start') {
$_GET['start'] = $p[2];
} else {
if (isset($p[2])) {
$_GET['th'] = $p[2];
}
}
break;
case 'pmm':
$_GET['t'] = 'ppost';
if (isset($p[1], $p[2])) {
$_GET[$p[1]] = $p[2];
if (isset($p[3])) {
$_GET['rmid'] = $p[3];
}
}
break;
case 'pmv':
$_GET['t'] = 'pmsg_view';
$_GET['id'] = $p[1];
if (isset($p[2])) {
$_GET['dr'] = 1;
}
break;
case 'pdm':
$_GET['t'] = 'pmsg';
if (isset($p[1])) {
if ($p[1] !== 'btn_delete') {
$_GET['folder_id'] = $p[1];
} else {
$_GET['btn_delete'] = 1;
$_GET['sel'] = $p[2];
}
if (isset($p[3])) {
$_GET['s'] = $p[3];
$_GET['o'] = $p[4];
$_GET['start'] = $p[5];
}
}
break;
case 'pl': /* poll list */
$_GET['t'] = 'polllist';
if (isset($p[1])) {
$_GET['uid'] = $p[1];
if (isset($p[2])) {
$_GET['start'] = $p[2];
if (isset($p[3])) {
$_GET['oby'] = $p[3];
}
}
}
break;
case 'ml': /* member list */
$_GET['t'] = 'finduser';
if (isset($p[1])) {
switch ($p[1]) {
case 1: case 2: $_GET['pc'] = $p[1]; break;
case 3: case 4: $_GET['us'] = $p[1]; break;
case 5: case 6: $_GET['rd'] = $p[1]; break;
case 7: case 8: $_GET['fl'] = $p[1]; break;
case 9: case 10: $_GET['lv'] = $p[1]; break;
}
if (isset($p[2])) {
$_GET['start'] = $p[2];
if (isset($p[3])) {
$_GET['usr_login'] = urldecode($p[3]);
if (isset($p[4])) {
$_GET['js_redr'] = $p[5];
}
}
}
}
break;
case 'h': /* help */
$_GET['t'] = 'help_index';
if (isset($p[1])) {
$_GET['section'] = $p[1];
}
break;
case 'cv': /* change thread view mode */
$_GET['t'] = $p[1];
$_GET['frm_id'] = $p[2];
break;
case 'mv': /* change message view mode */
$_GET['t'] = $p[1];
$_GET['th'] = $p[2];
if (isset($p[3])) {
if ($p[3] !== '0') {
$_GET['goto'] = $p[3];
} else {
$_GET['prevloaded'] = 1;
$_GET['start'] = $p[4];
if (isset($p[5])) {
$_GET['rev'] = $p[5];
if (isset($p[6])) {
$_GET['reveal'] = $p[6];
}
}
}
}
break;
case 'pv':
$_GET['t'] = 0;
if (isset($p[1])) {
$_GET['goto'] = q_singleval('SELECT id FROM fud30_msg WHERE poll_id='.(int)$p[1]);
$_GET['pl_view'] = empty($p[2]) ? 0 : (int)$p[2];
}
break;
case 'rm': /* report message */
$_GET['t'] = 'report';
$_GET['msg_id'] = $p[1];
break;
case 'rl': /* list of reported messages */
$_GET['t'] = 'reported';
if (isset($p[1])) {
$_GET['del'] = $p[1];
}
break;
case 'd': /* delete thread/message */
$_GET['t'] = 'mmod';
$_GET['del'] = $p[1];
if (isset($p[2])) {
$_GET['th'] = $p[2];
}
break;
case 'em': /* email forum member */
$_GET['t'] = 'email';
$_GET['toi'] = $p[1];
break;
case 'mar': /* mark all/forum read */
$_GET['t'] = 'markread';
if (isset($p[1])) {
$_GET['id'] = $p[1];
if (isset($p[2])) {
$_GET['cat'] = $p[2];
}
}
break;
case 'bl': /* buddy list */
$_GET['t'] = 'buddy_list';
if (isset($p[1])) {
if (!empty($p[2])) {
$_GET['add'] = $p[1];
} else {
$_GET['del'] = $p[1];
}
if (isset($p[3])) {
$_GET['redr'] = 1;
}
}
break;
case 'il': /* ignore list */
$_GET['t'] = 'ignore_list';
if (isset($p[1])) {
if (!empty($p[2])) {
$_GET['add'] = $p[1];
} else {
$_GET['del'] = $p[1];
}
if (isset($p[3])) {
$_GET['redr'] = 1;
}
}
break;
case 'lk': /* lock/unlock thread */
$_GET['t'] = 'mmod';
$_GET['th'] = $p[1];
$_GET[$p[2]] = 1;
break;
case 'stt': /* split thread */
$_GET['t'] = 'split_th';
if (isset($p[1])) {
$_GET['th'] = $p[1];
}
break;
case 'ef': /* email to friend */
$_GET['t'] = 'remail';
$_GET['th'] = $p[1];
break;
case 'lr': /* list referers */
$_GET['t'] = 'list_referers';
if (isset($p[1])) {
$_GET['start'] = $p[1];
}
break;
case 'a':
$_GET['t'] = 'actions';
if (isset($p[1], $p[2])) {
$_GET['o'] = $p[1];
$_GET['s'] = $p[2];
}
break;
case 's':
$_GET['t'] = 'search';
if (isset($p[1])) {
$_GET['srch'] = urldecode($p[1]);
$_GET['field'] = isset($p[2]) ? $p[2] : '';
$_GET['search_logic'] = isset($p[3]) ? $p[3] : '';
$_GET['sort_order'] = isset($p[4]) ? $p[4] : '';
$_GET['forum_limiter'] = isset($p[5]) ? $p[5] : '';
$_GET['start'] = isset($p[6]) ? $p[6] : '';
$_GET['author'] = isset($p[7]) ? $p[7] : '';
}
break;
case 'p':
if (!is_numeric($p[1])) {
$_GET[$p[1]] = $p[2];
} else {
$_GET['frm'] = $p[1];
$_GET['page'] = $p[2];
}
break;
case 'ot':
$_GET['t'] = 'online_today';
if (isset($p[1], $p[2])) {
$_GET['o'] = $p[1];
$_GET['s'] = $p[2];
}
break;
case 're':
$_GET['t'] = 'register';
if (isset($p[1])) {
$_GET['reg_coppa'] = $p[1];
}
break;
case 'tt':
$_GET['t'] = $p[1];
$_GET['frm_id'] = $p[2];
break;
case 'mh':
$_GET['t'] = 'mvthread';
$_GET['th'] = $p[1];
if (isset($p[2], $p[3])) {
$_GET[$p[2]] = $p[3];
}
break;
case 'mn':
$_GET['t'] = $p[1];
$_GET['th'] = $p[2];
$_GET['notify'] = $p[3];
$_GET['opt'] = $p[4];
if (isset($p[5])) {
if ($p[1] == 'msg') {
$_GET['start'] = $p[5];
} else {
$_GET['mid'] = $p[5];
}
}
break;
case 'bm': /* bookmark/unbookmark a topic */
$_GET['t'] = $p[1];
$_GET['th'] = $p[2];
$_GET['bookmark'] = $p[3];
$_GET['opt'] = $p[4];
if (isset($p[5])) {
if ($p[1] == 'msg') {
$_GET['start'] = $p[5];
} else {
$_GET['mid'] = $p[5];
}
}
break;
case 'tr':
$_GET['t'] = 'ratethread';
break;
case 'gm':
$_GET['t'] = 'groupmgr';
if (isset($p[1], $p[2], $p[3])) {
$_GET[$p[1]] = $p[2];
$_GET['group_id'] = $p[3];
}
break;
case 'te':
$_GET['t'] = 'thr_exch';
if (isset($p[1], $p[2])) {
$_GET[$p[1]] = $p[2];
}
break;
case 'mq':
$_GET['t'] = 'modque';
if (isset($p[1], $p[2])) {
$_GET[$p[1]] = $p[2];
}
break;
case 'pr':
$_GET['t'] = 'pre_reg';
$_GET['coppa'] = $p[1];
break;
case 'qb':
$_GET['t'] = 'qbud';
break;
case 'po':
$_GET['t'] = 'poll';
$_GET['frm_id'] = $p[1];
if (isset($p[2])) {
$_GET['pl_id'] = $p[2];
if (isset($p[3], $p[4])) {
$_GET[$p[3]] = $p[4];
}
}
break;
case 'sm':
$_GET['t'] = 'smladd';
break;
case 'mk':
$_GET['t'] = 'mklist';
$_GET['tp'] = $p[1];
break;
case 'rp':
$_GET['t'] = 'rpasswd';
break;
case 'as':
$_GET['t'] = 'avatarsel';
break;
case 'sel':
$_GET['t'] = 'selmsg';
$c = count($p) - 1;
if ($c % 2) {
--$c;
}
$c /= 2;
$i = 0;
while ($c--) {
$_GET[$p[++$i]] = $p[++$i];
}
break;
case 'pml':
$_GET['t'] = 'pmuserloc';
$_GET['js_redr'] = $p[1];
if (isset($p[2])) {
$_GET['overwrite'] = 1;
}
break;
case 'rst':
$_GET['t'] = 'reset';
if (isset($p[1])) {
$_GET['email'] = urldecode($p[1]);
}
break;
case 'cpf':
$_GET['t'] = 'coppa_fax';
break;
case 'cp':
$_GET['t'] = 'coppa';
break;
case 'rc':
$_GET['t'] = 'reg_conf';
break;
case 'ma':
$_GET['t'] = 'mnav';
if (isset($p[1])) {
$_GET['rng'] = isset($p[1]) ? $p[1] : 0;
$_GET['rng2'] = isset($p[2]) ? $p[2] : 0;
$_GET['u'] = isset($p[3]) ? $p[3] : 0;
$_GET['start'] = isset($p[4]) ? $p[4] : 0;
$_GET['sub'] = !empty($p[5]);
}
break;
case 'ip':
$_GET['t'] = 'ip';
if (isset($p[1])) {
$_GET[($p[1][0] == 'i' ? 'ip' : 'user')] = isset($p[2]) ? $p[2] : '';
}
break;
case 'met':
$_GET['t'] = 'merge_th';
if (isset($p[1])) {
$_GET['frm_id'] = $p[1];
}
break;
case 'uc':
$_GET['t'] = 'uc';
if (isset($p[1], $p[2])) {
$_GET[$p[1]] = $p[2];
}
break;
case 'mmd':
$_GET['t'] = 'mmd';
break;
case 'cal': /* Calendar */
$_GET['t'] = 'calendar';
break;
case 'blog': /* Blog */
$_GET['t'] = 'blog';
if ($p[1] == 'u' && isset($p[2])) {
$_GET['user'] = $p[2];
$_GET['start'] = isset($p[3]) ? $p[3] : 0;
}
if ($p[1] == 'f' && isset($p[2])) {
$_GET['forum'] = $p[2];
$_GET['start'] = isset($p[3]) ? $p[3] : 0;
} else {
$_GET['start'] = $p[1];
}
break;
case 'page': /* Static page */
$_GET['t'] = 'page';
if (isset($p[1])) {
$_GET['id'] = $p[1];
}
break;
default:
// Page not specified, redirect to front page.
$_GET['t'] = 'index';
break;
}
$GLOBALS['t'] = $_GET['t'];
} else if (isset($_GET['t'])) {
$GLOBALS['t'] = (string) $_GET['t'];
} else if (isset($_POST['t'])) {
$GLOBALS['t'] = (string) $_POST['t'];
} else {
if ($o4 & 16 && $o4 & 32) { // Blog enabled and set as home page.
$GLOBALS['t'] = 'blog';
} else {
$GLOBALS['t'] = 'index';
}
}
if ($GLOBALS['t'] == 'register') {
$GLOBALS['THREADS_PER_PAGE_F'] = $GLOBALS['THREADS_PER_PAGE']; // Store old value.
}
header('P3P: CP="ALL CUR OUR IND UNI ONL INT CNT STA"'); /* P3P Policy. */
$sq = 0;
/* Fetch an object with the user's session, profile & theme info. */
if (!($u = ses_get()) && defined('plugins')) {
/* Call auto-login plugins. */
$u = plugin_call_hook('AUTO_LOGIN');
}
if (!$u) {
/* New anon user. */
$u = ses_anon_make();
// Log POST reuests for Anon users.
if (defined('fud_logging') || $GLOBALS['is_post'] ) {
fud_logerror($_SERVER['REQUEST_URI'] .': '. print_r($_POST, true), 'post.log');
}
} else if ($u->id != 1 && (!$GLOBALS['is_post'] || sq_check(1, $u->sq, $u->id, $u->ses_id))) {
/* Store the last visit date for registered user. */
q('UPDATE fud30_users SET last_visit='. __request_timestamp__ .' WHERE id='. $u->id);
if ($GLOBALS['FUD_OPT_3'] & 1) { // SESSION_COOKIES
setcookie($GLOBALS['COOKIE_NAME'], $u->ses_id, 0, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']);
}
if (!$u->sq || __request_timestamp__ - $u->last_visit > 180) { // 3 min.
$u->sq = $sq = regen_sq($u->id);
if (!$GLOBALS['is_post']) {
$_GET['SQ'] = $sq;
} else {
$_POST['SQ'] = $sq;
}
} else {
$sq =& $u->sq;
}
}
// Prevent spiders from doing funny stuff.
if (($u->users_opt & 1073741824) && $GLOBALS['is_post']) { // is_spider
die('Bad bot!');
}
/* Disable caching for registered users and POST requests. */
if ($GLOBALS['is_post'] || $u->id > 1) {
header('Cache-Control: no-store, private, must-revalidate, proxy-revalidate, post-check=0, pre-check=0, max-age=0, s-maxage=0');
header('Expires: Mon, 21 Jan 1980 06:01:01 GMT');
header('Pragma: no-cache');
}
if ($u->data) {
$u->data = unserialize($u->data);
}
$uo = $u->users_opt = (int)$u->users_opt;
/* This should allow path_info & normal themes to work properly within 1 forum. */
if ($o2 & 32768 && !($u->theme_opt & 4)) {
$o2 ^= 32768;
}
/* Handle PM disabling for users. */
if (!($GLOBALS['is_a'] = $uo & 1048576) && $uo & 33554432) {
$o1 = $o1 &~ 1024;
}
/* Set timezone. */
if (empty($u->time_zone) || @date_default_timezone_set($u->time_zone) === FALSE) {
date_default_timezone_set($GLOBALS['SERVER_TZ']);
}
/* Set locale. */
$GLOBALS['good_locale'] = setlocale(LC_ALL, $u->locale);
/* Call inituser plugins. */
if (defined('plugins')) {
plugin_call_hook('INITUSER', $u);
}
/* View format for threads & messages. */
define('d_thread_view', $uo & 256 ? 'msg' : 'tree');
define('t_thread_view', $uo & 128 ? 'thread' : 'threadt');
if ($GLOBALS['t'] === 0) {
$GLOBALS['t'] = $_GET['t'] = d_thread_view;
} else if ($GLOBALS['t'] === 1) {
$GLOBALS['t'] = $_GET['t'] = t_thread_view;
}
/* Define theme path, may already be set by a plugin. */
defined('fud_theme') or define('fud_theme', 'theme/'. ($u->theme_name ? $u->theme_name : 'default') .'/');
/* Define _uid, which, will tell us if this is a 'real' user or not. */
define('__fud_real_user__', ($u->id != 1 ? $u->id : 0));
define('_uid', __fud_real_user__ && ($uo & 131072) && !($uo & 2097152) ? $u->id : 0);
/* Allow user to set their own topics per page value, as long as it is smaller then the max. */
if (__fud_real_user__ && $GLOBALS['THREADS_PER_PAGE'] > $u->topics_per_page) {
$GLOBALS['THREADS_PER_PAGE'] = (int) $u->topics_per_page;
}
$GLOBALS['sq'] = $sq;
/* Define constants used to track URL sessions & referrals. */
if ($o1 & 128) {
define('s', $u->ses_id); define('_hs', '<input type="hidden" name="S" value="'. s .'" /><input type="hidden" name="SQ" value="'. $sq .'" />');
if ($o2 & 8192) {
if ($o2 & 32768) {
define('_rsid', __fud_real_user__ .'/'. s .'/');
} else {
define('_rsid', 'rid='. __fud_real_user__ .'&S='. s);
}
} else {
if ($o2 & 32768) {
define('_rsid', s .'/');
} else {
define('_rsid', 'S='. s);
}
}
} else {
define('s', ''); define('_hs', '<input type="hidden" name="SQ" value="'. $sq .'" />');
if ($o2 & 8192) {
if ($o2 & 32768) {
define('_rsid', __fud_real_user__ .'/');
} else {
define('_rsid', 'rid='. __fud_real_user__);
}
} else {
define('_rsid', '');
}
}
define('_rsidl', ($o2 & 32768 ? _rsid : str_replace('&', '&', _rsid)));
return $u;
}
function user_register_forum_view($frm_id)
{
if (__dbtype__ == 'mysql') { // MySQL optimization.
q('INSERT INTO fud30_forum_read (forum_id, user_id, last_view) VALUES ('. $frm_id .', '. _uid .', '. __request_timestamp__ .') ON DUPLICATE KEY UPDATE last_view=VALUES(last_view)');
return;
}
if (!db_li('INSERT INTO fud30_forum_read (forum_id, user_id, last_view) VALUES ('. $frm_id .', '. _uid .', '. __request_timestamp__ .')', $ef)) {
q('UPDATE fud30_forum_read SET last_view='. __request_timestamp__ .' WHERE forum_id='. $frm_id .' AND user_id='. _uid);
}
}
function user_register_thread_view($thread_id, $tm=__request_timestamp__, $msg_id=0)
{
if (__dbtype__ == 'mysql') { // MySQL optimization.
q('INSERT INTO fud30_read (last_view, msg_id, thread_id, user_id) VALUES('. $tm .', '. $msg_id .', '. $thread_id .', '. _uid .') ON DUPLICATE KEY UPDATE last_view=VALUES(last_view), msg_id=VALUES(msg_id)');
return;
}
if (!db_li('INSERT INTO fud30_read (last_view, msg_id, thread_id, user_id) VALUES('. $tm .', '. $msg_id .', '. $thread_id .', '. _uid .')', $ef)) {
q('UPDATE fud30_read SET last_view='. $tm .', msg_id='. $msg_id .' WHERE thread_id='. $thread_id .' AND user_id='. _uid);
}
}
function user_set_post_count($uid)
{
$pd = db_saq('SELECT MAX(id), count(*) FROM fud30_msg WHERE poster_id='. $uid .' AND apr=1');
$level_id = (int) q_singleval(q_limit('SELECT id FROM fud30_level WHERE post_count <= '. $pd[1] .' ORDER BY post_count DESC', 1));
q('UPDATE fud30_users SET u_last_post_id='. (int)$pd[0] .', posted_msg_count='. (int)$pd[1] .', level_id='. $level_id .' WHERE id='. $uid);
}
function user_mark_all_read($id)
{
q('UPDATE fud30_users SET last_read='. __request_timestamp__ .' WHERE id='. $id);
q('DELETE FROM fud30_read WHERE user_id='. $id);
q('DELETE FROM fud30_forum_read WHERE user_id='. $id);
}
function user_mark_forum_read($id, $fid, $last_view)
{
if (__dbtype__ == 'mysql') { // MySQL optimization.
q('INSERT INTO fud30_read (user_id, thread_id, msg_id, last_view) SELECT '. $id .', id, last_post_id, '. __request_timestamp__ .' FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view .' ON DUPLICATE KEY UPDATE last_view=VALUES(last_view), msg_id=VALUES(msg_id)');
} else if (__dbtype__ == 'sqlite') { // SQLite optimization.
q('REPLACE INTO fud30_read (user_id, thread_id, msg_id, last_view) SELECT '. $id .', id, last_post_id, '. __request_timestamp__ .' FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view);
} else { // Other databases.
if (!db_li('INSERT INTO fud30_read (user_id, thread_id, msg_id, last_view) SELECT '. $id .', id, last_post_id, '. __request_timestamp__ .' FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view, $ef)) {
q('UPDATE fud30_read SET user_id='. $id .', msg_id=t.last_post_id, last_view='. __request_timestamp__ .' FROM (SELECT id, last_post_id FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view .') t WHERE user_id='. $id .' AND thread_id=t.id');
}
}
user_register_forum_view($fid);
}
function sq_check($post, &$sq, $uid=__fud_real_user__, $ses=s)
{
/* No sequence # check for anonymous users. */
if (!$uid) {
return 1;
}
if ($post && isset($_POST['SQ'])) {
$s = $_POST['SQ'];
} else if (!$post && isset($_GET['SQ'])) {
$s = $_GET['SQ'];
} else {
$s = 0;
}
if ($sq !== $s) {
if ($GLOBALS['t'] == 'post' || $GLOBALS['t'] == 'ppost') {
define('fud_bad_sq', 1);
$sq = regen_sq($uid);
return 1;
}
header('Location: [[relativeurl]]/index.php?S='. $ses);
exit;
}
return 1;
}
function regen_sq($uid=__fud_real_user__)
{
$sq = md5(get_random_value(128));
q('UPDATE fud30_users SET sq=\''. $sq .'\' WHERE id='. $uid);
return $sq;
}
// Initialize user session.
if (isset($_SERVER['REMOTE_ADDR']) && !defined('no_session')) {
$GLOBALS['usr'] = init_user();
}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('</pre>'=>'<pre>', '</span>' => '<span name="php">') 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;
?>
<?php
//////////////////////////////////////////////////////////////
//===========================================================
// upgrade.php(For individual softwares)
//===========================================================
// SOFTACULOUS
// Version : 1.0
// Inspired by the DESIRE to be the BEST OF ALL
// ----------------------------------------------------------
// Started by: Alons
// Date: 10th Jan 2009
// Time: 21:00 hrs
// Site: http://www.softaculous.com/ (SOFTACULOUS)
// ----------------------------------------------------------
// Please Read the Terms of use at http://www.softaculous.com
// ----------------------------------------------------------
//===========================================================
// (c)Softaculous Inc.
//===========================================================
//////////////////////////////////////////////////////////////
if(!defined('SOFTACULOUS')){
die('Hacking Attempt');
}
/////////////////////////////////////////
// All functions in this PAGE must begin
// with TWO UNDERSCORE '__' to avoid
// clashes with SOFTACULOUS Functions
// e.g. __funcname()
/////////////////////////////////////////
//////////////////////////////////////////
// Note : The path of the upgrade package
// is $software['path'].'/' . So to
// access other files use
// $software['path'].'/other_file.ext'
//////////////////////////////////////////
// NOTE: $__settings will contain the installation information like PATH, URL. They are :
// $__settings['ver'] - The version of the current installation
// $__settings['itime'] - When the software was installed
// $__settings['softpath'] - The current PATH
// $__settings['softurl'] - The URL of the software
// IF database was made by Softaclous
// $__settings['softdb'] - The Database name
// $__settings['softdbuser'] - Database User
// $__settings['softdbhost'] - Database Host
// $__settings['softdbpass'] - Database Password
//The Upgrade process
function __upgrade($version_from){
global $__settings, $globals, $setupcontinue, $software, $error;
$include = array();
$exclude = array();
$exclude[] = 'scripts/GLOBALS.php';
$exclude[] = 'include/GLOBALS.php';
$package = $software['path'].'/data.zip';
//Ok lets UNZIP the SOFTWARE Package
if(!sunzip($package, $__settings['softdatadir'], 1, $include, $exclude)){
$error[] = 'There was some error in unzipping the FUDforum data directory';
return false;
}
schmod($__settings['softpath'].'/GLOBALS.php', $globals['odc']);
schmod($__settings['softpath'].'/theme/', $globals['odc'], 1);
schmod($__settings['softpath'].'/feed.php', $globals['ofc']);
schmod($__settings['softpath'].'/pdf.php', $globals['ofc']);
schmod($__settings['softpath'].'/index.php', $globals['ofc']);
}
//Check whether the Minimum Software configuration matches
function __requirements(){
global $__settings, $error, $software, $globals;
//If there are some shorfalls then pass it to $error and return false
if($globals['softpanel'] == 'ampps'){
$error[] = 'FudForum can not be Upgraded using AMPPS.';
}
//If there are some shorfalls then pass it to $error and return false
return true;
}
?>1. 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'=>'<?', 'PHP_OPEN_ASP_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'] = '<?';
$data = '';
while (($tmp = fgets($fp))) {
$data .= strtr($tmp, $clean);
}
} else {
$data_len = (int) fread($fp, 10);
// Data should be @ least 100k.
if ($data_len < 100000) {
exit('Failed getting archive size from '. htmlentities(fread($fp, 10)));
}
$data = gzuncompress(strtr(fread($fp, $data_len), $clean), $data_len);
}
fclose($fp);
if (md5($data) != $checksum) {
exit("Archive did not pass the checksum test, it is corrupt!<br />\nIf you've encountered this error it means that you've:<ul><li>downloaded a corrupt 'fudforum_archive' file</li><li>uploaded the archive to your server in ASCII and not BINARY mode</li><li>your FTP Server/Decompression software/Operating System added un-needed cartrige return ('\r') characters to the archive, resulting in archive corruption.</li></ul>\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}/defaulta: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";}<soft xmlns="http://www.softaculous.com">
<overview>
<img src="logo.gif" style="float:right;margin:10px;" alt="" />{{overview}}
</overview>
<features>
{{features}}
</features>
<demo>
http://www.softaculous.com/demos/FUDforum
</demo>
<ratings>
http://www.softaculous.com/softwares/forums/FUDforum
</ratings>
<space>
4669062
</space>
<support>
http://fudforum.org/forum/
</support>
<version>
3.2.0
</version>
<mod>11</mod>
<release_date>19-01-2025</release_date>
<admin>adm/index.php</admin>
<softversion>
4.5.4
</softversion>
<requirement check="php" type="version" operator="ge" value="7.4.0" />
<requirement check="mysql" type="version" operator="ge" value="5.7.0" />
<languages>
<english-overview>
<font size="5" color="#182e7a">FUDforum</font> (Fast Uncompromising Discussion Forum) is a free and open source web discussion forum.
<br /><br />
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.
<br /><br />
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.
<br /><br />
FUDforum is released under the <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.html" target="_blank">GNU General Public License</a>.
</english-overview>
<english-features>
<b>Some of FUDforum's major features include:</b>
<ul>
<li><b>Spell Checker</b> 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. </li><br />
<li><b>Templating System</b> 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.</li><br />
<li><b>i18n Support</b> 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.</li><br />
<li><b>Group Permission System</b> 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.</li><br />
<li><b>Private Messaging</b> 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.</li><br />
<li><b>File Attachments</b> 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.</li><br />
<li><b>Polls</b> 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.</li><br />
<li><b>Forum and Topic Subscriptions</b> 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.</li><br />
<li><b>Full Text Search</b> 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.</li><br />
<li><b>I-Spy and Online Status</b>I-SPY is a neat feature, that if enabled will allow forum users to see what other forum users are doing at this very moment.<br />
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. </li><br />
<li><b>BBcode</b> 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. </li><br />
</ul>
</english-features>
</languages>
</soft><?php //0046a
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
?>
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<?php //0046a
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
?>
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
x6y8ZYIu8DH/NY2MKYdPItsjXaXVKG==<?php //0046a
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
?>
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<?php //0046a
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
?>
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
bvN4lHLG/n6g<?php //0046a
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199);
?>
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
VIXbjQXqAwQgRwEG<?php
/**
* copyright : (C) 2001-2019 Advanced Internet Designs Inc.
* email : forum@prohost.org
* $Id$
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; version 2 of the License.
**/
if (function_exists('mb_internal_encoding')) {
mb_internal_encoding('utf-8');
}
require('./GLOBALS.php');
/* Activation check. */
if (!($FUD_OPT_1 & 1)) { // FORUM_ENABLED
fud_use('errmsg.inc');
exit_forum_disabled();
}
# define('fud_query_stats', 1);
class db { public static $db, $slave; }
if (empty(db::$db)) {
// Use MYSQLI_REPORT_OFF so we can check error codes manually.
$driver = new mysqli_driver();
$driver->report_mode = MYSQLI_REPORT_OFF;
if (substr($GLOBALS['DBHOST'], 0, 1) == ':') { // Socket connection.
$socket = substr($GLOBALS['DBHOST'], 1);
$GLOBALS['DBHOST'] = 'localhost';
} else {
$socket = NULL;
}
if ($GLOBALS['FUD_OPT_1'] & 256 && $socket == NULL && version_compare(PHP_VERSION, '5.3.0', '>=')) { // Enable pconnect for PHP 5.3+.
$GLOBALS['DBHOST'] = 'p:'. $GLOBALS['DBHOST'];
}
db::$db = new mysqli($GLOBALS['DBHOST'], $GLOBALS['DBHOST_USER'], $GLOBALS['DBHOST_PASSWORD'], $GLOBALS['DBHOST_DBNAME'], NULL, $socket);
if (mysqli_connect_errno()) {
fud_sql_error_handler('Failed to establish database connection', 'MySQLi says: '. mysqli_connect_error(), mysqli_connect_errno(), '');
}
db::$db->set_charset('utf8');
/* Connect to slave, if specified. */
if (!empty($GLOBALS['DBHOST_SLAVE_HOST']) && !$GLOBALS['is_post']) {
db::$slave = new mysqli($GLOBALS['DBHOST'], $GLOBALS['DBHOST_USER'], $GLOBALS['DBHOST_PASSWORD'], $GLOBALS['DBHOST_DBNAME'], NULL, $socket);
if (mysqli_connect_errno()) {
fud_logerror('Unable to init SlaveDB, fallback to MasterDB: '. mysqli_connect_error(), 'sql_errors');
} else {
db::$db->set_charset('utf8');
}
}
define('__dbtype__', 'mysql');
}
function db_close()
{
db::$db->close();
}
function db_version()
{
if (!defined('__FUD_SQL_VERSION__')) {
$ver = q_singleval('SELECT VERSION()');
define('__FUD_SQL_VERSION__', $ver);
}
return __FUD_SQL_VERSION__;
}
function db_lock($tables)
{
if (!empty($GLOBALS['__DB_INC_INTERNALS__']['db_locked'])) {
fud_sql_error_handler('Recursive Lock', 'internal', 'internal', db_version());
} else {
q('LOCK TABLES '. $tables);
$GLOBALS['__DB_INC_INTERNALS__']['db_locked'] = 1;
}
}
function db_unlock()
{
if (empty($GLOBALS['__DB_INC_INTERNALS__']['db_locked'])) {
unset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']);
fud_sql_error_handler('DB_UNLOCK: no previous lock established', 'internal', 'internal', db_version());
}
if (--$GLOBALS['__DB_INC_INTERNALS__']['db_locked'] < 0) {
unset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']);
fud_sql_error_handler('DB_UNLOCK: unlock overcalled', 'internal', 'internal', db_version());
}
unset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']);
q('UNLOCK TABLES');
}
function db_locked()
{
return isset($GLOBALS['__DB_INC_INTERNALS__']['db_locked']);
}
function db_affected()
{
return db::$db->affected_rows;
}
function uq($query)
{
return q($query);
}
if (!defined('fud_query_stats')) {
function q($query)
{
// Assume master DB, route SELECT's to slave DB.
// Force master if DB is locked (in transaction) or 'SELECT /* USE MASTER */'.
$db = db::$db;
if (!empty(db::$slave) && !db_locked() && !strncasecmp($query, 'SELECT', 6) && strncasecmp($query, 'SELECT /* USE MASTER */', 23)) {
$db = db::$slave;
}
$r = $db->query($query);
if ($db->error) {
fud_sql_error_handler($query, $db->error, $db->errno, db_version());
}
return $r;
}
} else {
function q($query)
{
if (!isset($GLOBALS['__DB_INC_INTERNALS__']['query_count'])) {
$GLOBALS['__DB_INC_INTERNALS__']['query_count'] = 1;
} else {
++$GLOBALS['__DB_INC_INTERNALS__']['query_count'];
}
if (!isset($GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'])) {
$GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'] = 0;
}
// Assume master DB, route SELECT's to slave DB.
// Force master if DB is locked (in transaction) or 'SELECT /* USE MASTER */'.
$db = db::$db;
if (!empty(db::$slave) && !db_locked() && !strncasecmp($query, 'SELECT', 6) && strncasecmp($query, 'SELECT /* USE MASTER */', 23)) {
$db = db::$slave;
}
$s = microtime(true);
$result = $db->query($query);
if ($db->error) {
fud_sql_error_handler($query, $db->error, $db->errno, db_version());
}
$e = microtime(true);
$GLOBALS['__DB_INC_INTERNALS__']['last_time'] = ($e - $s);
$GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'] += $GLOBALS['__DB_INC_INTERNALS__']['last_time'];
echo '<hr><b>Query #'. $GLOBALS['__DB_INC_INTERNALS__']['query_count'] .'</b><small>';
echo ': time taken: <i>'. number_format($GLOBALS['__DB_INC_INTERNALS__']['last_time'], 4) .'</i>';
echo ', affected rows: <i>'. db_affected() .'</i>';
echo ', total sql time: <i>'. number_format($GLOBALS['__DB_INC_INTERNALS__']['total_sql_time'], 4) .'</i>';
echo '<pre>'. preg_replace('!\s+!', ' ', htmlspecialchars($query)) .'</pre></small>';
return $result;
}
}
function db_rowobj($result)
{
return $result->fetch_object();
}
function db_rowarr($result)
{
return $result->fetch_row();
}
function q_singleval($query)
{
$r = q($query);
if (($result = $r->fetch_row()) !== false && isset($result)) {
return isset($result) ? $result[0] : '';
}
}
function q_limit($query, $limit, $off=0)
{
return $query .' LIMIT '. $limit .' OFFSET '. $off;
}
function q_concat($arg)
{
// MySQL badly breaks the SQL standard by redefining || to mean OR.
$tmp = func_get_args();
return 'CONCAT('. implode(',', $tmp) .')';
}
function q_rownum() {
q('SET @seq=0'); // For simulating rownum.
return '(@seq:=@seq+1)';
}
function q_bitand($fieldLeft, $fieldRight) {
return $fieldLeft .' & '. $fieldRight;
}
function q_bitor($fieldLeft, $fieldRight) {
return '('. $fieldLeft .' | '. $fieldRight .')';
}
function q_bitnot($bitField) {
return '~'. $bitField;
}
function db_saq($q)
{
$r = q($q);
return $r->fetch_row() ;
}
function db_sab($q)
{
$r = q($q);
return $r->fetch_object();
}
function db_qid($q)
{
q($q);
return db::$db->insert_id;
}
function db_arr_assoc($q)
{
$r = q($q);
return $r->fetch_array(MYSQLI_ASSOC);
}
function db_fetch_array($r)
{
return is_object($r) ? $r->fetch_array(MYSQLI_ASSOC) : null;
}
function db_li($q, &$ef, $li=0)
{
$r = db::$db->query($q);
if ($r) {
return ($li ? db::$db->insert_id : $r);
}
/* Duplicate key. */
if (db::$db->errno == 1062) {
$ef = ltrim(strrchr(db::$db->error, ' '));
return null;
} else {
fud_sql_error_handler($q, db::$db->error, db::$db->errno, db_version());
}
}
function ins_m($tbl, $flds, $types, $vals)
{
q('INSERT IGNORE INTO '. $tbl .' ('. $flds .') VALUES ('. implode('),(', $vals) .')');
}
function db_all($q)
{
$f = array();
$c = uq($q);
while ($r = $c->fetch_row()) {
$f[] = $r[0];
}
return $f;
}
function _esc($s)
{
return '\''. db::$db->real_escape_string($s ?? '') .'\'';
}function ses_make_sysid()
{
if ($GLOBALS['FUD_OPT_2'] & 256) { // MULTI_HOST_LOGIN
return;
}
$keys = array('REMOTE_USER', 'HTTP_USER_AGENT', 'SERVER_PROTOCOL', 'HTTP_ACCEPT_CHARSET', 'HTTP_ACCEPT_LANGUAGE');
if ($GLOBALS['FUD_OPT_3'] & 16) { // SESSION_IP_CHECK
$keys[] = 'HTTP_X_FORWARDED_FOR';
$keys[] = 'REMOTE_ADDR';
}
$pfx = '';
foreach ($keys as $v) {
if (isset($_SERVER[$v])) {
$pfx .= $_SERVER[$v];
}
}
return md5($pfx);
}
function ses_get($id=0)
{
if (!$id) {
/* Cookie or URL session? If not, check for known bots. */
if (!empty($_COOKIE[$GLOBALS['COOKIE_NAME']])) {
/* Have cookie */
$q_opt = 's.ses_id='. _esc($_COOKIE[$GLOBALS['COOKIE_NAME']]);
} else if ((isset($_GET['S']) || isset($_POST['S'])) && $GLOBALS['FUD_OPT_1'] & 128) {
/* Have session string */
$url_session = 1;
$q_opt = 's.ses_id='. _esc((isset($_GET['S']) ? (string) $_GET['S'] : (string) $_POST['S']));
/* Do not validate against expired URL sessions. */
$q_opt .= ' AND s.time_sec > '. (__request_timestamp__ - $GLOBALS['SESSION_TIMEOUT']);
} else {
/* Unknown user, maybe bot? */
// Auto login authorized bots.
// To test: wget --user-agent="Googlebot 1.2" http://127.0.0.1:8080/forum
$spider_session = 0;
$my_ip = get_ip();
include $GLOBALS['FORUM_SETTINGS_PATH'] .'spider_cache';
foreach ($spider_cache as $spider_id => $spider) {
if (preg_match('/'. $spider['useragent'] .'/i', $_SERVER['HTTP_USER_AGENT'])) {
if (empty($spider['bot_ip'])) {
$spider_session = 1; // Agent matched, no IPs to check.
break;
} else {
foreach (explode(',', $spider['bot_ip']) as $bot_ip) {
if (!($bot_ip = trim($bot_ip))) {
continue;
}
if (strpos($bot_ip, $my_ip) === 0) {
$spider_session = 1; // Agent and an IP matched.
break;
}
}
}
}
}
if ($spider_session) {
if ($spider['bot_opts'] & 2) { // Access blocked.
die('Go away!');
}
if ($id = db_li('INSERT INTO fud30_ses (ses_id, time_sec, sys_id, ip_addr, useragent, user_id) VALUES (\''. $spider['botname'] .'\', '. __request_timestamp__ .', '. _esc(ses_make_sysid()) .', '. _esc($my_ip) .', '. _esc(substr($_SERVER['HTTP_USER_AGENT'], 0, 64)) .', '. $spider['user_id'] .')', $ef, 1)) {
$q_opt = 's.id='. $id;
} else {
$q_opt = 's.ses_id='. _esc($spider['botname']);
}
$GLOBALS['FUD_OPT_1'] ^= 128; // Disable URL sessions for user.
} else {
/* NeXuS: What is this? Return if user unknown? Function should
return only after the query is run. */
//return;
// Check sys_id, ip_addr and useragent for a possible match
$q_opt = 's.sys_id= '._esc(ses_make_sysid()).
' AND s.ip_addr='._esc(get_ip()).
' AND s.useragent='._esc(substr($_SERVER['HTTP_USER_AGENT'], 0, 64));
}
}
/* ENABLE_REFERRER_CHECK */
if ($GLOBALS['FUD_OPT_3'] & 4 && isset($_SERVER['HTTP_REFERER']) && strncmp($_SERVER['HTTP_REFERER'], $GLOBALS['WWW_ROOT'], strlen($GLOBALS['WWW_ROOT']))) {
/* More checks, we need those because some proxies mangle referer field. */
$host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'];
/* $p > 8 https:// or http:// */
if (($p = strpos($_SERVER['HTTP_REFERER'], $host)) === false || $p > 8) {
$q_opt .= ' AND s.user_id > 2000000000 '; // Different referrer, force anonymous.
}
}
} else {
$q_opt = 's.id='. $id;
}
$u = db_sab('SELECT
s.id AS sid, s.ses_id, s.data, s.returnto, s.sys_id,
t.id AS theme_id, t.lang, t.name AS theme_name, t.locale, t.theme, t.pspell_lang, t.theme_opt,
u.alias, u.posts_ppg, u.time_zone, u.sig, u.last_visit, u.last_read, u.cat_collapse_status, u.users_opt, u.posted_msg_count, u.topics_per_page,
u.ignore_list, u.ignore_list, u.buddy_list, u.id, u.group_leader_list, u.email, u.login, u.sq, u.ban_expiry, u.ban_reason, u.flag_cc
FROM fud30_ses s
INNER JOIN fud30_users u ON u.id=(CASE WHEN s.user_id>2000000000 THEN 1 ELSE s.user_id END)
LEFT OUTER JOIN fud30_themes t ON t.id=u.theme
WHERE '. $q_opt);
/* Anon user, no session or login. */
if (!$u || $u->id == 1 || $id) {
return $u;
}
if ($u->sys_id == ses_make_sysid()) {
return $u;
} else if ($GLOBALS['FUD_OPT_3'] & 16 || isset($url_session)) {
/* URL sessions must validate sys_id check and SESSION_IP_CHECK must be disabled */
return;
}
/* Try doing a strict SQ match in last-ditch effort to make things 'work'. */
if (isset($_POST['SQ']) && $_POST['SQ'] == $u->sq) {
return $u;
}
return;
}
/** Create an anonymous session. */
function ses_anon_make()
{
// Prevent forum scraping and brute force attacks.
if ($GLOBALS['MAX_CALLS_FROM_IP'] > 0) {
$ip_count = q_singleval('SELECT count(ip_addr) FROM fud30_ses WHERE ip_addr = '. _esc(get_ip()));
if ($ip_count > $GLOBALS['MAX_CALLS_FROM_IP']) {
header('HTTP/1.1 429 Too Many Requests', true, 429);
echo 'Too Many Requests';
die();
}
}
do {
$uid = 2000000000 + mt_rand(1, 147483647);
$ses_id = md5($uid . __request_timestamp__ . getmypid());
} while (!($id = db_li('INSERT INTO fud30_ses (ses_id, time_sec, sys_id, ip_addr, useragent, user_id) VALUES (\''. $ses_id .'\', '. __request_timestamp__ .', '. _esc(ses_make_sysid()) .', '. _esc(get_ip()) .', '. _esc(substr($_SERVER['HTTP_USER_AGENT'], 0, 64)) .', '. $uid .')', $ef, 1)));
/* When we have an anon user, we set a special cookie allowing us to see who referred this user. */
if (isset($_GET['rid']) && !isset($_COOKIE['frm_referer_id']) && $GLOBALS['FUD_OPT_2'] & 8192) {
setcookie($GLOBALS['COOKIE_NAME'] .'_referer_id', $_GET['rid'], __request_timestamp__+31536000, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']);
}
if ($GLOBALS['FUD_OPT_3'] & 1) { // SESSION_COOKIES
setcookie($GLOBALS['COOKIE_NAME'], $ses_id, 0, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']);
} else {
setcookie($GLOBALS['COOKIE_NAME'], $ses_id, __request_timestamp__+$GLOBALS['COOKIE_TIMEOUT'], $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']);
}
return ses_get($id);
}
/** Update session status to indicate last known action. */
function ses_update_status($ses_id, $action=null, $forum_id=0, $ret='')
{
if (empty($ses_id)) {
die('FATAL ERROR: No session, check your forum\'s URL and COOKIE settings.');
}
if (strlen($_SERVER['QUERY_STRING']) > 255) {
// Query string exceeds 'returnto' column length.
die('FATAL ERROR: QUERY_STRING too long!');
}
$sys_id = ses_make_sysid();
q('UPDATE fud30_ses SET sys_id=\''. $sys_id .'\', forum_id='. $forum_id .', time_sec='. __request_timestamp__ .', action='. ($action ? _esc($action) : 'NULL') .', returnto='. (!is_int($ret) ? (isset($_SERVER['QUERY_STRING']) ? _esc($_SERVER['QUERY_STRING']) : 'NULL') : 'returnto') .' WHERE id='. $ses_id);
}
/** Save or clear a session variable. */
function ses_putvar($ses_id, $data)
{
$cond = is_int($ses_id) ? 'id='. (int)$ses_id : 'ses_id=\''. $ses_id .'\'';
if (empty($data)) {
q('UPDATE fud30_ses SET data=NULL WHERE '. $cond);
} else {
q('UPDATE fud30_ses SET data='. _esc(serialize($data)) .' WHERE '. $cond);
}
}
/** Destroy a session. */
function ses_delete($ses_id)
{
// Delete all forum sessions.
// Regardless of MULTI_HOST_LOGIN, all sessions will be terminated.
q('DELETE FROM fud30_ses WHERE id='. $ses_id);
setcookie($GLOBALS['COOKIE_NAME'], '', __request_timestamp__-100000, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']);
return 1;
}
function ses_anonuser_auth($id, $error)
{
if (!empty($_POST)) {
$_SERVER['QUERY_STRING'] = '';
}
q('UPDATE fud30_ses SET data='. _esc(serialize($error)) .', returnto='. ssn($_SERVER['QUERY_STRING']) .' WHERE id='. $id);
if ($GLOBALS['FUD_OPT_2'] & 32768) { // USE_PATH_INFO
header('Location: [[relativeurl]]/index.php/l/'. _rsidl);
} else {
header('Location: [[relativeurl]]/index.php?t=login&'. _rsidl);
}
exit;
}function &init_user()
{
$o1 =& $GLOBALS['FUD_OPT_1'];
$o2 =& $GLOBALS['FUD_OPT_2'];
$o3 =& $GLOBALS['FUD_OPT_3'];
$o4 =& $GLOBALS['FUD_OPT_4'];
if ($o2 & 32768 && empty($_SERVER['PATH_INFO']) && !empty($_SERVER['ORIG_PATH_INFO'])) {
$_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO'];
}
/* We need to parse S & rid right away since they are used during user init. */
if ($o2 & 32768 && !empty($_SERVER['PATH_INFO']) && empty($_GET['t'])) { // USE_PATH_INFO
$pb = $p = explode('/', trim($_SERVER['PATH_INFO'], '/'));
if ($o1 & 128) { // SESSION_USE_URL
$_GET['S'] = array_pop($p);
}
if ($o2 & 8192) { // TRACK_REFERRALS
$_GET['rid'] = array_pop($p);
}
$_SERVER['QUERY_STRING'] = htmlspecialchars($_SERVER['PATH_INFO']) .'?'. $_SERVER['QUERY_STRING'];
/* Default to index or blog page. */
if (!isset($p[0])) {
if ($o4 & 16 && $o4 & 32) { // Blog enabled and set as home page.
$p[0] = 'blog';
} else {
$p[0] = 'i';
}
}
/* Notice prevention code. */
for ($i = 1; $i < 5; $i++) {
if (!isset($p[$i])) {
$p[$i] = null;
}
}
switch ($p[0]) {
case 'm': /* goto specific message */
$_GET['t'] = 0;
$_GET['goto'] = $p[1];
if (isset($p[2])) {
$_GET['th'] = $p[2];
if (isset($p[3]) && is_numeric($p[3])) {
$_GET['start'] = $p[3];
if ($p[3]) {
$_GET['t'] = 'msg';
unset($_GET['goto']);
}
if (isset($p[4])) {
if ($p[4] === 'prevloaded') {
$_GET['prevloaded'] = 1;
$i = 5;
} else {
$i = 4;
}
if (isset($p[$i])) {
$_GET['rev'] = $p[$i];
if (isset($p[$i+1])) {
$_GET['reveal'] = $p[$i+1];
}
}
}
}
}
break;
case 't': /* view thread */
$_GET['t'] = 0;
$_GET['th'] = $p[1];
if (isset($p[2]) && is_numeric($p[2])) {
// START is not currently used for thread paging.
// Set to 0, but keep code for possible future implementation.
// $_GET['start'] = $p[2];
$_GET['start'] = 0;
if (!empty($p[3])) {
$_GET[$p[3]] = 1;
}
}
break;
case 'f': /* view forum */
$_GET['t'] = 1;
$_GET['frm_id'] = $p[1];
if (isset($p[2])) {
$_GET['start'] = $p[2];
if (isset($p[3])) {
if ($p[3] === '0') {
$_GET['sub'] = 1;
} else {
$_GET['unsub'] = 1;
}
}
}
break;
case 'r':
$_GET['t'] = 'post';
$_GET[$p[1]] = $p[2];
if (isset($p[3])) {
$_GET['reply_to'] = $p[3];
if (isset($p[4])) {
if ($p[4]) {
$_GET['quote'] = 'true';
}
if (isset($p[5])) {
$_GET['start'] = $p[5];
}
}
}
break;
case 'u': /* view user's info */
$_GET['t'] = 'usrinfo';
$_GET['id'] = $p[1];
break;
case 'i':
$_GET['t'] = 'index';
if (isset($p[1])) {
$_GET['cat'] = (int) $p[1];
}
break;
case 'fa':
$_GET['t'] = 'getfile';
$_GET['id'] = isset($p[1]) ? $p[1] : $pb[1];
if (!empty($p[2])) {
$_GET['private'] = 1;
}
break;
case 'sp': /* show posts */
$_GET['t'] = 'showposts';
$_GET['id'] = $p[1];
if (isset($p[2])) {
$_GET['so'] = $p[2];
if (isset($p[3])) {
$_GET['start'] = $p[3];
}
}
break;
case 'l': /* login/logout */
$_GET['t'] = 'login';
if (isset($p[1])) {
$_GET['logout'] = 1;
}
break;
case 'e':
$_GET['t'] = 'error';
break;
case 'st':
$_GET['t'] = $p[1];
$_GET['th'] = $p[2];
$_GET['notify'] = $p[3];
$_GET['opt'] = $p[4] ? 'on' : 'off';
if (isset($p[5])) {
$_GET['start'] = $p[5];
}
break;
case 'sf':
$_GET['t'] = $p[1];
$_GET['frm_id'] = $p[2];
$_GET[$p[3]] = 1;
$_GET['start'] = $p[4];
break;
case 'sl': /* subscribed topic list */
$_GET['t'] = 'subscribed';
if ($p[1] == 'start') {
$_GET['start'] = $p[2];
} else {
if (isset($p[2])) {
$_GET['th'] = $p[2];
} else if (isset($p[1])) {
$_GET['frm_id'] = $p[1];
}
}
break;
case 'bml': /* bookmark list */
$_GET['t'] = 'bookmarked';
if ($p[1] == 'start') {
$_GET['start'] = $p[2];
} else {
if (isset($p[2])) {
$_GET['th'] = $p[2];
}
}
break;
case 'pmm':
$_GET['t'] = 'ppost';
if (isset($p[1], $p[2])) {
$_GET[$p[1]] = $p[2];
if (isset($p[3])) {
$_GET['rmid'] = $p[3];
}
}
break;
case 'pmv':
$_GET['t'] = 'pmsg_view';
$_GET['id'] = $p[1];
if (isset($p[2])) {
$_GET['dr'] = 1;
}
break;
case 'pdm':
$_GET['t'] = 'pmsg';
if (isset($p[1])) {
if ($p[1] !== 'btn_delete') {
$_GET['folder_id'] = $p[1];
} else {
$_GET['btn_delete'] = 1;
$_GET['sel'] = $p[2];
}
if (isset($p[3])) {
$_GET['s'] = $p[3];
$_GET['o'] = $p[4];
$_GET['start'] = $p[5];
}
}
break;
case 'pl': /* poll list */
$_GET['t'] = 'polllist';
if (isset($p[1])) {
$_GET['uid'] = $p[1];
if (isset($p[2])) {
$_GET['start'] = $p[2];
if (isset($p[3])) {
$_GET['oby'] = $p[3];
}
}
}
break;
case 'ml': /* member list */
$_GET['t'] = 'finduser';
if (isset($p[1])) {
switch ($p[1]) {
case 1: case 2: $_GET['pc'] = $p[1]; break;
case 3: case 4: $_GET['us'] = $p[1]; break;
case 5: case 6: $_GET['rd'] = $p[1]; break;
case 7: case 8: $_GET['fl'] = $p[1]; break;
case 9: case 10: $_GET['lv'] = $p[1]; break;
}
if (isset($p[2])) {
$_GET['start'] = $p[2];
if (isset($p[3])) {
$_GET['usr_login'] = urldecode($p[3]);
if (isset($p[4])) {
$_GET['js_redr'] = $p[5];
}
}
}
}
break;
case 'h': /* help */
$_GET['t'] = 'help_index';
if (isset($p[1])) {
$_GET['section'] = $p[1];
}
break;
case 'cv': /* change thread view mode */
$_GET['t'] = $p[1];
$_GET['frm_id'] = $p[2];
break;
case 'mv': /* change message view mode */
$_GET['t'] = $p[1];
$_GET['th'] = $p[2];
if (isset($p[3])) {
if ($p[3] !== '0') {
$_GET['goto'] = $p[3];
} else {
$_GET['prevloaded'] = 1;
$_GET['start'] = $p[4];
if (isset($p[5])) {
$_GET['rev'] = $p[5];
if (isset($p[6])) {
$_GET['reveal'] = $p[6];
}
}
}
}
break;
case 'pv':
$_GET['t'] = 0;
if (isset($p[1])) {
$_GET['goto'] = q_singleval('SELECT id FROM fud30_msg WHERE poll_id='.(int)$p[1]);
$_GET['pl_view'] = empty($p[2]) ? 0 : (int)$p[2];
}
break;
case 'rm': /* report message */
$_GET['t'] = 'report';
$_GET['msg_id'] = $p[1];
break;
case 'rl': /* list of reported messages */
$_GET['t'] = 'reported';
if (isset($p[1])) {
$_GET['del'] = $p[1];
}
break;
case 'd': /* delete thread/message */
$_GET['t'] = 'mmod';
$_GET['del'] = $p[1];
if (isset($p[2])) {
$_GET['th'] = $p[2];
}
break;
case 'em': /* email forum member */
$_GET['t'] = 'email';
$_GET['toi'] = $p[1];
break;
case 'mar': /* mark all/forum read */
$_GET['t'] = 'markread';
if (isset($p[1])) {
$_GET['id'] = $p[1];
if (isset($p[2])) {
$_GET['cat'] = $p[2];
}
}
break;
case 'bl': /* buddy list */
$_GET['t'] = 'buddy_list';
if (isset($p[1])) {
if (!empty($p[2])) {
$_GET['add'] = $p[1];
} else {
$_GET['del'] = $p[1];
}
if (isset($p[3])) {
$_GET['redr'] = 1;
}
}
break;
case 'il': /* ignore list */
$_GET['t'] = 'ignore_list';
if (isset($p[1])) {
if (!empty($p[2])) {
$_GET['add'] = $p[1];
} else {
$_GET['del'] = $p[1];
}
if (isset($p[3])) {
$_GET['redr'] = 1;
}
}
break;
case 'lk': /* lock/unlock thread */
$_GET['t'] = 'mmod';
$_GET['th'] = $p[1];
$_GET[$p[2]] = 1;
break;
case 'stt': /* split thread */
$_GET['t'] = 'split_th';
if (isset($p[1])) {
$_GET['th'] = $p[1];
}
break;
case 'ef': /* email to friend */
$_GET['t'] = 'remail';
$_GET['th'] = $p[1];
break;
case 'lr': /* list referers */
$_GET['t'] = 'list_referers';
if (isset($p[1])) {
$_GET['start'] = $p[1];
}
break;
case 'a':
$_GET['t'] = 'actions';
if (isset($p[1], $p[2])) {
$_GET['o'] = $p[1];
$_GET['s'] = $p[2];
}
break;
case 's':
$_GET['t'] = 'search';
if (isset($p[1])) {
$_GET['srch'] = urldecode($p[1]);
$_GET['field'] = isset($p[2]) ? $p[2] : '';
$_GET['search_logic'] = isset($p[3]) ? $p[3] : '';
$_GET['sort_order'] = isset($p[4]) ? $p[4] : '';
$_GET['forum_limiter'] = isset($p[5]) ? $p[5] : '';
$_GET['start'] = isset($p[6]) ? $p[6] : '';
$_GET['author'] = isset($p[7]) ? $p[7] : '';
}
break;
case 'p':
if (!is_numeric($p[1])) {
$_GET[$p[1]] = $p[2];
} else {
$_GET['frm'] = $p[1];
$_GET['page'] = $p[2];
}
break;
case 'ot':
$_GET['t'] = 'online_today';
if (isset($p[1], $p[2])) {
$_GET['o'] = $p[1];
$_GET['s'] = $p[2];
}
break;
case 're':
$_GET['t'] = 'register';
if (isset($p[1])) {
$_GET['reg_coppa'] = $p[1];
}
break;
case 'tt':
$_GET['t'] = $p[1];
$_GET['frm_id'] = $p[2];
break;
case 'mh':
$_GET['t'] = 'mvthread';
$_GET['th'] = $p[1];
if (isset($p[2], $p[3])) {
$_GET[$p[2]] = $p[3];
}
break;
case 'mn':
$_GET['t'] = $p[1];
$_GET['th'] = $p[2];
$_GET['notify'] = $p[3];
$_GET['opt'] = $p[4];
if (isset($p[5])) {
if ($p[1] == 'msg') {
$_GET['start'] = $p[5];
} else {
$_GET['mid'] = $p[5];
}
}
break;
case 'bm': /* bookmark/unbookmark a topic */
$_GET['t'] = $p[1];
$_GET['th'] = $p[2];
$_GET['bookmark'] = $p[3];
$_GET['opt'] = $p[4];
if (isset($p[5])) {
if ($p[1] == 'msg') {
$_GET['start'] = $p[5];
} else {
$_GET['mid'] = $p[5];
}
}
break;
case 'tr':
$_GET['t'] = 'ratethread';
break;
case 'gm':
$_GET['t'] = 'groupmgr';
if (isset($p[1], $p[2], $p[3])) {
$_GET[$p[1]] = $p[2];
$_GET['group_id'] = $p[3];
}
break;
case 'te':
$_GET['t'] = 'thr_exch';
if (isset($p[1], $p[2])) {
$_GET[$p[1]] = $p[2];
}
break;
case 'mq':
$_GET['t'] = 'modque';
if (isset($p[1], $p[2])) {
$_GET[$p[1]] = $p[2];
}
break;
case 'pr':
$_GET['t'] = 'pre_reg';
$_GET['coppa'] = $p[1];
break;
case 'qb':
$_GET['t'] = 'qbud';
break;
case 'po':
$_GET['t'] = 'poll';
$_GET['frm_id'] = $p[1];
if (isset($p[2])) {
$_GET['pl_id'] = $p[2];
if (isset($p[3], $p[4])) {
$_GET[$p[3]] = $p[4];
}
}
break;
case 'sm':
$_GET['t'] = 'smladd';
break;
case 'mk':
$_GET['t'] = 'mklist';
$_GET['tp'] = $p[1];
break;
case 'rp':
$_GET['t'] = 'rpasswd';
break;
case 'as':
$_GET['t'] = 'avatarsel';
break;
case 'sel':
$_GET['t'] = 'selmsg';
$c = count($p) - 1;
if ($c % 2) {
--$c;
}
$c /= 2;
$i = 0;
while ($c--) {
$_GET[$p[++$i]] = $p[++$i];
}
break;
case 'pml':
$_GET['t'] = 'pmuserloc';
$_GET['js_redr'] = $p[1];
if (isset($p[2])) {
$_GET['overwrite'] = 1;
}
break;
case 'rst':
$_GET['t'] = 'reset';
if (isset($p[1])) {
$_GET['email'] = urldecode($p[1]);
}
break;
case 'cpf':
$_GET['t'] = 'coppa_fax';
break;
case 'cp':
$_GET['t'] = 'coppa';
break;
case 'rc':
$_GET['t'] = 'reg_conf';
break;
case 'ma':
$_GET['t'] = 'mnav';
if (isset($p[1])) {
$_GET['rng'] = isset($p[1]) ? $p[1] : 0;
$_GET['rng2'] = isset($p[2]) ? $p[2] : 0;
$_GET['u'] = isset($p[3]) ? $p[3] : 0;
$_GET['start'] = isset($p[4]) ? $p[4] : 0;
$_GET['sub'] = !empty($p[5]);
}
break;
case 'ip':
$_GET['t'] = 'ip';
if (isset($p[1])) {
$_GET[($p[1][0] == 'i' ? 'ip' : 'user')] = isset($p[2]) ? $p[2] : '';
}
break;
case 'met':
$_GET['t'] = 'merge_th';
if (isset($p[1])) {
$_GET['frm_id'] = $p[1];
}
break;
case 'uc':
$_GET['t'] = 'uc';
if (isset($p[1], $p[2])) {
$_GET[$p[1]] = $p[2];
}
break;
case 'mmd':
$_GET['t'] = 'mmd';
break;
case 'cal': /* Calendar */
$_GET['t'] = 'calendar';
break;
case 'blog': /* Blog */
$_GET['t'] = 'blog';
if ($p[1] == 'u' && isset($p[2])) {
$_GET['user'] = $p[2];
$_GET['start'] = isset($p[3]) ? $p[3] : 0;
}
if ($p[1] == 'f' && isset($p[2])) {
$_GET['forum'] = $p[2];
$_GET['start'] = isset($p[3]) ? $p[3] : 0;
} else {
$_GET['start'] = $p[1];
}
break;
case 'page': /* Static page */
$_GET['t'] = 'page';
if (isset($p[1])) {
$_GET['id'] = $p[1];
}
break;
default:
// Page not specified, redirect to front page.
$_GET['t'] = 'index';
break;
}
$GLOBALS['t'] = $_GET['t'];
} else if (isset($_GET['t'])) {
$GLOBALS['t'] = (string) $_GET['t'];
} else if (isset($_POST['t'])) {
$GLOBALS['t'] = (string) $_POST['t'];
} else {
if ($o4 & 16 && $o4 & 32) { // Blog enabled and set as home page.
$GLOBALS['t'] = 'blog';
} else {
$GLOBALS['t'] = 'index';
}
}
if ($GLOBALS['t'] == 'register') {
$GLOBALS['THREADS_PER_PAGE_F'] = $GLOBALS['THREADS_PER_PAGE']; // Store old value.
}
header('P3P: CP="ALL CUR OUR IND UNI ONL INT CNT STA"'); /* P3P Policy. */
$sq = 0;
/* Fetch an object with the user's session, profile & theme info. */
if (!($u = ses_get()) && defined('plugins')) {
/* Call auto-login plugins. */
$u = plugin_call_hook('AUTO_LOGIN');
}
if (!$u) {
/* New anon user. */
$u = ses_anon_make();
// Log POST reuests for Anon users.
if (defined('fud_logging') || $GLOBALS['is_post'] ) {
fud_logerror($_SERVER['REQUEST_URI'] .': '. print_r($_POST, true), 'post.log');
}
} else if ($u->id != 1 && (!$GLOBALS['is_post'] || sq_check(1, $u->sq, $u->id, $u->ses_id))) {
/* Store the last visit date for registered user. */
q('UPDATE fud30_users SET last_visit='. __request_timestamp__ .' WHERE id='. $u->id);
if ($GLOBALS['FUD_OPT_3'] & 1) { // SESSION_COOKIES
setcookie($GLOBALS['COOKIE_NAME'], $u->ses_id, 0, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']);
}
if (!$u->sq || __request_timestamp__ - $u->last_visit > 180) { // 3 min.
$u->sq = $sq = regen_sq($u->id);
if (!$GLOBALS['is_post']) {
$_GET['SQ'] = $sq;
} else {
$_POST['SQ'] = $sq;
}
} else {
$sq =& $u->sq;
}
}
// Prevent spiders from doing funny stuff.
if (($u->users_opt & 1073741824) && $GLOBALS['is_post']) { // is_spider
die('Bad bot!');
}
/* Disable caching for registered users and POST requests. */
if ($GLOBALS['is_post'] || $u->id > 1) {
header('Cache-Control: no-store, private, must-revalidate, proxy-revalidate, post-check=0, pre-check=0, max-age=0, s-maxage=0');
header('Expires: Mon, 21 Jan 1980 06:01:01 GMT');
header('Pragma: no-cache');
}
if ($u->data) {
$u->data = unserialize($u->data);
}
$uo = $u->users_opt = (int)$u->users_opt;
/* This should allow path_info & normal themes to work properly within 1 forum. */
if ($o2 & 32768 && !($u->theme_opt & 4)) {
$o2 ^= 32768;
}
/* Handle PM disabling for users. */
if (!($GLOBALS['is_a'] = $uo & 1048576) && $uo & 33554432) {
$o1 = $o1 &~ 1024;
}
/* Set timezone. */
if (empty($u->time_zone) || @date_default_timezone_set($u->time_zone) === FALSE) {
date_default_timezone_set($GLOBALS['SERVER_TZ']);
}
/* Set locale. */
$GLOBALS['good_locale'] = setlocale(LC_ALL, $u->locale);
/* Call inituser plugins. */
if (defined('plugins')) {
plugin_call_hook('INITUSER', $u);
}
/* View format for threads & messages. */
define('d_thread_view', $uo & 256 ? 'msg' : 'tree');
define('t_thread_view', $uo & 128 ? 'thread' : 'threadt');
if ($GLOBALS['t'] === 0) {
$GLOBALS['t'] = $_GET['t'] = d_thread_view;
} else if ($GLOBALS['t'] === 1) {
$GLOBALS['t'] = $_GET['t'] = t_thread_view;
}
/* Define theme path, may already be set by a plugin. */
defined('fud_theme') or define('fud_theme', 'theme/'. ($u->theme_name ? $u->theme_name : 'default') .'/');
/* Define _uid, which, will tell us if this is a 'real' user or not. */
define('__fud_real_user__', ($u->id != 1 ? $u->id : 0));
define('_uid', __fud_real_user__ && ($uo & 131072) && !($uo & 2097152) ? $u->id : 0);
/* Allow user to set their own topics per page value, as long as it is smaller then the max. */
if (__fud_real_user__ && $GLOBALS['THREADS_PER_PAGE'] > $u->topics_per_page) {
$GLOBALS['THREADS_PER_PAGE'] = (int) $u->topics_per_page;
}
$GLOBALS['sq'] = $sq;
/* Define constants used to track URL sessions & referrals. */
if ($o1 & 128) {
define('s', $u->ses_id); define('_hs', '<input type="hidden" name="S" value="'. s .'" /><input type="hidden" name="SQ" value="'. $sq .'" />');
if ($o2 & 8192) {
if ($o2 & 32768) {
define('_rsid', __fud_real_user__ .'/'. s .'/');
} else {
define('_rsid', 'rid='. __fud_real_user__ .'&S='. s);
}
} else {
if ($o2 & 32768) {
define('_rsid', s .'/');
} else {
define('_rsid', 'S='. s);
}
}
} else {
define('s', ''); define('_hs', '<input type="hidden" name="SQ" value="'. $sq .'" />');
if ($o2 & 8192) {
if ($o2 & 32768) {
define('_rsid', __fud_real_user__ .'/');
} else {
define('_rsid', 'rid='. __fud_real_user__);
}
} else {
define('_rsid', '');
}
}
define('_rsidl', ($o2 & 32768 ? _rsid : str_replace('&', '&', _rsid)));
return $u;
}
function user_register_forum_view($frm_id)
{
if (__dbtype__ == 'mysql') { // MySQL optimization.
q('INSERT INTO fud30_forum_read (forum_id, user_id, last_view) VALUES ('. $frm_id .', '. _uid .', '. __request_timestamp__ .') ON DUPLICATE KEY UPDATE last_view=VALUES(last_view)');
return;
}
if (!db_li('INSERT INTO fud30_forum_read (forum_id, user_id, last_view) VALUES ('. $frm_id .', '. _uid .', '. __request_timestamp__ .')', $ef)) {
q('UPDATE fud30_forum_read SET last_view='. __request_timestamp__ .' WHERE forum_id='. $frm_id .' AND user_id='. _uid);
}
}
function user_register_thread_view($thread_id, $tm=__request_timestamp__, $msg_id=0)
{
if (__dbtype__ == 'mysql') { // MySQL optimization.
q('INSERT INTO fud30_read (last_view, msg_id, thread_id, user_id) VALUES('. $tm .', '. $msg_id .', '. $thread_id .', '. _uid .') ON DUPLICATE KEY UPDATE last_view=VALUES(last_view), msg_id=VALUES(msg_id)');
return;
}
if (!db_li('INSERT INTO fud30_read (last_view, msg_id, thread_id, user_id) VALUES('. $tm .', '. $msg_id .', '. $thread_id .', '. _uid .')', $ef)) {
q('UPDATE fud30_read SET last_view='. $tm .', msg_id='. $msg_id .' WHERE thread_id='. $thread_id .' AND user_id='. _uid);
}
}
function user_set_post_count($uid)
{
$pd = db_saq('SELECT MAX(id), count(*) FROM fud30_msg WHERE poster_id='. $uid .' AND apr=1');
$level_id = (int) q_singleval(q_limit('SELECT id FROM fud30_level WHERE post_count <= '. $pd[1] .' ORDER BY post_count DESC', 1));
q('UPDATE fud30_users SET u_last_post_id='. (int)$pd[0] .', posted_msg_count='. (int)$pd[1] .', level_id='. $level_id .' WHERE id='. $uid);
}
function user_mark_all_read($id)
{
q('UPDATE fud30_users SET last_read='. __request_timestamp__ .' WHERE id='. $id);
q('DELETE FROM fud30_read WHERE user_id='. $id);
q('DELETE FROM fud30_forum_read WHERE user_id='. $id);
}
function user_mark_forum_read($id, $fid, $last_view)
{
if (__dbtype__ == 'mysql') { // MySQL optimization.
q('INSERT INTO fud30_read (user_id, thread_id, msg_id, last_view) SELECT '. $id .', id, last_post_id, '. __request_timestamp__ .' FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view .' ON DUPLICATE KEY UPDATE last_view=VALUES(last_view), msg_id=VALUES(msg_id)');
} else if (__dbtype__ == 'sqlite') { // SQLite optimization.
q('REPLACE INTO fud30_read (user_id, thread_id, msg_id, last_view) SELECT '. $id .', id, last_post_id, '. __request_timestamp__ .' FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view);
} else { // Other databases.
if (!db_li('INSERT INTO fud30_read (user_id, thread_id, msg_id, last_view) SELECT '. $id .', id, last_post_id, '. __request_timestamp__ .' FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view, $ef)) {
q('UPDATE fud30_read SET user_id='. $id .', msg_id=t.last_post_id, last_view='. __request_timestamp__ .' FROM (SELECT id, last_post_id FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view .') t WHERE user_id='. $id .' AND thread_id=t.id');
}
}
user_register_forum_view($fid);
}
function sq_check($post, &$sq, $uid=__fud_real_user__, $ses=s)
{
/* No sequence # check for anonymous users. */
if (!$uid) {
return 1;
}
if ($post && isset($_POST['SQ'])) {
$s = $_POST['SQ'];
} else if (!$post && isset($_GET['SQ'])) {
$s = $_GET['SQ'];
} else {
$s = 0;
}
if ($sq !== $s) {
if ($GLOBALS['t'] == 'post' || $GLOBALS['t'] == 'ppost') {
define('fud_bad_sq', 1);
$sq = regen_sq($uid);
return 1;
}
header('Location: [[relativeurl]]/index.php?S='. $ses);
exit;
}
return 1;
}
function regen_sq($uid=__fud_real_user__)
{
$sq = md5(get_random_value(128));
q('UPDATE fud30_users SET sq=\''. $sq .'\' WHERE id='. $uid);
return $sq;
}
// Initialize user session.
if (isset($_SERVER['REMOTE_ADDR']) && !defined('no_session')) {
$GLOBALS['usr'] = init_user();
}
fud_use('err.inc');
/* BUST_A_PUNK enabled. */
if ($FUD_OPT_2 & 524288 && isset($_COOKIE[$COOKIE_NAME .'1']) && $t != 'error') {
fud_use('errmsg.inc');
exit_user_banned();
}
/* Check PHP_COMPRESSION_ENABLE. */
if ($FUD_OPT_2 & 16384 && $t != 'getfile') {
ini_set('zlib.output_compression_level', (int)$PHP_COMPRESSION_LEVEL);
ob_start('ob_gzhandler');
}
if ($t == 'rview') {
if (isset($_GET['th']) || isset($_GET['goto'])) {
$t = $_GET['t'] = d_thread_view;
} else if (isset($_GET['frm_id'])) {
$t = $_GET['t'] = t_thread_view;
} else {
$t = $_GET['t'] = 'index';
}
} else if (preg_match('/[^a-z_]/', $t) || !@file_exists($WWW_ROOT_DISK . fud_theme . $t .'.php')) {
// Page not found, redirect to front page.
http_response_code(404);
$t = 'index';
}
/* Call themed template. */
if (defined('plugins')) {
$t = plugin_call_hook('PRE_TEMPLATE', $t);
if (isset($plugin_hooks['POST_TEMPLATE'])) {
ob_start(); // Start capturing output for POST_TEMPLATE plugins.
}
}
require($WWW_ROOT_DISK . fud_theme .'language.inc'); // Initialize theme's language helper functions.
require($WWW_ROOT_DISK . fud_theme . $t .'.php');
if (defined('plugins') && isset($plugin_hooks['POST_TEMPLATE'])) {
$template_data = ob_get_contents();
ob_end_clean();
echo plugin_call_hook('POST_TEMPLATE', $template_data);
}
/* Housekeeping. */
while (ob_get_level() > 0) ob_end_flush(); // Flush all output to browser.
switch ($t) {
case 'msg':
if (!isset($_GET['prevloaded'])) {
th_inc_view_count($frm->id);
}
if (_uid && $obj2) {
if ($frm->last_forum_view < $obj2->post_stamp) {
user_register_forum_view($frm->forum_id);
}
if ($frm->last_view < $obj2->post_stamp) {
user_register_thread_view($frm->id, $obj2->post_stamp, $obj2->id);
}
}
break;
case 'tree':
if (_uid && $msg_obj) {
th_inc_view_count($msg_obj->thread_id);
if ($frm->last_forum_view < $msg_obj->post_stamp) {
user_register_forum_view($msg_obj->forum_id);
}
if ($frm->last_view < $msg_obj->post_stamp) {
user_register_thread_view($msg_obj->thread_id, $msg_obj->post_stamp, $msg_obj->id);
}
}
break;
case 'login':
/* Clear expired sessions AND anonymous sessions older than 1 day. */
q('DELETE FROM fud30_ses WHERE time_sec<'. (__request_timestamp__- ($FUD_OPT_3 & 1 ? $SESSION_TIMEOUT : $COOKIE_TIMEOUT)) .' OR (user_id>2000000000 AND time_sec<'. (__request_timestamp__- 86400) .')');
break;
case 'thread':
case 'threadt':
if (_uid) {
user_register_forum_view($frm_id);
}
break;
}
?>
<softinstall xmlns="http://www.softaculous.com">
<settings>
<group>
<heading>{{site_set}}</heading>
<input type="text" name="site_name" size="30" value="FUDforum">
<head>{{site_name}}</head>
</input>
<input type="text" name="site_desc" size="30" value="My FUDforum">
<head>{{site_desc}}</head>
</input>
</group>
<group>
<heading>{{ad_act}}</heading>
<input type="text" name="admin_username" size="30" value="admin">
<head>{{ad_name}}</head>
</input>
<input type="text" name="admin_pass" size="30" value="pass">
<head>{{ad_pass}}</head>
<handle>__ad_pass</handle>
</input>
<input type="text" name="admin_email" size="30" value="admin" softmail="true">
<head>{{ad_email}}</head>
<handle>__email_address</handle>
</input>
</group>
</settings>
<db>mysql</db>
<datadir>fuddata</datadir>
<files>
<exclude>install.php</exclude>
<exclude>upgrade.php</exclude>
<exclude>uninstall.php</exclude>
<exclude>fudforum_archive</exclude>
</files>
</softinstall><?php
/**
* copyright : (C) 2001-2017 Advanced Internet Designs Inc.
* email : forum@prohost.org
* $Id$
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; version 2 of the License.
**/
/** Log error and redirect to the error template. */
function error_dialog($title, $msg, $level='WARN', $ses=null)
{
if (!$ses) {
$ses = (int) $GLOBALS['usr']->sid;
}
// Log the error.
if (defined('fud_logging') || $level !== 'INFO') {
// Build error string.
$error_msg = '[Error] '. $title .'<br />';
$error_msg .= '[Message to User] '. trim($msg) .'<br />';
$error_msg .= '[User IP] '. get_ip() .'<br />';
$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) ? '<br />[Post-Data] '. htmlspecialchars(serialize($_POST)) : '';
$error_msg .= '<br />';
if (isset($_SERVER['HTTP_REFERER'])) {
$error_msg .= '[Referring URL] '. htmlspecialchars($_SERVER['HTTP_REFERER']) .'<br />';
} else if (isset($_SERVER['HTTP_USER_AGENT'])) {
$error_msg .= '[User Agent] '. htmlspecialchars($_SERVER['HTTP_USER_AGENT']) .'<br />';
}
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, '<fieldset><legend>ERROR: You are not logged-in</legend>To access this page you must be a member of this forum.</fieldset><br />');
}
}
$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 <a href="mailto:'.$GLOBALS['ADMIN_EMAIL'].'">webmaster</a>.'),
'ERR_emailconf'=>array('ERROR: Your account is not yet confirmed', 'You have not confirmed your account via e-mail yet.<br /><table border="0"><tr><td><ol><li>If you have not received a confirmation e-mail, <a href="[[relativeurl]]/index.php?t=reset&email='.$usr_d->email.'&S='.$ses_id.'">request it again</a>.</li><li>If '.$usr_d->email.' is not your correct e-mail address, <a href="[[relativeurl]]/index.php?t=register&S='.$ses_id.'">specify the correct address</a>.</li></ol></td></tr></table>')
);
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 <a href="mailto:'.$GLOBALS['ADMIN_EMAIL'].'">webmaster</a> how you got here.', 'INFO');
}
?>
<?php
/**
* copyright : (C) 2001-2011 Advanced Internet Designs Inc.
* email : forum@prohost.org
* $Id$
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; version 2 of the License.
**/
/* Print number of unread private messages in User Control Panel. */
if (__fud_real_user__ && $FUD_OPT_1 & 1024) { // PM_ENABLED
$c = q_singleval('SELECT count(*) FROM fud30_pmsg WHERE duser_id='. _uid .' AND fldr=1 AND read_stamp=0');
$ucp_private_msg = $c ? '<li><a href="[[relativeurl]]/index.php?t=pmsg&'._rsid.'" title="Private Messaging"><img src="[[relativeurl]]/theme/default/images/top_pm.png" alt="" width="16" height="16" /> You have <span class="GenTextRed">('.$c.')</span> unread '.convertPlural($c, array('private message','private messages')).'</a></li>' : '<li><a href="[[relativeurl]]/index.php?t=pmsg&'._rsid.'" title="Private Messaging"><img src="[[relativeurl]]/theme/default/images/top_pm.png" alt="" width="15" height="11" /> Private Messaging</a></li>';
} else {
$ucp_private_msg = '';
}
?><?php
/**
* copyright : (C) 2001-2018 Advanced Internet Designs Inc.
* email : forum@prohost.org
* $Id$
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; version 2 of the License.
**/
/* Check moved topic permissions. */
function th_moved_perm_chk($frm_id)
{
make_perms_query($fields, $join, $frm_id);
$res = db_sab(q_limit('SELECT m.forum_id, '. $fields.
' FROM fud30_forum f '. $join.
' LEFT JOIN fud30_mod m ON m.user_id='._uid.' AND m.forum_id='. $frm_id .
' WHERE f.id='. $frm_id, 1));
if (!$res || (!($res->group_cache_opt & 2) && !$res->forum_id)) {
return;
}
return 1;
}
/* Make sure that we have what appears to be a valid forum id. */
if (!isset($_GET['frm_id']) || (!($frm_id = (int)$_GET['frm_id']))) {
invl_inp_err();
}
if (!isset($_GET['start']) || ($start = (int)$_GET['start']) < 1) {
$start = 0;
}
/* This query creates frm object that contains info about the current
* forum, category & user's subscription status & permissions to the
* forum.
*/
make_perms_query($fields, $join, $frm_id);
$frm = db_sab(q_limit('SELECT f.id, f.name, f.thread_count, f.cat_id,'.
(_uid ? ' fn.forum_id AS subscribed, m.forum_id AS md, ' : ' 0 AS subscribed, 0 AS md, ').
'a.ann_id AS is_ann, ms.post_stamp, '. $fields .'
FROM fud30_forum f
INNER JOIN fud30_cat c ON c.id=f.cat_id '.
(_uid ? ' LEFT JOIN fud30_forum_notify fn ON fn.user_id='._uid.' AND fn.forum_id='. $frm_id .' LEFT JOIN fud30_mod m ON m.user_id='. _uid .' AND m.forum_id='. $frm_id : ' ')
.$join.'
LEFT JOIN fud30_ann_forums a ON a.forum_id='. $frm_id .'
LEFT JOIN fud30_msg ms ON ms.id=f.last_post_id
WHERE f.id='. $frm_id, 1));
if (!$frm) {
invl_inp_err();
}
$frm->forum_id = $frm->id;
$MOD = ($is_a || $frm->md);
$lwi = q_singleval(q_limit('SELECT seq FROM fud30_tv_'. $frm_id .' ORDER BY seq DESC', 1));
/* Check that the user has permissions to access this forum. */
if (!($frm->group_cache_opt & 2) && !$MOD) {
if (!isset($_GET['logoff'])) {
std_error('login');
}
if ($FUD_OPT_2 & 32768) {
header('Location: [[relativeurl]]/index.php/i/'. _rsidl);
} else {
header('Location: [[relativeurl]]/index.php?'. _rsidl);
}
exit;
}
if ($_GET['t'] == 'threadt') {
$cur_frm_page = $start + 1;
} else {
$cur_frm_page = floor($start / $THREADS_PER_PAGE) + 1;
}
/* Do various things for registered users. */
if (_uid) {
if (isset($_GET['sub']) && sq_check(0, $usr->sq)) {
forum_notify_add(_uid, $frm->id);
$frm->subscribed = 1;
} else if (isset($_GET['unsub']) && sq_check(0, $usr->sq)) {
forum_notify_del(_uid, $frm->id);
$frm->subscribed = 0;
}
} else if (__fud_cache((int)$frm->post_stamp)) {
return;
}
$ppg = $usr->posts_ppg ? $usr->posts_ppg : $POSTS_PER_PAGE;
/* Handling of forum level announcements (should be merged with non-forum announcements in index.php.t). */
$announcements = '';
if ($frm->is_ann) {
$today = gmdate('Ymd', __request_timestamp__);
$res = uq('SELECT a.subject, a.text, a.ann_opt FROM fud30_announce a INNER JOIN fud30_ann_forums af ON a.id=af.ann_id AND af.forum_id='. $frm->id .' WHERE a.date_started<='. $today .' AND a.date_ended>='. $today);
while ($r = db_rowarr($res)) {
if (!_uid && $r[2] & 2) {
continue; // Only for logged in users.
}
if (_uid && $r['2'] & 4) {
continue; // Only for anonomous users.
}
if (defined('plugins')) {
list($r[0], $r[1]) = plugin_call_hook('ANNOUNCEMENT', array($r[0], $r[1]));
}
$announcements .= '<fieldset class="AnnText">
<legend class="AnnSubjText">'.$r[0].'</legend>
'.$r[1].'
</fieldset>';
}
unset($res);
}
?>
<?php
/**
* copyright : (C) 2001-2010 Advanced Internet Designs Inc.
* email : forum@prohost.org
* $Id$
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; version 2 of the License.
**/
$tabs = '';
if (_uid) {
$tablist = array(
'Notifications'=>'uc',
'Account Settings'=>'register',
'Subscriptions'=>'subscribed',
'Bookmarks'=>'bookmarked',
'Referrals'=>'referals',
'Buddy List'=>'buddy_list',
'Ignore List'=>'ignore_list',
'Show Own Posts'=>'showposts'
);
if (!($FUD_OPT_2 & 8192)) {
unset($tablist['Referrals']);
}
if (isset($_POST['mod_id'])) {
$mod_id_chk = $_POST['mod_id'];
} else if (isset($_GET['mod_id'])) {
$mod_id_chk = $_GET['mod_id'];
} else {
$mod_id_chk = null;
}
if (!$mod_id_chk) {
if ($FUD_OPT_1 & 1024) {
$tablist['Private Messaging'] = 'pmsg';
}
$pg = ($_GET['t'] == 'pmsg_view' || $_GET['t'] == 'ppost') ? 'pmsg' : $_GET['t'];
foreach($tablist as $tab_name => $tab) {
$tab_url = '[[relativeurl]]/index.php?t='. $tab . (s ? '&S='. s : '');
if ($tab == 'referals') {
if (!($FUD_OPT_2 & 8192)) {
continue;
}
$tab_url .= '&id='. _uid;
} else if ($tab == 'showposts') {
$tab_url .= '&id='. _uid;
}
$tabs .= $pg == $tab ? '<td class="tabON"><div class="tabT"><a class="tabON" href="'.$tab_url.'">'.$tab_name.'</a></div></td>' : '<td class="tabI"><div class="tabT"><a href="'.$tab_url.'">'.$tab_name.'</a></div></td>';
}
$tabs = '<table cellspacing="1" cellpadding="0" class="tab">
<tr>
'.$tabs.'
</tr>
</table>';
}
}
?>
<?php
/**
* copyright : (C) 2001-2016 Advanced Internet Designs Inc.
* email : forum@prohost.org
* $Id$
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; version 2 of the License.
**/
include $GLOBALS['FORUM_SETTINGS_PATH'] .'ip_filter_cache';
include $GLOBALS['FORUM_SETTINGS_PATH'] .'login_filter_cache';
include $GLOBALS['FORUM_SETTINGS_PATH'] .'email_filter_cache';
function is_ip_blocked($ip)
{
if (empty($GLOBALS['__FUD_IP_FILTER__'])) {
return;
}
$block =& $GLOBALS['__FUD_IP_FILTER__'];
list($a,$b,$c,$d) = explode('.', $ip);
if (!isset($block[$a])) {
return;
}
if (isset($block[$a][$b][$c][$d])) {
return 1;
}
if (isset($block[$a][256])) {
$t = $block[$a][256];
} else if (isset($block[$a][$b])) {
$t = $block[$a][$b];
} else {
return;
}
if (isset($t[$c])) {
$t = $t[$c];
} else if (isset($t[256])) {
$t = $t[256];
} else {
return;
}
if (isset($t[$d]) || isset($t[256])) {
return 1;
}
}
function is_login_blocked($l)
{
foreach ($GLOBALS['__FUD_LGN_FILTER__'] as $v) {
if (preg_match($v, $l)) {
return 1;
}
}
return;
}
function is_email_blocked($addr)
{
if (empty($GLOBALS['__FUD_EMAIL_FILTER__'])) {
return;
}
$addr = strtolower($addr);
foreach ($GLOBALS['__FUD_EMAIL_FILTER__'] as $k => $v) {
if (($v && (strpos($addr, $k) !== false)) || (!$v && preg_match($k, $addr))) {
return 1;
}
}
return;
}
function is_allowed_user(&$usr, $simple=0)
{
/* Check if the ban expired. */
if (($banned = $usr->users_opt & 65536) && $usr->ban_expiry && $usr->ban_expiry < __request_timestamp__) {
q('UPDATE fud30_users SET users_opt = '. q_bitand('users_opt', ~65536) .' WHERE id='. $usr->id);
$usr->users_opt ^= 65536;
$banned = 0;
}
if ($banned || is_email_blocked($usr->email) || is_login_blocked($usr->login) || is_ip_blocked(get_ip())) {
$ban_expiry = (int) $usr->ban_expiry;
$ban_reason = $usr->ban_reason;
if (!$simple) { // On login page we already have anon session.
ses_delete($usr->sid);
$usr = ses_anon_make();
}
setcookie($GLOBALS['COOKIE_NAME'].'1', 'd34db33fd34db33fd34db33fd34db33f', ($ban_expiry ? $ban_expiry : (__request_timestamp__ + 63072000)), $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']);
if ($banned) {
error_dialog('ERROR: You have been banned.', 'Your account was '.($ban_expiry ? 'temporarily banned until '.print_date('%a, %d %B %Y %H:%M', $ban_expiry).'' : 'permanently banned' ) .' from accessing the site, due to a violation of the forum's rules.
<br />
<br />
<span class="GenTextRed">'.$ban_reason.'</span>');
} else {
error_dialog('ERROR: Your account has been filtered out.', 'Your account has been blocked from accessing the forum due to one of the installed user filters.');
}
}
if ($simple) {
return;
}
if ($GLOBALS['FUD_OPT_1'] & 1048576 && $usr->users_opt & 262144) {
error_dialog('ERROR: Your account is not yet confirmed', 'We have not received a confirmation from your parent and/or legal guardian, which would allow you to post messages. If you lost your COPPA form, <a href="[[relativeurl]]/index.php?t=coppa_fax&'._rsid.'">view it again</a>.');
}
if ($GLOBALS['FUD_OPT_2'] & 1 && !($usr->users_opt & 131072)) {
std_error('emailconf');
}
if ($GLOBALS['FUD_OPT_2'] & 1024 && $usr->users_opt & 2097152) {
error_dialog('Unverified Account', 'The administrator had chosen to review all accounts manually prior to activation. Until your account has been validated by the administrator you will not be able to utilize the full capabilities of your account.');
}
}
?>
<?php
/**
* copyright : (C) 2001-2018 Advanced Internet Designs Inc.
* email : forum@prohost.org
* $Id$
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; version 2 of the License.
**/
function tmpl_create_forum_select($frm_id, $mod)
{
if (!isset($_GET['t']) || ($_GET['t'] != 'thread' && $_GET['t'] != 'threadt')) {
$dest = t_thread_view;
} else {
$dest = $_GET['t'];
}
if ($mod) { /* Admin optimization. */
$c = uq('SELECT f.id, f.name, c.id FROM fud30_fc_view v INNER JOIN fud30_forum f ON f.id=v.f INNER JOIN fud30_cat c ON f.cat_id=c.id WHERE f.url_redirect IS NULL ORDER BY v.id');
} else {
$c = uq('SELECT f.id, f.name, c.id
FROM fud30_fc_view v
INNER JOIN fud30_forum f ON f.id=v.f
INNER JOIN fud30_cat c ON f.cat_id=c.id
INNER JOIN fud30_group_cache g1 ON g1.user_id='. (_uid ? '2147483647' : '0') .' AND g1.resource_id=f.id '.
(_uid ? ' LEFT JOIN fud30_mod mm ON mm.forum_id=f.id AND mm.user_id='. _uid .' LEFT JOIN fud30_group_cache g2 ON g2.user_id='. _uid .' AND g2.resource_id=f.id WHERE mm.id IS NOT NULL OR '. q_bitand('COALESCE(g2.group_cache_opt, g1.group_cache_opt)', 1) .' > 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 .= '<option disabled="disabled">- '.($tabw = ($i[0] ? str_repeat(' ', $i[0]) : '')).$i[1].'</option>';
if ($k == $r[2]) {
break;
}
}
$oldc = $r[2];
}
$selection_options .= '<option value="'.$r[0].'"'.(isset($f[$r[0]]) ? ' selected="selected"' : '').'>'.$tabw.' '.$r[1].'</option>';
$frmcount++;
}
unset($c);
return ''.($frmcount > 1 ? '
<span class="SmallText fb">Goto Forum:</span>
<form action="[[relativeurl]]/index.php" id="frmquicksel" method="get">
<input type="hidden" name="t" value="'.$dest.'" />
'._hs.'
<select class="SmallText" name="frm_id">
'.$selection_options.'
</select>
<input type="submit" class="button small" name="frm_goto" value="Go" />
</form>
' : '' ) ;
}
?>
<?php
/**
* copyright : (C) 2001-2018 Advanced Internet Designs Inc.
* email : forum@prohost.org
* $Id$
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; version 2 of the License.
**/
$collapse = $usr->cat_collapse_status ? unserialize($usr->cat_collapse_status) : array();
$cat_id = !empty($_GET['cat']) ? (int) $_GET['cat'] : 0;
$frm_id = !empty($_GET['frm_id']) ? (int) $_GET['frm_id'] : 0;
if ($cat_id && !empty($collapse[$cat_id])) {
$collapse[$cat_id] = 0;
}
require $FORUM_SETTINGS_PATH .'idx.inc';
if (!isset($cidxc[$cat_id])) {
$cat_id = 0;
}
$cbuf = $forum_list_table_data = $cat_path = '';
if ($cat_id) {
$cid = $cat_id;
while (($cid = $cidxc[$cid][4]) > 0) {
$cat_path = ' » <a href="[[relativeurl]]/index.php?t=i&cat='.$cid.'&'._rsid.'">'.$cidxc[$cid][1].'</a>'. $cat_path;
}
$cat_path = '<br />
<a href="[[relativeurl]]/index.php?t=i&'._rsid.'">Home</a>
'.$cat_path.' » <b>'.$cidxc[$cat_id][1].'</b>';
}
/* List of fetched fields & their ids
0 msg.subject,
1 msg.id AS msg_id,
2 msg.post_stamp,
3 users.id AS user_id,
4 users.alias
5 forum.cat_id,
6 forum.forum_icon
7 forum.id
8 forum.last_post_id
9 forum.moderators
10 forum.name
11 forum.descr
12 forum.url_redirect
13 forum.post_count
14 forum.thread_count
15 forum_read.last_view
16 is_moderator
17 read perm
18 is the category using compact view
*/
$c = uq('SELECT
m.subject, m.id, m.post_stamp,
u.id, u.alias,
f.cat_id, f.forum_icon, f.id, f.last_post_id, f.moderators, f.name, f.descr, f.url_redirect, f.post_count, f.thread_count,
'. (_uid ? 'fr.last_view, mo.id, COALESCE(g2.group_cache_opt, g1.group_cache_opt) AS group_cache_opt' : '0,0,g1.group_cache_opt') .',
c.cat_opt
FROM fud30_fc_view v
INNER JOIN fud30_cat c ON c.id=v.c
INNER JOIN fud30_forum f ON f.id=v.f
INNER JOIN fud30_group_cache g1 ON g1.user_id='. (_uid ? 2147483647 : 0) .' AND g1.resource_id=f.id
LEFT JOIN fud30_msg m ON f.last_post_id=m.id
LEFT JOIN fud30_users u ON u.id=m.poster_id '.
(_uid ? ' LEFT JOIN fud30_forum_read fr ON fr.forum_id=f.id AND fr.user_id='. _uid .' LEFT JOIN fud30_mod mo ON mo.user_id='. _uid .' AND mo.forum_id=f.id LEFT JOIN fud30_group_cache g2 ON g2.user_id='. _uid .' AND g2.resource_id=f.id' : '').
' WHERE f.parent = '. $frm_id .
((!$is_a || $cat_id) ? ' AND ' : '') .
($is_a ? '' : (_uid ? ' (mo.id IS NOT NULL OR ('. q_bitand('COALESCE(g2.group_cache_opt, g1.group_cache_opt)', 1) .' > 0))' : ' ('. q_bitand('g1.group_cache_opt', 1) .' > 0)')) .
($cat_id ? ($is_a ? '' : ' AND ') .' v.c IN('. implode(',', ($cf = $cidxc[$cat_id][5])) .') ' : '') .' ORDER BY v.id');
$post_count = $thread_count = $last_msg_id = $cat = 0;
while ($r = db_rowarr($c)) {
/* Increase thread & post count. */
$post_count += $r[13];
$thread_count += $r[14];
$cid = (int) $r[5];
if ($cat != $cid && !$frm_id) {
if ($cbuf) { /* If previous category was using compact view, print forum row. */
if (empty($collapse[$i[4]])) { /* Only show if parent is not collapsed as well. */
$forum_list_table_data .= '<tr class="row child-c'.$cat.'">
<td class="RowStyleA wo hide2"> </td>
<td class="RowStyleB ac wo hide2"> </td>
<td class="RowStyleA wa" colspan="4">Available Forums:'.$cbuf.'</td>
</tr>';
}
$cbuf = '';
}
foreach ($cidxc as $k => $i) {
/* 2nd check ensures that we don't end up displaying categories without any children. */
if (($cat_id && !isset($cf[$k])) || ($cid != $k && $i[4] >= $cidxc[$cid][4])) {
continue;
}
/* If parent category is collapsed, hide child category. */
if ($i[4] && !empty($collapse[$i[4]])) {
$collapse[$k] = 1;
}
if ($k == $cid) {
break; // Got it!
}
}
$cat = $cid;
if ($i[3] & 1 && $k != $cat_id && !($i[3] & 4)) {
if (!isset($collapse[$k])) {
$collapse[$k] = !($i[3] & 2);
}
$forum_list_table_data .= '<tr id="c'.$r[5].'" style="display: table-row;">
<td class="CatDesc '.(empty($collapse[$cid]) ? 'expanded' : 'collapsed' ) .'" colspan="5" style="padding-left: '.($i[0] ? $i[0] * 20 : '0').'px;">
<a href="[[relativeurl]]/index.php?t=index&cat='.$k.'&'._rsid.'" class="CatLink">'.$i[1].'</a> '.$i[2].'
</td>
<td class="CatDesc hide1">
'.(key($cidxc) ? '<a href="javascript://" onclick=\'nextCat("c'.$k.'")\'><img src="[[relativeurl]]/theme/default/images/down.png" alt="" width="16" height="11" border="0" style="vertical-align: top; float: right;" /></a>' : '' ) .'
'.($cat ? '<a href="javascript://" onclick=\'prevCat("c'.$k.'")\'><img src="[[relativeurl]]/theme/default/images/up.png" border="0" alt="" width="16" height="11" style="vertical-align: top; float: right;" /></a>' : '' ) .'
</td>
</tr>';
} else {
if ($i[3] & 4) {
++$i[0];
}
$forum_list_table_data .= '<tr id="c'.$r[5].'" style="display: table-row;">
<td class="CatDesc CatLockPad" colspan="5" style="padding-left: '.($i[0] ? $i[0] * 20 : '0').'px;">
<span class="CatLockedName"><a href="[[relativeurl]]/index.php?t=index&cat='.$k.'&'._rsid.'" class="CatLink">'.$i[1].'</a></span> '.$i[2].'
</td>
<td class="CatDesc hide1">
'.(key($cidxc) ? '<a href="javascript://" onclick=\'nextCat("c'.$k.'")\'><img src="[[relativeurl]]/theme/default/images/down.png" alt="" width="16" height="11" border="0" style="vertical-align: top; float: right;" /></a>' : '' ) .'
'.($cat ? '<a href="javascript://" onclick=\'prevCat("c'.$k.'")\'><img src="[[relativeurl]]/theme/default/images/up.png" border="0" alt="" width="16" height="11" style="vertical-align: top; float: right;" /></a>' : '' ) .'
</td>
</tr>';
}
}
/* Compact category view (ignore when expanded). */
if ($r[18] & 4 && $cat_id != $cid) {
$cbuf .= ' '.(_uid && $r[15] < $r[2] && $usr->last_read < $r[2] ? '**' : '' ) .'
<a href="'.(empty($r[12]) ? '[[relativeurl]]/index.php?t='.t_thread_view.'&frm_id='.$r[7].'&'._rsid.'' : ''.$r[12].'' ) .'">'.$r[10].'</a>';
continue;
}
/* Visible forum with no 'read' permission. */
if (!($r[17] & 2) && !$is_a && !$r[16]) {
$forum_list_table_data .= '<tr style="display: '.(empty($collapse[$cid]) ? 'table-row' : 'none' ) .'" class="child-c'.$r[5].'">
<td class="RowStyleA" colspan="6">'.$r[10].($r[11] ? '<br />'.$r[11] : '').'</td>
</tr>';
continue;
}
/* Code to determine the last post id for 'latest' forum message. */
if ($r[8] > $last_msg_id) {
$last_msg_id = $r[8];
}
if (!_uid) { /* Anon user. */
$forum_read_indicator = '<img title="Only registered forum members can track read & unread messages" src="[[relativeurl]]/theme/default/images/existing_content.png" alt="Only registered forum members can track read & unread messages" width="30" height="30" />';
} else if ($r[15] < $r[2] && $usr->last_read < $r[2]) {
$forum_read_indicator = '<img title="New messages" src="[[relativeurl]]/theme/default/images/new_content.png" alt="New messages" width="30" height="30" />';
} else {
$forum_read_indicator = '<img title="No new messages" src="[[relativeurl]]/theme/default/images/existing_content.png" alt="No new messages" width="30" height="30" />';
}
if ($r[9] && ($mods = unserialize($r[9]))) {
$moderators = ''; // List of forum moderators.
$modcount = 0; // Use singular or plural message form.
foreach($mods as $k => $v) {
$moderators .= '<a href="[[relativeurl]]/index.php?t=usrinfo&id='.$k.'&'._rsid.'">'.$v.'</a> ';
$modcount++;
}
$moderators = '<div class="TopBy"><b>'.convertPlural($modcount, array('Moderator','Moderators')).':</b> '.$moderators.'</div>';
} else {
$moderators = ' ';
}
$forum_list_table_data .= '<tr style="display: '.(empty($collapse[$cid]) ? 'table-row' : 'none' ) .'" class="row child-c'.$r[5].'">
<td class="RowStyleA wo hide2">'.($r[6] ? '<img src="[[relativeurl]]/images/forum_icons/'.$r[6].'" alt="Forum Icon" />' : ' ' ) .'</td>
<td class="RowStyleB ac wo hide2">'.(empty($r[12]) ? ''.$forum_read_indicator.'' : '<img title="Redirection" src="[[relativeurl]]/theme/default/images/moved.png" alt="" />' ) .'</td>
<td class="RowStyleA wa"><a href="'.(empty($r[12]) ? '[[relativeurl]]/index.php?t='.t_thread_view.'&frm_id='.$r[7].'&'._rsid.'' : ''.$r[12].'' ) .'" class="big">'.$r[10].'</a>'.($r[11] ? '<br />'.$r[11] : '').$moderators.'</td>
<td class="RowStyleB ac hide1">'.(empty($r[12]) ? ''.$r[13].'' : '--' ) .'</td>
<td class="RowStyleB ac hide1">'.(empty($r[12]) ? ''.$r[14].'' : '--' ) .'</td>
<td class="RowStyleA ac nw hide2">'.(empty($r[12]) ? ''.($r[8] ? '<span class="DateText">'.print_date('%a, %d %B %Y', $r[2]).'</span><br />By: '.($r[3] ? '<a href="[[relativeurl]]/index.php?t=usrinfo&id='.$r[3].'&'._rsid.'">'.$r[4].'</a>' : ''.$GLOBALS['ANON_NICK'].'' ) .' <a href="[[relativeurl]]/index.php?t='.d_thread_view.'&goto='.$r[8].'&'._rsid.'#msg_'.$r[8].'"><img title="'.$r[0].'" src="[[relativeurl]]/theme/default/images/goto.gif" alt="'.$r[0].'" width="9" height="9" /></a>' : 'n/a' ) .'' : '--' ) .'</td>
</tr>';
}
unset($c);
if ($cbuf) { /* If previous category was using compact view, print forum row. */
$forum_list_table_data .= '<tr class="row child-c'.$cat.'">
<td class="RowStyleA wo hide2"> </td>
<td class="RowStyleB ac wo hide2"> </td>
<td class="RowStyleA wa" colspan="4">Available Forums:'.$cbuf.'</td>
</tr>';
}
?>
<?php
/**
* copyright : (C) 2001-2021 Advanced Internet Designs Inc.
* email : forum@prohost.org
* $Id$
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; version 2 of the License.
**/
function tmpl_drawpmsg($obj, $usr, $mini)
{
$o1 =& $GLOBALS['FUD_OPT_1'];
$o2 =& $GLOBALS['FUD_OPT_2'];
$a = (int) $obj->users_opt;
$b =& $usr->users_opt;
if (!$mini) {
$custom_tag = $obj->custom_status ? '<br />'.$obj->custom_status.'' : '';
$c = (int) $obj->level_opt;
if ($obj->avatar_loc && $a & 8388608 && $b & 8192 && $o1 & 28 && !($c & 2)) {
if (!($c & 1)) {
$level_name =& $obj->level_name;
$level_image = $obj->level_img ? ' <img src="[[relativeurl]]/images/'.$obj->level_img.'" alt="" />' : '';
} else {
$level_name = $level_image = '';
}
} else {
$level_image = $obj->level_img ? ' <img src="[[relativeurl]]/images/'.$obj->level_img.'" alt="" />' : '';
$obj->avatar_loc = '';
$level_name =& $obj->level_name;
}
$avatar = ($obj->avatar_loc || $level_image) ? '<td class="avatarPad wo">'.$obj->avatar_loc.$level_image.'</td>' : '';
$dmsg_tags = ($custom_tag || $level_name) ? '<div class="ctags">'.$level_name.$custom_tag.'</div>' : '';
if (($o2 & 32 && !($a & 32768)) || $b & 1048576) {
$obj->login = $obj->alias;
$online_indicator = (($obj->last_visit + $GLOBALS['LOGEDIN_TIMEOUT'] * 60) > __request_timestamp__) ? '<img src="[[relativeurl]]/theme/default/images/online.png" alt="'.$obj->login.' is currently online" title="'.$obj->login.' is currently online" />' : '<img src="[[relativeurl]]/theme/default/images/offline.png" alt="'.$obj->login.' is currently offline" title="'.$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 = '<br /><b>Location:</b> '.$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]) ? '<a href="[[relativeurl]]/index.php?t=buddy_list&'._rsid.'&add='.$obj->user_id.'&SQ='.$GLOBALS['sq'].'">add to buddy list</a><br />' : '<br />[<a href="[[relativeurl]]/index.php?t=buddy_list&del='.$obj->user_id.'&redr=1&'._rsid.'&SQ='.$GLOBALS['sq'].'">remove from buddy list</a>]';
} else {
$buddy_link = '';
}
/* Show im buttons if need be. */
if ($b & 16384) {
$im = '';
if ($obj->icq) {
$im .= '<a href="[[relativeurl]]/index.php?t=usrinfo&id='.$obj->user_id.'&'._rsid.'#icq_msg"><img src="[[relativeurl]]/theme/default/images/icq.png" alt="" title="'.$obj->icq.'" /></a> ';
}
if ($obj->facebook) {
$im .= '<a href="https://www.facebook.com/'.$obj->facebook.'"><img src="[[relativeurl]]/theme/default/images/facebook.png" title="'.$obj->facebook.'" alt="" /></a> ';
}
if ($obj->yahoo) {
$im .= '<a href="http://edit.yahoo.com/config/send_webmesg?.target='.$obj->yahoo.'&.src=pg"><img src="[[relativeurl]]/theme/default/images/yahoo.png" alt="" title="'.$obj->yahoo.'" /></a> ';
}
if ($obj->jabber) {
$im .= '<img src="[[relativeurl]]/theme/default/images/jabber.png" title="'.$obj->jabber.'" alt="" />';
}
if ($obj->google) {
$im .= '<img src="[[relativeurl]]/theme/default/images/google.png" title="'.$obj->google.'" alt="" />';
}
if ($obj->skype) {
$im .= '<a href="callto://'.$obj->skype.'"><img src="[[relativeurl]]/theme/default/images/skype.png" title="'.$obj->skype.'" alt="" /></a>';
}
if ($obj->twitter) {
$im .= '<a href="https://twitter.com/'.$obj->twitter.'"><img src="[[relativeurl]]/theme/default/images/twitter.png" title="'.$obj->twitter.'" alt="" /></a>';
}
if ($im) {
$dmsg_im_row = ''.$im.'<br />';
} else {
$dmsg_im_row = '';
}
} else {
$dmsg_im_row = '';
}
if ($obj->ouser_id != _uid) {
$user_profile = '<a href="[[relativeurl]]/index.php?t=usrinfo&id='.$obj->user_id.'&'._rsid.'"><img src="[[relativeurl]]/theme/default/images/msg_about.gif" alt="" /></a>';
$email_link = ($o1 & 4194304 && $a & 16) ? '<a href="[[relativeurl]]/index.php?t=email&toi='.$obj->user_id.'&'._rsid.'" rel="nofollow"><img src="[[relativeurl]]/theme/default/images/msg_email.gif" alt="" /></a>' : '';
$private_msg_link = '<a href="[[relativeurl]]/index.php?t=ppost&toi='.$obj->user_id.'&'._rsid.'"><img title="Send a private message to this user" src="[[relativeurl]]/theme/default/images/msg_pm.gif" alt="" /></a>';
} else {
$user_profile = $email_link = $private_msg_link = '';
}
$msg_toolbar = '<tr><td colspan="2" class="MsgToolBar"><table border="0" cellspacing="0" cellpadding="0" class="wa"><tr>
<td class="nw al">'.$user_profile.' '.$email_link.' '.$private_msg_link.'</td>
<td class="nw ar"><a href="[[relativeurl]]/index.php?t=pmsg&'._rsid.'&btn_delete=1&sel='.$obj->id.'&SQ='.$GLOBALS['sq'].'"><img src="[[relativeurl]]/theme/default/images/msg_delete.gif" alt="" /></a> '.($obj->fldr == 4 ? '<a href="[[relativeurl]]/index.php?t=ppost&msg_id='.$obj->id.'&'._rsid.'"><img src="[[relativeurl]]/theme/default/images/msg_edit.gif" alt="" /></a> ' : '' ) .($obj->fldr == 1 ? '<a href="[[relativeurl]]/index.php?t=ppost&reply='.$obj->id.'&'._rsid.'"><img src="[[relativeurl]]/theme/default/images/msg_reply.gif" alt="" /></a> <a href="[[relativeurl]]/index.php?t=ppost&quote='.$obj->id.'&'._rsid.'"><img src="[[relativeurl]]/theme/default/images/msg_quote.gif" alt="" /></a> ' : '' ) .'<a href="[[relativeurl]]/index.php?t=ppost&forward='.$obj->id.'&'._rsid.'"><img src="[[relativeurl]]/theme/default/images/msg_forward.gif" alt="" /></a></td>
</tr></table></td></tr>';
} 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 .= '<li>
<img alt="" src="[[relativeurl]]/images/mime/'.$r->icon.'" class="at" />
<span class="GenText fb">Attachment:</span> <a href="[[relativeurl]]/index.php?t=getfile&id='.$r->id.'&'._rsid.'&private=1" title="'.$r->original_name.'">'.$r->original_name.'</a>
<br />
<span class="SmallText">(Size: '.$sz.', Downloaded '.convertPlural($r->dlcount, array(''.$r->dlcount.' time',''.$r->dlcount.' times')).')</span>
</li>';
}
unset($c);
if ($file_attachments) {
$file_attachments = '<ul class="AttachmentsList">
'.$file_attachments.'
</ul>';
/* Append session to getfile. */
if ($o1 & 128 && !isset($_COOKIE[$GLOBALS['COOKIE_NAME']])) {
$msg_body = str_replace('<img src="index.php?t=getfile', '<img src="index.php?t=getfile&S='. s, $msg_body);
$tap = 1;
}
if ($o2 & 32768 && (isset($tap) || $o2 & 8192)) {
$pos = 0;
while (($pos = strpos($msg_body, '<img src="index.php/fa/', $pos)) !== false) {
$pos = strpos($msg_body, '"', $pos + 11);
$msg_body = substr_replace($msg_body, _rsid, $pos, 0);
}
}
}
}
return '<tr>
<td>
<table cellspacing="0" cellpadding="0" class="MsgTable">
<tr>
<td class="MsgR1 al vt expanded">'.(!$mini