From db62b538dd934e4649043ed6528a2908242d366c Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 9 Jan 2013 13:38:38 -0500 Subject: [PATCH] CC-4816: Timezones should be a user preference -done --- airtime_mvc/application/Bootstrap.php | 1 + airtime_mvc/application/common/Timezone.php | 31 +++++++++++++++++ .../controllers/PreferenceController.php | 2 +- .../controllers/UserController.php | 8 +++-- airtime_mvc/application/forms/EditUser.php | 20 +++++------ .../application/forms/GeneralPreferences.php | 33 ++----------------- airtime_mvc/application/models/Preference.php | 30 +++++++++++++++-- .../views/scripts/form/edit-user.phtml | 14 ++++++++ install_minimal/include/AirtimeInstall.php | 5 +++ 9 files changed, 98 insertions(+), 46 deletions(-) create mode 100644 airtime_mvc/application/common/Timezone.php 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()) : ?> + + +
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; }