From ea6b97372f2325fae93dbdfefd350bf49cc187bb Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Thu, 17 Dec 2015 19:44:09 +0100 Subject: [PATCH] Version 1.15 Made code reading easier for newbies Removed inefficient memcached caching of members and ignored Display access denied page for non-authorized use of sub-sections. Added change nickname option in profile Various bugfixes --- CHANGELOG | 8 + chat.php | 1433 ++++++++++++++++++++++++++++++++++++++------------- lang_de.php | 12 +- lang_en.php | 12 +- 4 files changed, 1087 insertions(+), 378 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 7efb95b..b68006b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,8 +1,16 @@ +Version 1.15 - Dec. 17, 2015 +Made code reading easier for newbies +Removed inefficient memcached caching of members and ignored +Display access denied page for non-authorized use of sub-sections. +Added change nickname option in profile +Various bugfixes + Version 1.14.1 - Nov. 2, 2015 Ignore possible deadlock warning Only display the let users in button when there are guests waiting to be let in Fix filter and ignore feature if they have multiple values +Version 1.14 - Oct. 31, 2015 Added support for sqlite and PostgreSQL database engines Replaced deprecated HTML with CSS for HTML5 compatibility Show Topic on login and don't prepend "Topic:" diff --git a/chat.php b/chat.php index 3cd84b6..cfedbe6 100755 --- a/chat.php +++ b/chat.php @@ -18,8 +18,14 @@ * along with this program. If not, see . */ -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; // ignore HEAD requests +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 +} +// initialize and load variables/configuration date_default_timezone_set('UTC'); $A=array();// All registered members $C=array();// Configuration @@ -44,7 +50,9 @@ check_db(); // main program: decide what to do based on queries if(!isSet($_REQUEST['action'])){ - if(!check_init()) send_init(); + if(!check_init()){ + send_init(); + } send_login(); }elseif($_REQUEST['action']==='view'){ check_session(); @@ -69,8 +77,11 @@ if(!isSet($_REQUEST['action'])){ 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); + 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(); @@ -85,14 +96,20 @@ if(!isSet($_REQUEST['action'])){ }elseif($_REQUEST['action']==='delete'){ check_session(); if($_REQUEST['what']==='all'){ - if(isSet($_REQUEST['confirm'])) del_all_messages($U['nickname'], 10, $U['entry']); - else send_del_confirm(); + if(isSet($_REQUEST['confirm'])){ + del_all_messages($U['nickname'], 10, $U['entry']); + }else{ + send_del_confirm(); + } + }elseif($_REQUEST['what']==='last'){ + del_last_message(); } - elseif($_REQUEST['what']==='last') del_last_message(); send_post(); }elseif($_REQUEST['action']==='profile'){ check_session(); - if(isSet($_REQUEST['do']) && $_REQUEST['do']==='save') save_profile(); + if(isSet($_REQUEST['do']) && $_REQUEST['do']==='save'){ + save_profile(); + } send_profile(); }elseif($_REQUEST['action']==='logout'){ kill_session(); @@ -102,29 +119,49 @@ if(!isSet($_REQUEST['action'])){ send_colours(); }elseif($_REQUEST['action']==='notes'){ check_session(); - if(!empty($_REQUEST['do']) && $_REQUEST['do']==='admin' && $U['status']>6) send_notes('admin'); - if($U['status']<5) send_login(); + if(!empty($_REQUEST['do']) && $_REQUEST['do']==='admin' && $U['status']>6){ + send_notes('admin'); + } + if($U['status']<5){ + send_access_denied(); + } send_notes('staff'); }elseif($_REQUEST['action']==='help'){ check_session(); send_help(); }elseif($_REQUEST['action']==='admin'){ check_session(); - if($U['status']<5) send_login(); + if($U['status']<5){ + send_access_denied(); + } if(empty($_REQUEST['do'])){ }elseif($_REQUEST['do']==='clean'){ - if($_REQUEST['what']==='choose') send_choose_messages(); - elseif($_REQUEST['what']==='selected') clean_selected(); - elseif($_REQUEST['what']==='room') clean_room(); - elseif($_REQUEST['what']==='nick') del_all_messages($_REQUEST['nickname'], $U['status'], 0); + if($_REQUEST['what']==='choose'){ + send_choose_messages(); + }elseif($_REQUEST['what']==='selected'){ + clean_selected(); + }elseif($_REQUEST['what']==='room'){ + clean_room(); + }elseif($_REQUEST['what']==='nick'){ + del_all_messages($_REQUEST['nickname'], $U['status'], 0); + } }elseif($_REQUEST['do']==='kick'){ - if(!isSet($_REQUEST['name'])) send_admin(); - if(isSet($_REQUEST['what']) && $_REQUEST['what']==='purge') kick_chatter($_REQUEST['name'], $_REQUEST['kickmessage'], true); - else kick_chatter($_REQUEST['name'], $_REQUEST['kickmessage'], false); + if(!isSet($_REQUEST['name'])){ + send_admin(); + } + if(isSet($_REQUEST['what']) && $_REQUEST['what']==='purge'){ + kick_chatter($_REQUEST['name'], $_REQUEST['kickmessage'], true); + }else{ + kick_chatter($_REQUEST['name'], $_REQUEST['kickmessage'], false); + } }elseif($_REQUEST['do']==='logout'){ - if(isSet($_REQUEST['name'])) logout_chatter($_REQUEST['name']); + if(isSet($_REQUEST['name'])){ + logout_chatter($_REQUEST['name']); + } }elseif($_REQUEST['do']==='sessions'){ - if(isSet($_REQUEST['nick'])) kick_chatter(array($_REQUEST['nick']), '', false); + if(isSet($_REQUEST['nick'])){ + kick_chatter(array($_REQUEST['nick']), '', false); + } send_sessions(); }elseif($_REQUEST['do']==='register'){ register_guest(3); @@ -148,15 +185,21 @@ if(!isSet($_REQUEST['action'])){ manage_linkfilter(); send_linkfilter(); }elseif($_REQUEST['do']==='topic'){ - if(isSet($_REQUEST['topic'])) update_setting('topic', htmlspecialchars($_REQUEST['topic'])); + if(isSet($_REQUEST['topic'])){ + update_setting('topic', htmlspecialchars($_REQUEST['topic'])); + } }elseif($_REQUEST['do']==='passreset'){ passreset(); } send_admin(); }elseif($_REQUEST['action']==='setup'){ - if(!check_init()) send_init(); + if(!check_init()){ + send_init(); + } update_db(); - if(!valid_admin()) send_alogin(); + if(!valid_admin()){ + send_alogin(); + } $C['bool_settings']=array('suguests', 'imgembed', 'timestamps', 'trackip', 'memkick', 'forceredirect', 'incognito', 'enablejs'); $C['colour_settings']=array('colbg', 'coltxt'); $C['msg_settings']=array('msgenter', 'msgexit', 'msgmemreg', 'msgsureg', 'msgkick', 'msgmultikick', 'msgallkick', 'msgclean', 'msgsendall', 'msgsendmem', 'msgsendmod', 'msgsendadm', 'msgsendprv'); @@ -166,21 +209,44 @@ if(!isSet($_REQUEST['action'])){ $C['settings']=array_merge(array('guestaccess', 'englobalpass', 'globalpass', 'captcha', 'dismemcaptcha', 'topic'), $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'])){ }elseif($_REQUEST['do']==='save'){ - foreach($C['msg_settings'] as $setting) $_REQUEST[$setting]=htmlspecialchars($_REQUEST[$setting]); - foreach($C['number_settings'] as $setting) settype($_REQUEST[$setting], 'int'); + foreach($C['msg_settings'] as $setting){ + $_REQUEST[$setting]=htmlspecialchars($_REQUEST[$setting]); + } + foreach($C['number_settings'] as $setting){ + settype($_REQUEST[$setting], 'int'); + } $_REQUEST['rulestxt']=preg_replace("/(\r?\n|\r\n?)/", '
', $_REQUEST['rulestxt']); $_REQUEST['chatname']=htmlspecialchars($_REQUEST['chatname']); - 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; + 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]); } @@ -190,8 +256,11 @@ if(!isSet($_REQUEST['action'])){ restore_backup(); send_backup(); }elseif($_REQUEST['do']==='destroy' && $U['status']==8){ - if(isSet($_REQUEST['confirm'])) destroy_chat(); - else send_destroy_chat(); + if(isSet($_REQUEST['confirm'])){ + destroy_chat(); + }else{ + send_destroy_chat(); + } } send_setup(); }elseif($_REQUEST['action']==='init'){ @@ -238,9 +307,13 @@ function thr(){ function print_start($class='', $ref=0, $url=''){ global $H, $I, $U; - if(!empty($url)) header("Refresh: $ref; URL=$url"); + if(!empty($url)){ + header("Refresh: $ref; URL=$url"); + } echo "$H[meta_html]"; - if(!empty($url)) echo ""; + if(!empty($url)){ + echo ""; + } if($class==='init'){ echo "$I[init]"; echo ""; @@ -248,7 +321,11 @@ function print_start($class='', $ref=0, $url=''){ echo ''.get_setting('chatname').''; print_stylesheet(); } - if(!empty($U['bgcolour'])) $style=" style=\"background-color:#$U[bgcolour];\""; else $style=''; + if(!empty($U['bgcolour'])){ + $style=" style=\"background-color:#$U[bgcolour];\""; + }else{ + $style=''; + } echo ""; } @@ -266,10 +343,25 @@ function send_redirect(){ print_end(); } +function send_access_denied(){ + global $H, $I, $U; + header('HTTP/1.1 401 Forbidden'); + print_start('access_denied'); + echo "

$I[accessdenied]

".sprintf($I['loggedinas'], style_this($U['nickname'], $U['style'])); + echo "
<$H[form]>$H[commonform]".hidden('action', 'logout'); + if(!isSet($_REQUEST['session'])){ + hidden('session', $U['session']); + } + echo submit($I['logout'], 'id="exitbutton"')."
"; + print_end(); +} + function send_captcha(){ global $C, $I, $db, $memcached; $difficulty=(int) get_setting('captcha'); - if($difficulty===0) return; + if($difficulty===0){ + return; + } $captchachars=get_setting('captchachars'); $length=strlen($captchachars)-1; $code=''; @@ -328,12 +420,19 @@ function send_captcha(){ $y=mt_rand(10, 180); $found=true; foreach($chars as $char){ - if($char['x']>=$x && ($char['x']-$x)<25) $found=false; - elseif($char['x']<$x && ($x-$char['x'])<25) $found=false; + if($char['x']>=$x && ($char['x']-$x)<25){ + $found=false; + }elseif($char['x']<$x && ($x-$char['x'])<25){ + $found=false; + } if(!$found){ - if($char['y']>=$y && ($char['y']-$y)<25) break; - elseif($char['y']<$y && ($y-$char['y'])<25) break; - else $found=true; + if($char['y']>=$y && ($char['y']-$y)<25){ + break; + }elseif($char['y']<$y && ($y-$char['y'])<25){ + break; + }else{ + $found=true; + } } } } @@ -350,12 +449,19 @@ function send_captcha(){ $y=mt_rand(10, 180); $found=true; foreach($chars as $char){ - if($char['x']>=$x && ($char['x']-$x)<25) $found=false; - elseif($char['x']<$x && ($x-$char['x'])<25) $found=false; + if($char['x']>=$x && ($char['x']-$x)<25){ + $found=false; + }elseif($char['x']<$x && ($x-$char['x'])<25){ + $found=false; + } if(!$found){ - if($char['y']>=$y && ($char['y']-$y)<25) break; - elseif($char['y']<$y && ($y-$char['y'])<25) break; - else $found=true; + if($char['y']>=$y && ($char['y']-$y)<25){ + break; + }elseif($char['y']<$y && ($y-$char['y'])<25){ + break; + }else{ + $found=true; + } } } } @@ -383,31 +489,62 @@ function send_setup(){ $ga=(int) get_setting('guestaccess'); print_start('setup'); echo "

$I[setup]

<$H[form]>$H[commonform]".hidden('action', 'setup').hidden('do', 'save'); - if(!isSet($_REQUEST['session'])) echo hidden('session', $U['session']); + if(!isSet($_REQUEST['session'])){ + echo hidden('session', $U['session']); + } echo ''; thr(); echo "'; thr(); $englobal=(int) get_setting('englobalpass'); echo "'; thr(); echo "'; foreach($C['text_settings'] as $setting){ thr(); @@ -426,14 +563,38 @@ function send_setup(){ echo '
$I[guestacc]"; echo '
$I[globalloginpass]"; echo ''; echo ''; echo ''; echo '
 
$I[sysmessages]"; echo ''; - foreach($C['msg_settings'] as $setting) echo "'; + foreach($C['msg_settings'] as $setting){ + echo "'; + } echo '
 $I[$setting] 
 $I[$setting] 
'; echo ''; echo '
'; foreach($C['textarea_settings'] as $setting){ @@ -453,8 +614,16 @@ function send_setup(){ echo '
'.$I[$setting].''; echo "
'; } thr(); @@ -462,14 +631,20 @@ function send_setup(){ if($U['status']==8){ echo ''; echo "'; echo "
<$H[form]>$H[commonform]".hidden('action', 'setup').hidden('do', 'backup'); - if(!isSet($_REQUEST['session'])) hidden('session', $U['session']); + if(!isSet($_REQUEST['session'])){ + hidden('session', $U['session']); + } echo submit($I['backuprestore']).'<$H[form]>$H[commonform]".hidden('action', 'setup').hidden('do', 'destroy'); - if(!isSet($_REQUEST['session'])) hidden('session', $U['session']); + if(!isSet($_REQUEST['session'])){ + hidden('session', $U['session']); + } echo submit($I['destroy'], 'class="delbutton"').'

'; } echo "<$H[form]>$H[commonform]".hidden('action', 'logout'); - if(!isSet($_REQUEST['session'])) hidden('session', $U['session']); + if(!isSet($_REQUEST['session'])){ + hidden('session', $U['session']); + } echo submit($I['logout'], 'id="exitbutton"')."$H[credit]
"; print_end(); } @@ -479,7 +654,9 @@ function restore_backup(){ $code=json_decode($_REQUEST['restore'], true); if(isSet($_REQUEST['settings'])){ foreach($C['settings'] as $setting){ - if(isSet($code['settings'][$setting])) update_setting($setting, $code['settings'][$setting]); + if(isSet($code['settings'][$setting])){ + update_setting($setting, $code['settings'][$setting]); + } } } if(isSet($_REQUEST['filter']) && (isSet($code['filters']) || isSet($code['linkfilters']))){ @@ -493,8 +670,12 @@ function restore_backup(){ foreach($code['linkfilters'] as $filter){ $stmt->execute(array($filter['match'], $filter['replace'], $filter['regex'])); } - if($C['memcached']) $memcached->delete("$C[dbname]-$C[prefix]filter"); - if($C['memcached']) $memcached->delete("$C[dbname]-$C[prefix]linkfilter"); + if($C['memcached']){ + $memcached->delete("$C[dbname]-$C[prefix]filter"); + } + if($C['memcached']){ + $memcached->delete("$C[dbname]-$C[prefix]linkfilter"); + } } if(isSet($_REQUEST['members']) && isSet($code['members'])){ $db->exec("DELETE FROM $C[prefix]members;"); @@ -502,7 +683,6 @@ function restore_backup(){ foreach($code['members'] as $member){ $stmt->execute(array($member['nickname'], $member['passhash'], $member['status'], $member['refresh'], $member['bgcolour'], $member['boxwidth'], $member['boxheight'], $member['notesboxwidth'], $member['notesboxheight'], $member['regedby'], $member['lastlogin'], $member['timestamps'], $member['embed'], $member['incognito'], $member['style'])); } - if($C['memcached']) $memcached->delete("$C[dbname]-$C[prefix]members"); } if(isSet($_REQUEST['notes']) && isSet($code['notes'])){ $db->exec("DELETE FROM $C[prefix]notes;"); @@ -518,7 +698,9 @@ function send_backup(){ $code=array(); if($_REQUEST['do']==='backup'){ if(isSet($_REQUEST['settings'])){ - foreach($C['settings'] as $setting) $code['settings'][$setting]=get_setting($setting); + foreach($C['settings'] as $setting){ + $code['settings'][$setting]=get_setting($setting); + } } if(isSet($_REQUEST['filter'])){ $result=$db->query("SELECT filtermatch, filterreplace, allowinpm, regex, kick FROM $C[prefix]filter;"); @@ -541,10 +723,26 @@ function send_backup(){ $code['notes'][]=$result->fetch(PDO::FETCH_ASSOC); } } - if(isSet($_REQUEST['settings'])) $chksettings=' checked'; else $chksettings=''; - if(isSet($_REQUEST['filter'])) $chkfilters=' checked'; else $chkfilters=''; - if(isSet($_REQUEST['members'])) $chkmembers=' checked'; else $chkmembers=''; - if(isSet($_REQUEST['notes'])) $chknotes=' checked'; else $chknotes=''; + if(isSet($_REQUEST['settings'])){ + $chksettings=' checked'; + }else{ + $chksettings=''; + } + if(isSet($_REQUEST['filter'])){ + $chkfilters=' checked'; + }else{ + $chkfilters=''; + } + if(isSet($_REQUEST['members'])){ + $chkmembers=' checked'; + }else{ + $chkmembers=''; + } + if(isSet($_REQUEST['notes'])){ + $chknotes=' checked'; + }else{ + $chknotes=''; + } print_start('backup'); echo "

$I[backuprestore]

"; thr(); @@ -628,7 +826,9 @@ function send_admin($arg=''){ $chlist.=""; array_multisort(array_map('strtolower', array_keys($P)), SORT_ASC, SORT_STRING, $P); foreach($P as $user){ - if($user[2]<$U['status']) $chlist.=""; + if($user[2]<$U['status']){ + $chlist.=""; + } } $chlist.=''; echo "

$I[admfunc]

$arg
"; @@ -645,7 +845,9 @@ function send_admin($arg=''){ echo "
'; echo submit($I['clean'], 'class="delbutton"').'
'; thr(); @@ -676,10 +878,26 @@ function send_admin($arg=''){ frmadm('guestaccess'); echo ''; echo '
'.submit($I['change']).'
'; thr(); if(get_setting('suguests')){ @@ -687,7 +905,9 @@ function send_admin($arg=''){ frmadm('superguest'); echo "
'.submit($I['register']).'
'; thr(); @@ -700,33 +920,48 @@ function send_admin($arg=''){ array_multisort(array_map('strtolower', array_keys($A)), SORT_ASC, SORT_STRING, $A); foreach($A as $member){ echo "'; } echo "'.submit($I['change']).''; thr(); echo "
$I[passreset]"; frmadm('passreset'); echo "
'.submit($I['change']).'
'; thr(); echo "
$I[regguest]"; frmadm('register'); echo "
'.submit($I['register']).'
'; thr(); @@ -754,25 +989,39 @@ function send_sessions(){ echo "$I[actions]"; foreach($lines as $temp){ if($temp['status']!=0 && $temp['entry']!=0 && (!$temp['incognito'] || $temp['status']<$U['status'])){ - if($temp['status']<=2) $s=' (G)'; - elseif($temp['status']==3) $s=''; - elseif($temp['status']==5) $s=' (M)'; - elseif($temp['status']==6) $s=' (SM)'; - elseif($temp['status']==7) $s=' (A)'; - elseif($temp['status']==8) $s=' (SA)'; + if($temp['status']<=2){ + $s=' (G)'; + }elseif($temp['status']==3){ + $s=''; + }elseif($temp['status']==5){ + $s=' (M)'; + }elseif($temp['status']==6){ + $s=' (SM)'; + }elseif($temp['status']==7){ + $s=' (A)'; + }elseif($temp['status']==8){ + $s=' (SA)'; + } echo ''.style_this($temp['nickname'].$s, $temp['style']).''; - if($temp['status']>2) get_timeout($temp['lastpost'], $memexpire); - else get_timeout($temp['lastpost'], $guestexpire); + if($temp['status']>2){ + get_timeout($temp['lastpost'], $memexpire); + }else{ + get_timeout($temp['lastpost'], $guestexpire); + } echo ''; if($U['status']>$temp['status'] || $U['session']===$temp['session']){ echo "$temp[useragent]"; - if($trackip) echo "$temp[ip]"; + if($trackip){ + echo "$temp[ip]"; + } echo ''; frmadm('sessions'); echo hidden('nick', $temp['nickname']).submit($I['kick']).''; }else{ echo '-'; - if($trackip) echo '-'; + if($trackip){ + echo '-'; + } echo '-'; } } @@ -786,30 +1035,44 @@ function manage_filter(){ if(isSet($_REQUEST['id'])){ $_REQUEST['match']=htmlspecialchars($_REQUEST['match']); if(isSet($_REQUEST['regex']) && $_REQUEST['regex']==1){ - if(!is_int(@preg_match("/$_REQUEST[match]/", ''))) send_filter($I['incorregex']); + if(!is_int(@preg_match("/$_REQUEST[match]/", ''))){ + send_filter($I['incorregex']); + } $reg=1; }else{ $_REQUEST['match']=preg_replace('/([^\w\d])/', "\\\\$1", $_REQUEST['match']); $reg=0; } - if(isSet($_REQUEST['allowinpm']) && $_REQUEST['allowinpm']==1) $pm=1; - else $pm=0; - if(isSet($_REQUEST['kick']) && $_REQUEST['kick']==1) $kick=1; - else $kick=0; + if(isSet($_REQUEST['allowinpm']) && $_REQUEST['allowinpm']==1){ + $pm=1; + }else{ + $pm=0; + } + if(isSet($_REQUEST['kick']) && $_REQUEST['kick']==1){ + $kick=1; + }else{ + $kick=0; + } if(preg_match('/^[0-9]*$/', $_REQUEST['id'])){ if(empty($_REQUEST['match'])){ $stmt=$db->prepare("DELETE FROM $C[prefix]filter WHERE id=?;"); $stmt->execute(array($_REQUEST['id'])); - if($C['memcached']) $memcached->delete("$C[dbname]-$C[prefix]filter"); + if($C['memcached']){ + $memcached->delete("$C[dbname]-$C[prefix]filter"); + } }else{ $stmt=$db->prepare("UPDATE $C[prefix]filter SET filtermatch=?, filterreplace=?, allowinpm=?, regex=?, kick=? WHERE id=?;"); $stmt->execute(array($_REQUEST['match'], $_REQUEST['replace'], $pm, $reg, $kick, $_REQUEST['id'])); - if($C['memcached']) $memcached->delete("$C[dbname]-$C[prefix]filter"); + if($C['memcached']){ + $memcached->delete("$C[dbname]-$C[prefix]filter"); + } } }elseif(preg_match('/^\+$/', $_REQUEST['id'])){ $stmt=$db->prepare("INSERT INTO $C[prefix]filter (filtermatch, filterreplace, allowinpm, regex, kick) VALUES (?, ?, ?, ?, ?);"); $stmt->execute(array($_REQUEST['match'], $_REQUEST['replace'], $pm, $reg, $kick)); - if($C['memcached']) $memcached->delete("$C[dbname]-$C[prefix]filter"); + if($C['memcached']){ + $memcached->delete("$C[dbname]-$C[prefix]filter"); + } } } } @@ -819,7 +1082,9 @@ function manage_linkfilter(){ if(isSet($_REQUEST['id'])){ $_REQUEST['match']=htmlspecialchars($_REQUEST['match']); if(isSet($_REQUEST['regex']) && $_REQUEST['regex']==1){ - if(!is_int(@preg_match("/$_REQUEST[match]/", ''))) send_linkfilter($I['incorregex']); + if(!is_int(@preg_match("/$_REQUEST[match]/", ''))){ + send_linkfilter($I['incorregex']); + } $reg=1; }else{ $_REQUEST['match']=preg_replace('/([^\w\d])/', "\\\\$1", $_REQUEST['match']); @@ -829,16 +1094,22 @@ function manage_linkfilter(){ if(empty($_REQUEST['match'])){ $stmt=$db->prepare("DELETE FROM $C[prefix]linkfilter WHERE id=?;"); $stmt->execute(array($_REQUEST['id'])); - if($C['memcached']) $memcached->delete("$C[dbname]-$C[prefix]linkfilter"); + if($C['memcached']){ + $memcached->delete("$C[dbname]-$C[prefix]linkfilter"); + } }else{ $stmt=$db->prepare("UPDATE $C[prefix]linkfilter SET filtermatch=?, filterreplace=?, regex=? WHERE id=?;"); $stmt->execute(array($_REQUEST['match'], $_REQUEST['replace'], $reg, $_REQUEST['id'])); - if($C['memcached']) $memcached->delete("$C[dbname]-$C[prefix]linkfilter"); + if($C['memcached']){ + $memcached->delete("$C[dbname]-$C[prefix]linkfilter"); + } } }elseif(preg_match('/^\+$/', $_REQUEST['id'])){ $stmt=$db->prepare("INSERT INTO $C[prefix]linkfilter (filtermatch, filterreplace, regex) VALUES (?, ?, ?);"); $stmt->execute(array($_REQUEST['match'], $_REQUEST['replace'], $reg)); - if($C['memcached']) $memcached->delete("$C[dbname]-$C[prefix]linkfilter"); + if($C['memcached']){ + $memcached->delete("$C[dbname]-$C[prefix]linkfilter"); + } } } } @@ -855,25 +1126,36 @@ function send_filter($arg=''){ echo "$I[regex]"; echo "$I[kick]"; echo "$I[apply]"; - if($C['memcached']) $filters=$memcached->get("$C[dbname]-$C[prefix]filter"); + if($C['memcached']){ + $filters=$memcached->get("$C[dbname]-$C[prefix]filter"); + } if(!$C['memcached'] || $memcached->getResultCode()!==Memcached::RES_SUCCESS){ $filters=array(); $result=$db->query("SELECT id, filtermatch, filterreplace, allowinpm, regex, kick FROM $C[prefix]filter;"); while($filter=$result->fetch(PDO::FETCH_ASSOC)){ $filters[]=array('id'=>$filter['id'], 'match'=>$filter['filtermatch'], 'replace'=>$filter['filterreplace'], 'allowinpm'=>$filter['allowinpm'], 'regex'=>$filter['regex'], 'kick'=>$filter['kick']); } - if($C['memcached']) $memcached->set("$C[dbname]-$C[prefix]filter", $filters); + if($C['memcached']){ + $memcached->set("$C[dbname]-$C[prefix]filter", $filters); + } } foreach($filters as $filter){ - if($filter['allowinpm']==1) $check=' checked'; - else $check=''; - if($filter['regex']==1) $checked=' checked'; - else{ + if($filter['allowinpm']==1){ + $check=' checked'; + }else{ + $check=''; + } + if($filter['regex']==1){ + $checked=' checked'; + }else{ $checked=''; $filter['match']=preg_replace('/(\\\\(.))/', "$2", $filter['match']); } - if($filter['kick']==1) $checkedk=' checked'; - else $checkedk=''; + if($filter['kick']==1){ + $checkedk=' checked'; + }else{ + $checkedk=''; + } echo ''; frmadm('filter'); echo hidden('id', $filter['id']); @@ -909,18 +1191,23 @@ function send_linkfilter($arg=''){ echo "$I[replace]"; echo "$I[regex]"; echo "$I[apply]"; - if($C['memcached']) $filters=$memcached->get("$C[dbname]-$C[prefix]linkfilter"); + if($C['memcached']){ + $filters=$memcached->get("$C[dbname]-$C[prefix]linkfilter"); + } if(!$C['memcached'] || $memcached->getResultCode()!==Memcached::RES_SUCCESS){ $filters=array(); $result=$db->query("SELECT id, filtermatch, filterreplace, regex FROM $C[prefix]linkfilter;"); while($filter=$result->fetch(PDO::FETCH_ASSOC)){ $filters[]=array('id'=>$filter['id'], 'match'=>$filter['filtermatch'], 'replace'=>$filter['filterreplace'], 'regex'=>$filter['regex']); } - if($C['memcached']) $memcached->set("$C[dbname]-$C[prefix]linkfilter", $filters); + if($C['memcached']){ + $memcached->set("$C[dbname]-$C[prefix]linkfilter", $filters); + } } foreach($filters as $filter){ - if($filter['regex']==1) $checked=' checked'; - else{ + if($filter['regex']==1){ + $checked=' checked'; + }else{ $checked=''; $filter['match']=preg_replace('/(\\\\(.))/', "$2", $filter['match']); } @@ -963,10 +1250,14 @@ function send_messages($js){ if(!$js){ if(isSet($_COOKIE[$C['cookiename']])){ print_start('messages', $U['refresh'], "$_SERVER[SCRIPT_NAME]?action=view"); - if(get_setting('enablejs')==1) echo ""; + if(get_setting('enablejs')==1){ + echo ""; + } }else{ print_start('messages', $U['refresh'], "$_SERVER[SCRIPT_NAME]?action=view&session=$U[session]&lang=$C[lang]"); - if(get_setting('enablejs')==1) echo ""; + if(get_setting('enablejs')==1){ + echo ""; + } } }else{ print_start('messages'); @@ -979,7 +1270,9 @@ function send_messages($js){ echo "
$I[bottom]
"; print_messages(); echo '
'; - if($js) echo ""; + if($js){ + echo ""; + } echo "$I[top]"; print_end(); } @@ -992,10 +1285,15 @@ function send_notes($type){ echo "'; echo "
<$H[form] target=\"view\">$H[commonform]".hidden('action', 'notes').hidden('do', 'admin').submit($I['admnotes']).'<$H[form] target=\"view\">$H[commonform]".hidden('action', 'notes').submit($I['notes']).'
'; } - if($type==='staff') echo "

