'getStylesheetFiles', 'AssetManager.getJavaScriptFiles' => 'getJsFiles', 'Menu.Top.addItems' => 'showLanguagesSelector', 'User.getLanguage' => 'getLanguageToLoad', 'UsersManager.deleteUser' => 'deleteUserLanguage', 'Template.topBar' => 'addLanguagesManagerToOtherTopBar', 'Console.addCommands' => 'addConsoleCommands' ); } public function addConsoleCommands(&$commands) { $commands[] = 'Piwik\Plugins\LanguagesManager\Commands\CreatePull'; $commands[] = 'Piwik\Plugins\LanguagesManager\Commands\FetchFromOTrance'; $commands[] = 'Piwik\Plugins\LanguagesManager\Commands\LanguageCodes'; $commands[] = 'Piwik\Plugins\LanguagesManager\Commands\LanguageNames'; $commands[] = 'Piwik\Plugins\LanguagesManager\Commands\PluginsWithTranslations'; $commands[] = 'Piwik\Plugins\LanguagesManager\Commands\SetTranslations'; $commands[] = 'Piwik\Plugins\LanguagesManager\Commands\Update'; } public function getStylesheetFiles(&$stylesheets) { $stylesheets[] = "plugins/Zeitgeist/stylesheets/base.less"; } public function getJsFiles(&$jsFiles) { $jsFiles[] = "plugins/LanguagesManager/javascripts/languageSelector.js"; } public function showLanguagesSelector() { MenuTop::addEntry('LanguageSelector', $this->getLanguagesSelector(), true, $order = 30, true); } /** * Adds the languages drop-down list to topbars other than the main one rendered * in CoreHome/templates/top_bar.twig. The 'other' topbars are on the Installation * and CoreUpdater screens. */ public function addLanguagesManagerToOtherTopBar(&$str) { // piwik object & scripts aren't loaded in 'other' topbars $str .= ""; $str .= ""; $str .= $this->getLanguagesSelector(); } /** * Renders and returns the language selector HTML. * * @return string */ private function getLanguagesSelector() { $view = new View("@LanguagesManager/getLanguagesSelector"); $view->languages = API::getInstance()->getAvailableLanguageNames(); $view->currentLanguageCode = self::getLanguageCodeForCurrentUser(); $view->currentLanguageName = self::getLanguageNameForCurrentUser(); return $view->render(); } function getLanguageToLoad(&$language) { if (empty($language)) { $language = self::getLanguageCodeForCurrentUser(); } if (!API::getInstance()->isLanguageAvailable($language)) { $language = Translate::getLanguageDefault(); } } public function deleteUserLanguage($userLogin) { Db::query('DELETE FROM ' . Common::prefixTable('user_language') . ' WHERE login = ?', $userLogin); } /** * @throws Exception if non-recoverable error */ public function install() { $userLanguage = "login VARCHAR( 100 ) NOT NULL , language VARCHAR( 10 ) NOT NULL , PRIMARY KEY ( login )"; DbHelper::createTable('user_language', $userLanguage); } /** * @throws Exception if non-recoverable error */ public function uninstall() { Db::dropTables(Common::prefixTable('user_language')); } /** * @return string Two letters language code, eg. "fr" */ static public function getLanguageCodeForCurrentUser() { $languageCode = self::getLanguageFromPreferences(); if (!API::getInstance()->isLanguageAvailable($languageCode)) { $languageCode = Common::extractLanguageCodeFromBrowserLanguage(Common::getBrowserLanguage(), API::getInstance()->getAvailableLanguages()); } if (!API::getInstance()->isLanguageAvailable($languageCode)) { $languageCode = Translate::getLanguageDefault(); } return $languageCode; } /** * @return string Full english language string, eg. "French" */ static public function getLanguageNameForCurrentUser() { $languageCode = self::getLanguageCodeForCurrentUser(); $languages = API::getInstance()->getAvailableLanguageNames(); foreach ($languages as $language) { if ($language['code'] === $languageCode) { return $language['name']; } } return false; } /** * @return string|false if language preference could not be loaded */ static protected function getLanguageFromPreferences() { if (($language = self::getLanguageForSession()) != null) { return $language; } try { $currentUser = Piwik::getCurrentUserLogin(); return API::getInstance()->getLanguageForUser($currentUser); } catch (Exception $e) { return false; } } /** * Returns the language for the session * * @return string|null */ static public function getLanguageForSession() { $cookieName = Config::getInstance()->General['language_cookie_name']; $cookie = new Cookie($cookieName); if ($cookie->isCookieFound()) { return $cookie->get('language'); } return null; } /** * Set the language for the session * * @param string $languageCode ISO language code * @return bool */ static public function setLanguageForSession($languageCode) { if (!API::getInstance()->isLanguageAvailable($languageCode)) { return false; } $cookieName = Config::getInstance()->General['language_cookie_name']; $cookie = new Cookie($cookieName, 0); $cookie->set('language', $languageCode); $cookie->save(); return true; } }