From 5011388f39432f810e397a60d9b200faba6c868b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicolas=20L=C5=93uillet?= Date: Mon, 7 Oct 2013 14:26:25 +0200 Subject: [PATCH] bug fix #215: change language from config screen --- inc/poche/Poche.class.php | 77 ++++++++++++++++++++++++++++++++++++++ index.php | 3 ++ themes/default/config.twig | 19 ++++++++++ 3 files changed, 99 insertions(+) diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index 245f6a13..5299e374 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -20,6 +20,7 @@ class Poche public $pagination; private $currentTheme = ''; + private $currentLanguage = ''; private $notInstalledMessage = array(); # @todo make this dynamic (actually install themes and save them in the database including author information et cetera) @@ -83,6 +84,15 @@ class Poche } $this->currentTheme = $themeDirectory; + + # Set up language + $languageDirectory = $this->user->getConfigValue('language'); + + if ($languageDirectory === false) { + $languageDirectory = DEFAULT_THEME; + } + + $this->currentLanguage = $languageDirectory; } public function configFileIsAvailable() { @@ -253,6 +263,10 @@ class Poche public function getTheme() { return $this->currentTheme; } + + public function getLanguage() { + return $this->currentLanguage; + } public function getInstalledThemes() { $handle = opendir(THEME); @@ -277,6 +291,29 @@ class Poche return $themes; } + public function getInstalledLanguages() { + $handle = opendir(LOCALE); + $languages = array(); + + while (($language = readdir($handle)) !== false) { + # Languages are stored in a directory, so all directory names are languages + # @todo move language installation data to database + if (! is_dir(LOCALE . '/' . $language) || in_array($language, array('..', '.'))) { + continue; + } + + $current = false; + + if ($language === $this->getLanguage()) { + $current = true; + } + + $languages[] = array('name' => $language, 'current' => $current); + } + + return $languages; + } + public function getDefaultConfig() { return array( @@ -369,8 +406,10 @@ class Poche $compare_dev = version_compare(POCHE, $dev); $compare_prod = version_compare(POCHE, $prod); $themes = $this->getInstalledThemes(); + $languages = $this->getInstalledLanguages(); $tpl_vars = array( 'themes' => $themes, + 'languages' => $languages, 'dev' => $dev, 'prod' => $prod, 'compare_dev' => $compare_dev, @@ -495,6 +534,44 @@ class Poche Tools::redirect('?view=config'); } + public function updateLanguage() + { + # no data + if (empty($_POST['language'])) { + } + + # we are not going to change it to the current language... + if ($_POST['language'] == $this->getLanguage()) { + $this->messages->add('w', _('still using the "' . $this->getLanguage() . '" language!')); + Tools::redirect('?view=config'); + } + + $languages = $this->getInstalledLanguages(); + $actualLanguage = false; + + foreach ($languages as $language) { + if ($language['name'] == $_POST['language']) { + $actualLanguage = true; + break; + } + } + + if (! $actualLanguage) { + $this->messages->add('e', _('that language does not seem to be installed')); + Tools::redirect('?view=config'); + } + + $this->store->updateUserConfig($this->user->getId(), 'language', $_POST['language']); + $this->messages->add('s', _('you have changed your language preferences')); + + $currentConfig = $_SESSION['poche_user']->config; + $currentConfig['language'] = $_POST['language']; + + $_SESSION['poche_user']->setConfig($currentConfig); + + Tools::redirect('?view=config'); + } + /** * checks if login & password are correct and save the user in session. * it redirects the user to the $referer link diff --git a/index.php b/index.php index 22696c6f..a6459270 100644 --- a/index.php +++ b/index.php @@ -67,7 +67,10 @@ if (isset($_GET['login'])) { $poche->export(); } elseif (isset($_GET['updatetheme'])) { $poche->updateTheme(); +} elseif (isset($_GET['updatelanguage'])) { + $poche->updateLanguage(); } + elseif (isset($_GET['plainurl']) && !empty($_GET['plainurl'])) { $plain_url = new Url(base64_encode($_GET['plainurl'])); $poche->action('add', $plain_url); diff --git a/themes/default/config.twig b/themes/default/config.twig index 13bdaafd..23860ebd 100644 --- a/themes/default/config.twig +++ b/themes/default/config.twig @@ -47,6 +47,25 @@ +

{% trans "Change your language" %}

+
+
+
+ + +
+
+ +
+
+ + +
+

{% trans "Change your password" %}

-- 2.41.0