$I[staffnotes]

"; - else echo "

$I[adminnotes]

"; + if($type==='staff'){ + echo "

$I[staffnotes]

"; + }else{ + echo "

$I[adminnotes]

"; + } if(isset($_REQUEST['text'])){ - if($C['msgencrypted']) $_REQUEST['text']=openssl_encrypt($_REQUEST['text'], 'aes-256-cbc', $C['encryptkey'], 0, '1234567890123456'); + if($C['msgencrypted']){ + $_REQUEST['text']=openssl_encrypt($_REQUEST['text'], 'aes-256-cbc', $C['encryptkey'], 0, '1234567890123456'); + } $time=time(); $stmt=$db->prepare("INSERT INTO $C[prefix]notes (type, lastedited, editedby, text) VALUES (?, ?, ?, ?);"); $stmt->execute(array($type, $time, $U['nickname'], $_REQUEST['text'])); @@ -1012,26 +1310,41 @@ function send_notes($type){ $stmt=$db->prepare("SELECT COUNT(*) FROM $C[prefix]notes WHERE type=?;"); $stmt->execute(array($type)); $num=$stmt->fetch(PDO::FETCH_NUM); - if(!empty($_REQUEST['revision'])) $revision=intval($_REQUEST['revision']); else $revision=0; + if(!empty($_REQUEST['revision'])){ + $revision=intval($_REQUEST['revision']); + }else{ + $revision=0; + } $stmt=$db->prepare("SELECT * FROM $C[prefix]notes WHERE type=? ORDER BY id DESC LIMIT 1 OFFSET $revision;"); $stmt->execute(array($type)); - if($note=$stmt->fetch(PDO::FETCH_ASSOC)) printf($I['lastedited'], $note['editedby'], date($dateformat, $note['lastedited'])); - else $note['text']=''; - if($C['msgencrypted']) $note['text']=openssl_decrypt($note['text'], 'aes-256-cbc', $C['encryptkey'], 0, '1234567890123456'); + if($note=$stmt->fetch(PDO::FETCH_ASSOC)){ + printf($I['lastedited'], $note['editedby'], date($dateformat, $note['lastedited'])); + }else{ + $note['text']=''; + } + if($C['msgencrypted']){ + $note['text']=openssl_decrypt($note['text'], 'aes-256-cbc', $C['encryptkey'], 0, '1234567890123456'); + } echo "

