CC-4781: Store localization settings on a per-user basis

-done
This commit is contained in:
denise 2013-01-03 16:19:02 -05:00
parent a1837366be
commit e2c87ed8b6
7 changed files with 80 additions and 9 deletions

View file

@ -34,7 +34,13 @@ $front->registerPlugin(new RabbitMqPlugin());
//localization configuration //localization configuration
$codeset = 'UTF-8'; $codeset = 'UTF-8';
$lang = Application_Model_Preference::GetLocale().'.'.$codeset; $auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
$id = $auth->getIdentity()->id;
$lang = Application_Model_Preference::GetCurrentUserLocale($id).'.'.$codeset;
} else {
$lang = Application_Model_Preference::GetLocale().'.'.$codeset;
}
putenv("LC_ALL=$lang"); putenv("LC_ALL=$lang");
putenv("LANG=$lang"); putenv("LANG=$lang");

View file

@ -72,6 +72,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
// By default, the general language setting on preferences
// page is what gets assigned.
Application_Model_Preference::SetUserLocale($user->getId());
$form->reset(); $form->reset();
$this->view->form = $form; $this->view->form = $form;
@ -150,6 +155,7 @@ class UserController extends Zend_Controller_Action
$user->setSkype($formData['cu_skype']); $user->setSkype($formData['cu_skype']);
$user->setJabber($formData['cu_jabber']); $user->setJabber($formData['cu_jabber']);
$user->save(); $user->save();
Application_Model_Preference::SetUserLocale($user->getId(), $formData['cu_locale']);
$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

@ -96,6 +96,12 @@ class Application_Form_EditUser extends Zend_Form
$jabber->setDecorators(array('viewHelper')); $jabber->setDecorators(array('viewHelper'));
$this->addElement($jabber); $this->addElement($jabber);
$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->setDecorators(array('ViewHelper'));
$this->addElement($locale);
/* /*
$saveBtn = new Zend_Form_Element_Button('cu_save_user'); $saveBtn = new Zend_Form_Element_Button('cu_save_user');
$saveBtn->setAttrib('class', 'btn btn-small right-floated'); $saveBtn->setAttrib('class', 'btn btn-small right-floated');

View file

@ -3,7 +3,12 @@
class Application_Model_Preference class Application_Model_Preference
{ {
private static function setValue($key, $value, $isUserValue = false) /**
*
* @param integer $userId is not null when we are setting a locale for a specific user
* @param boolean $isUserValue is true when we are setting a value for the current user
*/
private static function setValue($key, $value, $isUserValue = false, $userId = null)
{ {
try { try {
//called from a daemon process //called from a daemon process
@ -22,9 +27,12 @@ class Application_Model_Preference
$paramMap[':key'] = $key; $paramMap[':key'] = $key;
//For user specific preference, check if id matches as well //For user specific preference, check if id matches as well
if ($isUserValue) { if ($isUserValue && is_null($userId)) {
$sql .= " AND subjid = :id"; $sql .= " AND subjid = :id";
$paramMap[':id'] = $id; $paramMap[':id'] = $id;
} else if (!is_null($userId)) {
$sql .= " AND subjid= :id";
$paramMap[':id'] = $userId;
} }
$result = Application_Common_Database::prepareAndExecute($sql, $paramMap, 'column'); $result = Application_Common_Database::prepareAndExecute($sql, $paramMap, 'column');
@ -42,7 +50,11 @@ class Application_Model_Preference
$sql = "UPDATE cc_pref" $sql = "UPDATE cc_pref"
. " SET valstr = :value" . " SET valstr = :value"
. " WHERE keystr = :key AND subjid = :id"; . " WHERE keystr = :key AND subjid = :id";
$paramMap[':id'] = $id; if (is_null($userId)) {
$paramMap[':id'] = $id;
} else {
$paramMap[':id'] = $userId;
}
} }
} else { } else {
// result not found // result not found
@ -54,7 +66,11 @@ class Application_Model_Preference
// user pref // user pref
$sql = "INSERT INTO cc_pref (subjid, keystr, valstr)" $sql = "INSERT INTO cc_pref (subjid, keystr, valstr)"
." VALUES (:id, :key, :value)"; ." VALUES (:id, :key, :value)";
$paramMap[':id'] = $id; if (is_null($userId)) {
$paramMap[':id'] = $id;
} else {
$paramMap[':id'] = $userId;
}
} }
} }
$paramMap[':key'] = $key; $paramMap[':key'] = $key;
@ -428,16 +444,37 @@ class Application_Model_Preference
{ {
return self::getValue("timezone"); return self::getValue("timezone");
} }
// This is the language setting on preferences page
public static function SetLocale($locale) public static function SetLocale($locale)
{ {
self::setValue("locale", $locale); self::setValue("locale", $locale);
} }
public static function GetLocale() public static function GetLocale()
{ {
return self::getValue("locale"); return self::getValue("locale");
} }
public static function GetCurrentUserLocale($id)
{
return self::getValue("user_".$id."_locale", true);
}
public static function SetUserLocale($userId, $locale = null)
{
// When a new user is created they will get the default locale
// setting which the admin sets on preferences page
if (is_null($locale)) {
$locale = self::GetLocale();
}
self::setValue("user_".$userId."_locale", $locale, true, $userId);
}
public static function GetUserLocale($userId)
{
return self::getValue("user_".$userId."_locale");
}
public static function SetStationLogo($imagePath) public static function SetStationLogo($imagePath)
{ {

View file

@ -114,6 +114,20 @@
</ul> </ul>
<?php endif; ?> <?php endif; ?>
</dd> </dd>
<dt id="cu-locale-label">
<label><?php echo $this->element->getElement('cu_locale')->getLabel() ?>
</label>
</dt>
<dd id="cu-locale-element">
<?php echo $this->element->getElement('cu_locale') ?>
<?php if($this->element->getElement('cu_locale')->hasErrors()) : ?>
<ul class='errors'>
<?php foreach($this->element->getElement('cu_locale')->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

@ -313,6 +313,8 @@ INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s3_channels', 'ste
-- added in 2.3 -- added in 2.3
INSERT INTO cc_pref("keystr", "valstr") VALUES('locale', 'en_CA'); INSERT INTO cc_pref("keystr", "valstr") VALUES('locale', 'en_CA');
INSERT INTO cc_pref("subjid", "keystr", "valstr") VALUES(1, 'user_1_locale', 'en_CA');
INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('zh_CN', 'Chinese'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('zh_CN', 'Chinese');
INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('en_CA', 'English'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('en_CA', 'English');
INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('en_US', 'English - US'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('en_US', 'English - US');

View file

@ -460,7 +460,7 @@ $(document).ready(function() {
clearTimeout(timer); clearTimeout(timer);
}); });
$('.tipsy').live('mouseout', function() { $('.tipsy').live('blur', function() {
timer = setTimeout("$('#current-user').tipsy('hide')", 500); timer = setTimeout("$('#current-user').tipsy('hide')", 500);
}); });
@ -488,7 +488,7 @@ $(document).ready(function() {
}); });
$('#current-user').bind('mouseout', function() { $('#current-user').bind('blur', function() {
timer = setTimeout("$('#current-user').tipsy('hide')", 500); timer = setTimeout("$('#current-user').tipsy('hide')", 500);
}); });