]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
bug fix #215: change language from config screen
authorNicolas Lœuillet <nicolas.loeuillet@gmail.com>
Mon, 7 Oct 2013 12:26:25 +0000 (14:26 +0200)
committerNicolas Lœuillet <nicolas.loeuillet@gmail.com>
Mon, 7 Oct 2013 12:26:25 +0000 (14:26 +0200)
inc/poche/Poche.class.php
index.php
themes/default/config.twig

index 245f6a138fc353049c52c2ccf3a2941432ff0938..5299e374b7dc30c83f13f3bb4d9f47d461ea614d 100644 (file)
@@ -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
index 22696c6fd31f3caac17bf721688fe559ebea2729..a645927026f536bac49e96477950f001d317dc56 100644 (file)
--- 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);
index 13bdaafd96ff080bb5604cd8077760a7ef4bc982..23860ebda7b32587c8c6ca345799b5fd9f886925 100644 (file)
                 <input type="hidden" name="token" value="{{ token }}">
             </form>
 
+            <h2>{% trans "Change your language" %}</h2>
+            <form method="post" action="?updatelanguage" name="changelanguageform">
+                <fieldset class="w500p">
+                    <div class="row">
+                        <label class="col w150p" for="language">{% trans "Language:" %}</label>
+                        <select class="col" id="language" name="language">
+                            {% for language in languages %}
+                            <option value="{{ language.name }}" {{ language.current ? 'selected' : '' }}>{{ language.name }}</option>
+                            {% endfor %}
+                        </select>
+                    </div>
+                    <div class="row mts txtcenter">
+                        <button class="bouton" type="submit" tabindex="4">{% trans "Update" %}</button>
+                    </div>
+                </fieldset>
+                <input type="hidden" name="returnurl" value="{{ referer }}">
+                <input type="hidden" name="token" value="{{ token }}">
+            </form>
+
             <h2>{% trans "Change your password" %}</h2>
             <form method="post" action="?config" name="loginform">
                 <fieldset class="w500p">