CC-4816: Timezones should be a user preference

-done
This commit is contained in:
denise 2013-01-09 13:38:38 -05:00
parent f887ca3d8d
commit db62b538dd
9 changed files with 98 additions and 46 deletions

View file

@ -10,6 +10,7 @@ require_once 'Preference.php';
require_once "DateHelper.php"; require_once "DateHelper.php";
require_once "OsPath.php"; require_once "OsPath.php";
require_once "Database.php"; require_once "Database.php";
require_once "Timezone.php";
require_once __DIR__.'/forms/helpers/ValidationTypes.php'; require_once __DIR__.'/forms/helpers/ValidationTypes.php';
require_once __DIR__.'/controllers/plugins/RabbitMqPlugin.php'; require_once __DIR__.'/controllers/plugins/RabbitMqPlugin.php';

View file

@ -0,0 +1,31 @@
<?php
class Application_Common_Timezone
{
public static 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;
}
}

View file

@ -45,7 +45,7 @@ class PreferenceController extends Zend_Controller_Action
Application_Model_Preference::SetDefaultFade($values["stationDefaultFade"]); Application_Model_Preference::SetDefaultFade($values["stationDefaultFade"]);
Application_Model_Preference::SetAllow3rdPartyApi($values["thirdPartyApi"]); Application_Model_Preference::SetAllow3rdPartyApi($values["thirdPartyApi"]);
Application_Model_Preference::SetDefaultLocale($values["locale"]); 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::SetWeekStartDay($values["weekStartDay"]);
Application_Model_Preference::SetEnableSystemEmail($values["enableSystemEmail"]); Application_Model_Preference::SetEnableSystemEmail($values["enableSystemEmail"]);

View file

@ -74,10 +74,11 @@ class UserController extends Zend_Controller_Action
$user->setJabber($formData['jabber']); $user->setJabber($formData['jabber']);
$user->save(); $user->save();
// Language settings are saved on a per-user basis // Language and timezone settings are saved on a per-user basis
// By default, the general language setting on preferences // By default, the default language, and timezone setting on
// page is what gets assigned. // preferences page is what gets assigned.
Application_Model_Preference::SetUserLocale($user->getId()); Application_Model_Preference::SetUserLocale($user->getId());
Application_Model_Preference::SetUserTimezone($user->getId());
$form->reset(); $form->reset();
$this->view->form = $form; $this->view->form = $form;
@ -157,6 +158,7 @@ class UserController extends Zend_Controller_Action
$user->setJabber($formData['cu_jabber']); $user->setJabber($formData['cu_jabber']);
$user->save(); $user->save();
Application_Model_Preference::SetUserLocale($user->getId(), $formData['cu_locale']); Application_Model_Preference::SetUserLocale($user->getId(), $formData['cu_locale']);
Application_Model_Preference::SetUserTimezone($user->getId(), $formData['cu_timezone']);
$this->view->successMessage = "<div class='success'>"._("User updated successfully!")."</div>"; $this->view->successMessage = "<div class='success'>"._("User updated successfully!")."</div>";
} }
$this->view->form = $form; $this->view->form = $form;

View file

@ -12,7 +12,8 @@ class Application_Form_EditUser extends Zend_Form
* */ * */
$currentUser = Application_Model_User::getCurrentUser(); $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(); $notEmptyValidator = Application_Form_Helper_ValidationTypes::overrideNotEmptyValidator();
$emailValidator = Application_Form_Helper_ValidationTypes::overrideEmailAddressValidator(); $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 = new Zend_Form_Element_Select("cu_locale");
$locale->setLabel(_("Language:")); $locale->setLabel(_("Language:"));
$locale->setMultiOptions(Application_Model_Locale::getLocales()); $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')); $locale->setDecorators(array('ViewHelper'));
$this->addElement($locale); $this->addElement($locale);
/*
$saveBtn = new Zend_Form_Element_Button('cu_save_user'); $timezone = new Zend_Form_Element_Select("cu_timezone");
$saveBtn->setAttrib('class', 'btn btn-small right-floated'); $timezone->setLabel(_("Timezone:"));
$saveBtn->setIgnore(true); $timezone->setMultiOptions(Application_Common_Timezone::getTimezones());
$saveBtn->setLabel(_('Save')); $timezone->setValue(Application_Model_Preference::GetUserTimezone($currentUserId));
$saveBtn->setDecorators(array('viewHelper')); $timezone->setDecorators(array('ViewHelper'));
$this->addElement($saveBtn); $this->addElement($timezone);
*/
} }
public function validateLogin($p_login, $p_userId) { public function validateLogin($p_login, $p_userId) {

View file

@ -61,9 +61,9 @@ class Application_Form_GeneralPreferences extends Zend_Form_SubForm
/* Form Element for setting the Timezone */ /* Form Element for setting the Timezone */
$timezone = new Zend_Form_Element_Select("timezone"); $timezone = new Zend_Form_Element_Select("timezone");
$timezone->setLabel(_("Timezone")); $timezone->setLabel(_("Default Interface Timezone"));
$timezone->setMultiOptions($this->getTimezones()); $timezone->setMultiOptions(Application_Common_Timezone::getTimezones());
$timezone->setValue(Application_Model_Preference::GetTimezone()); $timezone->setValue(Application_Model_Preference::GetDefaultTimezone());
$timezone->setDecorators(array('ViewHelper')); $timezone->setDecorators(array('ViewHelper'));
$this->addElement($timezone); $this->addElement($timezone);
@ -76,33 +76,6 @@ class Application_Form_GeneralPreferences extends Zend_Form_SubForm
$this->addElement($week_start_day); $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() private function getWeekStartDays()
{ {
$days = array( $days = array(

View file

@ -434,17 +434,43 @@ class Application_Model_Preference
return self::getValue("description"); return self::getValue("description");
} }
public static function SetTimezone($timezone) public static function SetDefaultTimezone($timezone)
{ {
self::setValue("timezone", $timezone); self::setValue("timezone", $timezone);
date_default_timezone_set($timezone); date_default_timezone_set($timezone);
} }
public static function GetTimezone() public static function GetDefaultTimezone()
{ {
return self::getValue("timezone"); 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 // This is the language setting on preferences page
public static function SetDefaultLocale($locale) public static function SetDefaultLocale($locale)
{ {

View file

@ -128,6 +128,20 @@
</ul> </ul>
<?php endif; ?> <?php endif; ?>
</dd> </dd>
<dt id="cu-timezone-label">
<label><?php echo $this->element->getElement('cu_timezone')->getLabel() ?>
</label>
</dt>
<dd id="cu-timezone-element">
<?php echo $this->element->getElement('cu_timezone') ?>
<?php if($this->element->getElement('cu_timezone')->hasErrors()) : ?>
<ul class='errors'>
<?php foreach($this->element->getElement('cu_timezone')->getMessages() as $error): ?>
<li><?php echo $error; ?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</dd>
<button id="cu_save_user" type="button" class="btn btn-small right-floated">Save</button> <button id="cu_save_user" type="button" class="btn btn-small right-floated">Save</button>
</dl> </dl>
</form> </form>

View file

@ -340,6 +340,11 @@ class AirtimeInstall
if ($result < 1) { if ($result < 1) {
return false; 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; return true;
} }