From 3898c94887443109c5567b8e6fb58d3f8047434c Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Thu, 13 Sep 2012 03:49:01 -0400
Subject: [PATCH] Fixed: FS#2418 - PHP: Timezone ID 'CEST' is invalid
---
install/install.php | 11 +----------
install/lib/install.lib.php | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 50 insertions(+), 10 deletions(-)
diff --git a/install/install.php b/install/install.php
index 918526d..a3b5708 100644
--- a/install/install.php
+++ b/install/install.php
@@ -104,16 +104,7 @@
//** Select the language and set default timezone
$conf['language'] = $inst->simple_query('Select language', array('en','de'), 'en');
-
-exec('date +%z', $tmp_out);
-$tmp_zone = intval($tmp_out[0]);
-if(substr($tmp_out[0],0,1) == '+') {
- $conf['timezone'] = 'Etc/GMT+'.$tmp_zone;
-} else {
- $conf['timezone'] = 'Etc/GMT-'.$tmp_zone;
-}
-unset($tmp_out);
-unset($tmp_zone);
+$conf['timezone'] = get_system_timezone();
//* Set defaukt theme
$conf['theme'] = 'default';
diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php
index f901264..8d2ae48 100644
--- a/install/lib/install.lib.php
+++ b/install/lib/install.lib.php
@@ -750,6 +750,55 @@
}
}
+/**
+ Function to find the hash file for timezone detection
+ (c) 2012 Marius Cramer, pixcept KG, m.cramer@pixcept.de
+*/
+function find_hash_file($hash, $dir, $basedir = '') {
+ $res = opendir($dir);
+ if(!$res) return false;
+
+ if(substr($dir, -1) === '/') $dir = substr($dir, 0, strlen($dir) - 1);
+ if($basedir === '') $basedir = $dir;
+
+ while($cur = readdir($res)) {
+ if($cur == '.' || $cur == '..') continue;
+ $entry = $dir.'/'.$cur;
+ if(is_dir($entry)) {
+ $result = find_hash_file($hash, $entry, $basedir);
+ if($result !== false) return $result;
+ } elseif(md5_file($entry) === $hash) {
+ $entry = substr($entry, strlen($basedir));
+ if(substr($entry, 0, 7) === '/posix/') $entry = substr($entry, 7);
+ return $entry;
+ }
+ }
+ closedir($res);
+ return false;
+}
+
+/**
+ Function to get the timezone of the Linux system
+ (c) 2012 Marius Cramer, pixcept KG, m.cramer@pixcept.de
+*/
+function get_system_timezone() {
+ if(is_link('/etc/localtime')) {
+ $timezone = readlink('/etc/localtime');
+ $timezone = str_replace('/usr/share/zoneinfo/', '', $timezone);
+ if(substr($timezone, 0, 6) === 'posix/') $timezone = substr($timezone, 6);
+ } else {
+ $hash = md5_file('/etc/localtime');
+ $timezone = find_hash_file($hash, '/usr/share/zoneinfo');
+ }
+
+ if(!$timezone) {
+ exec('date +%Z', $tzinfo);
+ $timezone = $tzinfo[0];
+ }
+
+ return $timezone;
+}
+
?>
--
Gitblit v1.9.1