Use PHPs internal timezone management

Replaces old system completely, all previous settings will be lost
This commit is contained in:
Daniel Winzen
2016-11-27 16:17:23 +01:00
parent c4e9d76b05
commit d405333419

141
chat.php
View File

@ -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 "<tr><td><table id=\"defaulttz\"><tr><th>$I[defaulttz]</th><td>";
echo "<select name=\"defaulttz\">";
$tzs=[-12=>'-12', -11=>'-11', -10=>'-10', -9=>'-9', -8=>'-8', -7=>'-7', -6=>'-6', -5=>'-5', -4=>'-4', -3=>'-3', -2=>'-2', -1=>'-1', 0=>'', 1=>'+1', 2=>'+2', 3=>'+3', 4=>'+4', 5=>'+5', 6=>'+6', 7=>'+7', 8=>'+8', 9=>'+9', 10=>'+10', 11=>'+11', 12=>'+12', 13=>'+13', 14=>'+14'];
$tzs=timezone_identifiers_list();
$defaulttz=get_setting('defaulttz');
foreach($tzs as $tz=>$name){
$select = $defaulttz==$tz ? ' selected' : '';
echo "<option value=\"$tz\"$select>UTC $name</option>";
foreach($tzs as $tz){
echo "<option value=\"$tz\"";
if($defaulttz==$tz){
echo ' selected';
}
echo ">$tz</option>";
}
echo '</select>';
echo '</td></tr></table></td></tr>';
@ -1465,7 +1468,6 @@ function send_inbox(){
print_start('inbox');
echo form('inbox', 'clean').submit($I['delselmes'], 'class="delbutton"').'<br><br>';
$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 "<div class=\"msg\"><label><input type=\"checkbox\" name=\"mid[]\" value=\"$message[id]\">";
if($timestamps){
echo ' <small>'.date($dateformat, $message['postdate']+$tz).' - </small>';
echo ' <small>'.date($dateformat, $message['postdate']).' - </small>';
}
echo " $message[text]</label></div>";
}
@ -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 "<tr><td><table id=\"tz\"><tr><th>$I[tz]</th><td>";
echo "<select name=\"tz\">";
$tzs=[-12=>'-12', -11=>'-11', -10=>'-10', -9=>'-9', -8=>'-8', -7=>'-7', -6=>'-6', -5=>'-5', -4=>'-4', -3=>'-3', -2=>'-2', -1=>'-1', 0=>'', 1=>'+1', 2=>'+2', 3=>'+3', 4=>'+4', 5=>'+5', 6=>'+6', 7=>'+7', 8=>'+8', 9=>'+9', 10=>'+10', 11=>'+11', 12=>'+12', 13=>'+13', 14=>'+14'];
foreach($tzs as $tz=>$name){
$select = $U['tz']==$tz ? ' selected' : '';
echo "<option value=\"$tz\"$select>UTC $name</option>";
$tzs=timezone_identifiers_list();
foreach($tzs as $tz){
echo "<option value=\"$tz\"";
if($U['tz']==$tz){
echo ' selected';
}
echo ">$tz</option>";
}
echo '</select></td></tr></table></td></tr>';
thr();
@ -2060,7 +2065,7 @@ function send_login(){
}
print_start('login');
$englobal=(int) get_setting('englobalpass');
echo '<h1>'.get_setting('chatname').'</h1>';
echo '<h1 id="chatname">'.get_setting('chatname').'</h1>';
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 "<div class=\"msg\"><label><input type=\"checkbox\" name=\"mid[]\" value=\"$message[id]\">";
if($timestamps){
echo ' <small>'.date($dateformat, $message['postdate']+$tz).' - </small>';
echo ' <small>'.date($dateformat, $message['postdate']).' - </small>';
}
echo " $message[text]</label></div>";
}
@ -3276,7 +3281,7 @@ function print_messages($delstatus=0){
prepare_message_print($message, $removeEmbed);
echo '<div class="msg">';
if($timestamps){
echo '<small>'.date($dateformat, $message['postdate']+$tz).' - </small>';
echo '<small>'.date($dateformat, $message['postdate']).' - </small>';
}
echo "$message[text]</div>";
}
@ -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", '<br>', $_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 <www-data@localhost>'], ['mailreceiver', 'Webmaster <webmaster@localhost>'], ['sendmail', '0'], ['modfallback', '1'], ['guestreg', '0'], ['disablepm', '0'], ['disabletext', "<h1>$I[disabledtext]</h1>"], ['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 <www-data@localhost>'],
['mailreceiver', 'Webmaster <webmaster@localhost>'],
['sendmail', '0'],
['modfallback', '1'],
['guestreg', '0'],
['disablepm', '0'],
['disabletext', "<h1>$I[disabledtext]</h1>"],
['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