Compare commits

...

6 Commits

4 changed files with 115 additions and 130 deletions

View File

@ -1,3 +1,8 @@
Version 1.20.6 - Jul. 23, 2016
Simplify ignore logic + disallow ignoring chatters with higher status
Delete messages based on public message limit, no buffer for private ones needed
Allow deleting messages by name, when only PMs were sent
Version 1.20.5 - Jul. 19, 2016 Version 1.20.5 - Jul. 19, 2016
Check permission before selectively deleting a message. Check permission before selectively deleting a message.

238
chat.php
View File

@ -18,15 +18,29 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
/*
* status codes
* 0 - Kicked/Banned
* 1 - Guest
* 2 - Applicant
* 3 - Member
* 4 - System message
* 5 - Moderator
* 6 - Super-Moderator
* 7 - Admin
* 8 - Super-Admin
* 9 - Private messages
*/
send_headers(); send_headers();
// initialize and load variables/configuration // initialize and load variables/configuration
$A=array();// All registered members $A=array();// All registered members [display name, style, status, nickname]
$C=array();// Configuration $C=array();// Configuration
$F=array();// Fonts $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 $P=array();// All present users [display name, style, status, nickname]
$U=array();// This user data $U=array();// This user data
$countmods=0;// Present moderators $countmods=0;// Present moderators
$db;// Database connection $db;// Database connection
@ -82,7 +96,7 @@ function route(){
check_session(); check_session();
if($_REQUEST['what']==='all'){ if($_REQUEST['what']==='all'){
if(isSet($_REQUEST['confirm'])){ if(isSet($_REQUEST['confirm'])){
del_all_messages($U['nickname'], 10, $U['entry']); del_all_messages($U['nickname'], $U['status']==1 ? $U['entry'] : 0);
}else{ }else{
send_del_confirm(); send_del_confirm();
} }
@ -142,7 +156,7 @@ function route(){
} }
function route_admin(){ function route_admin(){
global $U; global $U, $db;
if($U['status']<5){ if($U['status']<5){
send_access_denied(); send_access_denied();
} }
@ -151,11 +165,15 @@ function route_admin(){
if($_REQUEST['what']==='choose'){ if($_REQUEST['what']==='choose'){
send_choose_messages(); send_choose_messages();
}elseif($_REQUEST['what']==='selected'){ }elseif($_REQUEST['what']==='selected'){
clean_selected($U['status']); clean_selected($U['status'], $U['nickname']);
}elseif($_REQUEST['what']==='room'){ }elseif($_REQUEST['what']==='room'){
clean_room(); clean_room();
}elseif($_REQUEST['what']==='nick'){ }elseif($_REQUEST['what']==='nick'){
del_all_messages($_REQUEST['nickname'], $U['status'], 0); $stmt=$db->prepare('SELECT * FROM ' . PREFIX . 'members WHERE nickname=? AND status>=?;');
$stmt->execute([$_REQUEST['nickname'], $U['status']]);
if(!$stmt->fetch(PDO::FETCH_ASSOC)){
del_all_messages($_REQUEST['nickname'], 0);
}
} }
}elseif($_REQUEST['do']==='kick'){ }elseif($_REQUEST['do']==='kick'){
if(isSet($_REQUEST['name'])){ if(isSet($_REQUEST['name'])){
@ -214,7 +232,7 @@ function route_setup(){
$C['bool_settings']=array('suguests', 'imgembed', 'timestamps', 'trackip', 'memkick', 'forceredirect', 'incognito', 'sendmail', 'modfallback', 'disablepm', 'eninbox'); $C['bool_settings']=array('suguests', 'imgembed', 'timestamps', 'trackip', 'memkick', 'forceredirect', 'incognito', 'sendmail', 'modfallback', 'disablepm', 'eninbox');
$C['colour_settings']=array('colbg', 'coltxt'); $C['colour_settings']=array('colbg', 'coltxt');
$C['msg_settings']=array('msgenter', 'msgexit', 'msgmemreg', 'msgsureg', 'msgkick', 'msgmultikick', 'msgallkick', 'msgclean', 'msgsendall', 'msgsendmem', 'msgsendmod', 'msgsendadm', 'msgsendprv'); $C['msg_settings']=array('msgenter', 'msgexit', 'msgmemreg', 'msgsureg', 'msgkick', 'msgmultikick', 'msgallkick', 'msgclean', 'msgsendall', 'msgsendmem', 'msgsendmod', 'msgsendadm', 'msgsendprv');
$C['number_settings']=array('memberexpire', 'guestexpire', 'kickpenalty', 'entrywait', 'captchatime', 'messageexpire', 'messagelimit', 'keeplimit', 'maxmessage', 'maxname', 'minpass', 'defaultrefresh', 'numnotes'); $C['number_settings']=array('memberexpire', 'guestexpire', 'kickpenalty', 'entrywait', 'captchatime', 'messageexpire', 'messagelimit', 'maxmessage', 'maxname', 'minpass', 'defaultrefresh', 'numnotes');
$C['textarea_settings']=array('rulestxt', 'css', 'disabletext'); $C['textarea_settings']=array('rulestxt', 'css', 'disabletext');
$C['text_settings']=array('dateformat', 'captchachars', 'redirect', 'chatname', 'mailsender', 'mailreceiver'); $C['text_settings']=array('dateformat', 'captchachars', 'redirect', 'chatname', 'mailsender', 'mailreceiver');
$C['settings']=array_merge(array('guestaccess', 'englobalpass', 'globalpass', 'captcha', 'dismemcaptcha', 'topic', 'guestreg', 'defaulttz'), $C['bool_settings'], $C['colour_settings'], $C['msg_settings'], $C['number_settings'], $C['textarea_settings'], $C['text_settings']); // All settings in the database $C['settings']=array_merge(array('guestaccess', 'englobalpass', 'globalpass', 'captcha', 'dismemcaptcha', 'topic', 'guestreg', 'defaulttz'), $C['bool_settings'], $C['colour_settings'], $C['msg_settings'], $C['number_settings'], $C['textarea_settings'], $C['text_settings']); // All settings in the database
@ -862,7 +880,7 @@ function send_admin($arg=''){
echo "<label for=\"room\">$I[room]</label></td><td>&nbsp;</td><td><input type=\"radio\" name=\"what\" id=\"choose\" value=\"choose\" checked>"; echo "<label for=\"room\">$I[room]</label></td><td>&nbsp;</td><td><input type=\"radio\" name=\"what\" id=\"choose\" value=\"choose\" checked>";
echo "<label for=\"choose\">$I[selection]</label></td><td>&nbsp;</td></tr><tr><td colspan=\"3\"><input type=\"radio\" name=\"what\" id=\"nick\" value=\"nick\">"; echo "<label for=\"choose\">$I[selection]</label></td><td>&nbsp;</td></tr><tr><td colspan=\"3\"><input type=\"radio\" name=\"what\" id=\"nick\" value=\"nick\">";
echo "<label for=\"nick\">$I[cleannick] </label><select name=\"nickname\" size=\"1\"><option value=\"\">$I[choose]</option>"; echo "<label for=\"nick\">$I[cleannick] </label><select name=\"nickname\" size=\"1\"><option value=\"\">$I[choose]</option>";
$stmt=$db->prepare('SELECT poster FROM ' . PREFIX . 'messages WHERE poststatus<9 AND delstatus<? GROUP BY poster;'); $stmt=$db->prepare('SELECT poster FROM ' . PREFIX . 'messages WHERE delstatus<? GROUP BY poster;');
$stmt->execute(array($U['status'])); $stmt->execute(array($U['status']));
while($nick=$stmt->fetch(PDO::FETCH_NUM)){ while($nick=$stmt->fetch(PDO::FETCH_NUM)){
echo "<option value=\"$nick[0]\">$nick[0]</option>"; echo "<option value=\"$nick[0]\">$nick[0]</option>";
@ -1612,15 +1630,6 @@ function send_post(){
} }
$disablepm=(bool) get_setting('disablepm'); $disablepm=(bool) get_setting('disablepm');
if(!$disablepm){ if(!$disablepm){
$ignored=array();
$ignore=get_ignored($U['nickname']);
foreach($ignore as $ign){
if($ign['ignored']===$U['nickname']){
$ignored[]=$ign['by'];
}else{
$ignored[]=$ign['ignored'];
}
}
$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)){
@ -1628,7 +1637,7 @@ function send_post(){
} }
sort_names($P); sort_names($P);
foreach($P as $user){ foreach($P as $user){
if($U['nickname']!==$user[3] && !in_array($user[3], $ignored)){ if($U['nickname']!==$user[3]){
echo '<option '; echo '<option ';
if($_REQUEST['sendto']==$user[3]){ if($_REQUEST['sendto']==$user[3]){
echo 'selected '; echo 'selected ';
@ -1698,44 +1707,34 @@ function send_profile($arg=''){
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); sort_names($P);
$ignored=array(); $ignored=[];
$ignore=get_ignored($U['nickname']); $stmt=$db->prepare('SELECT ign FROM ' . PREFIX . 'ignored WHERE ignby=?;');
foreach($ignore as $ign){ $stmt->execute([$U['nickname']]);
if($ign['by']===$U['nickname']){ while($tmp=$stmt->fetch(PDO::FETCH_ASSOC)){
$ignored[]=$ign['ignored']; $ignored[]=$tmp['ign'];
}
} }
if(count($ignored)>0){ if(count($ignored)>0){
echo "<tr><td><table class=\"left-table\"><tr><th>$I[unignore]</th><td class=\"right\">"; echo "<tr><td><table class=\"left-table\"><tr><th>$I[unignore]</th><td class=\"right\">";
echo "<select name=\"unignore\" size=\"1\"><option value=\"\">$I[choose]</option>"; echo "<select name=\"unignore\" size=\"1\"><option value=\"\">$I[choose]</option>";
foreach($ignored as $ign){ foreach($ignored as $ign){
$style=''; echo "<option value=\"$ign\">$ign</option>";
foreach($P as $user){
if($ign===$user[0]){
$style=" style=\"$user[1]\"";
break;
}
}
echo "<option value=\"$ign\"$style>$ign</option>";
} }
echo '</select></td></tr></table></td></tr>'; echo '</select></td></tr></table></td></tr>';
thr(); thr();
} }
if(count($P)-count($ignored)>1){ echo "<tr><td><table class=\"left-table\"><tr><th>$I[ignore]</th><td class=\"right\">";
echo "<tr><td><table class=\"left-table\"><tr><th>$I[ignore]</th><td class=\"right\">"; echo "<select name=\"ignore\" size=\"1\"><option value=\"\">$I[choose]</option>";
echo "<select name=\"ignore\" size=\"1\"><option value=\"\">$I[choose]</option>"; $stmt=$db->query('SELECT poster FROM ' . PREFIX . 'messages GROUP BY poster;');
$stmt=$db->query('SELECT poster FROM ' . PREFIX . 'messages GROUP BY poster;'); while($nick=$stmt->fetch(PDO::FETCH_NUM)){
while($nick=$stmt->fetch(PDO::FETCH_NUM)){ $nicks[]=$nick[0];
$nicks[]=$nick[0];
}
foreach($P as $user){
if($U['nickname']!==$user[0] && !in_array($user[0], $ignored) && in_array($user[0], $nicks)){
echo "<option value=\"$user[0]\" style=\"$user[1]\">$user[0]</option>";
}
}
echo '</select></td></tr></table></td></tr>';
thr();
} }
foreach($P as $user){
if($U['nickname']!==$user[0] && in_array($user[0], $nicks) && $user[2]<=$U['status']){
echo "<option value=\"$user[0]\" style=\"$user[1]\">$user[0]</option>";
}
}
echo '</select></td></tr></table></td></tr>';
thr();
echo "<tr><td><table class=\"left-table\"><tr><th>$I[refreshrate]</th><td class=\"right\">"; echo "<tr><td><table class=\"left-table\"><tr><th>$I[refreshrate]</th><td class=\"right\">";
echo "<input type=\"number\" name=\"refresh\" size=\"3\" maxlength=\"3\" min=\"5\" max=\"150\" value=\"$U[refresh]\"></td></tr></table></td></tr>"; echo "<input type=\"number\" name=\"refresh\" size=\"3\" maxlength=\"3\" min=\"5\" max=\"150\" value=\"$U[refresh]\"></td></tr></table></td></tr>";
thr(); thr();
@ -2039,9 +2038,9 @@ function create_session($setup){
if(!$stmt->fetch(PDO::FETCH_BOUND)){ if(!$stmt->fetch(PDO::FETCH_BOUND)){
send_error($I['captchaexpire']); send_error($I['captchaexpire']);
} }
$timeout=time()-get_setting('captchatime'); $time=time();
$stmt=$db->prepare('DELETE FROM ' . PREFIX . 'captcha WHERE id=? OR time<?;'); $stmt=$db->prepare('DELETE FROM ' . PREFIX . 'captcha WHERE id=? OR time<(?-(SELECT value FROM ' . PREFIX . "settings WHERE setting='captchatime'));");
$stmt->execute(array($_REQUEST['challenge'], $timeout)); $stmt->execute(array($_REQUEST['challenge'], $time));
}else{ }else{
if(!$code=$memcached->get(DBNAME . '-' . PREFIX . "captcha-$_REQUEST[challenge]")){ if(!$code=$memcached->get(DBNAME . '-' . PREFIX . "captcha-$_REQUEST[challenge]")){
send_error($I['captchaexpire']); send_error($I['captchaexpire']);
@ -2226,7 +2225,7 @@ function kick_chatter($names, $mes, $purge){
if(($temp[0]===$U['nickname'] && $U['nickname']===$name) || ($U['status']>$temp[2] && (($temp[0]===$name && $temp[2]>0) || ($name==='&' && $temp[2]==1)))){ if(($temp[0]===$U['nickname'] && $U['nickname']===$name) || ($U['status']>$temp[2] && (($temp[0]===$name && $temp[2]>0) || ($name==='&' && $temp[2]==1)))){
$stmt->execute(array($time, $mes, $name)); $stmt->execute(array($time, $mes, $name));
if($purge){ if($purge){
del_all_messages($name, 10, 0); del_all_messages($name, 0);
} }
$lonick.=style_this($name, $temp[1]).', '; $lonick.=style_this($name, $temp[1]).', ';
++$i; ++$i;
@ -2314,10 +2313,9 @@ function get_nowchatting(){
function parse_sessions(){ function parse_sessions(){
global $P, $U, $countmods, $db; global $P, $U, $countmods, $db;
// delete old sessions // delete old sessions
$guestexpire=time()-60*get_setting('guestexpire'); $time=time();
$memberexpire=time()-60*get_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')));");
$result=$db->prepare('SELECT nickname, status FROM ' . PREFIX . 'sessions WHERE (status<=2 AND lastpost<?) OR (status>2 AND lastpost<?);'); $result->execute(array($time, $time));
$result->execute(array($guestexpire, $memberexpire));
if($tmp=$result->fetchAll(PDO::FETCH_ASSOC)){ if($tmp=$result->fetchAll(PDO::FETCH_ASSOC)){
$stmt=$db->prepare('DELETE FROM ' . PREFIX . 'sessions WHERE nickname=?;'); $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;");
@ -2346,7 +2344,12 @@ function parse_sessions(){
// load other sessions // load other sessions
$countmods=0; $countmods=0;
$P=array(); $P=array();
$stmt=$db->query('SELECT nickname, style, status, incognito FROM ' . PREFIX . 'sessions WHERE entry!=0 AND status>0 ORDER BY status DESC, lastpost DESC;'); 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)){ while($temp=$stmt->fetch(PDO::FETCH_ASSOC)){
if(!$temp['incognito']){ if(!$temp['incognito']){
$P[$temp['nickname']]=[$temp['nickname'], $temp['style'], $temp['status'], $temp['nickname']]; $P[$temp['nickname']]=[$temp['nickname'], $temp['style'], $temp['status'], $temp['nickname']];
@ -2594,7 +2597,7 @@ function amend_profile(){
} }
function save_profile(){ function save_profile(){
global $I, $U, $db; global $I, $P, $U, $db;
amend_profile(); amend_profile();
$stmt=$db->prepare('UPDATE ' . PREFIX . 'sessions SET refresh=?, style=?, boxwidth=?, boxheight=?, bgcolour=?, notesboxwidth=?, notesboxheight=?, timestamps=?, embed=?, incognito=?, nocache=?, tz=?, eninbox=? WHERE session=?;'); $stmt=$db->prepare('UPDATE ' . PREFIX . 'sessions SET refresh=?, style=?, boxwidth=?, boxheight=?, bgcolour=?, notesboxwidth=?, notesboxheight=?, timestamps=?, embed=?, incognito=?, nocache=?, tz=?, eninbox=? WHERE session=?;');
$stmt->execute(array($U['refresh'], $U['style'], $U['boxwidth'], $U['boxheight'], $U['bgcolour'], $U['notesboxwidth'], $U['notesboxheight'], $U['timestamps'], $U['embed'], $U['incognito'], $U['nocache'], $U['tz'], $U['eninbox'], $U['session'])); $stmt->execute(array($U['refresh'], $U['style'], $U['boxwidth'], $U['boxheight'], $U['bgcolour'], $U['notesboxwidth'], $U['notesboxheight'], $U['timestamps'], $U['embed'], $U['incognito'], $U['nocache'], $U['tz'], $U['eninbox'], $U['session']));
@ -2607,8 +2610,10 @@ function save_profile(){
$stmt->execute(array($_REQUEST['unignore'], $U['nickname'])); $stmt->execute(array($_REQUEST['unignore'], $U['nickname']));
} }
if(!empty($_REQUEST['ignore'])){ if(!empty($_REQUEST['ignore'])){
$stmt=$db->prepare('INSERT INTO ' . PREFIX . 'ignored (ign, ignby) VALUES (?, ?);'); if($_REQUEST['ignore']!==$U['nickname'] && $P[$_REQUEST['ignore']][2]<=$U['status']){
$stmt->execute(array($_REQUEST['ignore'], $U['nickname'])); $stmt=$db->prepare('INSERT INTO ' . PREFIX . 'ignored (ign, ignby) VALUES (?, ?);');
$stmt->execute(array($_REQUEST['ignore'], $U['nickname']));
}
} }
if($U['status']>1 && !empty($_REQUEST['newpass'])){ if($U['status']>1 && !empty($_REQUEST['newpass'])){
if(!valid_pass($_REQUEST['newpass'])){ if(!valid_pass($_REQUEST['newpass'])){
@ -2676,7 +2681,7 @@ function add_user_defaults(){
global $U; global $U;
$U['refresh']=get_setting('defaultrefresh'); $U['refresh']=get_setting('defaultrefresh');
$U['bgcolour']=get_setting('colbg'); $U['bgcolour']=get_setting('colbg');
if(!isSet($_REQUEST['colour']) || !preg_match('/^[a-f0-9]{6}$/i', $_REQUEST['colour'])){ if(!isSet($_REQUEST['colour']) || !preg_match('/^[a-f0-9]{6}$/i', $_REQUEST['colour']) || abs(greyval($_REQUEST['colour'])-greyval(get_setting('colbg')))<75){
do{ do{
$U['colour']=sprintf('%02X', mt_rand(0, 256)).sprintf('%02X', mt_rand(0, 256)).sprintf('%02X', mt_rand(0, 256)); $U['colour']=sprintf('%02X', mt_rand(0, 256)).sprintf('%02X', mt_rand(0, 256)).sprintf('%02X', mt_rand(0, 256));
}while(abs(greyval($U['colour'])-greyval(get_setting('colbg')))<75); }while(abs(greyval($U['colour'])-greyval(get_setting('colbg')))<75);
@ -2701,7 +2706,7 @@ function add_user_defaults(){
function validate_input(){ function validate_input(){
global $P, $U, $db; global $P, $U, $db;
$inboxes=[]; $inbox=false;
$maxmessage=get_setting('maxmessage'); $maxmessage=get_setting('maxmessage');
$U['message']=substr($_REQUEST['message'], 0, $maxmessage); $U['message']=substr($_REQUEST['message'], 0, $maxmessage);
$U['rejected']=substr($_REQUEST['message'], $maxmessage); $U['rejected']=substr($_REQUEST['message'], $maxmessage);
@ -2731,7 +2736,6 @@ function validate_input(){
} }
$U['message']=trim($U['message']); $U['message']=trim($U['message']);
$U['message']=preg_replace('/\s+/', ' ', $U['message']); $U['message']=preg_replace('/\s+/', ' ', $U['message']);
$U['delstatus']=$U['status'];
$U['recipient']=''; $U['recipient']='';
if($_REQUEST['sendto']==='*'){ if($_REQUEST['sendto']==='*'){
$U['poststatus']='1'; $U['poststatus']='1';
@ -2749,22 +2753,17 @@ function validate_input(){
if(get_setting('disablepm')){ if(get_setting('disablepm')){
return; return;
} }
$stmt=$db->prepare('SELECT * FROM ' . PREFIX . 'ignored WHERE (ignby=? AND ign=?) OR (ignby=? AND ign=?);'); $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->execute(array($U['nickname'], $_REQUEST['sendto'], $_REQUEST['sendto'], $U['nickname'])); $stmt->execute(array($_REQUEST['sendto'], $U['status'], $U['nickname'], $U['nickname']));
if(!$stmt->fetch(PDO::FETCH_NUM)){ if($tmp=$stmt->fetch(PDO::FETCH_ASSOC)){
$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=?);'); $P[$tmp['nickname']]=[$tmp['nickname'], $tmp['style'], $tmp['status'], $tmp['nickname']];
$stmt->execute(array($U['status'], $U['nickname'], $U['nickname'])); $inbox=true;
while($tmp=$stmt->fetch(PDO::FETCH_ASSOC)){ }
$P[$tmp['nickname']]=[$tmp['nickname'], $tmp['style'], $tmp['status'], $tmp['nickname']]; if(isSet($P[$_REQUEST['sendto']])){
$inboxes[$tmp['nickname']]=true; $U['recipient']=$P[$_REQUEST['sendto']][0];
} $U['displayrecp']=style_this($U['recipient'], $P[$_REQUEST['sendto']][1]);
if(isSet($P[$_REQUEST['sendto']])){ $U['poststatus']='9';
$U['recipient']=$P[$_REQUEST['sendto']][0]; $U['displaysend']=sprintf(get_setting('msgsendprv'), style_this($U['nickname'], $U['style']), $U['displayrecp']);
$U['displayrecp']=style_this($U['recipient'], $P[$_REQUEST['sendto']][1]);
$U['poststatus']='9';
$U['delstatus']='9';
$U['displaysend']=sprintf(get_setting('msgsendprv'), style_this($U['nickname'], $U['style']), $U['displayrecp']);
}
} }
if(empty($U['recipient'])){// nick left already or ignores us if(empty($U['recipient'])){// nick left already or ignores us
$U['message']=''; $U['message']='';
@ -2779,7 +2778,7 @@ function validate_input(){
$U['lastpost']=time(); $U['lastpost']=time();
$stmt=$db->prepare('UPDATE ' . PREFIX . 'sessions SET lastpost=?, postid=? WHERE session=?;'); $stmt=$db->prepare('UPDATE ' . PREFIX . 'sessions SET lastpost=?, postid=? WHERE session=?;');
$stmt->execute(array($U['lastpost'], $_REQUEST['postid'], $U['session'])); $stmt->execute(array($U['lastpost'], $_REQUEST['postid'], $U['session']));
if(isSet($inboxes[$_REQUEST['sendto']])){ if($inbox){
$message=array( $message=array(
'postdate' =>time(), 'postdate' =>time(),
'poster' =>$U['nickname'], 'poster' =>$U['nickname'],
@ -2919,7 +2918,7 @@ function add_message(){
'poster' =>$U['nickname'], 'poster' =>$U['nickname'],
'recipient' =>$U['recipient'], 'recipient' =>$U['recipient'],
'text' =>"<span class=\"usermsg\">$U[displaysend]".style_this($U['message'], $U['style']).'</span>', 'text' =>"<span class=\"usermsg\">$U[displaysend]".style_this($U['message'], $U['style']).'</span>',
'delstatus' =>$U['delstatus'] 'delstatus' =>$U['status']
); );
write_message($newmessage); write_message($newmessage);
return true; return true;
@ -2950,8 +2949,8 @@ function write_message($message){
} }
$stmt=$db->prepare('INSERT INTO ' . PREFIX . 'messages (postdate, poststatus, poster, recipient, text, delstatus) VALUES (?, ?, ?, ?, ?, ?);'); $stmt=$db->prepare('INSERT INTO ' . PREFIX . 'messages (postdate, poststatus, poster, recipient, text, delstatus) VALUES (?, ?, ?, ?, ?, ?);');
$stmt->execute(array($message['postdate'], $message['poststatus'], $message['poster'], $message['recipient'], $message['text'], $message['delstatus'])); $stmt->execute(array($message['postdate'], $message['poststatus'], $message['poster'], $message['recipient'], $message['text'], $message['delstatus']));
$limit=get_setting('keeplimit')*get_setting('messagelimit'); $limit=get_setting('messagelimit');
$stmt=$db->query('SELECT id FROM ' . PREFIX . "messages ORDER BY id DESC LIMIT 1 OFFSET $limit"); $stmt=$db->query('SELECT id FROM ' . PREFIX . "messages WHERE poststatus=1 ORDER BY id DESC LIMIT 1 OFFSET $limit");
if($id=$stmt->fetch(PDO::FETCH_NUM)){ if($id=$stmt->fetch(PDO::FETCH_NUM)){
$stmt=$db->prepare('DELETE FROM ' . PREFIX . 'messages WHERE id<=?;'); $stmt=$db->prepare('DELETE FROM ' . PREFIX . 'messages WHERE id<=?;');
$stmt->execute(array($id[0])); $stmt->execute(array($id[0]));
@ -2971,12 +2970,12 @@ function clean_room(){
add_system_message(sprintf($msg, get_setting('chatname'))); add_system_message(sprintf($msg, get_setting('chatname')));
} }
function clean_selected($status){ function clean_selected($status, $nick){
global $db; global $db;
if(isSet($_REQUEST['mid'])){ if(isSet($_REQUEST['mid'])){
$stmt=$db->prepare('DELETE FROM ' . PREFIX . 'messages WHERE id=? AND (delstatus=9 OR delstatus<?);'); $stmt=$db->prepare('DELETE FROM ' . PREFIX . 'messages WHERE id=? AND (poster=? OR recipient=? OR (poststatus<? AND delstatus<?));');
foreach($_REQUEST['mid'] as $mid){ foreach($_REQUEST['mid'] as $mid){
$stmt->execute(array($mid, $status)); $stmt->execute(array($mid, $nick, $nick, $status, $status));
} }
} }
} }
@ -2991,14 +2990,10 @@ function clean_inbox_selected(){
} }
} }
function del_all_messages($nick, $status, $entry){ function del_all_messages($nick, $entry){
global $U, $db; global $db;
if($nick===$U['nickname']) $status=10; $stmt=$db->prepare('DELETE FROM ' . PREFIX . 'messages WHERE poster=? AND postdate>?;');
if($U['status']>1){ $stmt->execute(array($nick, $entry));
$entry=0;
}
$stmt=$db->prepare('DELETE FROM ' . PREFIX . 'messages WHERE poster=? AND delstatus<? AND postdate>?;');
$stmt->execute(array($nick, $status, $entry));
$stmt=$db->prepare('DELETE FROM ' . PREFIX . 'inbox WHERE poster=?;'); $stmt=$db->prepare('DELETE FROM ' . PREFIX . 'inbox WHERE poster=?;');
$stmt->execute(array($nick)); $stmt->execute(array($nick));
} }
@ -3024,7 +3019,6 @@ function print_messages($delstatus=''){
global $I, $U, $db; global $I, $U, $db;
$dateformat=get_setting('dateformat'); $dateformat=get_setting('dateformat');
$tz=3600*$U['tz']; $tz=3600*$U['tz'];
$messagelimit=(int) get_setting('messagelimit');
if(!isSet($_COOKIE[COOKIENAME]) && get_setting('forceredirect')==0){ if(!isSet($_COOKIE[COOKIENAME]) && get_setting('forceredirect')==0){
$injectRedirect=true; $injectRedirect=true;
$redirect=get_setting('redirect'); $redirect=get_setting('redirect');
@ -3050,13 +3044,13 @@ function print_messages($delstatus=''){
send_fatal_error($I['opensslextrequired']); send_fatal_error($I['opensslextrequired']);
} }
} }
$expire=time()-60*get_setting('messageexpire'); $time=time();
$db->exec('DELETE FROM ' . PREFIX . 'messages WHERE id IN (SELECT * FROM (SELECT id FROM ' . PREFIX . "messages WHERE postdate<$expire) AS t);"); $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]);
if(!empty($delstatus)){ if(!empty($delstatus)){
$stmt=$db->prepare('SELECT postdate, id, text FROM ' . PREFIX . 'messages WHERE '. $stmt=$db->prepare('SELECT postdate, id, text FROM ' . PREFIX . 'messages WHERE '.
'(id IN (SELECT * FROM (SELECT id FROM ' . PREFIX . "messages WHERE poststatus=1 ORDER BY id DESC LIMIT $messagelimit) AS t) ". '(poststatus<? AND delstatus<?) OR poster=? OR recipient=? ORDER BY id DESC;');
'OR (poststatus>1 AND (poststatus<? OR poster=? OR recipient=?) ) ) AND (poster=? OR recipient=? OR delstatus<?) ORDER BY id DESC;'); $stmt->execute(array($U['status'], $delstatus, $U['nickname'], $U['nickname']));
$stmt->execute(array($U['status'], $U['nickname'], $U['nickname'], $U['nickname'], $U['nickname'], $delstatus));
while($message=$stmt->fetch(PDO::FETCH_ASSOC)){ while($message=$stmt->fetch(PDO::FETCH_ASSOC)){
prepare_message_print($message, $injectRedirect, $redirect, $removeEmbed); prepare_message_print($message, $injectRedirect, $redirect, $removeEmbed);
echo "<div class=\"msg\"><input type=\"checkbox\" name=\"mid[]\" id=\"$message[id]\" value=\"$message[id]\"><label for=\"$message[id]\">"; echo "<div class=\"msg\"><input type=\"checkbox\" name=\"mid[]\" id=\"$message[id]\" value=\"$message[id]\"><label for=\"$message[id]\">";
@ -3066,15 +3060,10 @@ function print_messages($delstatus=''){
echo " $message[text]</label></div>"; echo " $message[text]</label></div>";
} }
}else{ }else{
if(!isSet($_REQUEST['id'])){ $stmt=$db->prepare('SELECT id, postdate, text FROM ' . PREFIX . 'messages WHERE (poststatus<=? OR '.
$_REQUEST['id']=0; '(poststatus=9 AND ( (poster=? AND recipient NOT IN (SELECT ign FROM ' . PREFIX . 'ignored WHERE ignby=?) ) OR recipient=?) )'.
} ') AND poster NOT IN (SELECT ign FROM ' . PREFIX . 'ignored WHERE ignby=?) ORDER BY id DESC;');
$stmt=$db->prepare('SELECT id, postdate, text FROM ' . PREFIX . 'messages WHERE ('. $stmt->execute(array($U['status'], $U['nickname'], $U['nickname'], $U['nickname'], $U['nickname']));
'id IN (SELECT * FROM (SELECT id FROM ' . PREFIX . "messages WHERE poststatus=1 ORDER BY id DESC LIMIT $messagelimit) AS t) ".
'OR (poststatus>1 AND poststatus<=?) '.
'OR (poststatus=9 AND ( (poster=? AND recipient NOT IN (SELECT ign FROM ' . PREFIX . 'ignored WHERE ignby=?) ) OR recipient=?) )'.
') AND poster NOT IN (SELECT ign FROM ' . 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)){ while($message=$stmt->fetch(PDO::FETCH_ASSOC)){
prepare_message_print($message, $injectRedirect, $redirect, $removeEmbed); prepare_message_print($message, $injectRedirect, $redirect, $removeEmbed);
echo '<div class="msg">'; echo '<div class="msg">';
@ -3082,9 +3071,6 @@ function print_messages($delstatus=''){
echo '<small>'.date($dateformat, $message['postdate']+$tz).' - </small>'; echo '<small>'.date($dateformat, $message['postdate']+$tz).' - </small>';
} }
echo "$message[text]</div>"; echo "$message[text]</div>";
if($_REQUEST['id']<$message['id']){
$_REQUEST['id']=$message['id'];
}
} }
} }
} }
@ -3192,17 +3178,6 @@ function save_setup(){
} }
} }
function get_ignored($name){
global $db;
$ignored=array();
$stmt=$db->prepare('SELECT ign, ignby FROM ' . PREFIX . 'ignored WHERE ign=? OR ignby=?;');
$stmt->execute([$name, $name]);
while($tmp=$stmt->fetch(PDO::FETCH_ASSOC)){
$ignored[]=['ignored'=>$tmp['ign'], 'by'=>$tmp['ignby']];
}
return $ignored;
}
function valid_admin(){ function valid_admin(){
global $U; global $U;
if(isSet($_REQUEST['session'])){ if(isSet($_REQUEST['session'])){
@ -3245,11 +3220,12 @@ function print_colours(){
global $I; global $I;
// Prints a short list with selected named HTML colours and filters out illegible text colours for the given background. // Prints a short list with selected named HTML colours and filters out illegible text colours for the given background.
// It's a simple comparison of weighted grey values. This is not very accurate but gets the job done well enough. // It's a simple comparison of weighted grey values. This is not very accurate but gets the job done well enough.
$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'); // name=>[colour, greyval(colour)]
$colours=['Beige'=>['F5F5DC', 242.25], 'Black'=>['000000', 0], 'Blue'=>['0000FF', 28.05], 'BlueViolet'=>['8A2BE2', 91.63], 'Brown'=>['A52A2A', 78.9], 'Cyan'=>['00FFFF', 178.5], 'DarkBlue'=>['00008B', 15.29], 'DarkGreen'=>['006400', 59], 'DarkRed'=>['8B0000', 41.7], 'DarkViolet'=>['9400D3', 67.61], 'DeepSkyBlue'=>['00BFFF', 140.74], 'Gold'=>['FFD700', 203.35], 'Grey'=>['808080', 128], 'Green'=>['008000', 75.52], 'HotPink'=>['FF69B4', 158.25], 'Indigo'=>['4B0082', 36.8], 'LightBlue'=>['ADD8E6', 204.64], 'LightGreen'=>['90EE90', 199.46], 'LimeGreen'=>['32CD32', 141.45], 'Magenta'=>['FF00FF', 104.55], 'Olive'=>['808000', 113.92], 'Orange'=>['FFA500', 173.85], 'OrangeRed'=>['FF4500', 117.21], 'Purple'=>['800080', 52.48], 'Red'=>['FF0000', 76.5], 'RoyalBlue'=>['4169E1', 106.2], 'SeaGreen'=>['2E8B57', 105.38], 'Sienna'=>['A0522D', 101.33], 'Silver'=>['C0C0C0', 192], 'Tan'=>['D2B48C', 184.6], 'Teal'=>['008080', 89.6], 'Violet'=>['EE82EE', 174.28], 'White'=>['FFFFFF', 255], 'Yellow'=>['FFFF00', 226.95], 'YellowGreen'=>['9ACD32', 172.65]];
$greybg=greyval(get_setting('colbg')); $greybg=greyval(get_setting('colbg'));
foreach($colours as $name=>$colour){ foreach($colours as $name=>$colour){
if(abs($greybg-greyval($colour))>75){ if(abs($greybg-$colour[1])>75){
echo "<option value=\"$colour\" style=\"color:#$colour;\">$I[$name]</option>"; echo "<option value=\"$colour[0]\" style=\"color:#$colour[0];\">$I[$name]</option>";
} }
} }
} }
@ -3382,7 +3358,7 @@ function init_chat(){
$db->exec('CREATE INDEX ' . PREFIX . 'incognito ON ' . PREFIX . 'sessions(incognito);'); $db->exec('CREATE INDEX ' . PREFIX . 'incognito ON ' . PREFIX . 'sessions(incognito);');
$db->exec('CREATE TABLE ' . PREFIX . "settings (setting varchar(50) NOT NULL PRIMARY KEY, value varchar(20000) NOT NULL);"); $db->exec('CREATE TABLE ' . PREFIX . "settings (setting varchar(50) NOT NULL PRIMARY KEY, value varchar(20000) NOT NULL);");
} }
$settings=array(array('guestaccess', '0'), array('globalpass', ''), array('englobalpass', '0'), array('captcha', '0'), array('dateformat', 'm-d H:i:s'), array('rulestxt', ''), array('msgencrypted', '0'), array('dbversion', DBVERSION), array('css', 'a:visited{color:#B33CB4;} a:active{color:#FF0033;} a:link{color:#0000FF;} input,select,textarea{color:#FFFFFF;background-color:#000000;} a img{width:15%} a:hover img{width:35%} .error{color:#FF0033;} .delbutton{background-color:#660000;} .backbutton{background-color:#004400;} #exitbutton{background-color:#AA0000;} .center-table{margin-left:auto;margin-right:auto;} body{text-align:center;} .left-table{width:100%;text-align:left;} .right{text-align:right;} .left{text-align:left;} .right-table{border-spacing:0px;margin-left:auto;} .padded{padding:5px;} #chatters{max-height:100px;overflow-y:auto;} .center{text-align:center;}'), array('memberexpire', '60'), array('guestexpire', '15'), array('kickpenalty', '10'), array('entrywait', '120'), array('messageexpire', '14400'), array('messagelimit', '150'), array('maxmessage', 2000), array('captchatime', '600'), array('colbg', '000000'), array('coltxt', 'FFFFFF'), array('maxname', '20'), array('minpass', '5'), array('defaultrefresh', '20'), array('dismemcaptcha', '0'), array('suguests', '0'), array('imgembed', '1'), array('timestamps', '1'), array('trackip', '0'), array('captchachars', '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), array('memkick', '1'), array('forceredirect', '0'), array('redirect', ''), array('incognito', '1'), array('chatname', 'My Chat'), array('topic', ''), array('msgsendall', $I['sendallmsg']), array('msgsendmem', $I['sendmemmsg']), array('msgsendmod', $I['sendmodmsg']), array('msgsendadm', $I['sendadmmsg']), array('msgsendprv', $I['sendprvmsg']), array('msgenter', $I['entermsg']), array('msgexit', $I['exitmsg']), array('msgmemreg', $I['memregmsg']), array('msgsureg', $I['suregmsg']), array('msgkick', $I['kickmsg']), array('msgmultikick', $I['multikickmsg']), array('msgallkick', $I['allkickmsg']), array('msgclean', $I['cleanmsg']), array('numnotes', '3'), array('keeplimit', '3'), array('mailsender', 'www-data <www-data@localhost>'), array('mailreceiver', 'Webmaster <webmaster@localhost>'), array('sendmail', '0'), array('modfallback', '1'), array('guestreg', '0'), array('disablepm', '0'), array('disabletext', "<h1>$I[disabledtext]</h1>"), array('defaulttz', '0'), array('eninbox', '0')); $settings=array(array('guestaccess', '0'), array('globalpass', ''), array('englobalpass', '0'), array('captcha', '0'), array('dateformat', 'm-d H:i:s'), array('rulestxt', ''), array('msgencrypted', '0'), array('dbversion', DBVERSION), array('css', 'a:visited{color:#B33CB4;} a:active{color:#FF0033;} a:link{color:#0000FF;} input,select,textarea{color:#FFFFFF;background-color:#000000;} a img{width:15%} a:hover img{width:35%} .error{color:#FF0033;} .delbutton{background-color:#660000;} .backbutton{background-color:#004400;} #exitbutton{background-color:#AA0000;} .center-table{margin-left:auto;margin-right:auto;} body{text-align:center;} .left-table{width:100%;text-align:left;} .right{text-align:right;} .left{text-align:left;} .right-table{border-spacing:0px;margin-left:auto;} .padded{padding:5px;} #chatters{max-height:100px;overflow-y:auto;} .center{text-align:center;}'), array('memberexpire', '60'), array('guestexpire', '15'), array('kickpenalty', '10'), array('entrywait', '120'), array('messageexpire', '14400'), array('messagelimit', '150'), array('maxmessage', 2000), array('captchatime', '600'), array('colbg', '000000'), array('coltxt', 'FFFFFF'), array('maxname', '20'), array('minpass', '5'), array('defaultrefresh', '20'), array('dismemcaptcha', '0'), array('suguests', '0'), array('imgembed', '1'), array('timestamps', '1'), array('trackip', '0'), array('captchachars', '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), array('memkick', '1'), array('forceredirect', '0'), array('redirect', ''), array('incognito', '1'), array('chatname', 'My Chat'), array('topic', ''), array('msgsendall', $I['sendallmsg']), array('msgsendmem', $I['sendmemmsg']), array('msgsendmod', $I['sendmodmsg']), array('msgsendadm', $I['sendadmmsg']), array('msgsendprv', $I['sendprvmsg']), array('msgenter', $I['entermsg']), array('msgexit', $I['exitmsg']), array('msgmemreg', $I['memregmsg']), array('msgsureg', $I['suregmsg']), array('msgkick', $I['kickmsg']), array('msgmultikick', $I['multikickmsg']), array('msgallkick', $I['allkickmsg']), array('msgclean', $I['cleanmsg']), array('numnotes', '3'), array('mailsender', 'www-data <www-data@localhost>'), array('mailreceiver', 'Webmaster <webmaster@localhost>'), array('sendmail', '0'), array('modfallback', '1'), array('guestreg', '0'), array('disablepm', '0'), array('disabletext', "<h1>$I[disabledtext]</h1>"), array('defaulttz', '0'), array('eninbox', '0'));
$stmt=$db->prepare('INSERT INTO ' . PREFIX . 'settings (setting, value) VALUES (?, ?);'); $stmt=$db->prepare('INSERT INTO ' . PREFIX . 'settings (setting, value) VALUES (?, ?);');
foreach($settings as $pair){ foreach($settings as $pair){
$stmt->execute($pair); $stmt->execute($pair);
@ -3516,7 +3492,7 @@ function update_db(){
} }
} }
if($dbversion<15){ if($dbversion<15){
$db->exec('INSERT INTO ' . PREFIX . "settings (setting, value) VALUES ('keeplimit', '3'), ('mailsender', 'www-data <www-data@localhost>'), ('mailreceiver', 'Webmaster <webmaster@localhost>'), ('sendmail', '0'), ('modfallback', '1'), ('guestreg', '0');"); $db->exec('INSERT INTO ' . PREFIX . "settings (setting, value) VALUES ('mailsender', 'www-data <www-data@localhost>'), ('mailreceiver', 'Webmaster <webmaster@localhost>'), ('sendmail', '0'), ('modfallback', '1'), ('guestreg', '0');");
} }
if($dbversion<16){ if($dbversion<16){
$css=get_setting('css'); $css=get_setting('css');
@ -3560,6 +3536,12 @@ function update_db(){
$memcached->delete(DBNAME . '-' . PREFIX . "settings-enablejs"); $memcached->delete(DBNAME . '-' . PREFIX . "settings-enablejs");
} }
} }
if($dbversion<24){
$db->exec('DELETE FROM ' . PREFIX . 'ignored WHERE id IN (SELECT id FROM (SELECT ' . PREFIX . 'ignored.id, ign, ignby FROM ' . PREFIX . 'ignored, ' . PREFIX . 'members WHERE nickname=ignby AND status < (SELECT status FROM ' . PREFIX . 'members WHERE nickname=ign) ) AS t);');
}
if($dbversion<25){
$db->exec('DELETE FROM ' . PREFIX . "settings WHERE setting='keeplimit';");
}
update_setting('dbversion', DBVERSION); update_setting('dbversion', DBVERSION);
if(get_setting('msgencrypted')!=MSGENCRYPTED){ if(get_setting('msgencrypted')!=MSGENCRYPTED){
if(!extension_loaded('openssl')){ if(!extension_loaded('openssl')){
@ -3748,8 +3730,8 @@ function load_lang(){
function load_config(){ function load_config(){
date_default_timezone_set('UTC'); date_default_timezone_set('UTC');
define('VERSION', '1.20.5'); // Script version define('VERSION', '1.20.6'); // Script version
define('DBVERSION', 23); // Database version define('DBVERSION', 25); // Database version
define('MSGENCRYPTED', false); // Store messages encrypted in the database to prevent other database users from reading them - true/false - visit the setup page after editing! define('MSGENCRYPTED', false); // Store messages encrypted in the database to prevent other database users from reading them - true/false - visit the setup page after editing!
define('ENCRYPTKEY', 'MY_KEY'); // Encryption key for messages define('ENCRYPTKEY', 'MY_KEY'); // Encryption key for messages
define('DBHOST', 'localhost'); // Database host define('DBHOST', 'localhost'); // Database host

View File

@ -254,7 +254,6 @@ $T=array(
'captchatime' => 'Captcha-Ablaufzeit (Sekunden)', 'captchatime' => 'Captcha-Ablaufzeit (Sekunden)',
'messageexpire' => 'Nachrichten-Ablaufzeit (Minuten)', 'messageexpire' => 'Nachrichten-Ablaufzeit (Minuten)',
'messagelimit' => 'Nachrichtenlimit (öffentliche)', 'messagelimit' => 'Nachrichtenlimit (öffentliche)',
'keeplimit' => 'So viele Male zusätzliche Nachrichten behalten (PMs und Mitgliederchat)',
'maxmessage' => 'Maximale Nachrichenlänge', 'maxmessage' => 'Maximale Nachrichenlänge',
'confirm' => 'Bist du sicher?', 'confirm' => 'Bist du sicher?',
'yes' => 'Ja', 'yes' => 'Ja',

View File

@ -254,7 +254,6 @@ $I=array(
'captchatime' => 'Captcha timeout (seconds)', 'captchatime' => 'Captcha timeout (seconds)',
'messageexpire' => 'Message timeout (minutes)', 'messageexpire' => 'Message timeout (minutes)',
'messagelimit' => 'Message limit (public)', 'messagelimit' => 'Message limit (public)',
'keeplimit' => 'Keep this times additional messages (PMs and Member chat)',
'maxmessage' => 'Maximal message length', 'maxmessage' => 'Maximal message length',
'confirm' => 'Are you sure?', 'confirm' => 'Are you sure?',
'yes' => 'Yes', 'yes' => 'Yes',