<$H[form]>$H[commonform]"; - if($type==='admin') echo hidden('do', 'admin'); + if($type==='admin'){ + echo hidden('do', 'admin'); + } echo hidden('action', 'notes')."
'; echo submit($I['savenotes']).'
'; if($num[0]>1){ echo "
"; if($revision<$num[0]-1){ echo "'; } if($revision>0){ echo "'; } echo '
$I[revisions]<$H[form]>$H[commonform]".hidden('action', 'notes').hidden('revision', $revision+1); - if($type==='admin') echo hidden('do', 'admin'); + if($type==='admin'){ + echo hidden('do', 'admin'); + } echo submit($I['older']).'<$H[form]>$H[commonform]".hidden('action', 'notes').hidden('revision', $revision-1); - if($type==='admin') echo hidden('do', 'admin'); + if($type==='admin'){ + echo hidden('do', 'admin'); + } echo submit($I['newer']).'
'; @@ -1068,8 +1381,11 @@ function send_waiting_room(){ global $C, $H, $I, $U, $countmods, $db; parse_sessions(); $ga=(int) get_setting('guestaccess'); - if($ga===3 && $countmods>0) $wait=false; - else $wait=true; + if($ga===3 && $countmods>0){ + $wait=false; + }else{ + $wait=true; + } if(!isSet($U['session'])){ setcookie($C['cookiename'], false); send_error($I['expire']); @@ -1105,13 +1421,19 @@ function send_waiting_room(){ printf($I['waitreload'], $refresh); echo '



'; echo "
<$H[form]>$H[commonform]"; - if(!isSet($_REQUEST['session'])) hidden('session', $U['session']); + if(!isSet($_REQUEST['session'])){ + hidden('session', $U['session']); + } echo hidden('action', 'wait').submit($I['reload']).'
'; echo "<$H[form]>$H[commonform]"; - if(!isSet($_REQUEST['session'])) hidden('session', $U['session']); + if(!isSet($_REQUEST['session'])){ + hidden('session', $U['session']); + } echo hidden('action', 'logout').submit($I['exit'], 'id="exitbutton"').''; $rulestxt=get_setting('rulestxt'); - if(!empty($rulestxt)) echo "

$I[rules]

$rulestxt"; + if(!empty($rulestxt)){ + echo "

$I[rules]

$rulestxt"; + } echo ''; print_end(); } @@ -1132,12 +1454,20 @@ function send_del_confirm(){ print_start('del_confirm'); echo "
$I[confirm]
"; frmpst('delete'); - if(isSet($_REQUEST['multi'])) echo hidden('multi', 'on'); - if(isSet($_REQUEST['sendto'])) echo hidden('sendto', $_REQUEST['sendto']); + if(isSet($_REQUEST['multi'])){ + echo hidden('multi', 'on'); + } + if(isSet($_REQUEST['sendto'])){ + echo hidden('sendto', $_REQUEST['sendto']); + } echo hidden('confirm', 'yes').hidden('what', $_REQUEST['what']).submit($I['yes'], 'class="delbutton"').''; frmpst('post'); - if(isSet($_REQUEST['multi'])) echo hidden('multi', 'on'); - if(isSet($_REQUEST['sendto'])) echo hidden('sendto', $_REQUEST['sendto']); + if(isSet($_REQUEST['multi'])){ + echo hidden('multi', 'on'); + } + if(isSet($_REQUEST['sendto'])){ + echo hidden('sendto', $_REQUEST['sendto']); + } echo submit($I['no'], 'class="backbutton"').'
'; print_end(); } @@ -1146,13 +1476,19 @@ function send_post(){ global $I, $P, $U, $countmods; $U['postid']=substr(time(), -6); print_start('post'); - if(!isSet($_REQUEST['sendto'])) $_REQUEST['sendto']=''; + if(!isSet($_REQUEST['sendto'])){ + $_REQUEST['sendto']=''; + } echo '
'; thr(); } + echo "'; + thr(); echo '
'; frmpst('post'); echo hidden('postid', $U['postid']); - if(isSet($_REQUEST['multi'])) echo hidden('multi', 'on'); + if(isSet($_REQUEST['multi'])){ + echo hidden('multi', 'on'); + } echo ''; - if(!isSet($U['rejected'])) $U['rejected']=''; + if(!isSet($U['rejected'])){ + $U['rejected']=''; + } if(isSet($_REQUEST['multi'])){ echo ""; }else{ @@ -1160,34 +1496,48 @@ function send_post(){ } echo '
'.style_this($U['nickname'], $U['style']).':'.submit($I['talkto']).'
"; thr(); } @@ -1304,20 +1678,26 @@ function send_profile($arg=''){ thr(); echo ""; thr(); if(get_setting('imgembed')){ echo ""; thr(); } if($U['status']>=5 && get_setting('incognito')){ echo ""; thr(); } @@ -1335,11 +1715,19 @@ function send_profile($arg=''){ } if($U['status']>=2){ echo "
'; frmpst('delete'); - if(isSet($_REQUEST['multi'])) echo hidden('multi', 'on'); + if(isSet($_REQUEST['multi'])){ + echo hidden('multi', 'on'); + } echo hidden('sendto', $_REQUEST['sendto']).hidden('what', 'last'); echo submit($I['dellast'], 'class="delbutton"').''; frmpst('delete', 'all'); - if(isSet($_REQUEST['multi'])) echo hidden('multi', 'on'); + if(isSet($_REQUEST['multi'])){ + echo hidden('multi', 'on'); + } echo hidden('sendto', $_REQUEST['sendto']).hidden('what', 'all'); echo submit($I['delall'], 'class="delbutton"').''; frmpst('post'); @@ -1220,14 +1574,20 @@ function send_help(){ global $H, $I, $U; print_start('help'); $rulestxt=get_setting('rulestxt'); - if(!empty($rulestxt)) echo "

$I[rules]

$rulestxt


"; + if(!empty($rulestxt)){ + echo "

$I[rules]

$rulestxt


"; + } echo "

$I[help]

$I[helpguest]"; - if(get_setting('imgembed')) echo "
$I[helpembed]"; + if(get_setting('imgembed')){ + echo "
$I[helpembed]"; + } if($U['status']>=3){ echo "
$I[helpmem]
"; if($U['status']>=5){ echo "
$I[helpmod]
"; - if($U['status']>=7) echo "
$I[helpadm]
"; + if($U['status']>=7){ + echo "
$I[helpadm]
"; + } } } echo "

$H[backtochat]$H[credit]
"; @@ -1243,7 +1603,9 @@ function send_profile($arg=''){ $ignored=array(); $ignore=get_ignored(); foreach($ignore as $ign){ - if($ign['by']===$U['nickname']) $ignored[]=$ign['ignored']; + if($ign['by']===$U['nickname']){ + $ignored[]=$ign['ignored']; + } } if(count($ignored)>0){ echo "
$I[unignore]"; @@ -1265,7 +1627,9 @@ function send_profile($arg=''){ echo "
"; thr(); - if(!isSet($_COOKIE[$C['cookiename']])) $param="&session=$U[session]&lang=$C[lang]"; else $param=''; + if(!isSet($_COOKIE[$C['cookiename']])){ + $param="&session=$U[session]&lang=$C[lang]"; + }else{ + $param=''; + } preg_match('/#([0-9a-f]{6})/i', $U['style'], $matches); echo ""; @@ -1290,13 +1658,19 @@ function send_profile($arg=''){ echo "
$I[ignore]"; echo "
$I[refreshrate]"; echo "
$I[fontcolour] ($I[viewexample])"; echo "
   
