diff --git a/lam/HISTORY b/lam/HISTORY
index 85e4e456..6bc5fca0 100644
--- a/lam/HISTORY
+++ b/lam/HISTORY
@@ -8,6 +8,7 @@ June 2015
- Personal: allow to add ou=addressbook subentry for users (RFE 117)
- Unix: support auto-UID/GID with msSFU30DomainInfo
- Windows groups: support editing of member of
+ - Central time zone setting in server profile
- LAM Pro:
-> Password Self Reset: added 389 Directory Server schema file
-> Support for groupOfMembers (RFE 121)
diff --git a/lam/docs/manual-sources/howto.xml b/lam/docs/manual-sources/howto.xml
index 48bea89b..c1fde836 100644
--- a/lam/docs/manual-sources/howto.xml
+++ b/lam/docs/manual-sources/howto.xml
@@ -987,7 +987,15 @@ Have fun!
Version specific upgrade instructions
- 4.5 -> 5.0
+ 4.9 -> 5.0
+
+ Samba 3: If you used logon hours then you need to set the
+ correct time zone on tab "Generel settings" in server
+ profile.
+
+
+
+ 4.5 -> 4.9
No special actions needed.
@@ -1594,6 +1602,8 @@ Have fun!
select the default language for this server profile. The language
setting may be overriden at the LAM login page.
+ Please also set your time zone here.
+
diff --git a/lam/docs/manual-sources/images/configProfiles5.png b/lam/docs/manual-sources/images/configProfiles5.png
index 2ba603f7..57a61744 100644
Binary files a/lam/docs/manual-sources/images/configProfiles5.png and b/lam/docs/manual-sources/images/configProfiles5.png differ
diff --git a/lam/help/help.inc b/lam/help/help.inc
index ac8a40f4..69b8f546 100644
--- a/lam/help/help.inc
+++ b/lam/help/help.inc
@@ -4,7 +4,7 @@ $Id$
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
Copyright (C) 2003 - 2006 Michael Duergner
- 2003 - 2014 Roland Gruber
+ 2003 - 2015 Roland Gruber
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -104,6 +104,8 @@ $helpArray = array (
"Text" => _("If enabled then the default language will be enforced and cannot be chosen by the user.")),
"212" => array ("Headline" => _("Change password"),
"Text" => _("If you want to change the current preferences password, please enter it here.")),
+ "213" => array ("Headline" => _('Time zone'),
+ "Text" => _('Please select your local time zone.')),
"214" => array ("Headline" => _("Cache timeout"),
"Text" => _("This is the time in minutes which LAM caches its LDAP searches. Shorter times will stress LDAP more but decrease the possibility that changes are not identified.")),
"215" => array ("Headline" => _("Access level"),
diff --git a/lam/lib/account.inc b/lam/lib/account.inc
index 500225dd..6765093b 100644
--- a/lam/lib/account.inc
+++ b/lam/lib/account.inc
@@ -1256,4 +1256,15 @@ function getCallingURL() {
return $url;
}
+/**
+ * Returns the offset in hours from configured time zone to GMT.
+ *
+ * @return int offset
+ */
+function getTimeZoneOffsetHours() {
+ $timeZone = $_SESSION['config']->getTimeZone();
+ $dtz = new DateTimeZone($timeZone);
+ return round($dtz->getOffset(new DateTime('UTC')) / 3600);
+}
+
?>
diff --git a/lam/lib/config.inc b/lam/lib/config.inc
index 7b0de246..7dd83a65 100644
--- a/lam/lib/config.inc
+++ b/lam/lib/config.inc
@@ -431,6 +431,8 @@ class LAMConfig {
/** Default language */
private $defaultLanguage;
+ /** time zone */
+ private $timeZone = 'Europe/London';
/** module settings */
private $moduleSettings = array();
@@ -519,7 +521,7 @@ class LAMConfig {
"modules", "activeTypes", "types", "tools", "accessLevel", 'loginMethod', 'loginSearchSuffix',
'loginSearchFilter', 'searchLimit', 'lamProMailFrom', 'lamProMailReplyTo', 'lamProMailSubject',
'lamProMailText', 'lamProMailIsHTML', 'lamProMailAllowAlternateAddress', 'httpAuthentication', 'loginSearchDN',
- 'loginSearchPassword');
+ 'loginSearchPassword', 'timeZone');
/**
@@ -691,6 +693,7 @@ class LAMConfig {
if (!in_array("treesuffix", $saved)) array_push($file_array, "\n\n# suffix of tree view\n" .
"# e.g. dc=yourdomain,dc=org\n" . "treesuffix: " . $this->treesuffix . "\n");
if (!in_array("defaultLanguage", $saved)) array_push($file_array, "\n\n# default language (a line from config/language)\n" . "defaultLanguage: " . $this->defaultLanguage . "\n");
+ if (!in_array("timeZone", $saved)) array_push($file_array, "\n\n# time zone\n" . "timeZone: " . $this->timeZone . "\n");
if (!in_array("scriptPath", $saved)) array_push($file_array, "\n\n# Path to external Script\n" . "scriptPath: " . $this->scriptPath . "\n");
if (!in_array("scriptServer", $saved)) array_push($file_array, "\n\n# Servers of external script\n" . "scriptServer: " . $this->scriptServer . "\n");
if (!in_array("scriptRights", $saved)) array_push($file_array, "\n\n# Access rights for home directories\n" . "scriptRights: " . $this->scriptRights . "\n");
@@ -1022,6 +1025,29 @@ class LAMConfig {
return true;
}
+ /**
+ * Returns the time zone name.
+ *
+ * @return string time zone
+ */
+ public function getTimeZone() {
+ return ($this->timeZone == null) ? 'Europe/London' : $this->timeZone;
+ }
+
+ /**
+ * Sets the time zone name.
+ *
+ * @param string $value new time zone
+ * @return boolean true if $value has correct format
+ */
+ public function setTimeZone($value) {
+ if (is_string($value)) {
+ $this->timeZone = $value;
+ return true;
+ }
+ return false;
+ }
+
/**
* Returns the path to the external script
*
diff --git a/lam/lib/modules/sambaSamAccount.inc b/lam/lib/modules/sambaSamAccount.inc
index 3e57b77e..83a20451 100644
--- a/lam/lib/modules/sambaSamAccount.inc
+++ b/lam/lib/modules/sambaSamAccount.inc
@@ -549,42 +549,13 @@ class sambaSamAccount extends baseModule implements passwordService {
);
}
// configuration options
- $timezones = array(
- "GMT-12: " . _("Eniwetok, Kwajalein") => '-12',
- "GMT-11: " . _("Midway Island, Samoa") => '-11',
- "GMT-10: " . _("Hawaii") => '-10',
- "GMT-09: " . _("Alaska") => '-9',
- "GMT-08: " . _("Pacific Time (US & Canada)") => '-8',
- "GMT-07: " . _("Mountain Time (US & Canada)") => '-7',
- "GMT-06: " . _("Central Time (US & Canada), Mexico City") => '-6',
- "GMT-05: " . _("Eastern Time (US & Canada), Bogota") => '-5',
- "GMT-04: " . _("Atlantic time (Canada), Caracas") => '-4',
- "GMT-03: " . _("Brazil, Buenos Aires") => '-3',
- "GMT-02: " . _("Mid-Atlantic") => '-2',
- "GMT-01: " . _("Azores, Cape Verde Islands") => '-1',
- 'GMT: ' . _("Western Europe Time, London, Lisbon") => '0',
- "GMT+01: " . _("Central Europe Time, Paris, Berlin") => '1',
- "GMT+02: " . _("Eastern Europe Time, South Africa") => '2',
- "GMT+03: " . _("Baghdad, Riyadh, Moscow") => '3',
- "GMT+04: " . _("Abu Dhabi, Muscat, Baku") => '4',
- "GMT+05: " . _("Islamabad, Karachi") => '5',
- "GMT+06: " . _("Almaty, Dhaka, Colombo") => '6',
- "GMT+07: " . _("Bangkok, Hanoi, Jakarta") => '7',
- "GMT+08: " . _("Beijing, Perth, Singapore") => '8',
- "GMT+09: " . _("Tokyo, Seoul, Osaka, Yakutsk") => '9',
- "GMT+10: " . _("East Australian Standard, Guam") => '10',
- "GMT+11: " . _("Magadan, Solomon Islands") => '11',
- "GMT+12: " . _("Auckland, Fiji, Kamchatka") => '12',
- );
$configContainer = new htmlTable();
- $timezoneSelect = new htmlTableExtendedSelect('sambaSamAccount_timeZone', $timezones, array('0'), _("Time zone"), 'timeZone');
- $timezoneSelect->setHasDescriptiveElements(true);
- $timezoneSelect->setSortElements(false);
- $configContainer->addElement($timezoneSelect, true);
+ $disableLM = new htmlTable();
$yesNo = array(_('yes') => 'yes', _('no') => 'no');
$yesNoSelect = new htmlTableExtendedSelect('sambaSamAccount_lmHash', $yesNo, array('yes'), _("Disable LM hashes"), 'lmHash');
$yesNoSelect->setHasDescriptiveElements(true);
- $configContainer->addElement($yesNoSelect, true);
+ $disableLM->addElement($yesNoSelect, true);
+ $configContainer->addElement($disableLM, true);
$configContainer->addElement(new htmlSpacer(null, '10px'), true);
$configHiddenLabelGroup = new htmlGroup();
$configHiddenLabelGroup->addElement(new htmlOutputText(_('Hidden options') . ' '));
@@ -975,9 +946,9 @@ class sambaSamAccount extends baseModule implements passwordService {
$logonHoursNew = '';
for ($i = 0; $i < 21; $i++) {
$part = strrev(substr($logonHours, $i * 8, 8));
- $byte[hi] = substr($part,0,4);
- $byte[low] = substr($part,4,4);
- $hex = $bitstring2hex[$byte[hi]].$bitstring2hex[$byte[low]];
+ $byte['hi'] = substr($part,0,4);
+ $byte['low'] = substr($part,4,4);
+ $hex = $bitstring2hex[$byte['hi']].$bitstring2hex[$byte['low']];
$logonHoursNew = $logonHoursNew . $hex;
}
$this->attributes['sambaLogonHours'][0] = $logonHoursNew;
@@ -1373,10 +1344,7 @@ class sambaSamAccount extends baseModule implements passwordService {
*/
function display_html_logonHours() {
$return = new htmlTable();
- $timeZone = 0;
- if (isset($this->moduleSettings['sambaSamAccount_timeZone']) && is_array($this->moduleSettings['sambaSamAccount_timeZone'])) {
- $timeZone = $this->moduleSettings['sambaSamAccount_timeZone'][0];
- }
+ $timeZone = getTimeZoneOffsetHours();
$days = array(1 => _('Monday'), 2 => _('Tuesday'), 3 => _('Wednesday'), 4 => _('Thursday'),
5 => _('Friday'), 6 => _('Saturday'), 0 => _('Sunday'));
if (!isset($this->attributes['sambaLogonHours'][0]) || ($this->attributes['sambaLogonHours'][0] == '')) {
diff --git a/lam/templates/config/confmain.php b/lam/templates/config/confmain.php
index 40b151dd..6a910500 100644
--- a/lam/templates/config/confmain.php
+++ b/lam/templates/config/confmain.php
@@ -303,8 +303,22 @@ if(!empty($possibleLanguages)) {
else {
$languageSettingsContent->addElement(new htmlStatusMessage('ERROR', "Unable to load available languages. Setting English as default language."));
}
+$timezones = array();
+$timezones = array_merge($timezones, DateTimeZone::listIdentifiers(DateTimeZone::AFRICA));
+$timezones = array_merge($timezones, DateTimeZone::listIdentifiers(DateTimeZone::AMERICA));
+$timezones = array_merge($timezones, DateTimeZone::listIdentifiers(DateTimeZone::ANTARCTICA));
+$timezones = array_merge($timezones, DateTimeZone::listIdentifiers(DateTimeZone::ARCTIC));
+$timezones = array_merge($timezones, DateTimeZone::listIdentifiers(DateTimeZone::ASIA));
+$timezones = array_merge($timezones, DateTimeZone::listIdentifiers(DateTimeZone::ATLANTIC));
+$timezones = array_merge($timezones, DateTimeZone::listIdentifiers(DateTimeZone::AUSTRALIA));
+$timezones = array_merge($timezones, DateTimeZone::listIdentifiers(DateTimeZone::EUROPE));
+$timezones = array_merge($timezones, DateTimeZone::listIdentifiers(DateTimeZone::INDIAN));
+$timezones = array_merge($timezones, DateTimeZone::listIdentifiers(DateTimeZone::PACIFIC));
+$languageSettingsContent->addElement(new htmlTableExtendedSelect('timeZone', $timezones, array($conf->getTimeZone()), _('Time zone'), '213'), true);
$languageSettings = new htmlFieldset($languageSettingsContent, _("Language settings"), '../../graphics/language.png');
$container->addElement($languageSettings, true);
+
+
$container->addElement(new htmlSpacer(null, '10px'), true);
// lamdaemon settings
@@ -577,6 +591,7 @@ function checkInput() {
if (!$conf->set_defaultLanguage($_POST['lang'])) {
$errors[] = array("ERROR", _("Language is not defined!"));
}
+ $conf->setTimeZone($_POST['timeZone']);
if (!$conf->set_scriptpath($_POST['scriptpath'])) {
$errors[] = array("ERROR", _("Script path is invalid!"));
}