Remove global variable for present users

This commit is contained in:
Daniel Winzen
2016-08-28 15:57:21 +02:00
parent 131c84a78f
commit 8d9e6a70ce
3 changed files with 101 additions and 91 deletions

188
chat.php
View File

@ -39,7 +39,6 @@ $F=array();// Fonts
$H=array();// HTML-stuff $H=array();// HTML-stuff
$I=array();// Translations $I=array();// Translations
$L=array();// Languages $L=array();// Languages
$P=array();// All present users [display name, style, status, nickname]
$U=array();// This user data $U=array();// This user data
$db;// Database connection $db;// Database connection
$memcached;// Memcached connection $memcached;// Memcached connection
@ -69,6 +68,7 @@ function route(){
}elseif($_REQUEST['action']==='redirect' && !empty($_GET['url'])){ }elseif($_REQUEST['action']==='redirect' && !empty($_GET['url'])){
send_redirect($_GET['url']); send_redirect($_GET['url']);
}elseif($_REQUEST['action']==='wait'){ }elseif($_REQUEST['action']==='wait'){
parse_sessions();
send_waiting_room(); send_waiting_room();
}elseif($_REQUEST['action']==='post'){ }elseif($_REQUEST['action']==='post'){
check_session(); check_session();
@ -858,13 +858,14 @@ function send_alogin(){
} }
function send_admin($arg=''){ function send_admin($arg=''){
global $H, $I, $P, $U, $db; global $H, $I, $U, $db;
$ga=(int) get_setting('guestaccess'); $ga=(int) get_setting('guestaccess');
print_start('admin'); print_start('admin');
$chlist="<select name=\"name[]\" size=\"5\" multiple><option value=\"\">$I[choose]</option>"; $chlist="<select name=\"name[]\" size=\"5\" multiple><option value=\"\">$I[choose]</option>";
$chlist.="<option value=\"&\">$I[allguests]</option>"; $chlist.="<option value=\"&\">$I[allguests]</option>";
sort_names($P); $stmt=$db->query('SELECT nickname, style, status FROM ' . PREFIX . 'sessions WHERE entry!=0 AND status>0 ORDER BY LOWER(nickname);');
foreach($P as $user){ $users=$stmt->fetchAll(PDO::FETCH_NUM);
foreach($users as $user){
if($user[2]<$U['status']){ if($user[2]<$U['status']){
$chlist.="<option value=\"$user[0]\" style=\"$user[1]\">$user[0]</option>"; $chlist.="<option value=\"$user[0]\" style=\"$user[1]\">$user[0]</option>";
} }
@ -947,7 +948,7 @@ function send_admin($arg=''){
echo "<tr><td><table class=\"left-table\"><tr><th>$I[addsuguest]</th><td>"; echo "<tr><td><table class=\"left-table\"><tr><th>$I[addsuguest]</th><td>";
frmadm('superguest'); frmadm('superguest');
echo "<table class=\"right-table\"><tr><td><select name=\"name\" size=\"1\"><option value=\"\">$I[choose]</option>"; echo "<table class=\"right-table\"><tr><td><select name=\"name\" size=\"1\"><option value=\"\">$I[choose]</option>";
foreach($P as $user){ foreach($users as $user){
if($user[2]==1){ if($user[2]==1){
echo "<option value=\"$user[0]\" style=\"$user[1]\">$user[0]</option>"; echo "<option value=\"$user[0]\" style=\"$user[1]\">$user[0]</option>";
} }
@ -1004,7 +1005,7 @@ function send_admin($arg=''){
echo "<tr><td><table class=\"left-table\"><tr><th>$I[regguest]</th><td>"; echo "<tr><td><table class=\"left-table\"><tr><th>$I[regguest]</th><td>";
frmadm('register'); frmadm('register');
echo "<table class=\"right-table\"><tr><td><select name=\"name\" size=\"1\"><option value=\"\">$I[choose]</option>"; echo "<table class=\"right-table\"><tr><td><select name=\"name\" size=\"1\"><option value=\"\">$I[choose]</option>";
foreach($P as $user){ foreach($users as $user){
if($user[2]==1){ if($user[2]==1){
echo "<option value=\"$user[0]\" style=\"$user[1]\">$user[0]</option>"; echo "<option value=\"$user[0]\" style=\"$user[1]\">$user[0]</option>";
} }
@ -1492,7 +1493,6 @@ function send_approve_waiting(){
function send_waiting_room(){ function send_waiting_room(){
global $H, $I, $U, $db, $language; global $H, $I, $U, $db, $language;
parse_sessions();
$ga=(int) get_setting('guestaccess'); $ga=(int) get_setting('guestaccess');
if($ga===3 && (get_count_mods()>0 || !get_setting('modfallback'))){ if($ga===3 && (get_count_mods()>0 || !get_setting('modfallback'))){
$wait=false; $wait=false;
@ -1579,7 +1579,7 @@ function send_del_confirm(){
} }
function send_post(){ function send_post(){
global $I, $P, $U, $db; global $I, $U, $db;
$U['postid']=substr(time(), -6); $U['postid']=substr(time(), -6);
print_start('post'); print_start('post');
if(!isSet($_REQUEST['sendto'])){ if(!isSet($_REQUEST['sendto'])){
@ -1629,13 +1629,18 @@ function send_post(){
} }
$disablepm=(bool) get_setting('disablepm'); $disablepm=(bool) get_setting('disablepm');
if(!$disablepm){ if(!$disablepm){
$stmt=$db->prepare('SELECT nickname, style, status, incognito FROM ' . PREFIX . 'sessions WHERE entry!=0 AND status>0 AND incognito=0 AND nickname NOT IN (SELECT ign FROM '. PREFIX . 'ignored WHERE ignby=?) AND nickname NOT IN (SELECT ignby FROM '. PREFIX . 'ignored WHERE ign=?) ORDER BY status DESC, lastpost DESC;');
$stmt->execute([$U['nickname'], $U['nickname']]);
while($tmp=$stmt->fetch(PDO::FETCH_ASSOC)){
$users[$tmp['nickname']]=[$tmp['nickname'], $tmp['style'], $tmp['status'], $tmp['nickname']];
}
$stmt=$db->prepare('SELECT nickname, style, status FROM ' . PREFIX . 'members WHERE eninbox!=0 AND eninbox<=? AND nickname NOT IN (SELECT nickname FROM ' . PREFIX . 'sessions WHERE incognito=0) AND nickname NOT IN (SELECT ign FROM ' . PREFIX . 'ignored WHERE ignby=?) AND nickname NOT IN (SELECT ignby FROM ' . PREFIX . 'ignored WHERE ign=?);'); $stmt=$db->prepare('SELECT nickname, style, status FROM ' . PREFIX . 'members WHERE eninbox!=0 AND eninbox<=? AND nickname NOT IN (SELECT nickname FROM ' . PREFIX . 'sessions WHERE incognito=0) AND nickname NOT IN (SELECT ign FROM ' . PREFIX . 'ignored WHERE ignby=?) AND nickname NOT IN (SELECT ignby FROM ' . PREFIX . 'ignored WHERE ign=?);');
$stmt->execute(array($U['status'], $U['nickname'], $U['nickname'])); $stmt->execute(array($U['status'], $U['nickname'], $U['nickname']));
while($tmp=$stmt->fetch(PDO::FETCH_ASSOC)){ while($tmp=$stmt->fetch(PDO::FETCH_ASSOC)){
$P[$tmp['nickname']]=["$tmp[nickname] $I[offline]", $tmp['style'], $tmp['status'], $tmp['nickname']]; $users[$tmp['nickname']]=["$tmp[nickname] $I[offline]", $tmp['style'], $tmp['status'], $tmp['nickname']];
} }
sort_names($P); sort_names($users);
foreach($P as $user){ foreach($users as $user){
if($U['nickname']!==$user[3]){ if($U['nickname']!==$user[3]){
echo '<option '; echo '<option ';
if($_REQUEST['sendto']==$user[3]){ if($_REQUEST['sendto']==$user[3]){
@ -1701,11 +1706,10 @@ function send_help(){
} }
function send_profile($arg=''){ function send_profile($arg=''){
global $F, $H, $I, $L, $P, $U, $db, $language; global $F, $H, $I, $L, $U, $db, $language;
print_start('profile'); print_start('profile');
echo "<$H[form]>$H[commonform]".hidden('action', 'profile').hidden('do', 'save')."<h2>$I[profile]</h2><i>$arg</i><table class=\"center-table\">"; echo "<$H[form]>$H[commonform]".hidden('action', 'profile').hidden('do', 'save')."<h2>$I[profile]</h2><i>$arg</i><table class=\"center-table\">";
thr(); thr();
sort_names($P);
$ignored=[]; $ignored=[];
$stmt=$db->prepare('SELECT ign FROM ' . PREFIX . 'ignored WHERE ignby=?;'); $stmt=$db->prepare('SELECT ign FROM ' . PREFIX . 'ignored WHERE ignby=?;');
$stmt->execute([$U['nickname']]); $stmt->execute([$U['nickname']]);
@ -1973,7 +1977,7 @@ function send_fatal_error($err){
} }
function print_chatters(){ function print_chatters(){
global $I, $P, $U, $db; global $I, $U, $db;
echo '<table style="border-spacing:0px;"><tr>'; echo '<table style="border-spacing:0px;"><tr>';
if($U['status']>=5 && get_setting('guestaccess')==3){ if($U['status']>=5 && get_setting('guestaccess')==3){
$result=$db->query('SELECT COUNT(*) FROM ' . PREFIX . 'sessions WHERE entry=0 AND status=1;'); $result=$db->query('SELECT COUNT(*) FROM ' . PREFIX . 'sessions WHERE entry=0 AND status=1;');
@ -1984,7 +1988,9 @@ function print_chatters(){
echo submit(sprintf($I['approveguests'], $temp[0])).'</form></td><td>&nbsp;</td>'; echo submit(sprintf($I['approveguests'], $temp[0])).'</form></td><td>&nbsp;</td>';
} }
} }
foreach($P as $user){ $stmt=$db->prepare('SELECT nickname, style, status FROM ' . PREFIX . 'sessions WHERE entry!=0 AND status>0 AND incognito=0 AND nickname NOT IN (SELECT ign FROM '. PREFIX . 'ignored WHERE ignby=?) AND nickname NOT IN (SELECT ignby FROM '. PREFIX . 'ignored WHERE ign=?) ORDER BY status DESC, lastpost DESC;');
$stmt->execute([$U['nickname'], $U['nickname']]);
while($user=$stmt->fetch(PDO::FETCH_NUM)){
if($user[2]<=2){ if($user[2]<=2){
$G[]=style_this($user[0], $user[1]); $G[]=style_this($user[0], $user[1]);
}else{ }else{
@ -2064,7 +2070,7 @@ function create_session($setup){
} }
function write_new_session(){ function write_new_session(){
global $I, $P, $U, $db; global $I, $U, $db;
$stmt=$db->prepare('SELECT * FROM ' . PREFIX . 'sessions WHERE nickname=?;'); $stmt=$db->prepare('SELECT * FROM ' . PREFIX . 'sessions WHERE nickname=?;');
$stmt->execute(array($U['nickname'])); $stmt->execute(array($U['nickname']));
if($temp=$stmt->fetch(PDO::FETCH_ASSOC)){ if($temp=$stmt->fetch(PDO::FETCH_ASSOC)){
@ -2099,7 +2105,6 @@ function write_new_session(){
if($U['status']>=3 && !$U['incognito']){ if($U['status']>=3 && !$U['incognito']){
add_system_message(sprintf(get_setting('msgenter'), style_this($U['nickname'], $U['style']))); add_system_message(sprintf(get_setting('msgenter'), style_this($U['nickname'], $U['style'])));
} }
$P[$U['nickname']]=[$U['nickname'], $U['style'], $U['status'], $U['nickname']];
} }
} }
@ -2202,26 +2207,34 @@ function kill_session(){
} }
function kick_chatter($names, $mes, $purge){ function kick_chatter($names, $mes, $purge){
global $P, $U, $db; global $U, $db;
$lonick=''; $lonick='';
$time=60*(get_setting('kickpenalty')-get_setting('guestexpire'))+time(); $time=60*(get_setting('kickpenalty')-get_setting('guestexpire'))+time();
$stmt=$db->prepare('UPDATE ' . PREFIX . 'sessions SET lastpost=?, status=0, kickmessage=? WHERE nickname=? AND status!=0;'); $check=$db->prepare('SELECT style FROM ' . PREFIX . 'sessions WHERE nickname=? AND status!=0 AND (status<? OR nickname=?);');
$stmt=$db->prepare('UPDATE ' . PREFIX . 'sessions SET lastpost=?, status=0, kickmessage=? WHERE nickname=?;');
$all=false;
if($names[0]==='&'){
$tmp=$db->query('SELECT nickname FROM ' . PREFIX . 'sessions WHERE status=1;');
$names=[];
while($name=$tmp->fetch(PDO::FETCH_NUM)){
$names[]=$name[0];
}
$all=true;
}
$i=0; $i=0;
foreach($names as $name){ foreach($names as $name){
foreach($P as $temp){ $check->execute([$name, $U['status'], $name]);
if(($temp[0]===$U['nickname'] && $U['nickname']===$name) || ($U['status']>$temp[2] && (($temp[0]===$name && $temp[2]>0) || ($name==='&' && $temp[2]==1)))){ if($temp=$check->fetch(PDO::FETCH_NUM)){
$stmt->execute(array($time, $mes, $name)); $stmt->execute(array($time, $mes, $name));
if($purge){ if($purge){
del_all_messages($name, 0); del_all_messages($name, 0);
}
$lonick.=style_this($name, $temp[1]).', ';
++$i;
unset($P[$name]);
} }
$lonick.=style_this($name, $temp[0]).', ';
++$i;
} }
} }
if(!empty($lonick)){ if($i>0){
if($names[0]==='&'){ if($all){
add_system_message(get_setting('msgallkick')); add_system_message(get_setting('msgallkick'));
}else{ }else{
$lonick=preg_replace('/\,\s$/','',$lonick); $lonick=preg_replace('/\,\s$/','',$lonick);
@ -2231,31 +2244,35 @@ function kick_chatter($names, $mes, $purge){
add_system_message(sprintf(get_setting('msgkick'), $lonick)); add_system_message(sprintf(get_setting('msgkick'), $lonick));
} }
} }
}
if(!empty($lonick)){
return true; return true;
} }
return false; return false;
} }
function logout_chatter($names){ function logout_chatter($names){
global $P, $U, $db; global $U, $db;
$stmt=$db->prepare('DELETE FROM ' . PREFIX . 'sessions WHERE nickname=? AND status<? AND status!=0;'); $check=$db->prepare('SELECT status FROM ' . PREFIX . 'sessions WHERE nickname=? AND status<? AND status!=0;');
$stmt=$db->prepare('DELETE FROM ' . PREFIX . 'sessions WHERE nickname=?;');
$stmt1=$db->prepare('UPDATE ' . PREFIX . "messages SET poster='' WHERE poster=? AND poststatus=9;"); $stmt1=$db->prepare('UPDATE ' . PREFIX . "messages SET poster='' WHERE poster=? AND poststatus=9;");
$stmt2=$db->prepare('UPDATE ' . PREFIX . "messages SET recipient='' WHERE recipient=? AND poststatus=9;"); $stmt2=$db->prepare('UPDATE ' . PREFIX . "messages SET recipient='' WHERE recipient=? AND poststatus=9;");
$stmt3=$db->prepare('DELETE FROM ' . PREFIX . 'ignored WHERE ign=? OR ignby=?;'); $stmt3=$db->prepare('DELETE FROM ' . PREFIX . 'ignored WHERE ign=? OR ignby=?;');
$stmt4=$db->prepare('UPDATE ' . PREFIX . "inbox SET poster='' WHERE poster=?;"); $stmt4=$db->prepare('UPDATE ' . PREFIX . "inbox SET poster='' WHERE poster=?;");
if($names[0]==='&'){
$tmp=$db->query('SELECT nickname FROM ' . PREFIX . 'sessions WHERE status=1;');
$names=[];
while($name=$tmp->fetch(PDO::FETCH_NUM)){
$names[]=$name[0];
}
}
foreach($names as $name){ foreach($names as $name){
foreach($P as $temp){ $check->execute([$name, $U['status']]);
if($temp[0]===$name || ($name==='&' && $temp[2]==1)){ if($temp=$check->fetch(PDO::FETCH_NUM)){
$stmt->execute(array($name, $U['status'])); $stmt->execute([$name]);
if($temp[2]==1){ if($temp[0]==1){
$stmt1->execute(array($name)); $stmt1->execute([$name]);
$stmt2->execute(array($name)); $stmt2->execute([$name]);
$stmt3->execute(array($name, $name)); $stmt3->execute([$name, $name]);
$stmt4->execute(array($name)); $stmt4->execute([$name]);
}
unset($P[$name]);
} }
} }
} }
@ -2295,16 +2312,18 @@ function check_kicked(){
} }
function get_nowchatting(){ function get_nowchatting(){
global $I, $P; global $I, $db;
parse_sessions(); parse_sessions();
echo sprintf($I['curchat'], count($P)).'<br>'; $stmt=$db->query('SELECT nickname, style FROM ' . PREFIX . 'sessions WHERE entry!=0 AND status>0 AND incognito=0 ORDER BY status DESC, lastpost DESC;');
foreach($P as $user){ $users=$stmt->fetchAll();
echo sprintf($I['curchat'], count($users)).'<br>';
foreach($users as $user){
echo style_this($user[0], $user[1]).' &nbsp; '; echo style_this($user[0], $user[1]).' &nbsp; ';
} }
} }
function parse_sessions(){ function parse_sessions(){
global $P, $U, $db; global $U, $db;
// delete old sessions // delete old sessions
$time=time(); $time=time();
$result=$db->prepare('SELECT nickname, status FROM ' . PREFIX . 'sessions WHERE (status<=2 AND lastpost<(?-60*(SELECT value FROM ' . PREFIX . "settings WHERE setting='guestexpire'))) OR (status>2 AND lastpost<(?-60*(SELECT value FROM " . PREFIX . "settings WHERE setting='memberexpire')));"); $result=$db->prepare('SELECT nickname, status FROM ' . PREFIX . 'sessions WHERE (status<=2 AND lastpost<(?-60*(SELECT value FROM ' . PREFIX . "settings WHERE setting='guestexpire'))) OR (status>2 AND lastpost<(?-60*(SELECT value FROM " . PREFIX . "settings WHERE setting='memberexpire')));");
@ -2334,19 +2353,6 @@ function parse_sessions(){
$U=$tmp; $U=$tmp;
} }
} }
// load other sessions
$P=array();
if(isSet($U['nickname'])){
$stmt=$db->prepare('SELECT nickname, style, status, incognito FROM ' . PREFIX . 'sessions WHERE entry!=0 AND status>0 AND nickname NOT IN (SELECT ign FROM '. PREFIX . 'ignored WHERE ignby=?) AND nickname NOT IN (SELECT ignby FROM '. PREFIX . 'ignored WHERE ign=?) ORDER BY status DESC, lastpost DESC;');
$stmt->execute([$U['nickname'], $U['nickname']]);
}else{
$stmt=$db->query('SELECT nickname, style, status, incognito FROM ' . PREFIX . 'sessions WHERE entry!=0 AND status>0 ORDER BY status DESC, lastpost DESC;');
}
while($temp=$stmt->fetch(PDO::FETCH_ASSOC)){
if(!$temp['incognito']){
$P[$temp['nickname']]=[$temp['nickname'], $temp['style'], $temp['status'], $temp['nickname']];
}
}
} }
// member handling // member handling
@ -2381,7 +2387,7 @@ function delete_account(){
} }
function register_guest($status, $nick){ function register_guest($status, $nick){
global $I, $P, $U, $db; global $I, $U, $db;
$stmt=$db->prepare('SELECT style FROM ' . PREFIX . 'members WHERE nickname=?'); $stmt=$db->prepare('SELECT style FROM ' . PREFIX . 'members WHERE nickname=?');
$stmt->execute([$nick]); $stmt->execute([$nick]);
if($tmp=$stmt->fetch(PDO::FETCH_NUM)){ if($tmp=$stmt->fetch(PDO::FETCH_NUM)){
@ -2391,7 +2397,6 @@ function register_guest($status, $nick){
$stmt->execute(array($nick)); $stmt->execute(array($nick));
if($reg=$stmt->fetch(PDO::FETCH_ASSOC)){ if($reg=$stmt->fetch(PDO::FETCH_ASSOC)){
$reg['status']=$status; $reg['status']=$status;
$P[$nick][2]=$status;
$stmt=$db->prepare('UPDATE ' . PREFIX . 'sessions SET status=? WHERE session=?;'); $stmt=$db->prepare('UPDATE ' . PREFIX . 'sessions SET status=? WHERE session=?;');
$stmt->execute(array($reg['status'], $reg['session'])); $stmt->execute(array($reg['status'], $reg['session']));
}else{ }else{
@ -2408,14 +2413,19 @@ function register_guest($status, $nick){
} }
function register_new($nick, $pass){ function register_new($nick, $pass){
global $I, $P, $U, $db; global $I, $U, $db;
if(empty($nick)){ if(empty($nick)){
return ''; return '';
}elseif(isSet($P[$nick])){ }
$stmt=$db->prepare('SELECT * FROM ' . PREFIX . 'sessions WHERE nickname=?');
$stmt->execute([$nick]);
if($stmt->fetch(PDO::FETCH_NUM)){
return sprintf($I['cantreg'], $nick); return sprintf($I['cantreg'], $nick);
}elseif(!valid_nick($nick)){ }
if(!valid_nick($nick)){
return sprintf($I['invalnick'], get_setting('maxname'), get_setting('nickregex')); return sprintf($I['invalnick'], get_setting('maxname'), get_setting('nickregex'));
}elseif(!valid_pass($pass)){ }
if(!valid_pass($pass)){
return sprintf($I['invalpass'], get_setting('minpass'), get_setting('passregex')); return sprintf($I['invalpass'], get_setting('minpass'), get_setting('passregex'));
} }
$stmt=$db->prepare('SELECT * FROM ' . PREFIX . 'members WHERE nickname=?'); $stmt=$db->prepare('SELECT * FROM ' . PREFIX . 'members WHERE nickname=?');
@ -2444,7 +2454,7 @@ function register_new($nick, $pass){
} }
function change_status($nick, $status){ function change_status($nick, $status){
global $I, $P, $U, $db; global $I, $U, $db;
if(empty($nick)){ if(empty($nick)){
return ''; return '';
}elseif($U['status']<=$status || !preg_match('/^[023567\-]$/', $status)){ }elseif($U['status']<=$status || !preg_match('/^[023567\-]$/', $status)){
@ -2462,9 +2472,6 @@ function change_status($nick, $status){
$stmt->execute(array($nick)); $stmt->execute(array($nick));
$stmt=$db->prepare('UPDATE ' . PREFIX . 'sessions SET status=1, incognito=0 WHERE nickname=?;'); $stmt=$db->prepare('UPDATE ' . PREFIX . 'sessions SET status=1, incognito=0 WHERE nickname=?;');
$stmt->execute(array($nick)); $stmt->execute(array($nick));
if(isSet($P[$nick])){
$P[$nick][2]=1;
}
return sprintf($I['succdel'], $nick); return sprintf($I['succdel'], $nick);
}else{ }else{
if($status<5){ if($status<5){
@ -2474,9 +2481,6 @@ function change_status($nick, $status){
$stmt->execute(array($status, $old[0], $nick)); $stmt->execute(array($status, $old[0], $nick));
$stmt=$db->prepare('UPDATE ' . PREFIX . 'sessions SET status=?, incognito=? WHERE nickname=?;'); $stmt=$db->prepare('UPDATE ' . PREFIX . 'sessions SET status=?, incognito=? WHERE nickname=?;');
$stmt->execute(array($status, $old[0], $nick)); $stmt->execute(array($status, $old[0], $nick));
if(isSet($P[$nick])){
$P[$nick][2]=$status;
}
return sprintf($I['succchg'], $nick); return sprintf($I['succchg'], $nick);
} }
} }
@ -2686,7 +2690,7 @@ function add_user_defaults(){
// message handling // message handling
function validate_input(){ function validate_input(){
global $P, $U, $db; global $U, $db;
$inbox=false; $inbox=false;
$maxmessage=get_setting('maxmessage'); $maxmessage=get_setting('maxmessage');
$U['message']=substr($_REQUEST['message'], 0, $maxmessage); $U['message']=substr($_REQUEST['message'], 0, $maxmessage);
@ -2734,17 +2738,17 @@ function validate_input(){
if(get_setting('disablepm')){ if(get_setting('disablepm')){
return; return;
} }
$stmt=$db->prepare('SELECT nickname, style, status FROM ' . PREFIX . 'members WHERE nickname=? AND eninbox!=0 AND eninbox<=? AND nickname NOT IN (SELECT nickname FROM ' . PREFIX . 'sessions WHERE incognito=0) AND nickname NOT IN (SELECT ign FROM ' . PREFIX . 'ignored WHERE ignby=?) AND nickname NOT IN (SELECT ignby FROM ' . PREFIX . 'ignored WHERE ign=?);'); $stmt=$db->prepare('SELECT style FROM ' . PREFIX . 'members WHERE nickname=? AND eninbox!=0 AND eninbox<=? AND nickname NOT IN (SELECT nickname FROM ' . PREFIX . 'sessions WHERE incognito=0) AND nickname NOT IN (SELECT ign FROM ' . PREFIX . 'ignored WHERE ignby=?) AND nickname NOT IN (SELECT ignby FROM ' . PREFIX . 'ignored WHERE ign=?);');
$stmt->execute(array($_REQUEST['sendto'], $U['status'], $U['nickname'], $U['nickname'])); $stmt->execute(array($_REQUEST['sendto'], $U['status'], $U['nickname'], $U['nickname']));
if($tmp=$stmt->fetch(PDO::FETCH_ASSOC)){ if($tmp=$stmt->fetch(PDO::FETCH_ASSOC)){
$P[$tmp['nickname']]=[$tmp['nickname'], $tmp['style'], $tmp['status'], $tmp['nickname']];
$inbox=true; $inbox=true;
} }
if(isSet($P[$_REQUEST['sendto']])){ $stmt=$db->prepare('SELECT style FROM ' . PREFIX . 'sessions WHERE nickname=? AND nickname NOT IN (SELECT ign FROM ' . PREFIX . 'ignored WHERE ignby=?) AND nickname NOT IN (SELECT ignby FROM ' . PREFIX . 'ignored WHERE ign=?);');
$U['recipient']=$P[$_REQUEST['sendto']][0]; $stmt->execute(array($_REQUEST['sendto'], $U['nickname'], $U['nickname']));
$U['displayrecp']=style_this($U['recipient'], $P[$_REQUEST['sendto']][1]); if($tmp || $tmp=$stmt->fetch(PDO::FETCH_ASSOC)){
$U['recipient']=$_REQUEST['sendto'];
$U['poststatus']='9'; $U['poststatus']='9';
$U['displaysend']=sprintf(get_setting('msgsendprv'), style_this($U['nickname'], $U['style']), $U['displayrecp']); $U['displaysend']=sprintf(get_setting('msgsendprv'), style_this($U['nickname'], $U['style']), style_this($U['recipient'], $tmp[0]));
} }
if(empty($U['recipient'])){// nick left already or ignores us if(empty($U['recipient'])){// nick left already or ignores us
$U['message']=''; $U['message']='';
@ -2785,22 +2789,28 @@ function apply_filter(){
$U['displaysend']=substr($U['displaysend'], 0, -3); $U['displaysend']=substr($U['displaysend'], 0, -3);
$U['message']=preg_replace("~^/me~i", '', $U['message']); $U['message']=preg_replace("~^/me~i", '', $U['message']);
} }
$U['message']=preg_replace_callback('/\@([a-z0-9]{1,})/i', function ($matched){ $U['message']=preg_replace_callback('/\@([^\s]+)/i', function ($matched){
global $P, $db; global $db;
if(isSet($P[$matched[1]])){ //match case-sensitive present nicknames
return style_this($matched[0], $P[$matched[1]][1]); $stmt=$db->prepare('SELECT style FROM ' . PREFIX . 'sessions WHERE nickname=?;');
$stmt->execute([$matched[1]]);
if($tmp=$stmt->fetch(PDO::FETCH_NUM)){
return style_this($matched[0], $tmp[0]);
} }
$nick=strtolower($matched[1]); $nick=strtolower($matched[1]);
foreach($P as $user){ //match case-insensitive present nicknames
if(strtolower($user[0])===$nick){ $stmt=$db->prepare('SELECT style FROM ' . PREFIX . 'sessions WHERE LOWER(nickname)=?;');
return style_this($matched[0], $user[1]); $stmt->execute([$nick]);
} if($tmp=$stmt->fetch(PDO::FETCH_NUM)){
return style_this($matched[0], $tmp[0]);
} }
//match case-sensitive members
$stmt=$db->prepare('SELECT style FROM ' . PREFIX . 'members WHERE nickname=?;'); $stmt=$db->prepare('SELECT style FROM ' . PREFIX . 'members WHERE nickname=?;');
$stmt->execute([$matched[1]]); $stmt->execute([$matched[1]]);
if($tmp=$stmt->fetch(PDO::FETCH_NUM)){ if($tmp=$stmt->fetch(PDO::FETCH_NUM)){
return style_this($matched[0], $tmp[0]); return style_this($matched[0], $tmp[0]);
} }
//match case-insensitive members
$stmt=$db->prepare('SELECT style FROM ' . PREFIX . 'members WHERE LOWER(nickname)=?;'); $stmt=$db->prepare('SELECT style FROM ' . PREFIX . 'members WHERE LOWER(nickname)=?;');
$stmt->execute([$nick]); $stmt->execute([$nick]);
if($tmp=$stmt->fetch(PDO::FETCH_NUM)){ if($tmp=$stmt->fetch(PDO::FETCH_NUM)){

View File

@ -289,7 +289,7 @@ $T=array(
'suregmsg' => '%s ist jetzt ein registrierter Anwerber.', 'suregmsg' => '%s ist jetzt ein registrierter Anwerber.',
'kickmsg' => '%s wurde rausgeschmissen.', 'kickmsg' => '%s wurde rausgeschmissen.',
'multikickmsg' => '%s wurden rausgeschmissen.', 'multikickmsg' => '%s wurden rausgeschmissen.',
'allkickmsg' => 'Alle Chatter wurden rausgeschmissen.', 'allkickmsg' => 'Alle Gäste wurden rausgeschmissen.',
'cleanmsg' => '%s wurde geleert.', 'cleanmsg' => '%s wurde geleert.',
'sendallmsg' => '%s - ', 'sendallmsg' => '%s - ',
'sendmemmsg' => '[M] %s - ', 'sendmemmsg' => '[M] %s - ',

View File

@ -289,7 +289,7 @@ $I=array(
'suregmsg' => '%s is now a registered applicant.', 'suregmsg' => '%s is now a registered applicant.',
'kickmsg' => '%s has been kicked.', 'kickmsg' => '%s has been kicked.',
'multikickmsg' => '%s have been kicked.', 'multikickmsg' => '%s have been kicked.',
'allkickmsg' => 'All chatters have been kicked.', 'allkickmsg' => 'All guests have been kicked.',
'cleanmsg' => '%s has been cleaned.', 'cleanmsg' => '%s has been cleaned.',
'sendallmsg' => '%s - ', 'sendallmsg' => '%s - ',
'sendmemmsg' => '[M] %s - ', 'sendmemmsg' => '[M] %s - ',