From d4053334198ec42b12d543b4d4b5fc550cedd89f Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Sun, 27 Nov 2016 16:17:23 +0100 Subject: [PATCH] Use PHPs internal timezone management Replaces old system completely, all previous settings will be lost --- chat.php | 141 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 115 insertions(+), 26 deletions(-) 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