diff --git a/chat.php b/chat.php
index 3c3cdea..da7e9b5 100644
--- a/chat.php
+++ b/chat.php
@@ -60,8 +60,8 @@ function route(){
}elseif($_REQUEST['action']==='view'){
check_session();
send_messages();
- }elseif($_REQUEST['action']==='redirect' && !empty($_GET['url'])){
- send_redirect($_GET['url']);
+ }elseif($_REQUEST['action']==='redirect' && !empty($_REQUEST['url'])){
+ send_redirect($_REQUEST['url']);
}elseif($_REQUEST['action']==='wait'){
parse_sessions();
send_waiting_room();
@@ -645,11 +645,14 @@ function send_setup($C){
thr();
echo "
$I[defaulttz] | ";
echo "';
echo ' |
---|
|
';
@@ -1465,7 +1468,6 @@ function send_inbox(){
print_start('inbox');
echo form('inbox', 'clean').submit($I['delselmes'], 'class="delbutton"').'
';
$dateformat=get_setting('dateformat');
- $tz=3600*$U['tz'];
if(!$U['embed'] && get_setting('imgembed')){
$removeEmbed=true;
}else{
@@ -1492,7 +1494,7 @@ function send_inbox(){
prepare_message_print($message, $removeEmbed);
echo "";
}
@@ -1543,7 +1545,7 @@ function send_notes($type){
$stmt=$db->prepare('SELECT * FROM ' . PREFIX . "notes WHERE type=? ORDER BY id DESC LIMIT 1 OFFSET $revision;");
$stmt->execute([$type]);
if($note=$stmt->fetch(PDO::FETCH_ASSOC)){
- printf($I['lastedited'], htmlspecialchars($note['editedby']), date($dateformat, $note['lastedited']+3600*$U['tz']));
+ printf($I['lastedited'], htmlspecialchars($note['editedby']), date($dateformat, $note['lastedited']));
}else{
$note['text']='';
}
@@ -1934,10 +1936,13 @@ function send_profile($arg=''){
}
echo "$I[tz] | ";
echo " |
---|
|
';
thr();
@@ -2060,7 +2065,7 @@ function send_login(){
}
print_start('login');
$englobal=(int) get_setting('englobalpass');
- echo ''.get_setting('chatname').'
';
+ echo ''.get_setting('chatname').'
';
echo form_target('_parent', 'login');
if($englobal===1 && isset($_REQUEST['globalpass'])){
echo hidden('globalpass', $_REQUEST['globalpass']);
@@ -2510,6 +2515,7 @@ function parse_sessions(){
$U=$tmp;
}
}
+ set_default_tz();
}
// member handling
@@ -2727,8 +2733,8 @@ function amend_profile(){
$U['incognito']=0;
}
if(isset($_REQUEST['tz'])){
- settype($_REQUEST['tz'], 'int');
- if($_REQUEST['tz']>=-12 && $_REQUEST['tz']<=14){
+ $tzs=timezone_identifiers_list();
+ if(in_array($_REQUEST['tz'], $tzs)){
$U['tz']=$_REQUEST['tz'];
}
}
@@ -3224,7 +3230,6 @@ function del_last_message(){
function print_messages($delstatus=0){
global $I, $U, $db;
$dateformat=get_setting('dateformat');
- $tz=3600*$U['tz'];
if(!$U['embed'] && get_setting('imgembed')){
$removeEmbed=true;
}else{
@@ -3263,7 +3268,7 @@ function print_messages($delstatus=0){
prepare_message_print($message, $removeEmbed);
echo "";
}
@@ -3276,7 +3281,7 @@ function print_messages($delstatus=0){
prepare_message_print($message, $removeEmbed);
echo '';
if($timestamps){
- echo ''.date($dateformat, $message['postdate']+$tz).' - ';
+ echo ''.date($dateformat, $message['postdate']).' - ';
}
echo "$message[text]
";
}
@@ -3337,9 +3342,11 @@ function save_setup($C){
settype($_REQUEST['captcha'], 'int');
settype($_REQUEST['dismemcaptcha'], 'int');
settype($_REQUEST['guestreg'], 'int');
- settype($_REQUEST['defaulttz'], 'int');
- if($_REQUEST['defaulttz']<-12 || $_REQUEST['defaulttz']>14){
- unset($_REQUEST['defaulttz']);
+ if(isset($_REQUEST['defaulttz'])){
+ $tzs=timezone_identifiers_list();
+ if(!in_array($_REQUEST['defaulttz'], $tzs)){
+ unset($_REQUEST['defualttz']);
+ }
}
$_REQUEST['rulestxt']=preg_replace("/(\r?\n|\r\n?)/u", '
', $_REQUEST['rulestxt']);
$_REQUEST['chatname']=htmlspecialchars($_REQUEST['chatname']);
@@ -3382,6 +3389,15 @@ function save_setup($C){
}
}
+function set_default_tz(){
+ global $U;
+ if(isset($U['tz'])){
+ date_default_timezone_set($U['tz']);
+ }else{
+ date_default_timezone_set(get_setting('defaulttz'));
+ }
+}
+
function valid_admin(){
global $U;
if(isset($_REQUEST['session'])){
@@ -3557,7 +3573,74 @@ function init_chat(){
$db->exec('CREATE INDEX ' . PREFIX . 'incognito ON ' . PREFIX . 'sessions(incognito);');
$db->exec('CREATE TABLE ' . PREFIX . "settings (setting varchar(50) NOT NULL PRIMARY KEY, value text NOT NULL)$diskengine$charset;");
- $settings=[['guestaccess', '0'], ['globalpass', ''], ['englobalpass', '0'], ['captcha', '0'], ['dateformat', 'm-d H:i:s'], ['rulestxt', ''], ['msgencrypted', '0'], ['dbversion', DBVERSION], ['css', ''], ['memberexpire', '60'], ['guestexpire', '15'], ['kickpenalty', '10'], ['entrywait', '120'], ['messageexpire', '14400'], ['messagelimit', '150'], ['maxmessage', 2000], ['captchatime', '600'], ['colbg', '000000'], ['coltxt', 'FFFFFF'], ['maxname', '20'], ['minpass', '5'], ['defaultrefresh', '20'], ['dismemcaptcha', '0'], ['suguests', '0'], ['imgembed', '1'], ['timestamps', '1'], ['trackip', '0'], ['captchachars', '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'], ['memkick', '1'], ['forceredirect', '0'], ['redirect', ''], ['incognito', '1'], ['chatname', 'My Chat'], ['topic', ''], ['msgsendall', $I['sendallmsg']], ['msgsendmem', $I['sendmemmsg']], ['msgsendmod', $I['sendmodmsg']], ['msgsendadm', $I['sendadmmsg']], ['msgsendprv', $I['sendprvmsg']], ['msgenter', $I['entermsg']], ['msgexit', $I['exitmsg']], ['msgmemreg', $I['memregmsg']], ['msgsureg', $I['suregmsg']], ['msgkick', $I['kickmsg']], ['msgmultikick', $I['multikickmsg']], ['msgallkick', $I['allkickmsg']], ['msgclean', $I['cleanmsg']], ['numnotes', '3'], ['mailsender', 'www-data '], ['mailreceiver', 'Webmaster '], ['sendmail', '0'], ['modfallback', '1'], ['guestreg', '0'], ['disablepm', '0'], ['disabletext', "$I[disabledtext]
"], ['defaulttz', '0'], ['eninbox', '0'], ['passregex', '.*'], ['nickregex', '^[A-Za-z0-9]*$'], ['externalcss', ''], ['enablegreeting', '0'], ['sortupdown', '0'], ['hidechatters', '0'], ['enfileupload', '0'], ['msgattache', '%2$s [%1$s]'], ['maxuploadsize', '1024']];
+ $settings=[
+ ['guestaccess', '0'],
+ ['globalpass', ''],
+ ['englobalpass', '0'],
+ ['captcha', '0'],
+ ['dateformat', 'm-d H:i:s'],
+ ['rulestxt', ''],
+ ['msgencrypted', '0'],
+ ['dbversion', DBVERSION],
+ ['css', ''],
+ ['memberexpire', '60'],
+ ['guestexpire', '15'],
+ ['kickpenalty', '10'],
+ ['entrywait', '120'],
+ ['messageexpire', '14400'],
+ ['messagelimit', '150'],
+ ['maxmessage', 2000],
+ ['captchatime', '600'],
+ ['colbg', '000000'],
+ ['coltxt', 'FFFFFF'],
+ ['maxname', '20'],
+ ['minpass', '5'],
+ ['defaultrefresh', '20'],
+ ['dismemcaptcha', '0'],
+ ['suguests', '0'],
+ ['imgembed', '1'],
+ ['timestamps', '1'],
+ ['trackip', '0'],
+ ['captchachars', '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'],
+ ['memkick', '1'],
+ ['forceredirect', '0'],
+ ['redirect', ''],
+ ['incognito', '1'],
+ ['chatname', 'My Chat'],
+ ['topic', ''],
+ ['msgsendall', $I['sendallmsg']],
+ ['msgsendmem', $I['sendmemmsg']],
+ ['msgsendmod', $I['sendmodmsg']],
+ ['msgsendadm', $I['sendadmmsg']],
+ ['msgsendprv', $I['sendprvmsg']],
+ ['msgenter', $I['entermsg']],
+ ['msgexit', $I['exitmsg']],
+ ['msgmemreg', $I['memregmsg']],
+ ['msgsureg', $I['suregmsg']],
+ ['msgkick', $I['kickmsg']],
+ ['msgmultikick', $I['multikickmsg']],
+ ['msgallkick', $I['allkickmsg']],
+ ['msgclean', $I['cleanmsg']],
+ ['numnotes', '3'],
+ ['mailsender', 'www-data '],
+ ['mailreceiver', 'Webmaster '],
+ ['sendmail', '0'],
+ ['modfallback', '1'],
+ ['guestreg', '0'],
+ ['disablepm', '0'],
+ ['disabletext', "$I[disabledtext]
"],
+ ['defaulttz', 'UTC'],
+ ['eninbox', '0'],
+ ['passregex', '.*'],
+ ['nickregex', '^[A-Za-z0-9]*$'],
+ ['externalcss', ''],
+ ['enablegreeting', '0'],
+ ['sortupdown', '0'],
+ ['hidechatters', '0'],
+ ['enfileupload', '0'],
+ ['msgattache', '%2$s [%1$s]'],
+ ['maxuploadsize', '1024']
+ ];
$stmt=$db->prepare('INSERT INTO ' . PREFIX . 'settings (setting, value) VALUES (?, ?);');
foreach($settings as $pair){
$stmt->execute($pair);
@@ -3722,7 +3805,7 @@ function update_db(){
}
if($dbversion<20){
$db->exec('ALTER TABLE ' . PREFIX . 'members ADD COLUMN tz smallint NOT NULL DEFAULT 0;');
- $db->exec('INSERT INTO ' . PREFIX . "settings (setting, value) VALUES ('defaulttz', '0');");
+ $db->exec('INSERT INTO ' . PREFIX . "settings (setting, value) VALUES ('defaulttz', 'UTC');");
}
if($dbversion<21){
$db->exec('ALTER TABLE ' . PREFIX . 'members ADD COLUMN eninbox smallint NOT NULL DEFAULT 0;');
@@ -3872,6 +3955,13 @@ function update_db(){
$db->exec('ALTER TABLE ' . PREFIX . 'members MODIFY passhash varchar(255) NOT NULL;');
$db->exec('ALTER TABLE ' . PREFIX . 'sessions MODIFY passhash varchar(255) NOT NULL;');
}
+ if($dbversion<37){
+ $db->exec('ALTER TABLE ' . PREFIX . 'members MODIFY tz varchar(255) NOT NULL;');
+ $db->exec('ALTER TABLE ' . PREFIX . 'sessions MODIFY tz varchar(255) NOT NULL;');
+ $db->exec('UPDATE ' . PREFIX . "members SET tz='UTC';");
+ $db->exec('UPDATE ' . PREFIX . "sessions SET tz='UTC';");
+ $db->exec('UPDATE ' . PREFIX . "settings SET value='UTC' WHERE setting='defaulttz';");
+ }
update_setting('dbversion', DBVERSION);
if(get_setting('msgencrypted')!=MSGENCRYPTED){
if(!extension_loaded('openssl')){
@@ -4041,10 +4131,9 @@ function load_lang(){
}
function load_config(){
- date_default_timezone_set('UTC');
mb_internal_encoding('UTF-8');
define('VERSION', '1.22.1'); // Script version
- define('DBVERSION', 36); // Database layout version
+ define('DBVERSION', 37); // Database layout 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('ENCRYPTKEY', 'MY_KEY'); // Encryption key for messages
define('DBHOST', 'localhost'); // Database host