diff --git a/airtime_mvc/application/Bootstrap.php b/airtime_mvc/application/Bootstrap.php
index 62679c8b0..d2f8f1f65 100644
--- a/airtime_mvc/application/Bootstrap.php
+++ b/airtime_mvc/application/Bootstrap.php
@@ -10,6 +10,7 @@ require_once 'Preference.php';
require_once "DateHelper.php";
require_once "OsPath.php";
require_once "Database.php";
+require_once "Timezone.php";
require_once __DIR__.'/forms/helpers/ValidationTypes.php';
require_once __DIR__.'/controllers/plugins/RabbitMqPlugin.php';
diff --git a/airtime_mvc/application/common/Timezone.php b/airtime_mvc/application/common/Timezone.php
new file mode 100644
index 000000000..271ea5f02
--- /dev/null
+++ b/airtime_mvc/application/common/Timezone.php
@@ -0,0 +1,31 @@
+ DateTimeZone::AFRICA,
+ 'America' => DateTimeZone::AMERICA,
+ 'Antarctica' => DateTimeZone::ANTARCTICA,
+ 'Arctic' => DateTimeZone::ARCTIC,
+ 'Asia' => DateTimeZone::ASIA,
+ 'Atlantic' => DateTimeZone::ATLANTIC,
+ 'Australia' => DateTimeZone::AUSTRALIA,
+ 'Europe' => DateTimeZone::EUROPE,
+ 'Indian' => DateTimeZone::INDIAN,
+ 'Pacific' => DateTimeZone::PACIFIC
+ );
+
+ $tzlist = array();
+
+ foreach ($regions as $name => $mask) {
+ $ids = DateTimeZone::listIdentifiers($mask);
+ foreach ($ids as $id) {
+ $tzlist[$id] = str_replace("_", " ", $id);
+ }
+ }
+
+ return $tzlist;
+ }
+}
diff --git a/airtime_mvc/application/controllers/PreferenceController.php b/airtime_mvc/application/controllers/PreferenceController.php
index ebab75b7e..ad288050c 100644
--- a/airtime_mvc/application/controllers/PreferenceController.php
+++ b/airtime_mvc/application/controllers/PreferenceController.php
@@ -45,7 +45,7 @@ class PreferenceController extends Zend_Controller_Action
Application_Model_Preference::SetDefaultFade($values["stationDefaultFade"]);
Application_Model_Preference::SetAllow3rdPartyApi($values["thirdPartyApi"]);
Application_Model_Preference::SetDefaultLocale($values["locale"]);
- Application_Model_Preference::SetTimezone($values["timezone"]);
+ Application_Model_Preference::SetDefaultTimezone($values["timezone"]);
Application_Model_Preference::SetWeekStartDay($values["weekStartDay"]);
Application_Model_Preference::SetEnableSystemEmail($values["enableSystemEmail"]);
diff --git a/airtime_mvc/application/controllers/UserController.php b/airtime_mvc/application/controllers/UserController.php
index d0fac9e34..cc0dff0bb 100644
--- a/airtime_mvc/application/controllers/UserController.php
+++ b/airtime_mvc/application/controllers/UserController.php
@@ -74,10 +74,11 @@ class UserController extends Zend_Controller_Action
$user->setJabber($formData['jabber']);
$user->save();
- // Language settings are saved on a per-user basis
- // By default, the general language setting on preferences
- // page is what gets assigned.
+ // Language and timezone settings are saved on a per-user basis
+ // By default, the default language, and timezone setting on
+ // preferences page is what gets assigned.
Application_Model_Preference::SetUserLocale($user->getId());
+ Application_Model_Preference::SetUserTimezone($user->getId());
$form->reset();
$this->view->form = $form;
@@ -157,6 +158,7 @@ class UserController extends Zend_Controller_Action
$user->setJabber($formData['cu_jabber']);
$user->save();
Application_Model_Preference::SetUserLocale($user->getId(), $formData['cu_locale']);
+ Application_Model_Preference::SetUserTimezone($user->getId(), $formData['cu_timezone']);
$this->view->successMessage = "
"._("User updated successfully!")."
";
}
$this->view->form = $form;
diff --git a/airtime_mvc/application/forms/EditUser.php b/airtime_mvc/application/forms/EditUser.php
index dae6e5177..f266f2368 100644
--- a/airtime_mvc/application/forms/EditUser.php
+++ b/airtime_mvc/application/forms/EditUser.php
@@ -12,7 +12,8 @@ class Application_Form_EditUser extends Zend_Form
* */
$currentUser = Application_Model_User::getCurrentUser();
- $userData = Application_Model_User::GetUserData($currentUser->getId());
+ $currentUserId = $currentUser->getId();
+ $userData = Application_Model_User::GetUserData($currentUserId);
$notEmptyValidator = Application_Form_Helper_ValidationTypes::overrideNotEmptyValidator();
$emailValidator = Application_Form_Helper_ValidationTypes::overrideEmailAddressValidator();
@@ -100,17 +101,16 @@ class Application_Form_EditUser extends Zend_Form
$locale = new Zend_Form_Element_Select("cu_locale");
$locale->setLabel(_("Language:"));
$locale->setMultiOptions(Application_Model_Locale::getLocales());
- $locale->setValue(Application_Model_Preference::GetUserLocale($currentUser->getId()));
+ $locale->setValue(Application_Model_Preference::GetUserLocale($currentUserId));
$locale->setDecorators(array('ViewHelper'));
$this->addElement($locale);
- /*
- $saveBtn = new Zend_Form_Element_Button('cu_save_user');
- $saveBtn->setAttrib('class', 'btn btn-small right-floated');
- $saveBtn->setIgnore(true);
- $saveBtn->setLabel(_('Save'));
- $saveBtn->setDecorators(array('viewHelper'));
- $this->addElement($saveBtn);
- */
+
+ $timezone = new Zend_Form_Element_Select("cu_timezone");
+ $timezone->setLabel(_("Timezone:"));
+ $timezone->setMultiOptions(Application_Common_Timezone::getTimezones());
+ $timezone->setValue(Application_Model_Preference::GetUserTimezone($currentUserId));
+ $timezone->setDecorators(array('ViewHelper'));
+ $this->addElement($timezone);
}
public function validateLogin($p_login, $p_userId) {
diff --git a/airtime_mvc/application/forms/GeneralPreferences.php b/airtime_mvc/application/forms/GeneralPreferences.php
index ef9761396..48a561b06 100644
--- a/airtime_mvc/application/forms/GeneralPreferences.php
+++ b/airtime_mvc/application/forms/GeneralPreferences.php
@@ -61,9 +61,9 @@ class Application_Form_GeneralPreferences extends Zend_Form_SubForm
/* Form Element for setting the Timezone */
$timezone = new Zend_Form_Element_Select("timezone");
- $timezone->setLabel(_("Timezone"));
- $timezone->setMultiOptions($this->getTimezones());
- $timezone->setValue(Application_Model_Preference::GetTimezone());
+ $timezone->setLabel(_("Default Interface Timezone"));
+ $timezone->setMultiOptions(Application_Common_Timezone::getTimezones());
+ $timezone->setValue(Application_Model_Preference::GetDefaultTimezone());
$timezone->setDecorators(array('ViewHelper'));
$this->addElement($timezone);
@@ -76,33 +76,6 @@ class Application_Form_GeneralPreferences extends Zend_Form_SubForm
$this->addElement($week_start_day);
}
- private function getTimezones()
- {
- $regions = array(
- 'Africa' => DateTimeZone::AFRICA,
- 'America' => DateTimeZone::AMERICA,
- 'Antarctica' => DateTimeZone::ANTARCTICA,
- 'Arctic' => DateTimeZone::ARCTIC,
- 'Asia' => DateTimeZone::ASIA,
- 'Atlantic' => DateTimeZone::ATLANTIC,
- 'Australia' => DateTimeZone::AUSTRALIA,
- 'Europe' => DateTimeZone::EUROPE,
- 'Indian' => DateTimeZone::INDIAN,
- 'Pacific' => DateTimeZone::PACIFIC
- );
-
- $tzlist = array();
-
- foreach ($regions as $name => $mask) {
- $ids = DateTimeZone::listIdentifiers($mask);
- foreach ($ids as $id) {
- $tzlist[$id] = str_replace("_", " ", $id);
- }
- }
-
- return $tzlist;
- }
-
private function getWeekStartDays()
{
$days = array(
diff --git a/airtime_mvc/application/models/Preference.php b/airtime_mvc/application/models/Preference.php
index 98d64e378..b204609f4 100644
--- a/airtime_mvc/application/models/Preference.php
+++ b/airtime_mvc/application/models/Preference.php
@@ -434,17 +434,43 @@ class Application_Model_Preference
return self::getValue("description");
}
- public static function SetTimezone($timezone)
+ public static function SetDefaultTimezone($timezone)
{
self::setValue("timezone", $timezone);
date_default_timezone_set($timezone);
}
- public static function GetTimezone()
+ public static function GetDefaultTimezone()
{
return self::getValue("timezone");
}
+ public static function SetUserTimezone($userId, $timezone = null)
+ {
+ // When a new user is created they will get the default timezone
+ // setting which the admin sets on preferences page
+ if (is_null($timezone)) {
+ $timezone = self::GetDefaultTimezone();
+ }
+ self::setValue("user_".$userId."_timezone", $timezone, true, $userId);
+ }
+
+ public static function GetUserTimezone($id)
+ {
+ return self::getValue("user_".$id."_timezone", true);
+ }
+
+ public static function GetTimezone()
+ {
+ $auth = Zend_Auth::getInstance();
+ if ($auth->hasIdentity()) {
+ $id = $auth->getIdentity()->id;
+ return self::GetUserTimezone($id);
+ } else {
+ return self::GetDefaultTimezone();
+ }
+ }
+
// This is the language setting on preferences page
public static function SetDefaultLocale($locale)
{
diff --git a/airtime_mvc/application/views/scripts/form/edit-user.phtml b/airtime_mvc/application/views/scripts/form/edit-user.phtml
index 3f0be44c3..e7996a25d 100644
--- a/airtime_mvc/application/views/scripts/form/edit-user.phtml
+++ b/airtime_mvc/application/views/scripts/form/edit-user.phtml
@@ -128,6 +128,20 @@
+
+
+
+
+ element->getElement('cu_timezone') ?>
+ element->getElement('cu_timezone')->hasErrors()) : ?>
+
+ element->getElement('cu_timezone')->getMessages() as $error): ?>
+
+
+
+
+
diff --git a/install_minimal/include/AirtimeInstall.php b/install_minimal/include/AirtimeInstall.php
index b2d4bf451..e7a9ad6e5 100644
--- a/install_minimal/include/AirtimeInstall.php
+++ b/install_minimal/include/AirtimeInstall.php
@@ -340,6 +340,11 @@ class AirtimeInstall
if ($result < 1) {
return false;
}
+ $sql = "INSERT INTO cc_pref (subjid, keystr, valstr) VALUES (1, 'user_1_timezone', '$defaultTimezone')";
+ $result = $con->exec($sql);
+ if ($result < 1) {
+ return false;
+ }
return true;
}