diff --git a/chat.php b/chat.php index 41a8940..0c2a9a5 100644 --- a/chat.php +++ b/chat.php @@ -1728,24 +1728,23 @@ function send_post(){ } $disablepm=(bool) get_setting('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']]); + $users=[]; + $stmt=$db->prepare('SELECT * FROM (SELECT nickname, style, 0 AS offline FROM ' . PREFIX . 'sessions WHERE entry!=0 AND status>0 AND incognito=0 AND nickname NOT IN (SELECT ign FROM '. PREFIX . 'ignored WHERE ignby=? UNION SELECT ignby FROM '. PREFIX . 'ignored WHERE ign=?) UNION SELECT nickname, style, 1 AS offline FROM ' . PREFIX . 'members WHERE eninbox!=0 AND eninbox<=? AND nickname NOT IN (SELECT nickname FROM ' . PREFIX . 'sessions WHERE incognito=0 UNION SELECT ign FROM ' . PREFIX . 'ignored WHERE ignby=? UNION SELECT ignby FROM ' . PREFIX . 'ignored WHERE ign=?)) AS t ORDER BY LOWER(nickname);'); + $stmt->execute([$U['nickname'], $U['nickname'], $U['status'], $U['nickname'], $U['nickname']]); while($tmp=$stmt->fetch(PDO::FETCH_ASSOC)){ - $users[$tmp['nickname']]=[$tmp['nickname'], $tmp['style'], $tmp['status'], $tmp['nickname']]; + if($tmp['offline']){ + $users[]=["$tmp[nickname] $I[offline]", $tmp['style'], $tmp['nickname']]; + }else{ + $users[]=[$tmp['nickname'], $tmp['style'], $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->execute(array($U['status'], $U['nickname'], $U['nickname'])); - while($tmp=$stmt->fetch(PDO::FETCH_ASSOC)){ - $users[$tmp['nickname']]=["$tmp[nickname] $I[offline]", $tmp['style'], $tmp['status'], $tmp['nickname']]; - } - sort_names($users); foreach($users as $user){ - if($U['nickname']!==$user[3]){ + if($U['nickname']!==$user[2]){ echo ''; + echo 'value="'.htmlspecialchars($user[2])."\" style=\"$user[1]\">".htmlspecialchars($user[0]).''; } } } @@ -2146,7 +2145,7 @@ function print_chatters(){ global $I, $U, $db, $language; if(!$U['hidechatters']){ echo '
'; - $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=$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=? UNION SELECT ignby FROM '. PREFIX . 'ignored WHERE ign=?) ORDER BY status DESC, lastpost DESC;'); $stmt->execute([$U['nickname'], $U['nickname']]); $nc=substr(time(), -6); while($user=$stmt->fetch(PDO::FETCH_NUM)){ @@ -2355,7 +2354,7 @@ function kill_session(){ if($U['status']==1){ $stmt=$db->prepare('DELETE FROM ' . PREFIX . 'ignored WHERE ign=? OR ignby=?;'); $stmt->execute(array($U['nickname'], $U['nickname'])); - $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages) AND postid NOT IN (SELECT postid FROM ' . PREFIX . 'inbox);'); + $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages UNION SELECT postid FROM ' . PREFIX . 'inbox);'); }elseif($U['status']>=3 && !$U['incognito']){ add_system_message(sprintf(get_setting('msgexit'), style_this(htmlspecialchars($U['nickname']), $U['style']))); } @@ -2425,7 +2424,7 @@ function logout_chatter($names){ } } } - $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages) AND postid NOT IN (SELECT postid FROM ' . PREFIX . 'inbox);'); + $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages UNION SELECT postid FROM ' . PREFIX . 'inbox);'); } function check_session(){ @@ -2490,7 +2489,7 @@ function parse_sessions(){ $stmt1->execute([$temp['nickname'], $temp['nickname']]); } } - $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages) AND postid NOT IN (SELECT postid FROM ' . PREFIX . 'inbox);'); + $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages UNION SELECT postid FROM ' . PREFIX . 'inbox);'); } // look for our session if(isSet($_REQUEST['session'])){ @@ -2529,7 +2528,7 @@ function delete_account(){ $stmt->execute(array($U['nickname'])); $stmt=$db->prepare('DELETE FROM ' . PREFIX . 'members WHERE nickname=?;'); $stmt->execute(array($U['nickname'])); - $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages) AND postid NOT IN (SELECT postid FROM ' . PREFIX . 'inbox);'); + $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages UNION SELECT postid FROM ' . PREFIX . 'inbox);'); $U['status']=1; } } @@ -2622,7 +2621,7 @@ function change_status($nick, $status){ $stmt->execute(array($nick)); $stmt=$db->prepare('UPDATE ' . PREFIX . 'sessions SET status=1, incognito=0 WHERE nickname=?;'); $stmt->execute(array($nick)); - $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages) AND postid NOT IN (SELECT postid FROM ' . PREFIX . 'inbox);'); + $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages UNION SELECT postid FROM ' . PREFIX . 'inbox);'); return sprintf($I['succdel'], style_this(htmlspecialchars($nick), $old[1])); }else{ if($status<5){ @@ -2891,17 +2890,13 @@ function validate_input(){ if(get_setting('disablepm')){ return; } - $stmt=$db->prepare('SELECT style FROM ' . PREFIX . 'members WHERE nickname=? AND eninbox!=0 AND eninbox<=? AND nickname NOT IN (SELECT nickname FROM ' . PREFIX . 'sessions) 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'])); - if($tmp=$stmt->fetch(PDO::FETCH_NUM)){ - $inbox=true; - } - $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=?);'); - $stmt->execute(array($_REQUEST['sendto'], $U['nickname'], $U['nickname'])); - if($tmp || $tmp=$stmt->fetch(PDO::FETCH_NUM)){ + $stmt=$db->prepare('SELECT style, 1 AS inbox FROM ' . PREFIX . 'members WHERE nickname=? AND eninbox!=0 AND eninbox<=? AND nickname NOT IN (SELECT nickname FROM ' . PREFIX . 'sessions UNION SELECT ign FROM ' . PREFIX . 'ignored WHERE ignby=? UNION SELECT ignby FROM ' . PREFIX . 'ignored WHERE ign=?) UNION SELECT style, 0 AS inbox FROM ' . PREFIX . 'sessions WHERE nickname=? AND nickname NOT IN (SELECT ign FROM ' . PREFIX . 'ignored WHERE ignby=? UNION SELECT ignby FROM ' . PREFIX . 'ignored WHERE ign=?);'); + $stmt->execute([$_REQUEST['sendto'], $U['status'], $U['nickname'], $U['nickname'], $_REQUEST['sendto'], $U['nickname'], $U['nickname']]); + if($tmp=$stmt->fetch(PDO::FETCH_ASSOC)){ $U['recipient']=$_REQUEST['sendto']; $U['poststatus']=9; - $U['displaysend']=sprintf(get_setting('msgsendprv'), style_this(htmlspecialchars($U['nickname']), $U['style']), style_this(htmlspecialchars($U['recipient']), $tmp[0])); + $U['displaysend']=sprintf(get_setting('msgsendprv'), style_this(htmlspecialchars($U['nickname']), $U['style']), style_this(htmlspecialchars($U['recipient']), $tmp['style'])); + $inbox=$tmp['inbox']; } if(empty($U['recipient'])){// nick left already or ignores us $U['message']=''; @@ -3131,7 +3126,7 @@ function write_message($message){ if($id=$stmt->fetch(PDO::FETCH_NUM)){ $stmt=$db->prepare('DELETE FROM ' . PREFIX . 'messages WHERE id<=?;'); $stmt->execute($id); - $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages) AND postid NOT IN (SELECT postid FROM ' . PREFIX . 'inbox);'); + $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages UNION SELECT postid FROM ' . PREFIX . 'inbox);'); } if($message['poststatus']<9 && get_setting('sendmail')){ $subject='New Chat message'; @@ -3144,7 +3139,7 @@ function write_message($message){ function clean_room(){ global $db; $db->query('DELETE FROM ' . PREFIX . 'messages;'); - $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages) AND postid NOT IN (SELECT postid FROM ' . PREFIX . 'inbox);'); + $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT postid FROM ' . PREFIX . 'inbox);'); add_system_message(sprintf(get_setting('msgclean'), get_setting('chatname'))); } @@ -3155,7 +3150,7 @@ function clean_selected($status, $nick){ foreach($_REQUEST['mid'] as $mid){ $stmt->execute(array($mid, $nick, $nick, $status, $status)); } - $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages) AND postid NOT IN (SELECT postid FROM ' . PREFIX . 'inbox);'); + $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages UNION SELECT postid FROM ' . PREFIX . 'inbox);'); } } @@ -3166,7 +3161,7 @@ function clean_inbox_selected(){ foreach($_REQUEST['mid'] as $mid){ $stmt->execute(array($mid, $U['nickname'])); } - $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages) AND postid NOT IN (SELECT postid FROM ' . PREFIX . 'inbox);'); + $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages UNION SELECT postid FROM ' . PREFIX . 'inbox);'); } } @@ -3179,7 +3174,7 @@ function del_all_messages($nick, $entry){ $stmt->execute([$nick, $entry]); $stmt=$db->prepare('DELETE FROM ' . PREFIX . 'inbox WHERE poster=? AND postdate>=?;'); $stmt->execute([$nick, $entry]); - $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages) AND postid NOT IN (SELECT postid FROM ' . PREFIX . 'inbox);'); + $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages UNION SELECT postid FROM ' . PREFIX . 'inbox);'); } function del_last_message(){ @@ -3233,7 +3228,7 @@ function print_messages($delstatus=0){ $time=time(); $stmt=$db->prepare('DELETE FROM ' . PREFIX . 'messages WHERE id IN (SELECT * FROM (SELECT id FROM ' . PREFIX . 'messages WHERE postdate<(?-60*(SELECT value FROM ' . PREFIX . "settings WHERE setting='messageexpire'))) AS t);"); $stmt->execute([$time]); - $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages) AND postid NOT IN (SELECT postid FROM ' . PREFIX . 'inbox);'); + $db->exec('DELETE FROM ' . PREFIX . 'files WHERE postid NOT IN (SELECT id FROM ' . PREFIX . 'messages UNION SELECT postid FROM ' . PREFIX . 'inbox);'); echo '
'; if($delstatus>0){ $stmt=$db->prepare('SELECT postdate, id, text FROM ' . PREFIX . 'messages WHERE '. @@ -3279,14 +3274,6 @@ function prepare_message_print(&$message, $removeEmbed){ // this and that -function sort_names(&$names){ - $keys=[]; - foreach($names as $v){ - $keys[]=$v[3]; - } - array_multisort(array_map('mb_strtolower', $keys), SORT_ASC, SORT_STRING, $names); -} - function send_headers(){ header('Content-Type: text/html; charset=UTF-8'); header('Pragma: no-cache');