Compare commits

...

8 Commits

4 changed files with 361 additions and 297 deletions

View File

@ -1,3 +1,8 @@
Version 1.17 - Apr. 20, 2016
Make nocache refresh hack configurable in profile
Add disable PM option
Allow disabling the chat completely
Version 1.16.4 - Apr. 15, 2016 Version 1.16.4 - Apr. 15, 2016
Properly escape some parameters Properly escape some parameters
Add caching hack for aggressively caching browsers (e.g. links) Add caching hack for aggressively caching browsers (e.g. links)

639
chat.php
View File

@ -18,15 +18,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
header('Content-Type: text/html; charset=UTF-8'); send_headers();
header('Pragma: no-cache');
header('Cache-Control: no-cache');
header('Expires: 0');
if($_SERVER['REQUEST_METHOD']==='HEAD'){
exit; // headers sent, no further processing needed
}
// initialize and load variables/configuration // initialize and load variables/configuration
date_default_timezone_set('UTC');
$A=array();// All registered members $A=array();// All registered members
$C=array();// Configuration $C=array();// Configuration
$F=array();// Fonts $F=array();// Fonts
@ -48,98 +41,104 @@ load_fonts();
load_lang(); load_lang();
load_html(); load_html();
check_db(); check_db();
route();
// main program: decide what to do based on queries // main program: decide what to do based on queries
if(!isSet($_REQUEST['action'])){ function route(){
if(!check_init()){ global $U, $countmods;
send_init(); if(!isSet($_REQUEST['action'])){
} if(!check_init()){
send_login(); send_init();
}elseif($_REQUEST['action']==='view'){ }
check_session(); send_login();
send_messages(false); }elseif($_REQUEST['action']==='view'){
}elseif($_REQUEST['action']==='jsview'){ check_session();
check_session(); send_messages(false);
send_messages(true); }elseif($_REQUEST['action']==='jsview'){
}elseif($_REQUEST['action']==='jsrefresh'){ check_session();
if(!extension_loaded('json')){ send_messages(true);
send_fatal_error($I['jsonextrequired']); }elseif($_REQUEST['action']==='jsrefresh'){
} send_jsrefresh();
check_session(); }elseif($_REQUEST['action']==='redirect' && !empty($_GET['url'])){
ob_start(); send_redirect($_GET['url']);
print_messages(); }elseif($_REQUEST['action']==='wait'){
$msgs=ob_get_clean(); send_waiting_room();
ob_start(); }elseif($_REQUEST['action']==='post'){
print_chatters(); check_session();
$chatters=ob_get_clean(); if(isSet($_REQUEST['kick']) && isSet($_REQUEST['sendto']) && valid_nick($_REQUEST['sendto'])){
echo json_encode(array($_REQUEST['id'], $msgs, $chatters, get_setting('topic'))); if($U['status']>=5 || ($U['status']>=3 && $countmods===0 && get_setting('memkick'))){
}elseif($_REQUEST['action']==='redirect' && !empty($_GET['url'])){ if(isSet($_REQUEST['what']) && $_REQUEST['what']==='purge'){
send_redirect($_GET['url']); kick_chatter(array($_REQUEST['sendto']), $_REQUEST['message'], true);
}elseif($_REQUEST['action']==='wait'){ }else{
send_waiting_room(); kick_chatter(array($_REQUEST['sendto']), $_REQUEST['message'], false);
}elseif($_REQUEST['action']==='post'){ }
check_session();
if(isSet($_REQUEST['kick']) && isSet($_REQUEST['sendto']) && valid_nick($_REQUEST['sendto'])){
if($U['status']>=5 || ($U['status']>=3 && $countmods===0 && get_setting('memkick'))){
if(isSet($_REQUEST['what']) && $_REQUEST['what']==='purge'){
kick_chatter(array($_REQUEST['sendto']), $_REQUEST['message'], true);
}else{
kick_chatter(array($_REQUEST['sendto']), $_REQUEST['message'], false);
} }
}elseif(isSet($_REQUEST['message']) && isSet($_REQUEST['sendto'])){
validate_input();
} }
}elseif(isSet($_REQUEST['message']) && isSet($_REQUEST['sendto'])){ send_post();
validate_input(); }elseif($_REQUEST['action']==='login'){
} check_login();
send_post(); send_frameset();
}elseif($_REQUEST['action']==='login'){ }elseif($_REQUEST['action']==='controls'){
check_login(); check_session();
send_frameset(); send_controls();
}elseif($_REQUEST['action']==='controls'){ }elseif($_REQUEST['action']==='delete'){
check_session(); check_session();
send_controls(); if($_REQUEST['what']==='all'){
}elseif($_REQUEST['action']==='delete'){ if(isSet($_REQUEST['confirm'])){
check_session(); del_all_messages($U['nickname'], 10, $U['entry']);
if($_REQUEST['what']==='all'){ }else{
if(isSet($_REQUEST['confirm'])){ send_del_confirm();
del_all_messages($U['nickname'], 10, $U['entry']); }
}else{ }elseif($_REQUEST['what']==='last'){
send_del_confirm(); del_last_message();
} }
}elseif($_REQUEST['what']==='last'){ send_post();
del_last_message(); }elseif($_REQUEST['action']==='profile'){
} check_session();
send_post(); $arg='';
}elseif($_REQUEST['action']==='profile'){ if(isSet($_REQUEST['do']) && $_REQUEST['do']==='save'){
check_session(); $arg=save_profile();
$arg=''; }
if(isSet($_REQUEST['do']) && $_REQUEST['do']==='save'){ send_profile($arg);
$arg=save_profile(); }elseif($_REQUEST['action']==='logout'){
} kill_session();
send_profile($arg); send_logout();
}elseif($_REQUEST['action']==='logout'){ }elseif($_REQUEST['action']==='colours'){
kill_session(); check_session();
send_logout(); send_colours();
}elseif($_REQUEST['action']==='colours'){ }elseif($_REQUEST['action']==='notes'){
check_session(); check_session();
send_colours(); if(isSet($_REQUEST['do']) && $_REQUEST['do']==='admin' && $U['status']>6){
}elseif($_REQUEST['action']==='notes'){ send_notes('admin');
check_session(); }
if(!empty($_REQUEST['do']) && $_REQUEST['do']==='admin' && $U['status']>6){ if($U['status']<5){
send_notes('admin'); send_access_denied();
}
send_notes('staff');
}elseif($_REQUEST['action']==='help'){
check_session();
send_help();
}elseif($_REQUEST['action']==='admin'){
check_session();
send_admin(route_admin());
}elseif($_REQUEST['action']==='setup'){
route_setup();
send_setup();
}elseif($_REQUEST['action']==='init'){
init_chat();
}else{
send_login();
} }
}
function route_admin(){
global $U;
if($U['status']<5){ if($U['status']<5){
send_access_denied(); send_access_denied();
} }
send_notes('staff'); if(!isSet($_REQUEST['do'])){
}elseif($_REQUEST['action']==='help'){
check_session();
send_help();
}elseif($_REQUEST['action']==='admin'){
check_session();
if($U['status']<5){
send_access_denied();
}
if(empty($_REQUEST['do'])){
}elseif($_REQUEST['do']==='clean'){ }elseif($_REQUEST['do']==='clean'){
if($_REQUEST['what']==='choose'){ if($_REQUEST['what']==='choose'){
send_choose_messages(); send_choose_messages();
@ -168,13 +167,13 @@ if(!isSet($_REQUEST['action'])){
} }
send_sessions(); send_sessions();
}elseif($_REQUEST['do']==='register'){ }elseif($_REQUEST['do']==='register'){
send_admin(register_guest(3, $_REQUEST['name'])); return register_guest(3, $_REQUEST['name']);
}elseif($_REQUEST['do']==='superguest'){ }elseif($_REQUEST['do']==='superguest'){
send_admin(register_guest(2, $_REQUEST['name'])); return register_guest(2, $_REQUEST['name']);
}elseif($_REQUEST['do']==='status'){ }elseif($_REQUEST['do']==='status'){
send_admin(change_status($_REQUEST['name'], $_REQUEST['set'])); return change_status($_REQUEST['name'], $_REQUEST['set']);
}elseif($_REQUEST['do']==='regnew'){ }elseif($_REQUEST['do']==='regnew'){
send_admin(register_new($_REQUEST['name'], $_REQUEST['pass'])); return register_new($_REQUEST['name'], $_REQUEST['pass']);
}elseif($_REQUEST['do']==='approve'){ }elseif($_REQUEST['do']==='approve'){
approve_session(); approve_session();
send_approve_waiting(); send_approve_waiting();
@ -191,10 +190,12 @@ if(!isSet($_REQUEST['action'])){
update_setting('topic', htmlspecialchars($_REQUEST['topic'])); update_setting('topic', htmlspecialchars($_REQUEST['topic']));
} }
}elseif($_REQUEST['do']==='passreset'){ }elseif($_REQUEST['do']==='passreset'){
send_admin(passreset($_REQUEST['name'], $_REQUEST['pass'])); return passreset($_REQUEST['name'], $_REQUEST['pass']);
} }
send_admin(); }
}elseif($_REQUEST['action']==='setup'){
function route_setup(){
global $C, $U;
if(!check_init()){ if(!check_init()){
send_init(); send_init();
} }
@ -202,65 +203,16 @@ if(!isSet($_REQUEST['action'])){
if(!valid_admin()){ if(!valid_admin()){
send_alogin(); send_alogin();
} }
$C['bool_settings']=array('suguests', 'imgembed', 'timestamps', 'trackip', 'memkick', 'forceredirect', 'incognito', 'enablejs', 'sendmail', 'modfallback'); $C['bool_settings']=array('suguests', 'imgembed', 'timestamps', 'trackip', 'memkick', 'forceredirect', 'incognito', 'enablejs', 'sendmail', 'modfallback', 'disablepm');
$C['colour_settings']=array('colbg', 'coltxt'); $C['colour_settings']=array('colbg', 'coltxt');
$C['msg_settings']=array('msgenter', 'msgexit', 'msgmemreg', 'msgsureg', 'msgkick', 'msgmultikick', 'msgallkick', 'msgclean', 'msgsendall', 'msgsendmem', 'msgsendmod', 'msgsendadm', 'msgsendprv'); $C['msg_settings']=array('msgenter', 'msgexit', 'msgmemreg', 'msgsureg', 'msgkick', 'msgmultikick', 'msgallkick', 'msgclean', 'msgsendall', 'msgsendmem', 'msgsendmod', 'msgsendadm', 'msgsendprv');
$C['number_settings']=array('memberexpire', 'guestexpire', 'kickpenalty', 'entrywait', 'captchatime', 'messageexpire', 'messagelimit', 'keeplimit', 'maxmessage', 'maxname', 'minpass', 'defaultrefresh', 'numnotes'); $C['number_settings']=array('memberexpire', 'guestexpire', 'kickpenalty', 'entrywait', 'captchatime', 'messageexpire', 'messagelimit', 'keeplimit', 'maxmessage', 'maxname', 'minpass', 'defaultrefresh', 'numnotes');
$C['textarea_settings']=array('rulestxt', 'css'); $C['textarea_settings']=array('rulestxt', 'css', 'disabletext');
$C['text_settings']=array('dateformat', 'captchachars', 'redirect', 'chatname', 'mailsender', 'mailreceiver'); $C['text_settings']=array('dateformat', 'captchachars', 'redirect', 'chatname', 'mailsender', 'mailreceiver');
$C['settings']=array_merge(array('guestaccess', 'englobalpass', 'globalpass', 'captcha', 'dismemcaptcha', 'topic', 'guestreg'), $C['bool_settings'], $C['colour_settings'], $C['msg_settings'], $C['number_settings'], $C['textarea_settings'], $C['text_settings']); // All settings in the database $C['settings']=array_merge(array('guestaccess', 'englobalpass', 'globalpass', 'captcha', 'dismemcaptcha', 'topic', 'guestreg'), $C['bool_settings'], $C['colour_settings'], $C['msg_settings'], $C['number_settings'], $C['textarea_settings'], $C['text_settings']); // All settings in the database
if(empty($_REQUEST['do'])){ if(!isSet($_REQUEST['do'])){
}elseif($_REQUEST['do']==='save'){ }elseif($_REQUEST['do']==='save'){
foreach($C['msg_settings'] as $setting){ save_setup();
$_REQUEST[$setting]=htmlspecialchars($_REQUEST[$setting]);
}
foreach($C['number_settings'] as $setting){
settype($_REQUEST[$setting], 'int');
}
settype($_REQUEST['guestaccess'], 'int');
settype($_REQUEST['englobalpass'], 'int');
settype($_REQUEST['captcha'], 'int');
settype($_REQUEST['dismemcaptcha'], 'int');
settype($_REQUEST['guestreg'], 'int');
$_REQUEST['rulestxt']=preg_replace("/(\r?\n|\r\n?)/", '<br>', $_REQUEST['rulestxt']);
$_REQUEST['chatname']=htmlspecialchars($_REQUEST['chatname']);
$_REQUEST['redirect']=htmlspecialchars($_REQUEST['redirect']);
$_REQUEST['css']=htmlspecialchars($_REQUEST['css']);
if(!preg_match('/^[a-f0-9]{6}$/i', $_REQUEST['colbg'])){
unset($_REQUEST['colbg']);
}
if(!preg_match('/^[a-f0-9]{6}$/i', $_REQUEST['coltxt'])){
unset($_REQUEST['coltxt']);
}
if($_REQUEST['memberexpire']<5){
$_REQUEST['memberexpire']=5;
}
if($_REQUEST['captchatime']<30){
$_REQUEST['memberexpire']=30;
}
if($_REQUEST['defaultrefresh']<5){
$_REQUEST['defaultrefresh']=5;
}elseif($_REQUEST['defaultrefresh']>150){
$_REQUEST['defaultrefresh']=150;
}
if($_REQUEST['maxname']<1){
$_REQUEST['maxname']=1;
}elseif($_REQUEST['maxname']>50){
$_REQUEST['maxname']=50;
}
if($_REQUEST['maxmessage']<1){
$_REQUEST['maxmessage']=1;
}elseif($_REQUEST['maxmessage']>20000){
$_REQUEST['maxmessage']=20000;
}
if($_REQUEST['numnotes']<1){
$_REQUEST['numnotes']=1;
}
foreach($C['settings'] as $setting){
if(isSet($_REQUEST[$setting])){
update_setting($setting, $_REQUEST[$setting]);
}
}
}elseif($_REQUEST['do']==='backup' && $U['status']==8){ }elseif($_REQUEST['do']==='backup' && $U['status']==8){
send_backup(); send_backup();
}elseif($_REQUEST['do']==='restore' && $U['status']==8){ }elseif($_REQUEST['do']==='restore' && $U['status']==8){
@ -273,11 +225,6 @@ if(!isSet($_REQUEST['action'])){
send_destroy_chat(); send_destroy_chat();
} }
} }
send_setup();
}elseif($_REQUEST['action']==='init'){
init_chat();
}else{
send_login();
} }
// html output subs // html output subs
@ -507,6 +454,11 @@ function send_setup(){
echo ' selected'; echo ' selected';
} }
echo ">$I[guestdisallow]</option>"; echo ">$I[guestdisallow]</option>";
echo '<option value="4"';
if($ga===4){
echo ' selected';
}
echo ">$I[disablechat]</option>";
echo '</select></td></tr></table></td></tr>'; echo '</select></td></tr></table></td></tr>';
thr(); thr();
$englobal=(int) get_setting('englobalpass'); $englobal=(int) get_setting('englobalpass');
@ -661,7 +613,7 @@ function send_setup(){
} }
echo submit($I['destroy'], 'class="delbutton"').'</form></td></tr></table><br>'; echo submit($I['destroy'], 'class="delbutton"').'</form></td></tr></table><br>';
} }
echo "<$H[form]>$H[commonform]".hidden('action', 'logout'); echo "<$H[form] target=\"_parent\">$H[commonform]".hidden('action', 'logout');
if(!isSet($_REQUEST['session'])){ if(!isSet($_REQUEST['session'])){
echo hidden('session', $U['session']); echo hidden('session', $U['session']);
} }
@ -735,7 +687,9 @@ function send_backup(){
} }
if(isSet($_REQUEST['members'])){ if(isSet($_REQUEST['members'])){
$result=$db->query('SELECT nickname, passhash, status, refresh, bgcolour, boxwidth, boxheight, notesboxwidth, notesboxheight, regedby, lastlogin, timestamps, embed, incognito, style FROM ' . PREFIX . 'members;'); $result=$db->query('SELECT nickname, passhash, status, refresh, bgcolour, boxwidth, boxheight, notesboxwidth, notesboxheight, regedby, lastlogin, timestamps, embed, incognito, style FROM ' . PREFIX . 'members;');
while($member=$result->fetch(PDO::FETCH_ASSOC)) $code['members'][]=$member; while($member=$result->fetch(PDO::FETCH_ASSOC)){
$code['members'][]=$member;
}
} }
if(isSet($_REQUEST['notes'])){ if(isSet($_REQUEST['notes'])){
$result=$db->query('SELECT type, lastedited, editedby, text FROM ' . PREFIX . "notes WHERE type='admin' ORDER BY id DESC LIMIT 1;"); $result=$db->query('SELECT type, lastedited, editedby, text FROM ' . PREFIX . "notes WHERE type='admin' ORDER BY id DESC LIMIT 1;");
@ -923,6 +877,10 @@ function send_admin($arg=''){
echo ' selected'; echo ' selected';
} }
echo ">$I[guestdisallow]</option>"; echo ">$I[guestdisallow]</option>";
if($ga===4){
echo '<option value="4" selected';
echo ">$I[disablechat]</option>";
}
echo '</select></td><td>'.submit($I['change']).'</td></tr></table></form></td></tr></table></td></tr>'; echo '</select></td><td>'.submit($I['change']).'</td></tr></table></form></td></tr></table></td></tr>';
thr(); thr();
if(get_setting('suguests')){ if(get_setting('suguests')){
@ -1290,13 +1248,18 @@ function send_frameset(){
function send_messages($js){ function send_messages($js){
global $I, $U, $language; global $I, $U, $language;
if(!$js){ if(!$js){
if($U['nocache']){
$nocache='&nc='.substr(time(), -6);
}else{
$nocache='';
}
if(isSet($_COOKIE[COOKIENAME])){ if(isSet($_COOKIE[COOKIENAME])){
print_start('messages', $U['refresh'], "$_SERVER[SCRIPT_NAME]?action=view&nocache=".substr(time(),-6)); print_start('messages', $U['refresh'], "$_SERVER[SCRIPT_NAME]?action=view$nocache");
if(get_setting('enablejs')==1 && extension_loaded('json')){ if(get_setting('enablejs')==1 && extension_loaded('json')){
echo "<script type=\"text/javascript\">window.location.assign('$_SERVER[SCRIPT_NAME]?action=jsview');</script>"; echo "<script type=\"text/javascript\">window.location.assign('$_SERVER[SCRIPT_NAME]?action=jsview');</script>";
} }
}else{ }else{
print_start('messages', $U['refresh'], "$_SERVER[SCRIPT_NAME]?action=view&session=$U[session]&lang=$language&nocache=".substr(time(),-6)); print_start('messages', $U['refresh'], "$_SERVER[SCRIPT_NAME]?action=view&session=$U[session]&lang=$language$nocache");
if(get_setting('enablejs')==1 && extension_loaded('json')){ if(get_setting('enablejs')==1 && extension_loaded('json')){
echo "<script type=\"text/javascript\">window.location.assign('$_SERVER[SCRIPT_NAME]?action=jsview&session=$U[session]&lang=$language');</script>"; echo "<script type=\"text/javascript\">window.location.assign('$_SERVER[SCRIPT_NAME]?action=jsview&session=$U[session]&lang=$language');</script>";
} }
@ -1321,6 +1284,21 @@ function send_messages($js){
print_end(); print_end();
} }
function send_jsrefresh(){
global $I;
if(!extension_loaded('json')){
send_fatal_error($I['jsonextrequired']);
}
check_session();
ob_start();
print_messages();
$msgs=ob_get_clean();
ob_start();
print_chatters();
$chatters=ob_get_clean();
echo json_encode(array($_REQUEST['id'], $msgs, $chatters, get_setting('topic')));
}
function send_notes($type){ function send_notes($type){
global $H, $I, $U, $db; global $H, $I, $U, $db;
print_start('notes'); print_start('notes');
@ -1453,9 +1431,9 @@ function send_waiting_room(){
}else{ }else{
$refresh=(int) get_setting('defaultrefresh'); $refresh=(int) get_setting('defaultrefresh');
if(isSet($_COOKIE['test'])){ if(isSet($_COOKIE['test'])){
print_start('waitingroom', $refresh, "$_SERVER[SCRIPT_NAME]?action=wait&nocache=".substr(time(),-6)); print_start('waitingroom', $refresh, "$_SERVER[SCRIPT_NAME]?action=wait&nc=".substr(time(),-6));
}else{ }else{
print_start('waitingroom', $refresh, "$_SERVER[SCRIPT_NAME]?action=wait&session=$U[session]&lang=$language&nocache=".substr(time(),-6)); print_start('waitingroom', $refresh, "$_SERVER[SCRIPT_NAME]?action=wait&session=$U[session]&lang=$language&nc=".substr(time(),-6));
} }
echo "<h2>$I[waitingroom]</h2><p>"; echo "<h2>$I[waitingroom]</h2><p>";
if($wait){ if($wait){
@ -1470,7 +1448,7 @@ function send_waiting_room(){
if(!isSet($_REQUEST['session'])){ if(!isSet($_REQUEST['session'])){
echo hidden('session', $U['session']); echo hidden('session', $U['session']);
} }
echo hidden('nocache', substr(time(), -6)).hidden('action', 'wait').submit($I['reload']).'</form><br>'; echo hidden('action', 'wait').submit($I['reload']).'</form><br>';
echo "<$H[form]>$H[commonform]"; echo "<$H[form]>$H[commonform]";
if(!isSet($_REQUEST['session'])){ if(!isSet($_REQUEST['session'])){
echo hidden('session', $U['session']); echo hidden('session', $U['session']);
@ -1568,28 +1546,31 @@ function send_post(){
} }
echo "value=\"&\">-$I[toadmin]-</option>"; echo "value=\"&\">-$I[toadmin]-</option>";
} }
$ignored=array(); $disablepm=(bool) get_setting('disablepm');
$ignore=get_ignored(); if(!$disablepm){
foreach($ignore as $ign){ $ignored=array();
if($ign['ignored']===$U['nickname']){ $ignore=get_ignored();
$ignored[]=$ign['by']; foreach($ignore as $ign){
} if($ign['ignored']===$U['nickname']){
if($ign['by']===$U['nickname']){ $ignored[]=$ign['by'];
$ignored[]=$ign['ignored']; }
} if($ign['by']===$U['nickname']){
} $ignored[]=$ign['ignored'];
array_multisort(array_map('strtolower', array_keys($P)), SORT_ASC, SORT_STRING, $P); }
foreach($P as $user){ }
if($U['nickname']!==$user[0] && !in_array($user[0], $ignored)){ array_multisort(array_map('strtolower', array_keys($P)), SORT_ASC, SORT_STRING, $P);
echo '<option '; foreach($P as $user){
if($_REQUEST['sendto']===$user[0]){ if($U['nickname']!==$user[0] && !in_array($user[0], $ignored)){
echo 'selected '; echo '<option ';
if($_REQUEST['sendto']===$user[0]){
echo 'selected ';
}
echo "value=\"$user[0]\" style=\"$user[1]\">$user[0]</option>";
} }
echo "value=\"$user[0]\" style=\"$user[1]\">$user[0]</option>";
} }
} }
echo '</select>'; echo '</select>';
if($U['status']>=5 || ($U['status']>=3 && $countmods===0 && get_setting('memkick'))){ if(!$disablepm && ($U['status']>=5 || ($U['status']>=3 && $countmods===0 && get_setting('memkick')))){
echo "<input type=\"checkbox\" name=\"kick\" id=\"kick\" value=\"kick\"><label for=\"kick\">&nbsp;$I[kick]</label>"; echo "<input type=\"checkbox\" name=\"kick\" id=\"kick\" value=\"kick\"><label for=\"kick\">&nbsp;$I[kick]</label>";
echo "<input type=\"checkbox\" name=\"what\" id=\"what\" value=\"purge\" checked><label for=\"what\">&nbsp;$I[alsopurge]</label>"; echo "<input type=\"checkbox\" name=\"what\" id=\"what\" value=\"purge\" checked><label for=\"what\">&nbsp;$I[alsopurge]</label>";
} }
@ -1725,29 +1706,20 @@ function send_profile($arg=''){
} }
echo '<tr><td>'.style_this("$U[nickname] : $I[fontexample]", $U['style']).'</td></tr>'; echo '<tr><td>'.style_this("$U[nickname] : $I[fontexample]", $U['style']).'</td></tr>';
thr(); thr();
echo "<tr><td><table class=\"left-table\"><tr><th>$I[timestamps]</th><td class=\"right\">"; $bool_settings=['timestamps', 'nocache'];
echo '<input type="checkbox" name="timestamps" id="timestamps" value="on"'; if(get_setting('imgembed') && isSet($_COOKIE[COOKIENAME])){
if($U['timestamps']){ $bool_settings[]='embed';
echo ' checked';
}
echo "><label for=\"timestamps\"><b>$I[enabled]</b></label></td></tr></table></td></tr>";
thr();
if(get_setting('imgembed')){
echo "<tr><td><table class=\"left-table\"><tr><th>$I[embed]</th><td class=\"right\">";
echo '<input type="checkbox" name="embed" id="embed" value="on"';
if($U['embed'] && isSet($_COOKIE[COOKIENAME])){
echo ' checked';
}
echo "><label for=\"embed\"><b>$I[enabled]</b></label></td></tr></table></td></tr>";
thr();
} }
if($U['status']>=5 && get_setting('incognito')){ if($U['status']>=5 && get_setting('incognito')){
echo "<tr><td><table class=\"left-table\"><tr><th>$I[incognito]</th><td class=\"right\">"; $bool_settings[]='incognito';
echo '<input type="checkbox" name="incognito" id="incognito" value="on"'; }
if($U['incognito']){ foreach($bool_settings as $setting){
echo '<tr><td><table class="left-table"><tr><th>'.$I[$setting].'</th><td class="right">';
echo "<input type=\"checkbox\" name=\"$setting\" id=\"$setting\" value=\"on\"";
if($U[$setting]){
echo ' checked'; echo ' checked';
} }
echo "><label for=\"incognito\"><b>$I[enabled]</b></label></td></tr></table></td></tr>"; echo "><label for=\"$setting\"><b>$I[enabled]</b></label></td></tr></table></td></tr>";
thr(); thr();
} }
echo "<tr><td><table class=\"left-table\"><tr><th>$I[pbsize]</th><td><table class=\"right-table\">"; echo "<tr><td><table class=\"left-table\"><tr><th>$I[pbsize]</th><td><table class=\"right-table\">";
@ -1834,9 +1806,12 @@ function send_colours(){
function send_login(){ function send_login(){
global $H, $I, $L; global $H, $I, $L;
$ga=(int) get_setting('guestaccess');
if($ga===4){
send_chat_disabled();
}
setcookie('test', '1'); setcookie('test', '1');
print_start('login'); print_start('login');
$ga=(int) get_setting('guestaccess');
$englobal=(int) get_setting('englobalpass'); $englobal=(int) get_setting('englobalpass');
echo '<h1>'.get_setting('chatname').'</h1>'; echo '<h1>'.get_setting('chatname').'</h1>';
echo "<$H[form] target=\"_parent\">$H[commonform]".hidden('action', 'login'); echo "<$H[form] target=\"_parent\">$H[commonform]".hidden('action', 'login');
@ -1885,6 +1860,12 @@ function send_login(){
print_end(); print_end();
} }
function send_chat_disabled(){
print_start('disabled');
echo get_setting('disabletext');
print_end();
}
function send_error($err){ function send_error($err){
global $H, $I; global $H, $I;
print_start('error'); print_start('error');
@ -2091,6 +2072,9 @@ function check_login(){
}elseif(!isSet($_REQUEST['nick']) || !isSet($_REQUEST['pass'])){ }elseif(!isSet($_REQUEST['nick']) || !isSet($_REQUEST['pass'])){
send_login(); send_login();
}else{ }else{
if($ga===4){
send_chat_disabled();
}
if(!empty($_REQUEST['regpass']) && $_REQUEST['regpass']!==$_REQUEST['pass']){ if(!empty($_REQUEST['regpass']) && $_REQUEST['regpass']!==$_REQUEST['pass']){
send_error($I['noconfirm']); send_error($I['noconfirm']);
} }
@ -2248,7 +2232,9 @@ function parse_sessions(){
$db->exec('DELETE FROM ' . PREFIX . "messages WHERE poster='' AND recipient='' AND poststatus=9;"); $db->exec('DELETE FROM ' . PREFIX . "messages WHERE poster='' AND recipient='' AND poststatus=9;");
} }
$result=$db->query('SELECT * FROM ' . PREFIX . 'sessions ORDER BY status DESC, lastpost DESC;'); $result=$db->query('SELECT * FROM ' . PREFIX . 'sessions ORDER BY status DESC, lastpost DESC;');
if(!$lines=$result->fetchAll(PDO::FETCH_ASSOC)) $lines=array(); if(!$lines=$result->fetchAll(PDO::FETCH_ASSOC)){
$lines=array();
}
if(isSet($_REQUEST['session'])){ if(isSet($_REQUEST['session'])){
foreach($lines as $temp){ foreach($lines as $temp){
if($temp['session']===$_REQUEST['session']){ if($temp['session']===$_REQUEST['session']){
@ -2321,7 +2307,7 @@ function register_guest($status, $nick){
}else{ }else{
return sprintf($I['cantreg'], $nick); return sprintf($I['cantreg'], $nick);
} }
$stmt=$db->prepare('INSERT INTO ' . PREFIX . 'members (nickname, passhash, status, refresh, bgcolour, boxwidth, boxheight, regedby, timestamps, embed, style) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);'); $stmt=$db->prepare('INSERT INTO ' . PREFIX . 'members (nickname, passhash, status, refresh, bgcolour, boxwidth, boxheight, regedby, timestamps, embed, style, incognito) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0);');
$stmt->execute(array($reg['nickname'], $reg['passhash'], $reg['status'], $reg['refresh'], $reg['bgcolour'], $reg['boxwidth'], $reg['boxheight'], $U['nickname'], $reg['timestamps'], $reg['embed'], $reg['style'])); $stmt->execute(array($reg['nickname'], $reg['passhash'], $reg['status'], $reg['refresh'], $reg['bgcolour'], $reg['boxwidth'], $reg['boxheight'], $U['nickname'], $reg['timestamps'], $reg['embed'], $reg['style']));
if($reg['status']==3){ if($reg['status']==3){
add_system_message(sprintf(get_setting('msgmemreg'), style_this($reg['nickname'], $reg['style']))); add_system_message(sprintf(get_setting('msgmemreg'), style_this($reg['nickname'], $reg['style'])));
@ -2357,7 +2343,7 @@ function register_new($nick, $pass){
'timestamps' =>get_setting('timestamps'), 'timestamps' =>get_setting('timestamps'),
'style' =>'color:#'.get_setting('coltxt').';' 'style' =>'color:#'.get_setting('coltxt').';'
); );
$stmt=$db->prepare('INSERT INTO ' . PREFIX . 'members (nickname, passhash, status, refresh, bgcolour, regedby, timestamps, style) VALUES (?, ?, ?, ?, ?, ?, ?, ?);'); $stmt=$db->prepare('INSERT INTO ' . PREFIX . 'members (nickname, passhash, status, refresh, bgcolour, regedby, timestamps, style, embed, incognito) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, 0);');
$stmt->execute(array($reg['nickname'], $reg['passhash'], $reg['status'], $reg['refresh'], $reg['bgcolour'], $reg['regedby'], $reg['timestamps'], $reg['style'])); $stmt->execute(array($reg['nickname'], $reg['passhash'], $reg['status'], $reg['refresh'], $reg['bgcolour'], $reg['regedby'], $reg['timestamps'], $reg['style']));
return sprintf($I['successreg'], $reg['nickname']); return sprintf($I['successreg'], $reg['nickname']);
} }
@ -2474,6 +2460,11 @@ function amend_profile(){
}else{ }else{
$U['incognito']=0; $U['incognito']=0;
} }
if(isSet($_REQUEST['nocache'])){
$U['nocache']=1;
}else{
$U['nocache']=0;
}
} }
function save_profile(){ function save_profile(){
@ -2500,11 +2491,11 @@ function save_profile(){
} }
$U['passhash']=$U['newhash']; $U['passhash']=$U['newhash'];
amend_profile(); amend_profile();
$stmt=$db->prepare('UPDATE ' . PREFIX . 'sessions SET refresh=?, style=?, passhash=?, boxwidth=?, boxheight=?, bgcolour=?, notesboxwidth=?, notesboxheight=?, timestamps=?, embed=?, incognito=? WHERE session=?;'); $stmt=$db->prepare('UPDATE ' . PREFIX . 'sessions SET refresh=?, style=?, passhash=?, boxwidth=?, boxheight=?, bgcolour=?, notesboxwidth=?, notesboxheight=?, timestamps=?, embed=?, incognito=?, nocache=? WHERE session=?;');
$stmt->execute(array($U['refresh'], $U['style'], $U['passhash'], $U['boxwidth'], $U['boxheight'], $U['bgcolour'], $U['notesboxwidth'], $U['notesboxheight'], $U['timestamps'], $U['embed'], $U['incognito'], $U['session'])); $stmt->execute(array($U['refresh'], $U['style'], $U['passhash'], $U['boxwidth'], $U['boxheight'], $U['bgcolour'], $U['notesboxwidth'], $U['notesboxheight'], $U['timestamps'], $U['embed'], $U['incognito'], $U['nocache'], $U['session']));
if($U['status']>=2){ if($U['status']>=2){
$stmt=$db->prepare('UPDATE ' . PREFIX . 'members SET passhash=?, refresh=?, bgcolour=?, boxwidth=?, boxheight=?, notesboxwidth=?, notesboxheight=?, timestamps=?, embed=?, incognito=?, style=? WHERE nickname=?;'); $stmt=$db->prepare('UPDATE ' . PREFIX . 'members SET passhash=?, refresh=?, bgcolour=?, boxwidth=?, boxheight=?, notesboxwidth=?, notesboxheight=?, timestamps=?, embed=?, incognito=?, style=?, nocache=? WHERE nickname=?;');
$stmt->execute(array($U['passhash'], $U['refresh'], $U['bgcolour'], $U['boxwidth'], $U['boxheight'], $U['notesboxwidth'], $U['notesboxheight'], $U['timestamps'], $U['embed'], $U['incognito'], $U['style'], $U['nickname'])); $stmt->execute(array($U['passhash'], $U['refresh'], $U['bgcolour'], $U['boxwidth'], $U['boxheight'], $U['notesboxwidth'], $U['notesboxheight'], $U['timestamps'], $U['embed'], $U['incognito'], $U['style'], $U['nocache'], $U['nickname']));
} }
if(!empty($_REQUEST['unignore'])){ if(!empty($_REQUEST['unignore'])){
$stmt=$db->prepare('DELETE FROM ' . PREFIX . 'ignored WHERE ign=? AND ignby=?;'); $stmt=$db->prepare('DELETE FROM ' . PREFIX . 'ignored WHERE ign=? AND ignby=?;');
@ -2632,6 +2623,9 @@ function validate_input(){
$U['poststatus']='6'; $U['poststatus']='6';
$U['displaysend']=sprintf(get_setting('msgsendadm'), style_this($U['nickname'], $U['style'])); $U['displaysend']=sprintf(get_setting('msgsendadm'), style_this($U['nickname'], $U['style']));
}else{// known nick in room? }else{// known nick in room?
if(get_setting('disablepm')){
return;
}
$stmt=$db->prepare('SELECT * FROM ' . PREFIX . 'ignored WHERE (ignby=? AND ign=?) OR (ignby=? AND ign=?);'); $stmt=$db->prepare('SELECT * FROM ' . PREFIX . 'ignored WHERE (ignby=? AND ign=?) OR (ignby=? AND ign=?);');
$stmt->execute(array($U['nickname'], $_REQUEST['sendto'], $_REQUEST['sendto'], $U['nickname'])); $stmt->execute(array($U['nickname'], $_REQUEST['sendto'], $_REQUEST['sendto'], $U['nickname']));
if(!$stmt->fetch(PDO::FETCH_NUM)){ if(!$stmt->fetch(PDO::FETCH_NUM)){
@ -2650,18 +2644,16 @@ function validate_input(){
}else{// nick left already or ignores us }else{// nick left already or ignores us
$U['message']=''; $U['message']='';
$U['rejected']=''; $U['rejected']='';
return;
} }
} }
if(isSet($U['poststatus'])){ apply_filter();
apply_filter(); create_hotlinks();
create_hotlinks(); apply_linkfilter();
apply_linkfilter(); if(add_message()){
if(add_message()){ $U['lastpost']=time();
$U['lastpost']=time(); $stmt=$db->prepare('UPDATE ' . PREFIX . 'sessions SET lastpost=?, postid=? WHERE session=?;');
$stmt=$db->prepare('UPDATE ' . PREFIX . 'sessions SET lastpost=?, postid=? WHERE session=?;'); $stmt->execute(array($U['lastpost'], $_REQUEST['postid'], $U['session']));
$stmt->execute(array($U['lastpost'], $_REQUEST['postid'], $U['session']));
}
} }
} }
@ -2973,6 +2965,75 @@ function print_messages($delstatus=''){
// this and that // this and that
function send_headers(){
header('Content-Type: text/html; charset=UTF-8');
header('Pragma: no-cache');
header('Cache-Control: no-cache');
header('Expires: 0');
if($_SERVER['REQUEST_METHOD']==='HEAD'){
exit; // headers sent, no further processing needed
}
}
function save_setup(){
global $C, $db;
foreach($C['msg_settings'] as $setting){
$_REQUEST[$setting]=htmlspecialchars($_REQUEST[$setting]);
}
foreach($C['number_settings'] as $setting){
settype($_REQUEST[$setting], 'int');
}
settype($_REQUEST['guestaccess'], 'int');
if(!preg_match('/^[01234]$/', $_REQUEST['guestaccess'])){
unset($_REQUEST['guestaccess']);
}elseif($_REQUEST['guestaccess']==4){
$db->exec('DELETE FROM ' . PREFIX . 'sessions WHERE status<7;');
}
settype($_REQUEST['englobalpass'], 'int');
settype($_REQUEST['captcha'], 'int');
settype($_REQUEST['dismemcaptcha'], 'int');
settype($_REQUEST['guestreg'], 'int');
$_REQUEST['rulestxt']=preg_replace("/(\r?\n|\r\n?)/", '<br>', $_REQUEST['rulestxt']);
$_REQUEST['chatname']=htmlspecialchars($_REQUEST['chatname']);
$_REQUEST['redirect']=htmlspecialchars($_REQUEST['redirect']);
$_REQUEST['css']=htmlspecialchars($_REQUEST['css']);
if(!preg_match('/^[a-f0-9]{6}$/i', $_REQUEST['colbg'])){
unset($_REQUEST['colbg']);
}
if(!preg_match('/^[a-f0-9]{6}$/i', $_REQUEST['coltxt'])){
unset($_REQUEST['coltxt']);
}
if($_REQUEST['memberexpire']<5){
$_REQUEST['memberexpire']=5;
}
if($_REQUEST['captchatime']<30){
$_REQUEST['memberexpire']=30;
}
if($_REQUEST['defaultrefresh']<5){
$_REQUEST['defaultrefresh']=5;
}elseif($_REQUEST['defaultrefresh']>150){
$_REQUEST['defaultrefresh']=150;
}
if($_REQUEST['maxname']<1){
$_REQUEST['maxname']=1;
}elseif($_REQUEST['maxname']>50){
$_REQUEST['maxname']=50;
}
if($_REQUEST['maxmessage']<1){
$_REQUEST['maxmessage']=1;
}elseif($_REQUEST['maxmessage']>20000){
$_REQUEST['maxmessage']=20000;
}
if($_REQUEST['numnotes']<1){
$_REQUEST['numnotes']=1;
}
foreach($C['settings'] as $setting){
if(isSet($_REQUEST[$setting])){
update_setting($setting, $_REQUEST[$setting]);
}
}
}
function get_ignored(){ function get_ignored(){
global $db; global $db;
$ignored=array(); $ignored=array();
@ -3074,19 +3135,8 @@ function style_this($text, $styleinfo){
} }
function check_init(){ function check_init(){
global $db, $memcached; global $db;
if(!MEMCACHED || !$found=$memcached->get(DBNAME . '-' . PREFIX . 'num-tables')){ return @$db->query('SELECT * FROM ' . PREFIX . 'settings LIMIT 1;');
if(DBDRIVER===0){
$result=$db->query("SHOW TABLES LIKE '" . PREFIX . "settings';");
$found=($result->fetch(PDO::FETCH_ASSOC)!==false);
}else{
$found=$db->query('SELECT * FROM ' . PREFIX . 'settings LIMIT 1;');
}
if(MEMCACHED){
$memcached->set(DBNAME . '-' . PREFIX . 'num-tables', $found);
}
}
return $found;
} }
function destroy_chat(){ function destroy_chat(){
@ -3103,7 +3153,6 @@ function destroy_chat(){
$db->exec('DROP TABLE ' . PREFIX . 'sessions;'); $db->exec('DROP TABLE ' . PREFIX . 'sessions;');
$db->exec('DROP TABLE ' . PREFIX . 'settings;'); $db->exec('DROP TABLE ' . PREFIX . 'settings;');
if(MEMCACHED){ if(MEMCACHED){
$memcached->delete(DBNAME . '-' . PREFIX . 'num-tables');
$memcached->delete(DBNAME . '-' . PREFIX . 'filter'); $memcached->delete(DBNAME . '-' . PREFIX . 'filter');
$memcached->delete(DBANEM . '-' . PREFIX . 'linkfilter'); $memcached->delete(DBANEM . '-' . PREFIX . 'linkfilter');
foreach($C['settings'] as $setting){ foreach($C['settings'] as $setting){
@ -3118,7 +3167,7 @@ function destroy_chat(){
} }
function init_chat(){ function init_chat(){
global $H, $I, $db, $memcached; global $H, $I, $db;
$suwrite=''; $suwrite='';
if(check_init()){ if(check_init()){
$suwrite=$I['initdbexist']; $suwrite=$I['initdbexist'];
@ -3134,60 +3183,44 @@ function init_chat(){
$suwrite=$I['noconfirm']; $suwrite=$I['noconfirm'];
}else{ }else{
if(DBDRIVER===0){//MySQL if(DBDRIVER===0){//MySQL
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "captcha (id int(10) unsigned NOT NULL AUTO_INCREMENT, time int(10) unsigned NOT NULL, code char(5) NOT NULL, PRIMARY KEY (id) USING BTREE) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_bin;"); $db->exec('CREATE TABLE ' . PREFIX . "captcha (id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, time integer unsigned NOT NULL, code char(5) NOT NULL) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_bin;");
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "filter (id int(10) unsigned NOT NULL AUTO_INCREMENT, filtermatch varchar(255) NOT NULL, filterreplace varchar(20000) NOT NULL, allowinpm tinyint(1) unsigned NOT NULL, regex tinyint(1) unsigned NOT NULL, kick tinyint(1) unsigned NOT NULL, PRIMARY KEY (id) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;"); $db->exec('CREATE TABLE ' . PREFIX . "filter (id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, filtermatch varchar(255) NOT NULL, filterreplace varchar(20000) NOT NULL, allowinpm smallint unsigned NOT NULL, regex smallint unsigned NOT NULL, kick smallint unsigned NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;");
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "ignored (id int(10) unsigned NOT NULL AUTO_INCREMENT, ign varchar(50) NOT NULL, ignby varchar(50) NOT NULL, PRIMARY KEY (id) USING BTREE, INDEX(ign) USING BTREE, INDEX(ignby) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;"); $db->exec('CREATE TABLE ' . PREFIX . "ignored (id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, ign varchar(50) NOT NULL, ignby varchar(50) NOT NULL, INDEX(ign), INDEX(ignby)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;");
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "linkfilter (id int(10) unsigned NOT NULL AUTO_INCREMENT, filtermatch varchar(255) NOT NULL, filterreplace varchar(255) NOT NULL, regex tinyint(1) unsigned NOT NULL, PRIMARY KEY (id) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;"); $db->exec('CREATE TABLE ' . PREFIX . "linkfilter (id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, filtermatch varchar(255) NOT NULL, filterreplace varchar(255) NOT NULL, regex smallint unsigned NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;");
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "members (id int(10) unsigned NOT NULL AUTO_INCREMENT, nickname varchar(50) NOT NULL, passhash char(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, status tinyint(3) unsigned NOT NULL, refresh tinyint(3) unsigned NOT NULL, bgcolour char(6) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, boxwidth tinyint(3) unsigned NOT NULL DEFAULT 40, boxheight tinyint(3) unsigned NOT NULL DEFAULT 3, notesboxheight tinyint(3) unsigned NOT NULL DEFAULT 30, notesboxwidth tinyint(3) unsigned NOT NULL DEFAULT 80, regedby varchar(50) NOT NULL, lastlogin int(10) unsigned NOT NULL, timestamps tinyint(1) unsigned NOT NULL, embed tinyint(1) unsigned NOT NULL DEFAULT 1, incognito tinyint(1) unsigned NOT NULL DEFAULT 0, style varchar(255) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, PRIMARY KEY (id) USING BTREE, UNIQUE(nickname) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;"); $db->exec('CREATE TABLE ' . PREFIX . "members (id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, nickname varchar(50) NOT NULL UNIQUE, passhash char(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, status smallint unsigned NOT NULL, refresh smallint unsigned NOT NULL, bgcolour char(6) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, boxwidth smallint unsigned NOT NULL DEFAULT 40, boxheight smallint unsigned NOT NULL DEFAULT 3, notesboxheight smallint unsigned NOT NULL DEFAULT 30, notesboxwidth smallint unsigned NOT NULL DEFAULT 80, regedby varchar(50) NOT NULL, lastlogin integer unsigned NOT NULL, timestamps smallint unsigned NOT NULL, embed smallint unsigned NOT NULL DEFAULT 1, incognito smallint unsigned NOT NULL DEFAULT 0, style varchar(255) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, nocache smallint UNSIGNED NOT NULL DEFAULT 0) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;");
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "messages (id int(10) unsigned NOT NULL AUTO_INCREMENT, postdate int(10) unsigned NOT NULL, poststatus tinyint(3) unsigned NOT NULL, poster varchar(50) NOT NULL, recipient varchar(50) NOT NULL, text varchar(20000) NOT NULL, delstatus tinyint(3) unsigned NOT NULL, PRIMARY KEY (id) USING BTREE, INDEX(poster) USING BTREE, INDEX(recipient) USING BTREE, INDEX(postdate) USING BTREE, INDEX(poststatus) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;"); $db->exec('CREATE TABLE ' . PREFIX . "messages (id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, postdate integer unsigned NOT NULL, poststatus smallint unsigned NOT NULL, poster varchar(50) NOT NULL, recipient varchar(50) NOT NULL, text varchar(20000) NOT NULL, delstatus smallint unsigned NOT NULL, INDEX(poster), INDEX(recipient), INDEX(postdate), INDEX(poststatus)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;");
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "notes (id int(10) unsigned NOT NULL AUTO_INCREMENT, type char(5) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, lastedited int(10) unsigned NOT NULL, editedby varchar(50) NOT NULL, text varchar(20000) NOT NULL, PRIMARY KEY (id) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;"); $db->exec('CREATE TABLE ' . PREFIX . "notes (id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, type char(5) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, lastedited integer unsigned NOT NULL, editedby varchar(50) NOT NULL, text varchar(20000) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;");
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "sessions (id int(10) unsigned NOT NULL AUTO_INCREMENT, session char(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, nickname varchar(50) NOT NULL, status tinyint(3) unsigned NOT NULL, refresh tinyint(3) unsigned NOT NULL, style varchar(255) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, lastpost int(10) unsigned NOT NULL, passhash char(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, postid char(6) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '000000', boxwidth tinyint(3) unsigned NOT NULL DEFAULT 40, boxheight tinyint(3) unsigned NOT NULL DEFAULT 3, useragent varchar(255) NOT NULL, kickmessage varchar(255) NOT NULL, bgcolour char(6) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, notesboxheight tinyint(3) unsigned NOT NULL DEFAULT 30, notesboxwidth tinyint(3) unsigned NOT NULL DEFAULT 80, entry int(10) unsigned NOT NULL, timestamps tinyint(1) unsigned NOT NULL, embed tinyint(1) unsigned NOT NULL DEFAULT 1, incognito tinyint(1) unsigned NOT NULL DEFAULT 0, ip varchar(45) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, PRIMARY KEY (id) USING BTREE, UNIQUE(session) USING BTREE, UNIQUE(nickname) USING BTREE, INDEX(status) USING BTREE, INDEX(lastpost) USING BTREE) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_bin;"); $db->exec('CREATE TABLE ' . PREFIX . "sessions (id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, session char(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL UNIQUE, nickname varchar(50) NOT NULL UNIQUE, status smallint unsigned NOT NULL, refresh smallint unsigned NOT NULL, style varchar(255) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, lastpost integer unsigned NOT NULL, passhash char(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, postid char(6) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '000000', boxwidth smallint unsigned NOT NULL DEFAULT 40, boxheight smallint unsigned NOT NULL DEFAULT 3, useragent varchar(255) NOT NULL, kickmessage varchar(255) NOT NULL, bgcolour char(6) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, notesboxheight smallint unsigned NOT NULL DEFAULT 30, notesboxwidth smallint unsigned NOT NULL DEFAULT 80, entry integer unsigned NOT NULL, timestamps smallint unsigned NOT NULL, embed smallint unsigned NOT NULL DEFAULT 1, incognito smallint unsigned NOT NULL DEFAULT 0, ip varchar(45) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, nocache smallint UNSIGNED NOT NULL DEFAULT 0, INDEX(status) USING BTREE, INDEX(lastpost) USING BTREE) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_bin;");
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "settings (setting varchar(50) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, value varchar(20000) NOT NULL, PRIMARY KEY (setting) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;"); $db->exec('CREATE TABLE ' . PREFIX . "settings (setting varchar(50) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL PRIMARY KEY, value varchar(20000) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;");
}elseif(DBDRIVER===1){//PostgreSQL }else{
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "captcha (id serial PRIMARY KEY, time integer NOT NULL, code char(5) NOT NULL);"); if(DBDRIVER===1){//PostgreSQL
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "filter (id serial PRIMARY KEY, filtermatch varchar(255) NOT NULL, filterreplace varchar(20000) NOT NULL, allowinpm smallint NOT NULL, regex smallint NOT NULL, kick smallint NOT NULL);"); $primary='serial PRIMARY KEY';
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "ignored (id serial PRIMARY KEY, ign varchar(50) NOT NULL, ignby varchar(50) NOT NULL);"); }else{//SQLite
$primary='integer PRIMARY KEY';
}
$db->exec('CREATE TABLE ' . PREFIX . "captcha (id $primary, time integer NOT NULL, code char(5) NOT NULL);");
$db->exec('CREATE TABLE ' . PREFIX . "filter (id $primary, filtermatch varchar(255) NOT NULL, filterreplace varchar(20000) NOT NULL, allowinpm smallint NOT NULL, regex smallint NOT NULL, kick smallint NOT NULL);");
$db->exec('CREATE TABLE ' . PREFIX . "ignored (id $primary, ign varchar(50) NOT NULL, ignby varchar(50) NOT NULL);");
$db->exec('CREATE INDEX ign ON ' . PREFIX . 'ignored (ign);'); $db->exec('CREATE INDEX ign ON ' . PREFIX . 'ignored (ign);');
$db->exec('CREATE INDEX ignby ON ' . PREFIX . 'ignored (ignby);'); $db->exec('CREATE INDEX ignby ON ' . PREFIX . 'ignored (ignby);');
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "linkfilter (id serial PRIMARY KEY, filtermatch varchar(255) NOT NULL, filterreplace varchar(255) NOT NULL, regex smallint NOT NULL);"); $db->exec('CREATE TABLE ' . PREFIX . "linkfilter (id $primary, filtermatch varchar(255) NOT NULL, filterreplace varchar(255) NOT NULL, regex smallint NOT NULL);");
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "members (id serial PRIMARY KEY, nickname varchar(50) NOT NULL UNIQUE, passhash char(32) NOT NULL, status smallint NOT NULL, refresh smallint NOT NULL, bgcolour char(6) NOT NULL, boxwidth smallint NOT NULL DEFAULT 40, boxheight smallint NOT NULL DEFAULT 3, notesboxheight smallint NOT NULL DEFAULT 30, notesboxwidth smallint NOT NULL DEFAULT 80, regedby varchar(50) DEFAULT '', lastlogin integer DEFAULT 0, timestamps smallint NOT NULL, embed smallint DEFAULT 1, incognito smallint DEFAULT 0, style varchar(255) NOT NULL);"); $db->exec('CREATE TABLE ' . PREFIX . "members (id $primary, nickname varchar(50) NOT NULL UNIQUE, passhash char(32) NOT NULL, status smallint NOT NULL, refresh smallint NOT NULL, bgcolour char(6) NOT NULL, boxwidth smallint NOT NULL DEFAULT 40, boxheight smallint NOT NULL DEFAULT 3, notesboxheight smallint NOT NULL DEFAULT 30, notesboxwidth smallint NOT NULL DEFAULT 80, regedby varchar(50) DEFAULT '', lastlogin integer DEFAULT 0, timestamps smallint NOT NULL, embed smallint NOT NULL DEFAULT 1, incognito smallint NOT NULL DEFAULT 0, style varchar(255) NOT NULL, nocache smallint UNSIGNED NOT NULL DEFAULT 0);");
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "messages (id serial PRIMARY KEY, postdate integer NOT NULL, poststatus smallint NOT NULL, poster varchar(50) NOT NULL, recipient varchar(50) NOT NULL, text varchar(20000) NOT NULL, delstatus smallint NOT NULL);"); $db->exec('CREATE TABLE ' . PREFIX . "messages (id $primary, postdate integer NOT NULL, poststatus smallint NOT NULL, poster varchar(50) NOT NULL, recipient varchar(50) NOT NULL, text varchar(20000) NOT NULL, delstatus smallint NOT NULL);");
$db->exec('CREATE INDEX poster ON ' . PREFIX . 'messages (poster);'); $db->exec('CREATE INDEX poster ON ' . PREFIX . 'messages (poster);');
$db->exec('CREATE INDEX recipient ON ' . PREFIX . 'messages (recipient);'); $db->exec('CREATE INDEX recipient ON ' . PREFIX . 'messages (recipient);');
$db->exec('CREATE INDEX postdate ON ' . PREFIX . 'messages (postdate);'); $db->exec('CREATE INDEX postdate ON ' . PREFIX . 'messages (postdate);');
$db->exec('CREATE INDEX poststatus ON ' . PREFIX . 'messages (poststatus);'); $db->exec('CREATE INDEX poststatus ON ' . PREFIX . 'messages (poststatus);');
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "notes (id serial PRIMARY KEY, type char(5) NOT NULL, lastedited integer NOT NULL, editedby varchar(50) NOT NULL, text varchar(20000) NOT NULL);"); $db->exec('CREATE TABLE ' . PREFIX . "notes (id $primary, type char(5) NOT NULL, lastedited integer NOT NULL, editedby varchar(50) NOT NULL, text varchar(20000) NOT NULL);");
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "sessions (id serial PRIMARY KEY, session char(32) NOT NULL UNIQUE, nickname varchar(50) NOT NULL UNIQUE, status smallint NOT NULL, refresh smallint NOT NULL, style varchar(255) NOT NULL, lastpost integer NOT NULL, passhash char(32) NOT NULL, postid char(6) NOT NULL DEFAULT '000000', boxwidth smallint NOT NULL DEFAULT 40, boxheight smallint NOT NULL DEFAULT 3, useragent varchar(255) NOT NULL, kickmessage varchar(255) DEFAULT '', bgcolour char(6) NOT NULL, notesboxheight smallint NOT NULL DEFAULT 30, notesboxwidth smallint NOT NULL DEFAULT 80, entry integer NOT NULL, timestamps smallint NOT NULL, embed smallint DEFAULT 1, incognito smallint DEFAULT 0, ip varchar(45) NOT NULL);"); $db->exec('CREATE TABLE ' . PREFIX . "sessions (id $primary, session char(32) NOT NULL UNIQUE, nickname varchar(50) NOT NULL UNIQUE, status smallint NOT NULL, refresh smallint NOT NULL, style varchar(255) NOT NULL, lastpost integer NOT NULL, passhash char(32) NOT NULL, postid char(6) NOT NULL DEFAULT '000000', boxwidth smallint NOT NULL DEFAULT 40, boxheight smallint NOT NULL DEFAULT 3, useragent varchar(255) NOT NULL, kickmessage varchar(255) DEFAULT '', bgcolour char(6) NOT NULL, notesboxheight smallint NOT NULL DEFAULT 30, notesboxwidth smallint NOT NULL DEFAULT 80, entry integer NOT NULL, timestamps smallint NOT NULL, embed smallint NOT NULL DEFAULT 1, incognito smallint NOT NULL DEFAULT 0, ip varchar(45) NOT NULL, nocache smallint UNSIGNED NOT NULL DEFAULT 0);");
$db->exec('CREATE INDEX status ON ' . PREFIX . 'sessions (status);'); $db->exec('CREATE INDEX status ON ' . PREFIX . 'sessions (status);');
$db->exec('CREATE INDEX lastpost ON ' . PREFIX . 'sessions (lastpost);'); $db->exec('CREATE INDEX lastpost ON ' . PREFIX . 'sessions (lastpost);');
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "settings (setting varchar(50) PRIMARY KEY, value varchar(20000) NOT NULL);"); $db->exec('CREATE TABLE ' . PREFIX . "settings (setting varchar(50) NOT NULL PRIMARY KEY, value varchar(20000) NOT NULL);");
}else{//sqlite
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "captcha (id INTEGER PRIMARY KEY, time INTEGER NOT NULL, code TEXT NOT NULL);");
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "filter (id INTEGER PRIMARY KEY, filtermatch TEXT NOT NULL, filterreplace TEXT NOT NULL, allowinpm INTEGER NOT NULL, regex INTEGER NOT NULL, kick INTEGER NOT NULL);");
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "ignored (id INTEGER PRIMARY KEY, ign TEXT NOT NULL, ignby TEXT NOT NULL);");
$db->exec('CREATE INDEX IF NOT EXISTS ign ON ' . PREFIX . 'ignored (ign);');
$db->exec('CREATE INDEX IF NOT EXISTS ignby ON ' . PREFIX . 'ignored (ignby);');
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "linkfilter (id INTEGER PRIMARY KEY, filtermatch TEXT NOT NULL, filterreplace TEXT NOT NULL, regex INTEGER NOT NULL);");
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "members (id INTEGER PRIMARY KEY, nickname TEXT NOT NULL UNIQUE, passhash TEXT NOT NULL, status INTEGER NOT NULL, refresh INTEGER NOT NULL, bgcolour TEXT NOT NULL, boxwidth INTEGER NOT NULL DEFAULT 40, boxheight INTEGER NOT NULL DEFAULT 3, notesboxheight INTEGER NOT NULL DEFAULT 30, notesboxwidth INTEGER NOT NULL DEFAULT 80, regedby TEXT DEFAULT '', lastlogin INTEGER DEFAULT 0, timestamps INTEGER NOT NULL, embed INTEGER NOT NULL DEFAULT 1, incognito INTEGER NOT NULL DEFAULT 0, style TEXT NOT NULL);");
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "messages (id INTEGER PRIMARY KEY, postdate INTEGER NOT NULL, poststatus INTEGER NOT NULL, poster TEXT NOT NULL, recipient TEXT NOT NULL, text TEXT NOT NULL, delstatus INTEGER NOT NULL);");
$db->exec('CREATE INDEX IF NOT EXISTS poster ON ' . PREFIX . 'messages (poster);');
$db->exec('CREATE INDEX IF NOT EXISTS recipient ON ' . PREFIX . 'messages (recipient);');
$db->exec('CREATE INDEX IF NOT EXISTS postdate ON ' . PREFIX . 'messages (postdate);');
$db->exec('CREATE INDEX IF NOT EXISTS poststatus ON ' . PREFIX . 'messages (poststatus);');
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "notes (id INTEGER PRIMARY KEY, type TEXT NOT NULL, lastedited INTEGER NOT NULL, editedby TEXT NOT NULL, text TEXT NOT NULL);");
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "sessions (id INTEGER PRIMARY KEY, session TEXT NOT NULL UNIQUE, nickname TEXT NOT NULL UNIQUE, status INTEGER NOT NULL, refresh INTEGER NOT NULL, style TEXT NOT NULL, lastpost INTEGER NOT NULL, passhash TEXT NOT NULL, postid TEXT NOT NULL DEFAULT '000000', boxwidth INTEGER NOT NULL DEFAULT 40, boxheight INTEGER NOT NULL DEFAULT 3, useragent TEXT NOT NULL, kickmessage TEXT DEFAULT '', bgcolour TEXT NOT NULL, notesboxheight INTEGER NOT NULL DEFAULT 30, notesboxwidth INTEGER NOT NULL DEFAULT 80, entry INTEGER NOT NULL, timestamps INTEGER NOT NULL, embed INTEGER NOT NULL DEFAULT 1, incognito INTEGER NOT NULL DEFAULT 0, ip TEXT NOT NULL);");
$db->exec('CREATE INDEX IF NOT EXISTS status ON ' . PREFIX . 'sessions (status);');
$db->exec('CREATE INDEX IF NOT EXISTS lastpost ON ' . PREFIX . 'sessions (lastpost);');
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "settings (setting TEXT NOT NULL PRIMARY KEY, value TEXT NOT NULL);");
} }
$settings=array(array('guestaccess', '0'), array('globalpass', ''), array('englobalpass', '0'), array('captcha', '0'), array('dateformat', 'm-d H:i:s'), array('rulestxt', ''), array('msgencrypted', '0'), array('dbversion', DBVERSION), array('css', 'a:visited{color:#B33CB4;} a:active{color:#FF0033;} a:link{color:#0000FF;} input,select,textarea{color:#FFFFFF;background-color:#000000;} a img{width:15%} a:hover img{width:35%} .error{color:#FF0033;} .delbutton{background-color:#660000;} .backbutton{background-color:#004400;} #exitbutton{background-color:#AA0000;} .center-table{margin-left:auto;margin-right:auto;} body{text-align:center;} .left-table{width:100%;text-align:left;} .right{text-align:right;} .left{text-align:left;} .right-table{border-spacing:0px;margin-left:auto;} .padded{padding:5px;} #chatters{max-height:100px;overflow-y:auto;} .center{text-align:center;}'), array('memberexpire', '60'), array('guestexpire', '15'), array('kickpenalty', '10'), array('entrywait', '120'), array('messageexpire', '14400'), array('messagelimit', '150'), array('maxmessage', 2000), array('captchatime', '600'), array('colbg', '000000'), array('coltxt', 'FFFFFF'), array('maxname', '20'), array('minpass', '5'), array('defaultrefresh', '20'), array('dismemcaptcha', '0'), array('suguests', '0'), array('imgembed', '1'), array('timestamps', '1'), array('trackip', '0'), array('captchachars', '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), array('memkick', '1'), array('forceredirect', '0'), array('redirect', ''), array('incognito', '1'), array('enablejs', '0'), array('chatname', 'My Chat'), array('topic', ''), array('msgsendall', $I['sendallmsg']), array('msgsendmem', $I['sendmemmsg']), array('msgsendmod', $I['sendmodmsg']), array('msgsendadm', $I['sendadmmsg']), array('msgsendprv', $I['sendprvmsg']), array('msgenter', $I['entermsg']), array('msgexit', $I['exitmsg']), array('msgmemreg', $I['memregmsg']), array('msgsureg', $I['suregmsg']), array('msgkick', $I['kickmsg']), array('msgmultikick', $I['multikickmsg']), array('msgallkick', $I['allkickmsg']), array('msgclean', $I['cleanmsg']), array('numnotes', '3'), array('keeplimit', '3'), array('mailsender', 'www-data <www-data@localhost>'), array('mailreceiver', 'Webmaster <webmaster@localhost>'), array('sendmail', '0'), array('modfallback', '1'), array('guestreg', '0')); $settings=array(array('guestaccess', '0'), array('globalpass', ''), array('englobalpass', '0'), array('captcha', '0'), array('dateformat', 'm-d H:i:s'), array('rulestxt', ''), array('msgencrypted', '0'), array('dbversion', DBVERSION), array('css', 'a:visited{color:#B33CB4;} a:active{color:#FF0033;} a:link{color:#0000FF;} input,select,textarea{color:#FFFFFF;background-color:#000000;} a img{width:15%} a:hover img{width:35%} .error{color:#FF0033;} .delbutton{background-color:#660000;} .backbutton{background-color:#004400;} #exitbutton{background-color:#AA0000;} .center-table{margin-left:auto;margin-right:auto;} body{text-align:center;} .left-table{width:100%;text-align:left;} .right{text-align:right;} .left{text-align:left;} .right-table{border-spacing:0px;margin-left:auto;} .padded{padding:5px;} #chatters{max-height:100px;overflow-y:auto;} .center{text-align:center;}'), array('memberexpire', '60'), array('guestexpire', '15'), array('kickpenalty', '10'), array('entrywait', '120'), array('messageexpire', '14400'), array('messagelimit', '150'), array('maxmessage', 2000), array('captchatime', '600'), array('colbg', '000000'), array('coltxt', 'FFFFFF'), array('maxname', '20'), array('minpass', '5'), array('defaultrefresh', '20'), array('dismemcaptcha', '0'), array('suguests', '0'), array('imgembed', '1'), array('timestamps', '1'), array('trackip', '0'), array('captchachars', '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), array('memkick', '1'), array('forceredirect', '0'), array('redirect', ''), array('incognito', '1'), array('enablejs', '0'), array('chatname', 'My Chat'), array('topic', ''), array('msgsendall', $I['sendallmsg']), array('msgsendmem', $I['sendmemmsg']), array('msgsendmod', $I['sendmodmsg']), array('msgsendadm', $I['sendadmmsg']), array('msgsendprv', $I['sendprvmsg']), array('msgenter', $I['entermsg']), array('msgexit', $I['exitmsg']), array('msgmemreg', $I['memregmsg']), array('msgsureg', $I['suregmsg']), array('msgkick', $I['kickmsg']), array('msgmultikick', $I['multikickmsg']), array('msgallkick', $I['allkickmsg']), array('msgclean', $I['cleanmsg']), array('numnotes', '3'), array('keeplimit', '3'), array('mailsender', 'www-data <www-data@localhost>'), array('mailreceiver', 'Webmaster <webmaster@localhost>'), array('sendmail', '0'), array('modfallback', '1'), array('guestreg', '0'), array('disablepm', '0'), array('disabletext', "<h1>$I[disabledtext]</h1>"));
$stmt=$db->prepare('INSERT INTO ' . PREFIX . 'settings (setting, value) VALUES (?, ?);'); $stmt=$db->prepare('INSERT INTO ' . PREFIX . 'settings (setting, value) VALUES (?, ?);');
foreach($settings as $pair){ foreach($settings as $pair){
$stmt->execute($pair); $stmt->execute($pair);
} }
if(MEMCACHED){
$memcached->delete(DBNAME . '-' . PREFIX . 'num-tables');
}
$reg=array( $reg=array(
'nickname' =>$_REQUEST['sunick'], 'nickname' =>$_REQUEST['sunick'],
'passhash' =>md5(sha1(md5($_REQUEST['sunick'].$_REQUEST['supass']))), 'passhash' =>md5(sha1(md5($_REQUEST['sunick'].$_REQUEST['supass']))),
@ -3197,7 +3230,7 @@ function init_chat(){
'timestamps' =>1, 'timestamps' =>1,
'style' =>'color:#FFFFFF;' 'style' =>'color:#FFFFFF;'
); );
$stmt=$db->prepare('INSERT INTO ' . PREFIX . 'members (nickname, passhash, status, refresh, bgcolour, timestamps, style) VALUES (?, ?, ?, ?, ?, ?, ?);'); $stmt=$db->prepare('INSERT INTO ' . PREFIX . 'members (nickname, passhash, status, refresh, bgcolour, timestamps, style, embed, incognito) VALUES (?, ?, ?, ?, ?, ?, ?, 1, 0);');
$stmt->execute(array($reg['nickname'], $reg['passhash'], $reg['status'], $reg['refresh'], $reg['bgcolour'], $reg['timestamps'], $reg['style'])); $stmt->execute(array($reg['nickname'], $reg['passhash'], $reg['status'], $reg['refresh'], $reg['bgcolour'], $reg['timestamps'], $reg['style']));
$suwrite=$I['susuccess']; $suwrite=$I['susuccess'];
} }
@ -3212,14 +3245,14 @@ function update_db(){
$dbversion=(int) get_setting('dbversion'); $dbversion=(int) get_setting('dbversion');
if($dbversion<DBVERSION || get_setting('msgencrypted')!=MSGENCRYPTED){ if($dbversion<DBVERSION || get_setting('msgencrypted')!=MSGENCRYPTED){
if($dbversion<2){ if($dbversion<2){
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "ignored (id int(10) unsigned NOT NULL AUTO_INCREMENT, ignored tinytext NOT NULL, `by` tinytext NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); $db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "ignored (id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, ignored varchar(50) NOT NULL, `by` varchar(50) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
} }
if($dbversion<3){ if($dbversion<3){
$db->exec('INSERT INTO ' . PREFIX . "settings (setting, value) VALUES ('rulestxt', '');"); $db->exec('INSERT INTO ' . PREFIX . "settings (setting, value) VALUES ('rulestxt', '');");
} }
if($dbversion<4){ if($dbversion<4){
$db->exec('ALTER TABLE ' . PREFIX . 'members ADD incognito TINYINT(1) UNSIGNED NOT NULL;'); $db->exec('ALTER TABLE ' . PREFIX . 'members ADD incognito smallint UNSIGNED NOT NULL;');
$db->exec('ALTER TABLE ' . PREFIX . 'sessions ADD incognito TINYINT(1) UNSIGNED NOT NULL;'); $db->exec('ALTER TABLE ' . PREFIX . 'sessions ADD incognito smallint UNSIGNED NOT NULL;');
} }
if($dbversion<5){ if($dbversion<5){
$db->exec('INSERT INTO ' . PREFIX . "settings (setting, value) VALUES ('globalpass', '');"); $db->exec('INSERT INTO ' . PREFIX . "settings (setting, value) VALUES ('globalpass', '');");
@ -3228,7 +3261,7 @@ function update_db(){
$db->exec('INSERT INTO ' . PREFIX . "settings (setting, value) VALUES ('dateformat', 'm-d H:i:s');"); $db->exec('INSERT INTO ' . PREFIX . "settings (setting, value) VALUES ('dateformat', 'm-d H:i:s');");
} }
if($dbversion<7){ if($dbversion<7){
$db->exec('ALTER TABLE ' . PREFIX . 'captcha ADD code TINYTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;'); $db->exec('ALTER TABLE ' . PREFIX . 'captcha ADD code char(5) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;');
} }
if($dbversion<8){ if($dbversion<8){
$db->exec('INSERT INTO ' . PREFIX . "settings (setting, value) VALUES ('captcha', '0'), ('englobalpass', '0');"); $db->exec('INSERT INTO ' . PREFIX . "settings (setting, value) VALUES ('captcha', '0'), ('englobalpass', '0');");
@ -3243,12 +3276,12 @@ function update_db(){
} }
if($dbversion<9){ if($dbversion<9){
$db->exec('INSERT INTO ' . PREFIX . "settings (setting,value) VALUES ('msgencrypted', '0');"); $db->exec('INSERT INTO ' . PREFIX . "settings (setting,value) VALUES ('msgencrypted', '0');");
$db->exec('ALTER TABLE ' . PREFIX . 'settings MODIFY value text NOT NULL;'); $db->exec('ALTER TABLE ' . PREFIX . 'settings MODIFY value varchar(20000) NOT NULL;');
$db->exec('ALTER TABLE ' . PREFIX . 'messages DROP postid;'); $db->exec('ALTER TABLE ' . PREFIX . 'messages DROP postid;');
} }
if($dbversion<10){ if($dbversion<10){
$db->exec('INSERT INTO ' . PREFIX . "settings (setting, value) VALUES ('css', 'a:visited{color:#B33CB4;} a:active{color:#FF0033;} a:link{color:#0000FF;} input,select,textarea{color:#FFFFFF;background-color:#000000;} a img{width:15%} a:hover img{width:35%} .error{color:#FF0033;} .delbutton{background-color:#660000;} .backbutton{background-color:#004400;} #exitbutton{background-color:#AA0000;}'), ('memberexpire', '60'), ('guestexpire', '15'), ('kickpenalty', '10'), ('entrywait', '120'), ('messageexpire', '14400'), ('messagelimit', '150'), ('maxmessage', 2000), ('captchatime', '600');"); $db->exec('INSERT INTO ' . PREFIX . "settings (setting, value) VALUES ('css', 'a:visited{color:#B33CB4;} a:active{color:#FF0033;} a:link{color:#0000FF;} input,select,textarea{color:#FFFFFF;background-color:#000000;} a img{width:15%} a:hover img{width:35%} .error{color:#FF0033;} .delbutton{background-color:#660000;} .backbutton{background-color:#004400;} #exitbutton{background-color:#AA0000;}'), ('memberexpire', '60'), ('guestexpire', '15'), ('kickpenalty', '10'), ('entrywait', '120'), ('messageexpire', '14400'), ('messagelimit', '150'), ('maxmessage', 2000), ('captchatime', '600');");
$db->exec('ALTER TABLE ' . PREFIX . 'sessions ADD ip tinytext NOT NULL;'); $db->exec('ALTER TABLE ' . PREFIX . 'sessions ADD ip varchar(45) NOT NULL;');
} }
if($dbversion<11){ if($dbversion<11){
$db->exec('ALTER TABLE ' , PREFIX . 'captcha CHARACTER SET utf8 COLLATE utf8_bin;'); $db->exec('ALTER TABLE ' , PREFIX . 'captcha CHARACTER SET utf8 COLLATE utf8_bin;');
@ -3259,10 +3292,9 @@ function update_db(){
$db->exec('ALTER TABLE ' . PREFIX . 'notes CHARACTER SET utf8 COLLATE utf8_bin;'); $db->exec('ALTER TABLE ' . PREFIX . 'notes CHARACTER SET utf8 COLLATE utf8_bin;');
$db->exec('ALTER TABLE ' . PREFIX . 'sessions CHARACTER SET utf8 COLLATE utf8_bin;'); $db->exec('ALTER TABLE ' . PREFIX . 'sessions CHARACTER SET utf8 COLLATE utf8_bin;');
$db->exec('ALTER TABLE ' . PREFIX . 'settings CHARACTER SET utf8 COLLATE utf8_bin;'); $db->exec('ALTER TABLE ' . PREFIX . 'settings CHARACTER SET utf8 COLLATE utf8_bin;');
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "linkfilter (id int(10) unsigned NOT NULL, `match` tinytext NOT NULL, `replace` tinytext NOT NULL, regex tinyint(1) unsigned NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;"); $db->exec('CREATE TABLE ' . PREFIX . "linkfilter (id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, `match` varchar(255) NOT NULL, `replace` varchar(255) NOT NULL, regex smallint unsigned NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;");
$db->exec('ALTER TABLE ' . PREFIX . 'linkfilter ADD PRIMARY KEY (id), MODIFY id int(10) unsigned NOT NULL AUTO_INCREMENT;');
$db->exec('ALTER TABLE ' . PREFIX . 'sessions DROP fontinfo, DROP displayname;'); $db->exec('ALTER TABLE ' . PREFIX . 'sessions DROP fontinfo, DROP displayname;');
$db->exec('ALTER TABLE ' . PREFIX . 'members ADD style TEXT NOT NULL;'); $db->exec('ALTER TABLE ' . PREFIX . 'members ADD style varchar(255) NOT NULL;');
$result=$db->query('SELECT * FROM ' . PREFIX . 'members;'); $result=$db->query('SELECT * FROM ' . PREFIX . 'members;');
$stmt=$db->prepare('UPDATE ' . PREFIX . 'members SET style=? WHERE id=?;'); $stmt=$db->prepare('UPDATE ' . PREFIX . 'members SET style=? WHERE id=?;');
while($temp=$result->fetch(PDO::FETCH_ASSOC)){ while($temp=$result->fetch(PDO::FETCH_ASSOC)){
@ -3280,16 +3312,16 @@ function update_db(){
if($dbversion<12){ if($dbversion<12){
$db->exec('ALTER TABLE ' . PREFIX . 'captcha MODIFY code char(5) NOT NULL, DROP INDEX id, ADD PRIMARY KEY (id) USING BTREE;'); $db->exec('ALTER TABLE ' . PREFIX . 'captcha MODIFY code char(5) NOT NULL, DROP INDEX id, ADD PRIMARY KEY (id) USING BTREE;');
$db->exec('ALTER TABLE ' . PREFIX . 'captcha ENGINE=MEMORY;'); $db->exec('ALTER TABLE ' . PREFIX . 'captcha ENGINE=MEMORY;');
$db->exec('ALTER TABLE ' . PREFIX . 'filter MODIFY id int(10) unsigned NOT NULL AUTO_INCREMENT, MODIFY `match` varchar(255) NOT NULL, MODIFY replace varchar(20000) NOT NULL;'); $db->exec('ALTER TABLE ' . PREFIX . 'filter MODIFY id integer unsigned NOT NULL AUTO_INCREMENT, MODIFY `match` varchar(255) NOT NULL, MODIFY replace varchar(20000) NOT NULL;');
$db->exec('ALTER TABLE ' . PREFIX . 'ignored MODIFY ignored varchar(50) NOT NULL, MODIFY `by` varchar(50) NOT NULL, ADD INDEX(ignored) USING BTREE, ADD INDEX(`by`) USING BTREE;'); $db->exec('ALTER TABLE ' . PREFIX . 'ignored MODIFY ignored varchar(50) NOT NULL, MODIFY `by` varchar(50) NOT NULL, ADD INDEX(ignored), ADD INDEX(`by`);');
$db->exec('ALTER TABLE ' . PREFIX . 'linkfilter MODIFY match varchar(255) NOT NULL, MODIFY replace varchar(255) NOT NULL;'); $db->exec('ALTER TABLE ' . PREFIX . 'linkfilter MODIFY match varchar(255) NOT NULL, MODIFY replace varchar(255) NOT NULL;');
$db->exec('ALTER TABLE ' . PREFIX . "members MODIFY id int(10) unsigned NOT NULL AUTO_INCREMENT, MODIFY nickname varchar(50) NOT NULL, MODIFY passhash char(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, MODIFY bgcolour char(6) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, MODIFY boxwidth tinyint(3) NOT NULL DEFAULT '40', MODIFY boxheight tinyint(3) NOT NULL DEFAULT '3', MODIFY notesboxheight tinyint(3) NOT NULL DEFAULT '30', MODIFY notesboxwidth tinyint(3) NOT NULL DEFAULT '80', MODIFY regedby varchar(50) NOT NULL, MODIFY embed tinyint(1) NOT NULL DEFAULT '1', MODIFY incognito tinyint(1) NOT NULL DEFAULT '0', MODIFY style varchar(255) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, ADD UNIQUE(nickname) USING BTREE;"); $db->exec('ALTER TABLE ' . PREFIX . "members MODIFY id integer unsigned NOT NULL AUTO_INCREMENT, MODIFY nickname varchar(50) NOT NULL UNIQUE, MODIFY passhash char(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, MODIFY bgcolour char(6) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, MODIFY boxwidth smallint NOT NULL DEFAULT 40, MODIFY boxheight smallint NOT NULL DEFAULT 3, MODIFY notesboxheight smallint NOT NULL DEFAULT 30, MODIFY notesboxwidth smallint NOT NULL DEFAULT 80, MODIFY regedby varchar(50) NOT NULL, MODIFY embed smallint NOT NULL DEFAULT 1, MODIFY incognito smallint NOT NULL DEFAULT 0, MODIFY style varchar(255) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL;");
$db->exec('ALTER TABLE ' . PREFIX . 'messages MODIFY poster varchar(50) NOT NULL, MODIFY recipient varchar(50) NOT NULL, MODIFY text varchar(20000) NOT NULL, ADD INDEX(poster) USING BTREE, ADD INDEX(recipient) USING BTREE, ADD INDEX(postdate) USING BTREE, ADD INDEX(poststatus) USING BTREE;'); $db->exec('ALTER TABLE ' . PREFIX . 'messages MODIFY poster varchar(50) NOT NULL, MODIFY recipient varchar(50) NOT NULL, MODIFY text varchar(20000) NOT NULL, ADD INDEX(poster), ADD INDEX(recipient), ADD INDEX(postdate), ADD INDEX(poststatus);');
$db->exec('ALTER TABLE ' . PREFIX . 'notes MODIFY type char(5) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, MODIFY editedby varchar(50) NOT NULL, MODIFY text varchar(20000) NOT NULL;'); $db->exec('ALTER TABLE ' . PREFIX . 'notes MODIFY type char(5) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, MODIFY editedby varchar(50) NOT NULL, MODIFY text varchar(20000) NOT NULL;');
$db->exec('ALTER TABLE ' . PREFIX . "sessions MODIFY session char(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, MODIFY nickname varchar(50) NOT NULL, MODIFY style varchar(255) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, MODIFY passhash char(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, MODIFY postid char(6) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '000000', MODIFY boxwidth tinyint(3) unsigned NOT NULL DEFAULT '40', MODIFY boxheight tinyint(3) unsigned NOT NULL DEFAULT '3', MODIFY notesboxheight tinyint(3) unsigned NOT NULL DEFAULT '30', MODIFY notesboxwidth tinyint(3) unsigned NOT NULL DEFAULT '80', MODIFY bgcolour char(6) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, MODIFY useragent varchar(255) NOT NULL, MODIFY kickmessage varchar(255) NOT NULL, MODIFY embed tinyint(1) unsigned NOT NULL DEFAULT '1', MODIFY incognito tinyint(1) unsigned NOT NULL DEFAULT '0', MODIFY ip varchar(45) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, ADD UNIQUE(session) USING BTREE, ADD UNIQUE(nickname) USING BTREE, ADD INDEX(status) USING BTREE, ADD INDEX(lastpost) USING BTREE;"); $db->exec('ALTER TABLE ' . PREFIX . "sessions MODIFY session char(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL UNIQUE, MODIFY nickname varchar(50) NOT NULL UNIQUE, MODIFY style varchar(255) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, MODIFY passhash char(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, MODIFY postid char(6) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '000000', MODIFY boxwidth smallint unsigned NOT NULL DEFAULT 40, MODIFY boxheight smallint unsigned NOT NULL DEFAULT 3, MODIFY notesboxheight smallint unsigned NOT NULL DEFAULT 30, MODIFY notesboxwidth smallint unsigned NOT NULL DEFAULT 80, MODIFY bgcolour char(6) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, MODIFY useragent varchar(255) NOT NULL, MODIFY kickmessage varchar(255) NOT NULL, MODIFY embed smallint unsigned NOT NULL DEFAULT 1, MODIFY incognito smallint unsigned NOT NULL DEFAULT 0, MODIFY ip varchar(45) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, ADD INDEX(status) USING BTREE, ADD INDEX(lastpost) USING BTREE;");
$db->exec('ALTER TABLE ' . PREFIX . 'sessions ENGINE=MEMORY;'); $db->exec('ALTER TABLE ' . PREFIX . 'sessions ENGINE=MEMORY;');
$db->exec('ALTER TABLE ' . PREFIX . 'settings MODIFY id int(10) unsigned NOT NULL, MODIFY setting varchar(50) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, MODIFY value varchar(20000) NOT NULL;'); $db->exec('ALTER TABLE ' . PREFIX . 'settings MODIFY id integer unsigned NOT NULL, MODIFY setting varchar(50) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, MODIFY value varchar(20000) NOT NULL;');
$db->exec('ALTER TABLE ' . PREFIX . 'settings DROP PRIMARY KEY, DROP id, ADD PRIMARY KEY(setting) USING BTREE;'); $db->exec('ALTER TABLE ' . PREFIX . 'settings DROP PRIMARY KEY, DROP id, ADD PRIMARY KEY(setting);');
$db->exec('INSERT INTO ' . PREFIX . "settings (setting, value) VALUES ('enablejs', '0'), ('chatname', 'My Chat'), ('topic', ''), ('msgsendall', '$I[sendallmsg]'), ('msgsendmem', '$I[sendmemmsg]'), ('msgsendmod', '$I[sendmodmsg]'), ('msgsendadm', '$I[sendadmmsg]'), ('msgsendprv', '$I[sendprvmsg]'), ('numnotes', '3');"); $db->exec('INSERT INTO ' . PREFIX . "settings (setting, value) VALUES ('enablejs', '0'), ('chatname', 'My Chat'), ('topic', ''), ('msgsendall', '$I[sendallmsg]'), ('msgsendmem', '$I[sendmemmsg]'), ('msgsendmod', '$I[sendmodmsg]'), ('msgsendadm', '$I[sendadmmsg]'), ('msgsendprv', '$I[sendprvmsg]'), ('numnotes', '3');");
} }
if($dbversion<13){ if($dbversion<13){
@ -3304,7 +3336,7 @@ function update_db(){
$memcached->delete(DBNAME . '-' . PREFIX . 'ignored'); $memcached->delete(DBNAME . '-' . PREFIX . 'ignored');
} }
if(DBDRIVER===0){//MySQL - previously had a wrong SQL syntax and the captcha table was not created. if(DBDRIVER===0){//MySQL - previously had a wrong SQL syntax and the captcha table was not created.
$db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . 'captcha (id int(10) unsigned NOT NULL AUTO_INCREMENT, time int(10) unsigned NOT NULL, code char(5) NOT NULL, PRIMARY KEY (id) USING BTREE) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_bin;'); $db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . 'captcha (id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, time integer unsigned NOT NULL, code char(5) NOT NULL) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_bin;');
} }
} }
if($dbversion<15){ if($dbversion<15){
@ -3315,6 +3347,16 @@ function update_db(){
$css.=' .center-table{margin-left:auto;margin-right:auto;} body{text-align:center;} .left-table{width:100%;text-align:left;} .right{text-align:right;} .left{text-align:left;} .right-table{border-spacing:0px;margin-left:auto;} .padded{padding:5px;} #chatters{max-height:100px;overflow-y:auto;} .center{text-align:center;}'; $css.=' .center-table{margin-left:auto;margin-right:auto;} body{text-align:center;} .left-table{width:100%;text-align:left;} .right{text-align:right;} .left{text-align:left;} .right-table{border-spacing:0px;margin-left:auto;} .padded{padding:5px;} #chatters{max-height:100px;overflow-y:auto;} .center{text-align:center;}';
update_setting('css', $css); update_setting('css', $css);
} }
if($dbversion<17){
$db->exec('ALTER TABLE ' . PREFIX . 'sessions ADD COLUMN nocache smallint UNSIGNED NOT NULL DEFAULT 0;');
$db->exec('ALTER TABLE ' . PREFIX . 'members ADD COLUMN nocache smallint UNSIGNED NOT NULL DEFAULT 0;');
}
if($dbversion<18){
$db->exec('INSERT INTO ' . PREFIX . "settings (setting, value) VALUES ('disablepm', '0');");
}
if($dbversion<19){
$db->exec('INSERT INTO ' . PREFIX . "settings (setting, value) VALUES ('disabletext', '<h1>$I[disabledtext]</h1>');");
}
update_setting('dbversion', DBVERSION); update_setting('dbversion', DBVERSION);
if(get_setting('msgencrypted')!=MSGENCRYPTED){ if(get_setting('msgencrypted')!=MSGENCRYPTED){
if(!extension_loaded('openssl')){ if(!extension_loaded('openssl')){
@ -3409,6 +3451,12 @@ function check_db(){
}else{ }else{
send_fatal_error($I['nodbsetup']); send_fatal_error($I['nodbsetup']);
} }
}else{
if(isSet($_REQUEST['action']) && $_REQUEST['action']==='setup'){
send_fatal_error($I['nodbsetup']);
}else{
send_fatal_error($I['nodb']);
}
} }
}catch(PDOException $e){ }catch(PDOException $e){
if(isSet($_REQUEST['action']) && $_REQUEST['action']==='setup'){ if(isSet($_REQUEST['action']) && $_REQUEST['action']==='setup'){
@ -3453,7 +3501,7 @@ function load_html(){
'form' =>"form action=\"$_SERVER[SCRIPT_NAME]\" method=\"post\"", 'form' =>"form action=\"$_SERVER[SCRIPT_NAME]\" method=\"post\"",
'meta_html' =>"<meta name=\"robots\" content=\"noindex,nofollow\"><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><meta http-equiv=\"Pragma\" content=\"no-cache\"><meta http-equiv=\"Cache-Control\" content=\"no-cache\"><meta http-equiv=\"expires\" content=\"0\">", 'meta_html' =>"<meta name=\"robots\" content=\"noindex,nofollow\"><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><meta http-equiv=\"Pragma\" content=\"no-cache\"><meta http-equiv=\"Cache-Control\" content=\"no-cache\"><meta http-equiv=\"expires\" content=\"0\">",
'credit' =>'<small><br><br><a target="_blank" href="https://github.com/DanWin/le-chat-php">LE CHAT-PHP - ' . VERSION . '</a></small>', 'credit' =>'<small><br><br><a target="_blank" href="https://github.com/DanWin/le-chat-php">LE CHAT-PHP - ' . VERSION . '</a></small>',
'commonform' =>hidden('lang', $language) 'commonform' =>hidden('lang', $language).hidden('nc', substr(time(), -6))
); );
if(isSet($_REQUEST['session'])){ if(isSet($_REQUEST['session'])){
$H['commonform'].=hidden('session', $_REQUEST['session']); $H['commonform'].=hidden('session', $_REQUEST['session']);
@ -3493,8 +3541,9 @@ function load_lang(){
} }
function load_config(){ function load_config(){
define('VERSION', '1.16.4'); // Script version date_default_timezone_set('UTC');
define('DBVERSION', 16); // Database version define('VERSION', '1.17'); // Script version
define('DBVERSION', 19); // Database version
define('MSGENCRYPTED', false); // Store messages encrypted in the database to prevent other database users from reading them - true/false - visit the setup page after editing! define('MSGENCRYPTED', false); // Store messages encrypted in the database to prevent other database users from reading them - true/false - visit the setup page after editing!
define('ENCRYPTKEY', 'MY_KEY'); // Encryption key for messages define('ENCRYPTKEY', 'MY_KEY'); // Encryption key for messages
define('DBHOST', 'localhost'); // Database host define('DBHOST', 'localhost'); // Database host

View File

@ -330,6 +330,11 @@ $T=array(
'assuguest' => 'Als Anwerber', 'assuguest' => 'Als Anwerber',
'fatalerror' => 'Fataler Fehler', 'fatalerror' => 'Fataler Fehler',
'prevmatch' => 'Ihr regex war folgender', 'prevmatch' => 'Ihr regex war folgender',
'matchtoolong' => 'Ihr Match war zu lang. Sie können max. 255 Zeichen benutzen. Versuchen Sie diesen aufzuteilen.' 'matchtoolong' => 'Ihr Match war zu lang. Sie können max. 255 Zeichen benutzen. Versuchen Sie diesen aufzuteilen.',
'nocache' => 'Neulade-Hack für alte Browser hinzufügen.<br>Aktiviere dies, falls Neuladen nicht funktioniert.',
'disablepm' => 'Private Nachrichten deaktivieren',
'disablechat' => 'Chat deaktivieren',
'disabletext' => 'Chat deaktiviert Nachricht (html)',
'disabledtext' => 'Kurzzeitig deaktiviert'
); );
?> ?>

View File

@ -330,6 +330,11 @@ $I=array(
'assuguest' => 'As applicant', 'assuguest' => 'As applicant',
'fatalerror' => 'Fatal error', 'fatalerror' => 'Fatal error',
'prevmatch' => 'Your match was as follows', 'prevmatch' => 'Your match was as follows',
'matchtoolong' => 'Your match was too long. You can use max. 255 characters. Try splitting it up.' 'matchtoolong' => 'Your match was too long. You can use max. 255 characters. Try splitting it up.',
'nocache' => 'Add refresh hack for old browsers.<br>Enable, if refreshing doesn\'t work.',
'disablepm' => 'Disable private messages',
'disablechat' => 'Disable chat',
'disabletext' => 'Chat disabled message (html)',
'disabledtext' => 'Temporarily disabled'
); );
?> ?>