diff options
Diffstat (limited to 'app/frontend/controls/LanguageSelect.php')
-rw-r--r-- | app/frontend/controls/LanguageSelect.php | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/app/frontend/controls/LanguageSelect.php b/app/frontend/controls/LanguageSelect.php new file mode 100644 index 0000000..08cdcb7 --- /dev/null +++ b/app/frontend/controls/LanguageSelect.php @@ -0,0 +1,59 @@ +<?php + +Prado::using('Application.web.FacadeTemplateControl'); + +Prado::using('Application.user.DbUser'); +Prado::using('Application.facades.UserFacade'); + +Prado::using('Application.dto.LanguageDTO'); + +class LanguageSelect extends FacadeTemplateControl { + + public function getUserToChange() { + return $this->getControlState('user'); + } + + public function setUserToChange(DbUser $user) { + if ($user->IsGuest && !$this->Page->IsCallBack) { + throw new TInvalidDataValueException( + Prado::localize( + 'Language preference change impossible for guest user' + ) + ); + } + $this->setControlState('user', $user); + } + + public function onPreRender($param) { + parent::onPreRender($param); + $this->Languages->DataSource = $this->_getLanguages(); + $this->Languages->DataValueField = 'Name'; + $this->Languages->DataTextField = 'Label'; + $this->Languages->dataBind(); + $this->Languages->setSelectedValue( + $this->Application->Globalization->getCulture() + ); + } + + public function saveLang($sender, $param) { + $this->getFacade()->setLanguagePreference( + $this->UserToChange, + $this->Languages->SelectedValue + ); + $this->Response->redirect($this->Service->constructUrl('Profile')); + } + + private function _getLanguages() { + $langs = array_map( + function($lang) { + return new LanguageDTO($lang); + }, + $this->Application->Globalization->getAllowedCultures() + ); + usort($langs, ['LanguageDTO', '__compare']); + return $langs; + } + +} + +?> |