$I[timestamps]"; echo '
$I[embed]"; echo '
$I[incognito]"; echo '
"; - echo ""; + echo ""; + echo '
$I[changepass]
"; + echo '
 $I[oldpass]
'; + echo ""; echo ""; - echo "
 $I[oldpass]
 $I[newpass]
 $I[confirmpass]
 $I[confirmpass]
"; + echo '
$I[changenickname]
'; + echo ""; + echo ""; + echo '
 $I[newnickname]
 $I[newpass]
'.submit($I['savechanges'])."

$H[backtochat]
"; print_end(); } @@ -1351,9 +1739,13 @@ function send_controls(){ echo "<$H[form] target=\"post\">$H[commonform]".hidden('action', 'post').submit($I['reloadpb']).''; echo "<$H[form] target=\"view\">$H[commonform]".hidden('action', 'view').submit($I['reloadmsgs']).''; echo "<$H[form] target=\"view\">$H[commonform]".hidden('action', 'profile').submit($I['chgprofile']).''; - if($U['status']>=5) echo "<$H[form] target=\"view\">$H[commonform]".hidden('action', 'admin').submit($I['adminbtn']).''; - if($U['status']>=5) echo "<$H[form] target=\"view\">$H[commonform]".hidden('action', 'notes').submit($I['notes']).''; - if($U['status']>=3) echo "<$H[form] target=\"_blank\">$H[commonform]".hidden('action', 'login').submit($I['clone']).''; + if($U['status']>=5){ + echo "<$H[form] target=\"view\">$H[commonform]".hidden('action', 'admin').submit($I['adminbtn']).''; + echo "<$H[form] target=\"view\">$H[commonform]".hidden('action', 'notes').submit($I['notes']).''; + } + if($U['status']>=3){ + echo "<$H[form] target=\"_blank\">$H[commonform]".hidden('action', 'login').submit($I['clone']).''; + } echo "<$H[form] target=\"view\">$H[commonform]".hidden('action', 'help').submit($I['randh']).''; echo "<$H[form] target=\"_parent\">$H[commonform]".hidden('action', 'logout').submit($I['exit'], 'id="exitbutton"').''; echo ''; @@ -1393,14 +1785,18 @@ function send_login(){ $englobal=(int) get_setting('englobalpass'); echo '

'.get_setting('chatname').'

'; echo "<$H[form] target=\"_parent\">$H[commonform]".hidden('action', 'login'); - if($englobal===1 && isSet($_POST['globalpass'])) echo hidden('globalpass', $_POST['globalpass']); + if($englobal===1 && isSet($_POST['globalpass'])){ + echo hidden('globalpass', $_POST['globalpass']); + } echo ''; if($englobal!==1 || (isSet($_POST['globalpass']) && $_POST['globalpass']==get_setting('globalpass'))){ echo ""; echo ""; send_captcha(); if($ga!==0){ - if($englobal===2) echo ""; + if($englobal===2){ + echo ""; + } echo "'; @@ -1413,10 +1809,14 @@ function send_login(){ echo get_setting('topic'); echo ''; $rulestxt=get_setting('rulestxt'); - if(!empty($rulestxt)) echo "

$I[rules]

$rulestxt
"; + if(!empty($rulestxt)){ + echo "

$I[rules]

$rulestxt
"; + } }else{ echo ""; - if($ga===0) echo ""; + if($ga===0){ + echo ""; + } echo '
$I[nick]
$I[pass]
$I[globalloginpass]
$I[globalloginpass]
$I[choosecol]
$I[globalloginpass]
$I[noguests]
$I[noguests]
'.submit($I['enter']).'
'; } echo "

$I[changelang]"; @@ -1455,9 +1855,13 @@ function print_chatters(){ } if(!empty($M)){ echo "$I[members]: ".implode('   ', $M).''; - if(!empty($G)) echo '  '; + if(!empty($G)){ + echo '  '; + } + } + if(!empty($G)){ + echo "$I[guests]: ".implode('   ', $G).''; } - if(!empty($G)) echo "$I[guests]: ".implode('   ', $G).''; echo ''; } @@ -1467,32 +1871,53 @@ function create_session($setup){ global $C, $I, $U, $db, $memcached; $U['nickname']=preg_replace('/\s+/', '', $_REQUEST['nick']); $U['passhash']=md5(sha1(md5($U['nickname'].$_REQUEST['pass']))); - if(!check_member()) add_user_defaults(); + if(!check_member()){ + add_user_defaults(); + } $U['entry']=$U['lastpost']=time(); - if($setup) $U['incognito']=1; + if($setup){ + $U['incognito']=1; + } if(get_setting('captcha')>0 && ($U['status']==1 || get_setting('dismemcaptcha')==0)){ - if(!isSet($_REQUEST['challenge'])) send_error($I['wrongcaptcha']); + if(!isSet($_REQUEST['challenge'])){ + send_error($I['wrongcaptcha']); + } if(!$C['memcached']){ $stmt=$db->prepare("SELECT code FROM $C[prefix]captcha WHERE id=?;"); $stmt->execute(array($_REQUEST['challenge'])); $stmt->bindColumn(1, $code); - if(!$stmt->fetch(PDO::FETCH_BOUND)) send_error($I['captchaexpire']); + if(!$stmt->fetch(PDO::FETCH_BOUND)){ + send_error($I['captchaexpire']); + } $timeout=time()-get_setting('captchatime'); $stmt=$db->prepare("DELETE FROM $C[prefix]captcha WHERE id=? OR timeexecute(array($_REQUEST['challenge'], $timeout)); }else{ - if(!$code=$memcached->get("$C[dbname]-$C[prefix]captcha-$_REQUEST[challenge]")) send_error($I['captchaexpire']); + if(!$code=$memcached->get("$C[dbname]-$C[prefix]captcha-$_REQUEST[challenge]")){ + send_error($I['captchaexpire']); + } $memcached->delete("$C[dbname]-$C[prefix]captcha-$_REQUEST[challenge]"); } - if($_REQUEST['captcha']!=$code) send_error($I['wrongcaptcha']); + if($_REQUEST['captcha']!=$code){ + send_error($I['wrongcaptcha']); + } } if($U['status']==1){ $ga=(int) get_setting('guestaccess'); - if(!valid_nick($U['nickname'])) send_error(sprintf($I['invalnick'], get_setting('maxname'))); - if(!valid_pass($_REQUEST['pass'])) send_error(sprintf($I['invalpass'], get_setting('minpass'))); - if($ga===0) send_error($I['noguests']); - if($ga===3) $U['entry']=0; - if(get_setting('englobalpass')!=0 && isSet($_REQUEST['globalpass']) && $_REQUEST['globalpass']!=get_setting('globalpass')) send_error($I['wrongglobalpass']); + if(!valid_nick($U['nickname'])){ + send_error(sprintf($I['invalnick'], get_setting('maxname'))); + } + if(!valid_pass($_REQUEST['pass'])){ + send_error(sprintf($I['invalpass'], get_setting('minpass'))); + } + if($ga===0){ + send_error($I['noguests']); + }elseif($ga===3){ + $U['entry']=0; + } + if(get_setting('englobalpass')!=0 && isSet($_REQUEST['globalpass']) && $_REQUEST['globalpass']!=get_setting('globalpass')){ + send_error($I['wrongglobalpass']); + } } write_new_session(); } @@ -1523,14 +1948,22 @@ function write_new_session(){ do{ $U['session']=md5(time().mt_rand().$U['nickname']); }while(isSet($sids[$U['session']]));// check for hash collision - if(isSet($_SERVER['HTTP_USER_AGENT'])) $useragent=htmlspecialchars($_SERVER['HTTP_USER_AGENT']); - else $useragent=''; - if(get_setting('trackip')) $ip=$_SERVER['REMOTE_ADDR']; - else $ip=''; + if(isSet($_SERVER['HTTP_USER_AGENT'])){ + $useragent=htmlspecialchars($_SERVER['HTTP_USER_AGENT']); + }else{ + $useragent=''; + } + if(get_setting('trackip')){ + $ip=$_SERVER['REMOTE_ADDR']; + }else{ + $ip=''; + } $stmt=$db->prepare("INSERT INTO $C[prefix]sessions (session, nickname, status, refresh, style, lastpost, passhash, boxwidth, boxheight, useragent, bgcolour, notesboxwidth, notesboxheight, entry, timestamps, embed, incognito, ip) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"); $stmt->execute(array($U['session'], $U['nickname'], $U['status'], $U['refresh'], $U['style'], $U['lastpost'], $U['passhash'], $U['boxwidth'], $U['boxheight'], $useragent, $U['bgcolour'], $U['notesboxwidth'], $U['notesboxheight'], $U['entry'], $U['timestamps'], $U['embed'], $U['incognito'], $ip)); setcookie($C['cookiename'], $U['session']); - if($U['status']>=3 && !$U['incognito']) add_system_message(sprintf(get_setting('msgenter'), style_this($U['nickname'], $U['style']))); + if($U['status']>=3 && !$U['incognito']){ + add_system_message(sprintf(get_setting('msgenter'), style_this($U['nickname'], $U['style']))); + } } } @@ -1539,18 +1972,26 @@ function approve_session(){ if(isSet($_REQUEST['what'])){ if($_REQUEST['what']==='allowchecked' && isSet($_REQUEST['csid'])){ $stmt=$db->prepare("UPDATE $C[prefix]sessions SET entry=lastpost WHERE nickname=?;"); - foreach($_REQUEST['csid'] as $nick) $stmt->execute(array($nick)); + foreach($_REQUEST['csid'] as $nick){ + $stmt->execute(array($nick)); + } }elseif($_REQUEST['what']==='allowall' && isSet($_REQUEST['alls'])){ $stmt=$db->prepare("UPDATE $C[prefix]sessions SET entry=lastpost WHERE nickname=?;"); - foreach($_REQUEST['alls'] as $nick) $stmt->execute(array($nick)); + foreach($_REQUEST['alls'] as $nick){ + $stmt->execute(array($nick)); + } }elseif($_REQUEST['what']==='denychecked' && isSet($_REQUEST['csid'])){ $time=60*(get_setting('kickpenalty')-get_setting('guestexpire'))+time(); $stmt=$db->prepare("UPDATE $C[prefix]sessions SET lastpost=?, status=0, kickmessage=? WHERE nickname=? AND status=1;"); - foreach($_REQUEST['csid'] as $nick) $stmt->execute(array($time, $_REQUEST['kickmessage'], $nick)); + foreach($_REQUEST['csid'] as $nick){ + $stmt->execute(array($time, $_REQUEST['kickmessage'], $nick)); + } }elseif($_REQUEST['what']==='denyall' && isSet($_REQUEST['alls'])){ $time=60*(get_setting('kickpenalty')-get_setting('guestexpire'))+time(); $stmt=$db->prepare("UPDATE $C[prefix]sessions SET lastpost=?, status=0, kickmessage=? WHERE nickname=? AND status=1;"); - foreach($_REQUEST['alls'] as $nick) $stmt->execute(array($time, $_REQUEST['kickmessage'], $nick)); + foreach($_REQUEST['alls'] as $nick){ + $stmt->execute(array($time, $_REQUEST['kickmessage'], $nick)); + } } } } @@ -1590,11 +2031,15 @@ function check_login(){ } function kill_session(){ - global $C, $I, $U, $db, $memcached; + global $C, $I, $U, $db; parse_sessions(); setcookie($C['cookiename'], false); - if(!isSet($U['session'])) send_error($I['expire']); - if($U['status']==0) send_error("$I[kicked]
$U[kickmessage]"); + if(!isSet($U['session'])){ + send_error($I['expire']); + } + if($U['status']==0){ + send_error("$I[kicked]
$U[kickmessage]"); + } $stmt=$db->prepare("DELETE FROM $C[prefix]sessions WHERE session=?;"); $stmt->execute(array($U['session'])); if($U['status']==1){ @@ -1605,9 +2050,9 @@ function kill_session(){ $stmt=$db->prepare("DELETE FROM $C[prefix]ignored WHERE ign=? OR ignby=?;"); $stmt->execute(array($U['nickname'], $U['nickname'])); $db->exec("DELETE FROM $C[prefix]messages WHERE poster='' AND recipient='' AND poststatus=9;"); - if($C['memcached']) $memcached->delete("$C[dbname]-$C[prefix]ignored"); + }elseif($U['status']>=3 && !$U['incognito']){ + add_system_message(sprintf(get_setting('msgexit'), style_this($U['nickname'], $U['style']))); } - elseif($U['status']>=3 && !$U['incognito']) add_system_message(sprintf(get_setting('msgexit'), style_this($U['nickname'], $U['style']))); } function kick_chatter($names, $mes, $purge){ @@ -1621,7 +2066,9 @@ function kick_chatter($names, $mes, $purge){ foreach($lines as $temp){ if(($temp['nickname']===$U['nickname'] && $U['nickname']===$name) || ($U['status']>$temp['status'] && (($temp['nickname']===$name && $temp['status']>0) || ($name==='&' && $temp['status']==1)))){ $stmt->execute(array($time, $mes, $temp['session'])); - if($purge) del_all_messages($temp['nickname'], 10, 0); + if($purge){ + del_all_messages($temp['nickname'], 10, 0); + } $lonick.=style_this($temp['nickname'], $temp['style']).', '; ++$i; unset($P[$name]); @@ -1640,12 +2087,14 @@ function kick_chatter($names, $mes, $purge){ } } } - if(!empty($lonick)) return true; + if(!empty($lonick)){ + return true; + } return false; } function logout_chatter($names){ - global $C, $P, $U, $db, $memcached; + global $C, $P, $U, $db; $lines=parse_sessions(); $stmt=$db->prepare("DELETE FROM $C[prefix]sessions WHERE session=? AND statusprepare("UPDATE $C[prefix]messages SET poster='' WHERE poster=? AND poststatus=9;"); @@ -1659,7 +2108,6 @@ function logout_chatter($names){ $stmt1->execute(array($temp['nickname'])); $stmt2->execute(array($temp['nickname'])); $stmt3->execute(array($temp['nickname'], $temp['nickname'])); - if($C['memcached']) $memcached->delete("$C[dbname]-$C[prefix]ignored"); } unset($P[$name]); } @@ -1694,7 +2142,7 @@ function get_nowchatting(){ } function parse_sessions(){ - global $C, $P, $U, $countmods, $db, $memcached; + global $C, $P, $U, $countmods, $db; $guestexpire=time()-60*get_setting('guestexpire'); $memberexpire=time()-60*get_setting('memberexpire'); $result=$db->prepare("SELECT nickname, status FROM $C[prefix]sessions WHERE (status<=2 AND lastpost2 AND lastpostexecute(array($temp['nickname'])); $stmt2->execute(array($temp['nickname'])); $stmt3->execute(array($temp['nickname'], $temp['nickname'])); - if($C['memcached']) $memcached->delete("$C[dbname]-$C[prefix]ignored"); } } $db->exec("DELETE FROM $C[prefix]messages WHERE poster='' AND recipient='' AND poststatus=9;"); @@ -1732,7 +2179,9 @@ function parse_sessions(){ if(!$temp['incognito']){ $P[$temp['nickname']]=[$temp['nickname'], $temp['style'], $temp['status']]; } - if($temp['status']>=5) ++$countmods; + if($temp['status']>=5){ + ++$countmods; + } } } return $lines; @@ -1759,25 +2208,27 @@ function check_member(){ } function read_members(){ - global $A, $C, $db, $memcached; - if($C['memcached']) $A=$memcached->get("$C[dbname]-$C[prefix]members"); - if(!$C['memcached'] || $memcached->getResultCode()!==Memcached::RES_SUCCESS){ - $result=$db->query("SELECT * FROM $C[prefix]members;"); - while($temp=$result->fetch(PDO::FETCH_ASSOC)){ - $A[$temp['nickname']][0]=$temp['nickname']; - $A[$temp['nickname']][1]=$temp['status']; - $A[$temp['nickname']][2]=$temp['style']; - } - if($C['memcached']) $memcached->set("$C[dbname]-$C[prefix]members", $A); + global $A, $C, $db; + $result=$db->query("SELECT * FROM $C[prefix]members;"); + while($temp=$result->fetch(PDO::FETCH_ASSOC)){ + $A[$temp['nickname']][0]=$temp['nickname']; + $A[$temp['nickname']][1]=$temp['status']; + $A[$temp['nickname']][2]=$temp['style']; } } function register_guest($status){ - global $A, $C, $I, $P, $U, $db, $memcached; - if(empty($_REQUEST['name'])) send_admin(); - if(!isSet($P[$_REQUEST['name']])) send_admin(sprintf($I['cantreg'], $_REQUEST['name'])); + global $A, $C, $I, $P, $U, $db; + if(empty($_REQUEST['name'])){ + send_admin(); + } + if(!isSet($P[$_REQUEST['name']])){ + send_admin(sprintf($I['cantreg'], $_REQUEST['name'])); + } read_members(); - if(isSet($A[$_REQUEST['name']])) send_admin(sprintf($I['alreadyreged'], $_REQUEST['name'])); + if(isSet($A[$_REQUEST['name']])){ + send_admin(sprintf($I['alreadyreged'], $_REQUEST['name'])); + } $stmt=$db->prepare("SELECT * FROM $C[prefix]sessions WHERE nickname=? AND status=1;"); $stmt->execute(array($_REQUEST['name'])); if($reg=$stmt->fetch(PDO::FETCH_ASSOC)){ @@ -1790,21 +2241,30 @@ function register_guest($status){ } $stmt=$db->prepare("INSERT INTO $C[prefix]members (nickname, passhash, status, refresh, bgcolour, boxwidth, boxheight, regedby, timestamps, embed, style) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"); $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($C['memcached']) $memcached->delete("$C[dbname]-$C[prefix]members"); - if($reg['status']==3) add_system_message(sprintf(get_setting('msgmemreg'), style_this($reg['nickname'], $reg['style']))); - else add_system_message(sprintf(get_setting('msgsureg'), style_this($reg['nickname'], $reg['style']))); + if($reg['status']==3){ + add_system_message(sprintf(get_setting('msgmemreg'), style_this($reg['nickname'], $reg['style']))); + }else{ + add_system_message(sprintf(get_setting('msgsureg'), style_this($reg['nickname'], $reg['style']))); + } send_admin(sprintf($I['successreg'], $reg['nickname'])); } function register_new(){ - global $A, $C, $I, $P, $U, $db, $memcached; + global $A, $C, $I, $P, $U, $db; $_REQUEST['name']=preg_replace('/\s+/', '', $_REQUEST['name']); - if(empty($_REQUEST['name'])) send_admin(); - if(isSet($P[$_REQUEST['name']])) send_admin(sprintf($I['cantreg'], $_REQUEST['name'])); - if(!valid_nick($_REQUEST['name'])) send_admin(sprintf($I['invalnick'], get_setting('maxname'))); - if(!valid_pass($_REQUEST['pass'])) send_admin(sprintf($I['invalpass'], get_setting('minpass'))); + if(empty($_REQUEST['name'])){ + send_admin(); + }elseif(isSet($P[$_REQUEST['name']])){ + send_admin(sprintf($I['cantreg'], $_REQUEST['name'])); + }elseif(!valid_nick($_REQUEST['name'])){ + send_admin(sprintf($I['invalnick'], get_setting('maxname'))); + }elseif(!valid_pass($_REQUEST['pass'])){ + send_admin(sprintf($I['invalpass'], get_setting('minpass'))); + } read_members(); - if(isSet($A[$_REQUEST['name']])) send_admin(sprintf($I['alreadyreged'], $_REQUEST['name'])); + if(isSet($A[$_REQUEST['name']])){ + send_admin(sprintf($I['alreadyreged'], $_REQUEST['name'])); + } $reg=array( 'nickname' =>$_REQUEST['name'], 'passhash' =>md5(sha1(md5($_REQUEST['name'].$_REQUEST['pass']))), @@ -1817,14 +2277,16 @@ function register_new(){ ); $stmt=$db->prepare("INSERT INTO $C[prefix]members (nickname, passhash, status, refresh, bgcolour, regedby, timestamps, style) VALUES (?, ?, ?, ?, ?, ?, ?, ?);"); $stmt->execute(array($reg['nickname'], $reg['passhash'], $reg['status'], $reg['refresh'], $reg['bgcolour'], $reg['regedby'], $reg['timestamps'], $reg['style'])); - if($C['memcached']) $memcached->delete("$C[dbname]-$C[prefix]members"); send_admin(sprintf($I['successreg'], $reg['nickname'])); } function change_status(){ - global $C, $I, $P, $U, $db, $memcached; - if(empty($_REQUEST['name'])) send_admin(); - if($U['status']<=$_REQUEST['set'] || !preg_match('/^[023567\-]$/', $_REQUEST['set'])) send_admin(sprintf($I['cantchgstat'], $_REQUEST['name'])); + global $C, $I, $P, $U, $db; + if(empty($_REQUEST['name'])){ + send_admin(); + }elseif($U['status']<=$_REQUEST['set'] || !preg_match('/^[023567\-]$/', $_REQUEST['set'])){ + send_admin(sprintf($I['cantchgstat'], $_REQUEST['name'])); + } $stmt=$db->prepare("SELECT * FROM $C[prefix]members WHERE nickname=? AND statusexecute(array($_REQUEST['name'], $U['status'])); if($stmt->fetch(PDO::FETCH_ASSOC)){ @@ -1833,16 +2295,18 @@ function change_status(){ $stmt->execute(array($_REQUEST['name'])); $stmt=$db->prepare("UPDATE $C[prefix]sessions SET status=1 WHERE nickname=?;"); $stmt->execute(array($_REQUEST['name'])); - if($C['memcached']) $memcached->delete("$C[dbname]-$C[prefix]members"); - if(isSet($P[$_REQUEST['name']])) $P[$_REQUEST['name']][2]=1; + if(isSet($P[$_REQUEST['name']])){ + $P[$_REQUEST['name']][2]=1; + } send_admin(sprintf($I['succdel'], $_REQUEST['name'])); }else{ $stmt=$db->prepare("UPDATE $C[prefix]members SET status=? WHERE nickname=?;"); $stmt->execute(array($_REQUEST['set'], $_REQUEST['name'])); $stmt=$db->prepare("UPDATE $C[prefix]sessions SET status=? WHERE nickname=?;"); $stmt->execute(array($_REQUEST['set'], $_REQUEST['name'])); - if($C['memcached']) $memcached->delete("$C[dbname]-$C[prefix]members"); - if(isSet($P[$_REQUEST['name']])) $P[$_REQUEST['name']][2]=$_REQUEST['set']; + if(isSet($P[$_REQUEST['name']])){ + $P[$_REQUEST['name']][2]=$_REQUEST['set']; + } send_admin(sprintf($I['succchg'], $_REQUEST['name'])); } }else{ @@ -1852,7 +2316,9 @@ function change_status(){ function passreset(){ global $C, $I, $U, $db; - if(empty($_REQUEST['name'])) send_admin(); + if(empty($_REQUEST['name'])){ + send_admin(); + } $stmt=$db->prepare("SELECT * FROM $C[prefix]members WHERE nickname=? AND statusexecute(array($_REQUEST['name'], $U['status'])); if($stmt->fetch(PDO::FETCH_ASSOC)){ @@ -1869,46 +2335,87 @@ function passreset(){ function amend_profile(){ global $F, $U; - if(isSet($_REQUEST['refresh'])) $U['refresh']=$_REQUEST['refresh']; - if($U['refresh']<5) $U['refresh']=5; - elseif($U['refresh']>150) $U['refresh']=150; - if(preg_match('/^[a-f0-9]{6}$/i', $_REQUEST['colour'])) $U['colour']=$_REQUEST['colour']; - else{ + if(isSet($_REQUEST['refresh'])){ + $U['refresh']=$_REQUEST['refresh']; + } + if($U['refresh']<5){ + $U['refresh']=5; + }elseif($U['refresh']>150){ + $U['refresh']=150; + } + if(preg_match('/^[a-f0-9]{6}$/i', $_REQUEST['colour'])){ + $U['colour']=$_REQUEST['colour']; + }else{ preg_match('/#([0-9a-f]{6})/i', $U['style'], $matches); $U['colour']=$matches[1]; } - if(preg_match('/^[a-f0-9]{6}$/i', $_REQUEST['bgcolour'])) $U['bgcolour']=$_REQUEST['bgcolour']; + if(preg_match('/^[a-f0-9]{6}$/i', $_REQUEST['bgcolour'])){ + $U['bgcolour']=$_REQUEST['bgcolour']; + } $fonttags=''; - if($U['status']>=3 && isSet($_REQUEST['bold'])) $fonttags.='b'; - if($U['status']>=3 && isSet($_REQUEST['italic'])) $fonttags.='i'; - if($U['status']>=3 && isSet($F[$_REQUEST['font']])) $fontface=$F[$_REQUEST['font']]; else $fontface=''; + if($U['status']>=3 && isSet($_REQUEST['bold'])){ + $fonttags.='b'; + } + if($U['status']>=3 && isSet($_REQUEST['italic'])){ + $fonttags.='i'; + } + if($U['status']>=3 && isSet($F[$_REQUEST['font']])){ + $fontface=$F[$_REQUEST['font']]; + }else{ + $fontface=''; + } $U['style']=get_style("#$U[colour] $fontface <$fonttags>"); - if($_REQUEST['boxwidth']>0 && $_REQUEST['boxwidth']<1000) $U['boxwidth']=$_REQUEST['boxwidth']; - if($_REQUEST['boxheight']>0 && $_REQUEST['boxheight']<1000) $U['boxheight']=$_REQUEST['boxheight']; - if(isSet($_REQUEST['notesboxwidth']) && $_REQUEST['notesboxwidth']>0 && $_REQUEST['notesboxwidth']<1000) $U['notesboxwidth']=$_REQUEST['notesboxwidth']; - if(isSet($_REQUEST['notesboxheight']) && $_REQUEST['notesboxheight']>0 && $_REQUEST['notesboxheight']<1000) $U['notesboxheight']=$_REQUEST['notesboxheight']; - if(isSet($_REQUEST['timestamps'])) $U['timestamps']=1; - else $U['timestamps']=0; - if(isSet($_REQUEST['embed'])) $U['embed']=1; - else $U['embed']=0; - if($U['status']>=5 && isSet($_REQUEST['incognito']) && get_setting('incognito')) $U['incognito']=1; - else $U['incognito']=0; + if($_REQUEST['boxwidth']>0 && $_REQUEST['boxwidth']<1000){ + $U['boxwidth']=$_REQUEST['boxwidth']; + } + if($_REQUEST['boxheight']>0 && $_REQUEST['boxheight']<1000){ + $U['boxheight']=$_REQUEST['boxheight']; + } + if(isSet($_REQUEST['notesboxwidth']) && $_REQUEST['notesboxwidth']>0 && $_REQUEST['notesboxwidth']<1000){ + $U['notesboxwidth']=$_REQUEST['notesboxwidth']; + } + if(isSet($_REQUEST['notesboxheight']) && $_REQUEST['notesboxheight']>0 && $_REQUEST['notesboxheight']<1000){ + $U['notesboxheight']=$_REQUEST['notesboxheight']; + } + if(isSet($_REQUEST['timestamps'])){ + $U['timestamps']=1; + }else{ + $U['timestamps']=0; + } + if(isSet($_REQUEST['embed'])){ + $U['embed']=1; + }else{ + $U['embed']=0; + } + if($U['status']>=5 && isSet($_REQUEST['incognito']) && get_setting('incognito')){ + $U['incognito']=1; + }else{ + $U['incognito']=0; + } } function save_profile(){ - global $C, $I, $U, $db, $memcached; - if(!isSet($_REQUEST['oldpass'])) $_REQUEST['oldpass']=''; - if(!isSet($_REQUEST['newpass'])) $_REQUEST['newpass']=''; - if(!isSet($_REQUEST['confirmpass'])) $_REQUEST['confirmpass']=''; + global $C, $I, $U, $db; + if(!isSet($_REQUEST['oldpass'])){ + $_REQUEST['oldpass']=''; + } + if(!isSet($_REQUEST['newpass'])){ + $_REQUEST['newpass']=''; + } + if(!isSet($_REQUEST['confirmpass'])){ + $_REQUEST['confirmpass']=''; + } if($_REQUEST['newpass']!==$_REQUEST['confirmpass']){ send_profile($I['noconfirm']); - }elseif(!empty($_REQUEST['newpass'])){ + }elseif(!empty($_REQUEST['newpass']) && valid_pass($_REQUEST['newpass'])){ $U['oldhash']=md5(sha1(md5($U['nickname'].$_REQUEST['oldpass']))); $U['newhash']=md5(sha1(md5($U['nickname'].$_REQUEST['newpass']))); }else{ $U['oldhash']=$U['newhash']=$U['passhash']; } - if($U['passhash']!==$U['oldhash']) send_profile($I['wrongpass']); + if($U['passhash']!==$U['oldhash']){ + send_profile($I['wrongpass']); + } $U['passhash']=$U['newhash']; amend_profile(); $stmt=$db->prepare("UPDATE $C[prefix]sessions SET refresh=?, style=?, passhash=?, boxwidth=?, boxheight=?, bgcolour=?, notesboxwidth=?, notesboxheight=?, timestamps=?, embed=?, incognito=? WHERE session=?;"); @@ -1916,21 +2423,56 @@ function save_profile(){ if($U['status']>=2){ $stmt=$db->prepare("UPDATE $C[prefix]members SET passhash=?, refresh=?, bgcolour=?, boxwidth=?, boxheight=?, notesboxwidth=?, notesboxheight=?, timestamps=?, embed=?, incognito=?, style=? 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'])); - if($C['memcached']) $memcached->delete("$C[dbname]-$C[prefix]members"); } if(!empty($_REQUEST['unignore'])){ $stmt=$db->prepare("DELETE FROM $C[prefix]ignored WHERE ign=? AND ignby=?;"); $stmt->execute(array($_REQUEST['unignore'], $U['nickname'])); - if($C['memcached']) $memcached->delete("$C[dbname]-$C[prefix]ignored"); } if(!empty($_REQUEST['ignore'])){ $stmt=$db->prepare("INSERT INTO $C[prefix]ignored (ign, ignby) VALUES (?, ?);"); $stmt->execute(array($_REQUEST['ignore'], $U['nickname'])); - if($C['memcached']) $memcached->delete("$C[dbname]-$C[prefix]ignored"); + } + if(!empty($_REQUEST['newnickname'])){ + set_new_nickname(); + } + if(!empty($_REQUEST['newpass']) && !valid_pass($_REQUEST['newpass'])){ + send_profile(sprintf($I['invalpass'], get_setting('minpass'))); } send_profile($I['succprofile']); } +function set_new_nickname(){ + global $C, $I, $U, $db; + if(!isSet($_REQUEST['new_pass']) || !valid_pass($_REQUEST['new_pass'])){ + send_profile(sprintf($I['nopass'], get_setting('minpass'))); + } + $U['passhash']=md5(sha1(md5($_REQUEST['newnickname'].$_REQUEST['new_pass']))); + $stmt=$db->prepare("SELECT id FROM $C[prefix]sessions WHERE nickname=? UNION SELECT id FROM $C[prefix]members WHERE nickname=?;"); + $stmt->execute(array($_REQUEST['newnickname'], $_REQUEST['newnickname'])); + if($stmt->fetch(PDO::FETCH_NUM)){ + send_profile($I['nicknametaken']); + }else{ + if($U['status']>1){ + $entry=0; + }else{ + $entry=$U['entry']; + } + $stmt=$db->prepare("UPDATE $C[prefix]members SET nickname=?, passhash=? WHERE nickname=?;"); + $stmt->execute(array($_REQUEST['newnickname'], $U['passhash'], $U['nickname'])); + $stmt=$db->prepare("UPDATE $C[prefix]sessions SET nickname=?, passhash=? WHERE nickname=?;"); + $stmt->execute(array($_REQUEST['newnickname'], $U['passhash'], $U['nickname'])); + $stmt=$db->prepare("UPDATE $C[prefix]messages SET poster=? WHERE poster=? AND postdate>?;"); + $stmt->execute(array($_REQUEST['newnickname'], $U['nickname'], $entry)); + $stmt=$db->prepare("UPDATE $C[prefix]messages SET recipient=? WHERE recipient=? AND postdate>?;"); + $stmt->execute(array($_REQUEST['newnickname'], $U['nickname'], $entry)); + $stmt=$db->prepare("UPDATE $C[prefix]ignored SET ignby=? WHERE ignby=?;"); + $stmt->execute(array($_REQUEST['newnickname'], $U['nickname'])); + $stmt=$db->prepare("UPDATE $C[prefix]ignored SET ign=? WHERE ign=?;"); + $stmt->execute(array($_REQUEST['newnickname'], $U['nickname'])); + $U['nickname']=$_REQUEST['newnickname']; + } +} + function add_user_defaults(){ global $U; $U['refresh']=get_setting('defaultrefresh'); @@ -2001,15 +2543,9 @@ function validate_input(){ $U['poststatus']='6'; $U['displaysend']=sprintf(get_setting('msgsendadm'), style_this($U['nickname'], $U['style'])); }else{// known nick in room? - $ignored=get_ignored(); - $ignore=false; - foreach($ignored as $ign){ - if($ign['by']===$U['nickname'] && $ign['ignored']===$_REQUEST['sendto'] || ($ign['by']===$_REQUEST['sendto'] && $ign['ignored']===$U['nickname'])){ - $ignore=true; - break; - } - } - if(!$ignore){ + $stmt=$db->prepare("SELECT * FROM $C[prefix]ignored WHERE (ignby=? AND ign=?) OR (ignby=? AND ign=?);"); + $stmt->execute(array($U['nickname'], $_REQUEST['sendto'], $_REQUEST['sendto'], $U['nickname'])); + if(!$stmt->fetch(PDO::FETCH_NUM)){ foreach($P as $chatter){ if($_REQUEST['sendto']===$chatter[0]){ $U['recipient']=$chatter[0]; @@ -2048,15 +2584,29 @@ function apply_filter(){ } $U['message']=preg_replace_callback('/\@([a-z0-9]{1,})/i', function ($matched){ global $A, $P; - if(isSet($P[$matched[1]])) return style_this($matched[0], $P[$matched[1]][1]); + if(isSet($P[$matched[1]])){ + return style_this($matched[0], $P[$matched[1]][1]); + } $nick=strtolower($matched[1]); - foreach($P as $user){ if(strtolower($user[0])===$nick) return style_this($matched[0], $user[1]);} + foreach($P as $user){ + if(strtolower($user[0])===$nick){ + return style_this($matched[0], $user[1]); + } + } read_members(); - if(isSet($A[$matched[1]])) return style_this($matched[0], $A[$matched[1]][2]); - foreach($A as $user){ if(strtolower($user[0])===$nick) return style_this($matched[0], $user[2]);} + if(isSet($A[$matched[1]])){ + return style_this($matched[0], $A[$matched[1]][2]); + } + foreach($A as $user){ + if(strtolower($user[0])===$nick){ + return style_this($matched[0], $user[2]); + } + } return "$matched[0]"; }, $U['message']); - if($C['memcached']) $filters=$memcached->get("$C[dbname]-$C[prefix]filter"); + if($C['memcached']){ + $filters=$memcached->get("$C[dbname]-$C[prefix]filter"); + } if(!$C['memcached'] || $memcached->getResultCode()!==Memcached::RES_SUCCESS){ $filters=array(); $result=$db->query("SELECT id, filtermatch, filterreplace, allowinpm, regex, kick FROM $C[prefix]filter;"); @@ -2066,8 +2616,11 @@ function apply_filter(){ if($C['memcached']) $memcached->set("$C[dbname]-$C[prefix]filter", $filters); } foreach($filters as $filter){ - if($U['poststatus']!==9) $U['message']=preg_replace("/$filter[match]/i", $filter['replace'], $U['message'], -1, $count); - elseif(!$filter['allowinpm']) $U['message']=preg_replace("/$filter[match]/i", $filter['replace'], $U['message'], -1, $count); + if($U['poststatus']!==9){ + $U['message']=preg_replace("/$filter[match]/i", $filter['replace'], $U['message'], -1, $count); + }elseif(!$filter['allowinpm']){ + $U['message']=preg_replace("/$filter[match]/i", $filter['replace'], $U['message'], -1, $count); + } if(isSet($count) && $count>0 && $filter['kick']){ kick_chatter(array($U['nickname']), '', false); send_error("$I[kicked]"); @@ -2077,26 +2630,51 @@ function apply_filter(){ function apply_linkfilter(){ global $C, $U, $db, $memcached; - if($C['memcached']) $filters=$memcached->get("$C[dbname]-$C[prefix]linkfilter"); + if($C['memcached']){ + $filters=$memcached->get("$C[dbname]-$C[prefix]linkfilter"); + } if(!$C['memcached'] || $memcached->getResultCode()!==Memcached::RES_SUCCESS){ $filters=array(); $result=$db->query("SELECT id, filtermatch, filterreplace, regex FROM $C[prefix]linkfilter;"); while($filter=$result->fetch(PDO::FETCH_ASSOC)){ $filters[]=array('id'=>$filter['id'], 'match'=>$filter['filtermatch'], 'replace'=>$filter['filterreplace'], 'regex'=>$filter['regex']); } - if($C['memcached']) $memcached->set("$C[dbname]-$C[prefix]linkfilter", $filters); + if($C['memcached']){ + $memcached->set("$C[dbname]-$C[prefix]linkfilter", $filters); + } } foreach($filters as $filter){ - $U['message']=preg_replace_callback("/([^<]+)<\/a>/i", function ($matched) use(&$filter){ return "".preg_replace("/$filter[match]/i", $filter['replace'], $matched[2]).'';}, $U['message']); + $U['message']=preg_replace_callback("/([^<]+)<\/a>/i", + function ($matched) use(&$filter){ + return "".preg_replace("/$filter[match]/i", $filter['replace'], $matched[2]).''; + } + , $U['message']); } $redirect=get_setting('redirect'); - if(get_setting('imgembed')) $U['message']=preg_replace_callback('/\[img\]\s?([^<]+)<\/a>/i', function ($matched){ return str_ireplace('[/img]', '', "

");}, $U['message']); - if(empty($redirect)) $redirect="$_SERVER[SCRIPT_NAME]?action=redirect&url="; - if(get_setting('forceredirect')) $U['message']=preg_replace_callback('/([^<]+)<\/a>/', function ($matched) use($redirect){ return "$matched[2]";}, $U['message']); - elseif(preg_match_all('/([^<]+)<\/a>/', $U['message'], $matches)){ + if(get_setting('imgembed')){ + $U['message']=preg_replace_callback('/\[img\]\s?([^<]+)<\/a>/i', + function ($matched){ + return str_ireplace('[/img]', '', "

"); + } + , $U['message']); + } + if(empty($redirect)){ + $redirect="$_SERVER[SCRIPT_NAME]?action=redirect&url="; + } + if(get_setting('forceredirect')){ + $U['message']=preg_replace_callback('/([^<]+)<\/a>/', + function ($matched) use($redirect){ + return "$matched[2]"; + } + , $U['message']); + }elseif(preg_match_all('/([^<]+)<\/a>/', $U['message'], $matches)){ foreach($matches[1] as $match){ if(!preg_match('~^http(s)?://~', $match)){ - $U['message']=preg_replace_callback('/([^<]+)<\/a>/', function ($matched) use($redirect){ return "$matched[2]";}, $U['message']); + $U['message']=preg_replace_callback('/([^<]+)<\/a>/', + function ($matched) use($redirect){ + return "$matched[2]"; + } + , $U['message']); } } } @@ -2115,12 +2693,22 @@ function create_hotlinks(){ $U['message']=preg_replace('~((?:[a-z0-9\-]+\.)*[a-z2-7]{16}\.onion)(?![^<>]*>)~i', "<<$1>>", $U['message']);// *.onion $U['message']=preg_replace('~([a-z0-9\-]+(?:\.[a-z0-9\-]+)+(?:\.(?!rar|zip|exe|gz|7z|bat|doc)[a-z]{2,}))(?=[^a-z0-9\-\.]|$)(?![^<>]*>)~i', "<<$1>>", $U['message']);// xxx.yyy.zzz // Convert every <<....>> into proper links: - $U['message']=preg_replace_callback('/<<([^<>]+)>>/', function ($matches){if(strpos($matches[1], '://')===false){ return "$matches[1]";}else{ return "$matches[1]"; }}, $U['message']); + $U['message']=preg_replace_callback('/<<([^<>]+)>>/', + function ($matches){ + if(strpos($matches[1], '://')===false){ + return "$matches[1]"; + }else{ + return "$matches[1]"; + } + } + , $U['message']); } function add_message(){ global $U; - if(empty($U['message'])) return false; + if(empty($U['message'])){ + return false; + } $newmessage=array( 'postdate' =>time(), 'poststatus' =>$U['poststatus'], @@ -2134,7 +2722,9 @@ function add_message(){ } function add_system_message($mes){ - if(empty($mes)) return; + if(empty($mes)){ + return; + } $sysmessage=array( 'postdate' =>time(), 'poststatus' =>1, @@ -2148,7 +2738,9 @@ function add_system_message($mes){ function write_message($message){ global $C, $db; - if($C['msgencrypted']) $message['text']=openssl_encrypt($message['text'], 'aes-256-cbc', $C['encryptkey'], 0, '1234567890123456'); + if($C['msgencrypted']){ + $message['text']=openssl_encrypt($message['text'], 'aes-256-cbc', $C['encryptkey'], 0, '1234567890123456'); + } $stmt=$db->prepare("INSERT INTO $C[prefix]messages (postdate, poststatus, poster, recipient, text, delstatus) VALUES (?, ?, ?, ?, ?, ?);"); $stmt->execute(array($message['postdate'], $message['poststatus'], $message['poster'], $message['recipient'], $message['text'], $message['delstatus'])); $limit=$C['keeplimit']*get_setting('messagelimit'); @@ -2176,22 +2768,29 @@ function clean_selected(){ global $C, $db; if(isSet($_REQUEST['mid'])){ $stmt=$db->prepare("DELETE FROM $C[prefix]messages WHERE id=?;"); - foreach($_REQUEST['mid'] as $mid) $stmt->execute(array($mid)); + foreach($_REQUEST['mid'] as $mid){ + $stmt->execute(array($mid)); + } } } function del_all_messages($nick, $status, $entry){ global $C, $U, $db; if($nick===$U['nickname']) $status=10; - if($U['status']>1) $entry=0; + if($U['status']>1){ + $entry=0; + } $stmt=$db->prepare("DELETE FROM $C[prefix]messages WHERE poster=? AND delstatus?;"); $stmt->execute(array($nick, $status, $entry)); } function del_last_message(){ global $C, $U, $db; - if($U['status']>1) $entry=0; - else $entry=$U['entry']; + if($U['status']>1){ + $entry=0; + }else{ + $entry=$U['entry']; + } $stmt=$db->prepare("SELECT id FROM $C[prefix]messages WHERE poster=? AND postdate>? ORDER BY id DESC LIMIT 1;"); $stmt->execute(array($U['nickname'], $entry)); if($id=$stmt->fetch(PDO::FETCH_NUM)){ @@ -2207,10 +2806,22 @@ function print_messages($delstatus=''){ if(!isSet($_COOKIE[$C['cookiename']]) && get_setting('forceredirect')==0){ $injectRedirect=true; $redirect=get_setting('redirect'); - if(empty($redirect)) $redirect="$_SERVER[SCRIPT_NAME]?action=redirect&url="; - }else $injectRedirect=false; - if(get_setting('imgembed') && (!$U['embed'] || !isSet($_COOKIE[$C['cookiename']]))) $removeEmbed=true; else $removeEmbed=false; - if($U['timestamps'] && !empty($dateformat)) $timestamps=true; else $timestamps=false; + if(empty($redirect)){ + $redirect="$_SERVER[SCRIPT_NAME]?action=redirect&url="; + } + }else{ + $injectRedirect=false; + } + if(get_setting('imgembed') && (!$U['embed'] || !isSet($_COOKIE[$C['cookiename']]))){ + $removeEmbed=true; + }else{ + $removeEmbed=false; + } + if($U['timestamps'] && !empty($dateformat)){ + $timestamps=true; + }else{ + $timestamps=false; + } $expire=time()-60*get_setting('messageexpire'); // ignore possible deadlock warning @$db->exec("DELETE FROM $C[prefix]messages WHERE postdate<$expire;"); @@ -2220,19 +2831,33 @@ function print_messages($delstatus=''){ "OR (poststatus>1 AND (poststatusexecute(array($U['status'], $U['nickname'], $U['nickname'])); while($message=$stmt->fetch(PDO::FETCH_ASSOC)){ - if($C['msgencrypted']) $message['text']=openssl_decrypt($message['text'], 'aes-256-cbc', $C['encryptkey'], 0, '1234567890123456'); + if($C['msgencrypted']){ + $message['text']=openssl_decrypt($message['text'], 'aes-256-cbc', $C['encryptkey'], 0, '1234567890123456'); + } if($injectRedirect){ - $message['text']=preg_replace_callback('/([^<]+)<\/a>/', function ($matched) use ($redirect){ return "$matched[2]";}, $message['text']); + $message['text']=preg_replace_callback('/([^<]+)<\/a>/', + function ($matched) use ($redirect){ + return "$matched[2]"; + } + , $message['text']); } if($removeEmbed){ - $message['text']=preg_replace_callback('/<\/a>/', function ($matched){ return "$matched[1]";}, $message['text']); + $message['text']=preg_replace_callback('/<\/a>/', + function ($matched){ + return "$matched[1]"; + } + , $message['text']); } echo "

"; } }else{ - if(!isSet($_REQUEST['id'])) $_REQUEST['id']=0; + if(!isSet($_REQUEST['id'])){ + $_REQUEST['id']=0; + } $stmt=$db->prepare("SELECT id, postdate, text FROM $C[prefix]messages WHERE (". "id IN (SELECT * FROM (SELECT id FROM $C[prefix]messages WHERE poststatus=1 ORDER BY id DESC LIMIT $messagelimit) AS t) ". "OR (poststatus>1 AND poststatus<=?) ". @@ -2240,17 +2865,31 @@ function print_messages($delstatus=''){ ") AND poster NOT IN (SELECT ign FROM $C[prefix]ignored WHERE ignby=?) AND id>? ORDER BY id DESC;"); $stmt->execute(array($U['status'], $U['nickname'], $U['nickname'], $U['nickname'], $U['nickname'], $_REQUEST['id'])); while($message=$stmt->fetch(PDO::FETCH_ASSOC)){ - if($C['msgencrypted']) $message['text']=openssl_decrypt($message['text'], 'aes-256-cbc', $C['encryptkey'], 0, '1234567890123456'); + if($C['msgencrypted']){ + $message['text']=openssl_decrypt($message['text'], 'aes-256-cbc', $C['encryptkey'], 0, '1234567890123456'); + } if($injectRedirect){ - $message['text']=preg_replace_callback('/([^<]+)<\/a>/', function ($matched) use($redirect) { return "$matched[2]";}, $message['text']); + $message['text']=preg_replace_callback('/([^<]+)<\/a>/', + function ($matched) use($redirect) { + return "$matched[2]"; + } + , $message['text']); } if($removeEmbed){ - $message['text']=preg_replace_callback('/<\/a>/', function ($matched){ return "$matched[1]";}, $message['text']); + $message['text']=preg_replace_callback('/<\/a>/', + function ($matched){ + return "$matched[1]"; + } + , $message['text']); } echo '
'; - if($timestamps) echo ''.date($dateformat, $message['postdate']).' - '; + if($timestamps){ + echo ''.date($dateformat, $message['postdate']).' - '; + } echo "$message[text]
"; - if($_REQUEST['id']<$message['id']) $_REQUEST['id']=$message['id']; + if($_REQUEST['id']<$message['id']){ + $_REQUEST['id']=$message['id']; + } } } } @@ -2258,15 +2897,11 @@ function print_messages($delstatus=''){ // this and that function get_ignored(){ - global $C, $db, $memcached; - if($C['memcached']) $ignored=$memcached->get("$C[dbname]-$C[prefix]ignored"); - if(!$C['memcached'] || $memcached->getResultCode()!==Memcached::RES_SUCCESS){ - $ignored=array(); - $result=$db->query("SELECT ign, ignby FROM $C[prefix]ignored;"); - while($tmp=$result->fetch(PDO::FETCH_ASSOC)){ - $ignored[]=array('ignored'=>$tmp['ign'], 'by'=>$tmp['ignby']); - } - if($C['memcached']) $memcached->set("$C[dbname]-$C[prefix]ignored", $ignored); + global $C, $db; + $ignored=array(); + $result=$db->query("SELECT ign, ignby FROM $C[prefix]ignored;"); + while($tmp=$result->fetch(PDO::FETCH_ASSOC)){ + $ignored[]=array('ignored'=>$tmp['ign'], 'by'=>$tmp['ignby']); } return $ignored; } @@ -2275,12 +2910,16 @@ function valid_admin(){ global $U; if(isSet($_REQUEST['session'])){ check_session(); - } - elseif(isSet($_REQUEST['nick']) && isSet($_REQUEST['pass'])){ + }elseif(isSet($_REQUEST['nick']) && isSet($_REQUEST['pass'])){ create_session(true); } - if(isSet($U['status']) && $U['status']>=7) return true; - else return false; + if(isSet($U['status'])){ + if($U['status']>=7){ + return true; + } + send_access_denied(); + } + return false; } function valid_nick($nick){ @@ -2312,7 +2951,9 @@ function print_colours(){ $colours=array('Beige'=>'F5F5DC', 'Black'=>'000000', 'Blue'=>'0000FF', 'BlueViolet'=>'8A2BE2', 'Brown'=>'A52A2A', 'Cyan'=>'00FFFF', 'DarkBlue'=>'00008B', 'DarkGreen'=>'006400', 'DarkRed'=>'8B0000', 'DarkViolet'=>'9400D3', 'DeepSkyBlue'=>'00BFFF', 'Gold'=>'FFD700', 'Grey'=>'808080', 'Green'=>'008000', 'HotPink'=>'FF69B4', 'Indigo'=>'4B0082', 'LightBlue'=>'ADD8E6', 'LightGreen'=>'90EE90', 'LimeGreen'=>'32CD32', 'Magenta'=>'FF00FF', 'Olive'=>'808000', 'Orange'=>'FFA500', 'OrangeRed'=>'FF4500', 'Purple'=>'800080', 'Red'=>'FF0000', 'RoyalBlue'=>'4169E1', 'SeaGreen'=>'2E8B57', 'Sienna'=>'A0522D', 'Silver'=>'C0C0C0', 'Tan'=>'D2B48C', 'Teal'=>'008080', 'Violet'=>'EE82EE', 'White'=>'FFFFFF', 'Yellow'=>'FFFF00', 'YellowGreen'=>'9ACD32'); $greybg=greyval(get_setting('colbg')); foreach($colours as $name=>$colour){ - if(abs($greybg-greyval($colour))>75) echo ""; + if(abs($greybg-greyval($colour))>75){ + echo ""; + } } } @@ -2325,15 +2966,29 @@ function get_style($styleinfo){ $fitalic=preg_match('/(|:italic)/', $styleinfo); $fsmall=strpos($styleinfo, ':smaller'); preg_match('/(#[a-f0-9]{6})/i', $styleinfo, $match); - if(isSet($match[0])) $fcolour=$match[0]; + if(isSet($match[0])){ + $fcolour=$match[0]; + } preg_match('/font-family:([^;]+);/', $styleinfo, $match); - if(isSet($match[1])) $sface=$match[1]; + if(isSet($match[1])){ + $sface=$match[1]; + } $fstyle=''; - if(isSet($fcolour)) $fstyle.="color:$fcolour;"; - if(isSet($sface)) $fstyle.="font-family:$sface;"; - if($fsmall) $fstyle.='font-size:smaller;'; - if($fitalic) $fstyle.='font-style:italic;'; - if($fbold) $fstyle.='font-weight:bold;'; + if(isSet($fcolour)){ + $fstyle.="color:$fcolour;"; + } + if(isSet($sface)){ + $fstyle.="font-family:$sface;"; + } + if($fsmall){ + $fstyle.='font-size:smaller;'; + } + if($fitalic){ + $fstyle.='font-style:italic;'; + } + if($fbold){ + $fstyle.='font-weight:bold;'; + } return $fstyle; } @@ -2350,7 +3005,9 @@ function check_init(){ }else{ $found=$db->query("SELECT * FROM $C[prefix]settings LIMIT 1;"); } - if($C['memcached']) $memcached->set("$C[dbname]-$C[prefix]num-tables", $found); + if($C['memcached']){ + $memcached->set("$C[dbname]-$C[prefix]num-tables", $found); + } } return $found; } @@ -2371,10 +3028,10 @@ function destroy_chat(){ if($C['memcached']){ $memcached->delete("$C[dbname]-$C[prefix]num-tables"); $memcached->delete("$C[dbname]-$C[prefix]filter"); - $memcached->delete("$C[dbname]-$C[prefix]ignored"); $memcached->delete("$C[dbname]-$C[prefix]linkfilter"); - $memcached->delete("$C[dbname]-$C[prefix]members"); - foreach($C['settings'] as $setting) $memcached->delete("$C[dbname]-$C[prefix]settings-$setting"); + foreach($C['settings'] as $setting){ + $memcached->delete("$C[dbname]-$C[prefix]settings-$setting"); + } $memcached->delete("$C[dbname]-$C[prefix]settings-dbversion"); $memcached->delete("$C[dbname]-$C[prefix]settings-msgencrypted"); } @@ -2400,7 +3057,7 @@ function init_chat(){ $suwrite=$I['noconfirm']; }else{ if($C['dbdriver']===0){//MySQL - $db->exec("CREATE TABLE IF NOT EXISTS $C[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 DEFUALT CHARSET=utf8 COLLATE=utf8_bin;"); + $db->exec("CREATE TABLE IF NOT EXISTS $C[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 $C[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 IF NOT EXISTS $C[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 IF NOT EXISTS $C[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;"); @@ -2446,12 +3103,14 @@ function init_chat(){ $db->exec("CREATE INDEX IF NOT EXISTS lastpost ON $C[prefix]sessions (lastpost);"); $db->exec("CREATE TABLE IF NOT EXISTS $C[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', '$C[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;}'), 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')); + $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', $C['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;}'), 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')); $stmt=$db->prepare("INSERT INTO $C[prefix]settings (setting, value) VALUES (?, ?);"); foreach($settings as $pair){ $stmt->execute($pair); } - if($C['memcached']) $memcached->delete("$C[dbname]-$C[prefix]num-tables"); + if($C['memcached']){ + $memcached->delete("$C[dbname]-$C[prefix]num-tables"); + } $reg=array( 'nickname' =>$_REQUEST['sunick'], 'passhash' =>md5(sha1(md5($_REQUEST['sunick'].$_REQUEST['supass']))), @@ -2472,7 +3131,7 @@ function init_chat(){ } function update_db(){ - global $C, $F, $I, $db; + global $C, $F, $I, $db, $memcached; $dbversion=(int) get_setting('dbversion'); if($dbversion<$C['dbversion'] || get_setting('msgencrypted')!=$C['msgencrypted']){ if($dbversion<2){ @@ -2530,8 +3189,11 @@ function update_db(){ $result=$db->query("SELECT * FROM $C[prefix]members;"); $stmt=$db->prepare("UPDATE $C[prefix]members SET style=? WHERE id=?;"); while($temp=$result->fetch(PDO::FETCH_ASSOC)){ - if(isSet($F[$temp['fontface']])) $fontface=$F[$temp['fontface']]; - else $fontface=''; + if(isSet($F[$temp['fontface']])){ + $fontface=$F[$temp['fontface']]; + }else{ + $fontface=''; + } $style=get_style("#$temp[colour] $fontface <$temp[fonttags]>"); $stmt->execute(array($style, $temp['id'])); } @@ -2559,19 +3221,34 @@ function update_db(){ $db->exec("ALTER TABLE $C[prefix]linkfilter CHANGE `match` filtermatch varchar(255) NOT NULL, CHANGE `replace` filterreplace varchar(255) NOT NULL;"); $db->exec("ALTER TABLE $C[prefix]sessions MODIFY ip varchar(45) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL;"); } + if($dbversion<14){ + if($C['memcached']){ + $memcached->delete("$C[dbname]-$C[prefix]members"); + $memcached->delete("$C[dbname]-$C[prefix]ignored"); + } + if($C['dbdriver']===0){//MySQL + $db->exec("CREATE TABLE IF NOT EXISTS $C[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;"); + } + } if(get_setting('msgencrypted')!=$C['msgencrypted']){ $result=$db->query("SELECT id, text FROM $C[prefix]messages;"); $stmt=$db->prepare("UPDATE $C[prefix]messages SET text=? WHERE id=?;"); while($message=$result->fetch(PDO::FETCH_ASSOC)){ - if($C['msgencrypted']) $message['text']=openssl_encrypt($message['text'], 'aes-256-cbc', $C['encryptkey'], 0, '1234567890123456'); - else $message['text']=openssl_decrypt($message['text'], 'aes-256-cbc', $C['encryptkey'], 0, '1234567890123456'); + if($C['msgencrypted']){ + $message['text']=openssl_encrypt($message['text'], 'aes-256-cbc', $C['encryptkey'], 0, '1234567890123456'); + }else{ + $message['text']=openssl_decrypt($message['text'], 'aes-256-cbc', $C['encryptkey'], 0, '1234567890123456'); + } $stmt->execute(array($message['text'], $message['id'])); } $result=$db->query("SELECT id, text FROM $C[prefix]notes;"); $stmt=$db->prepare("UPDATE $C[prefix]notes SET text=? WHERE id=?;"); while($message=$result->fetch(PDO::FETCH_ASSOC)){ - if($C['msgencrypted']) $message['text']=openssl_encrypt($message['text'], 'aes-256-cbc', $C['encryptkey'], 0, '1234567890123456'); - else $message['text']=openssl_decrypt($message['text'], 'aes-256-cbc', $C['encryptkey'], 0, '1234567890123456'); + if($C['msgencrypted']){ + $message['text']=openssl_encrypt($message['text'], 'aes-256-cbc', $C['encryptkey'], 0, '1234567890123456'); + }else{ + $message['text']=openssl_decrypt($message['text'], 'aes-256-cbc', $C['encryptkey'], 0, '1234567890123456'); + } $stmt->execute(array($message['text'], $message['id'])); } update_setting('msgencrypted', (int)$C['msgencrypted']); @@ -2588,7 +3265,9 @@ function get_setting($setting){ $stmt->execute(array($setting)); $stmt->bindColumn(1, $value); $stmt->fetch(PDO::FETCH_BOUND); - if($C['memcached']) $memcached->set("$C[dbname]-$C[prefix]settings-$setting", $value); + if($C['memcached']){ + $memcached->set("$C[dbname]-$C[prefix]settings-$setting", $value); + } } return $value; } @@ -2597,7 +3276,9 @@ function update_setting($setting, $value){ global $C, $db, $memcached; $stmt=$db->prepare("UPDATE $C[prefix]settings SET value=? WHERE setting=?;"); $stmt->execute(array($value, $setting)); - if($C['memcached']) $memcached->set("$C[dbname]-$C[prefix]settings-$setting", $value); + if($C['memcached']){ + $memcached->set("$C[dbname]-$C[prefix]settings-$setting", $value); + } } // configuration, defaults and internals @@ -2606,9 +3287,13 @@ function check_db(){ global $C, $I, $db, $memcached; $options=array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_WARNING, PDO::ATTR_PERSISTENT=>$C['persistent']); try{ - if($C['dbdriver']===0) $db=new PDO("mysql:host=$C[dbhost];dbname=$C[dbname]", $C['dbuser'], $C['dbpass'], $options); - elseif($C['dbdriver']===1) $db=new PDO("pgsql:host=$C[dbhost];dbname=$C[dbname]", $C['dbuser'], $C['dbpass'], $options); - else $db=new PDO("sqlite:$C[sqlitedbfile]", NULL, NULL, $options); + if($C['dbdriver']===0){ + $db=new PDO("mysql:host=$C[dbhost];dbname=$C[dbname]", $C['dbuser'], $C['dbpass'], $options); + }elseif($C['dbdriver']===1){ + $db=new PDO("pgsql:host=$C[dbhost];dbname=$C[dbname]", $C['dbuser'], $C['dbpass'], $options); + }else{ + $db=new PDO("sqlite:$C[sqlitedbfile]", NULL, NULL, $options); + } }catch(PDOException $e){ if(isSet($_REQUEST['action']) && $_REQUEST['action']==='setup'){ die($I['nodbsetup']); @@ -2650,7 +3335,9 @@ function load_html(){ 'credit' =>"

LE CHAT-PHP - $C[version]
", 'commonform' =>hidden('lang', $C['lang']) ); - if(isSet($_REQUEST['session'])) $H['commonform'].=hidden('session', $_REQUEST['session']); + if(isSet($_REQUEST['session'])){ + $H['commonform'].=hidden('session', $_REQUEST['session']); + } $H=$H+array( 'backtologin' =>"<$H[form] target=\"_parent\">".hidden('lang', $C['lang']).submit($I['backtologin'], 'class="backbutton"').'', 'backtochat' =>"<$H[form]>$H[commonform]".hidden('action', 'view').submit($I['backtochat'], 'class="backbutton"').'' @@ -2673,15 +3360,17 @@ function load_lang(){ include('lang_en.php'); //always include English if($C['lang']!=='en'){ include("lang_$C[lang].php"); //replace with translation if available - foreach($T as $name=>$translation) $I[$name]=$translation; + foreach($T as $name=>$translation){ + $I[$name]=$translation; + } } } function load_config(){ global $C; $C=array( - 'version' =>'1.14.1', // Script version - 'dbversion' =>13, // Database version + 'version' =>'1.15', // Script version + 'dbversion' =>14, // Database version 'keeplimit' =>3, // Amount of messages to keep in the database (multiplied with max messages displayed) - increase if you have many private messages 'msgencrypted' =>false, // Store messages encrypted in the database to prevent other database users from reading them - true/false - visit the setup page after editing! 'encryptkey' =>'MY_KEY', // Encryption key for messages diff --git a/lang_de.php b/lang_de.php index 4cebe69..9e44027 100644 --- a/lang_de.php +++ b/lang_de.php @@ -165,7 +165,7 @@ $T=array( 'savechanges' => 'Änderungen speichern', 'reloadpb' => 'Postbox neu laden', 'reloadmsgs' => 'Nachrichten neu laden', - 'chgprofile' => 'Profil ändern', + 'chgprofile' => 'Profil', 'adminbtn' => 'Admin', 'admnotes' => 'Adminnotizen', 'notes' => 'Notizen', @@ -259,7 +259,7 @@ $T=array( 'no' => 'Nein', 'colbg' => 'Hintergrundfarbe', 'coltxt' => 'Schriftfarbe', - 'maxname' => 'Maximale Benutzernamen-Länge', + 'maxname' => 'Maximale Nicknamen-Länge', 'minpass' => 'Minimale Passwortlänge', 'defaultrefresh' => 'Standardzeit zum Neuladen der Nachrichten (Sekunden)', 'suguests' => 'Anwerber aktivieren', @@ -304,6 +304,12 @@ $T=array( 'numnotes' => 'Anzahl an zu behaltenden Notizversionen', 'revisions' => 'Revisionen:', 'older' => 'Älter', - 'newer' => 'Neuer' + 'newer' => 'Neuer', + 'accessdenied' => 'Zugriff verweigert', + 'loggedinas' => 'Du bist als %s angemeldet und hast keinen Zugriff auf diesen Bereich.', + 'changenickname' => 'Nickname ändern', + 'newnickname' => 'Neuer Nickname:', + 'nicknametaken' => 'Nickname ist bereits vergeben', + 'nopass' => 'Ungültiges Passwort (Mindestens %d Zeichen), Nickname nicht geändert' ); ?> diff --git a/lang_en.php b/lang_en.php index c9a06c3..28ae21d 100644 --- a/lang_en.php +++ b/lang_en.php @@ -166,7 +166,7 @@ $I=array( 'savechanges' => 'Save changes', 'reloadpb' => 'Reload Post Box', 'reloadmsgs' => 'Reload Messages', - 'chgprofile' => 'Change Profile', + 'chgprofile' => 'Profile', 'adminbtn' => 'Admin', 'admnotes' => 'Admin Notes', 'notes' => 'Notes', @@ -260,7 +260,7 @@ $I=array( 'no' => 'No', 'colbg' => 'Background colour', 'coltxt' => 'Text colour', - 'maxname' => 'Maximal user name length', + 'maxname' => 'Maximal nickname length', 'minpass' => 'Minimal password length', 'defaultrefresh' => 'Default message reload time (seconds)', 'suguests' => 'Enable applicants', @@ -305,6 +305,12 @@ $I=array( 'numnotes' => 'Number of notes revisions to keep', 'revisions' => 'Revisions:', 'older' => 'Older', - 'newer' => 'Newer' + 'newer' => 'Newer', + 'accessdenied' => 'Access denied', + 'loggedinas' => 'You are logged in as %s and don\'t have access to this section.', + 'changenickname' => 'Change nickname', + 'newnickname' => 'New nickname:', + 'nicknametaken' => 'Nickname is already taken', + 'nopass' => 'Invalid password (At least %d characters), not changing nickname' ); ?>