CC-4810: Add language setting to login page

-done
This commit is contained in:
denise 2013-01-09 18:03:23 -05:00
parent 7866b8a0cb
commit 1572955d07
9 changed files with 49 additions and 16 deletions

View File

@ -7,6 +7,7 @@ Propel::init(__DIR__."/configs/airtime-conf-production.php");
require_once __DIR__."/configs/constants.php"; require_once __DIR__."/configs/constants.php";
require_once 'Preference.php'; require_once 'Preference.php';
require_once 'Locale.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";
@ -34,18 +35,7 @@ $front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new RabbitMqPlugin()); $front->registerPlugin(new RabbitMqPlugin());
//localization configuration //localization configuration
$codeset = 'UTF-8'; Application_Model_Locale::configureLocalization();
$lang = Application_Model_Preference::GetLocale().'.'.$codeset;
putenv("LC_ALL=$lang");
putenv("LANG=$lang");
$res = setlocale(LC_MESSAGES, $lang);
$domain = 'airtime';
bindtextdomain($domain, '/usr/share/airtime/locale');
textdomain($domain);
bind_textdomain_codeset($domain, $codeset);
/* The bootstrap class should only be used to initialize actions that return a view. /* The bootstrap class should only be used to initialize actions that return a view.
Actions that return JSON will not use the bootstrap class! */ Actions that return JSON will not use the bootstrap class! */
@ -107,6 +97,7 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
$view->headScript()->appendFile($baseUrl.'/js/jplayer/jquery.jplayer.min.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); $view->headScript()->appendFile($baseUrl.'/js/jplayer/jquery.jplayer.min.js?'.$CC_CONFIG['airtime_version'], 'text/javascript');
$view->headScript()->appendFile($baseUrl.'/js/sprintf/sprintf-0.7-beta1.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $view->headScript()->appendFile($baseUrl.'/js/sprintf/sprintf-0.7-beta1.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$view->headScript()->appendFile($baseUrl.'/js/bootstrap/bootstrap.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $view->headScript()->appendFile($baseUrl.'/js/bootstrap/bootstrap.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$view->headScript()->appendFile($baseUrl.'/js/cookie/jquery.cookie.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$view->headScript()->appendFile($baseUrl.'/js/i18n/jquery.i18n.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $view->headScript()->appendFile($baseUrl.'/js/i18n/jquery.i18n.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
$view->headScript()->appendFile($baseUrl.'/locale/general-translation-table?'.$CC_CONFIG['airtime_version'],'text/javascript'); $view->headScript()->appendFile($baseUrl.'/locale/general-translation-table?'.$CC_CONFIG['airtime_version'],'text/javascript');
$view->headScript()->appendFile($baseUrl.'/locale/datatables-translation-table?'.$CC_CONFIG['airtime_version'],'text/javascript'); $view->headScript()->appendFile($baseUrl.'/locale/datatables-translation-table?'.$CC_CONFIG['airtime_version'],'text/javascript');

View File

@ -5,7 +5,6 @@ class LoginController extends Zend_Controller_Action
public function init() public function init()
{ {
/* Initialize action controller here */
} }
public function indexAction() public function indexAction()
@ -14,6 +13,7 @@ class LoginController extends Zend_Controller_Action
$request = $this->getRequest(); $request = $this->getRequest();
Application_Model_Locale::configureLocalization($request->getcookie('airtime_locale'));
if (Zend_Auth::getInstance()->hasIdentity()) if (Zend_Auth::getInstance()->hasIdentity())
{ {
@ -43,6 +43,7 @@ class LoginController extends Zend_Controller_Action
//get the username and password from the form //get the username and password from the form
$username = $form->getValue('username'); $username = $form->getValue('username');
$password = $form->getValue('password'); $password = $form->getValue('password');
$locale = $form->getValue('locale');
if (Application_Model_Subjects::getLoginAttempts($username) >= 3 && $form->getElement('captcha') == NULL) { if (Application_Model_Subjects::getLoginAttempts($username) >= 3 && $form->getElement('captcha') == NULL) {
$form->addRecaptcha(); $form->addRecaptcha();
} else { } else {
@ -68,6 +69,9 @@ class LoginController extends Zend_Controller_Action
$tempSess = new Zend_Session_Namespace("referrer"); $tempSess = new Zend_Session_Namespace("referrer");
$tempSess->referrer = 'login'; $tempSess->referrer = 'login';
//set the user locale in case user changed it in when logging in
Application_Model_Preference::SetUserLocale($auth->getIdentity()->id, $locale);
$this->_redirect('Showbuilder'); $this->_redirect('Showbuilder');
} else { } else {
$message = _("Wrong username or password provided. Please try again."); $message = _("Wrong username or password provided. Please try again.");

View File

@ -162,7 +162,7 @@ class UserController extends Zend_Controller_Action
$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;
die(json_encode(array("html"=>$this->view->render('user/edit-user.phtml')))); die(json_encode(array("locale"=>$formData['cu_locale'], "html"=>$this->view->render('user/edit-user.phtml'))));
} }
$this->view->form = $form; $this->view->form = $form;
$this->view->html = $this->view->render('user/edit-user.phtml'); $this->view->html = $this->view->render('user/edit-user.phtml');

View File

@ -44,6 +44,12 @@ class Application_Form_Login extends Zend_Form
) )
)); ));
$locale = new Zend_Form_Element_Select("locale");
$locale->setLabel(_("Language:"));
$locale->setMultiOptions(Application_Model_Locale::getLocales());
$locale->setDecorators(array('ViewHelper'));
$this->addElement($locale);
$recaptchaNeeded = false; $recaptchaNeeded = false;
if (Application_Model_LoginAttempts::getAttempts($_SERVER['REMOTE_ADDR']) >= 3) { if (Application_Model_LoginAttempts::getAttempts($_SERVER['REMOTE_ADDR']) >= 3) {
$recaptchaNeeded = true; $recaptchaNeeded = true;

View File

@ -14,4 +14,22 @@ class Application_Model_Locale
return $out; return $out;
} }
public static function configureLocalization($locale = null)
{
$codeset = 'UTF-8';
if (is_null($locale)) {
$lang = Application_Model_Preference::GetLocale().'.'.$codeset;
} else {
$lang = $locale.'.'.$codeset;
}
putenv("LC_ALL=$lang");
putenv("LANG=$lang");
$res = setlocale(LC_MESSAGES, $lang);
$domain = 'airtime';
bindtextdomain($domain, '/usr/share/airtime/locale');
textdomain($domain);
bind_textdomain_codeset($domain, $codeset);
}
} }

View File

@ -19,6 +19,15 @@
<?php echo $this->element->getElement('password') ?> <?php echo $this->element->getElement('password') ?>
</dd> </dd>
<dt id="locale-label">
<label for="locale" class="required">
<?php echo $this->element->getElement('locale')->getLabel() ?>
</label>
</dt>
<dd id="locale-element">
<?php echo $this->element->getElement('locale') ?>
</dd>
<?php if (Application_Model_Preference::GetEnableSystemEmail()): ?> <?php if (Application_Model_Preference::GetEnableSystemEmail()): ?>
<dt id="reset-label" class="hidden">&nbsp;</dt> <dt id="reset-label" class="hidden">&nbsp;</dt>
<dd id="reset-element" class="text-right"> <dd id="reset-element" class="text-right">

View File

@ -1002,6 +1002,9 @@ dt.block-display, dd.block-display {
font-size:14px; font-size:14px;
padding: 6px 0 6px 3px; padding: 6px 0 6px 3px;
} }
.login-content dd select {
width: 100%;
}
.login-content dd input.ui-button, .login-content dd input.btn { .login-content dd input.ui-button, .login-content dd input.btn {
width:100%; width:100%;
font-size:14px; font-size:14px;

View File

@ -466,6 +466,7 @@ $(document).ready(function() {
$.post(baseUrl+'/user/edit-user', {format: 'json', data: data}, function(data) { $.post(baseUrl+'/user/edit-user', {format: 'json', data: data}, function(data) {
var json = $.parseJSON(data); var json = $.parseJSON(data);
$('.edit-current-user').parent().empty().append(json.html); $('.edit-current-user').parent().empty().append(json.html);
$.cookie("airtime_locale", json.locale, {path: '/'});
setCurrentUserPseudoPassword(); setCurrentUserPseudoPassword();
setTimeout(removeSuccessMsg, 5000); setTimeout(removeSuccessMsg, 5000);
}); });

View File

@ -1,3 +1,4 @@
$(window).load(function(){ $(window).load(function(){
$("#username").focus(); $("#username").focus();
}) $("#locale").val($.cookie("airtime_locale"));
});