Newer
Older
* Piwik - free/libre analytics platform
mattab
a validé
namespace Piwik\Plugins\LanguagesManager;
use Exception;
use Piwik\Config;
use Piwik\Container\StaticContainer;
use Piwik\Intl\Locale;
use Piwik\Piwik;
use Piwik\Translate;
use Piwik\Translation\Translator;
use Piwik\View;
mattab
a validé
class LanguagesManager extends \Piwik\Plugin
Thomas Steur
a validé
* @see Piwik\Plugin::registerEvents
Thomas Steur
a validé
public function registerEvents()
{
return array(
'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
'Config.NoConfigurationFile' => 'initLanguage',
'Request.dispatchCoreAndPluginUpdatesScreen' => 'initLanguage',
'Request.dispatch' => 'initLanguage',
'Platform.initialized' => 'initLanguage',
'UsersManager.deleteUser' => 'deleteUserLanguage',
'Template.topBar' => 'addLanguagesManagerToOtherTopBar',
'Template.jsGlobalVariables' => 'jsGlobalVariables'
);
}
public function getStylesheetFiles(&$stylesheets)
Thomas Steur
a validé
$stylesheets[] = "plugins/Morpheus/stylesheets/base.less";
public function getJsFiles(&$jsFiles)
Thomas Steur
a validé
$jsFiles[] = "plugins/LanguagesManager/angularjs/languageselector/languageselector.directive.js";
$jsFiles[] = "plugins/LanguagesManager/angularjs/translationsearch/translationsearch.controller.js";
$jsFiles[] = "plugins/LanguagesManager/angularjs/translationsearch/translationsearch.directive.js";
}
/**
* 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 .= "<script type='text/javascript'>if (!window.piwik) window.piwik={};</script>";
Thomas Steur
a validé
$str .= "<script type='text/javascript' src='plugins/CoreHome/angularjs/menudropdown/menudropdown.directive.js'></script>";
$str .= "<script type='text/javascript' src='plugins/LanguagesManager/angularjs/languageselector/languageselector.directive.js'></script>";
$str .= $this->getLanguagesSelector();
}
Thomas Steur
a validé
/**
* 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 jsGlobalVariables(&$str)
{
// piwik object & scripts aren't loaded in 'other' topbars
$str .= "piwik.languageName = '" . self::getLanguageNameForCurrentUser() . "';";
}
/**
* Renders and returns the language selector HTML.
*
* @return string
*/
Thomas Steur
a validé
public function getLanguagesSelector()
$view = new View("@LanguagesManager/getLanguagesSelector");
mattab
a validé
$view->languages = API::getInstance()->getAvailableLanguageNames();
$view->currentLanguageCode = self::getLanguageCodeForCurrentUser();
Thomas Steur
a validé
$view->currentLanguageName = self::getLanguageNameForCurrentUser();
return $view->render();
}
public function initLanguage()
/** @var Translator $translator */
$translator = StaticContainer::get('Piwik\Translation\Translator');
$language = Common::getRequestVar('language', '', 'string');
if (empty($language)) {
$userLanguage = self::getLanguageCodeForCurrentUser();
if (API::getInstance()->isLanguageAvailable($userLanguage)) {
$language = $userLanguage;
}
if (!empty($language) && API::getInstance()->isLanguageAvailable($language)) {
$translator->setCurrentLanguage($language);
$locale = $translator->translate('General_Locale');
Locale::setLocale($locale);
public function deleteUserLanguage($userLogin)
Thomas Steur
a validé
$model = new Model();
$model->deleteUserLanguage($userLogin);
}
/**
* @throws Exception if non-recoverable error
*/
public function install()
{
Thomas Steur
a validé
Model::install();
}
/**
* @throws Exception if non-recoverable error
*/
public function uninstall()
{
Thomas Steur
a validé
Model::uninstall();
/**
* @return boolean
*/
public static function uses12HourClockForCurrentUser()
{
try {
$currentUser = Piwik::getCurrentUserLogin();
return Request::processRequest('LanguagesManager.uses12HourClockForUser', array('login' => $currentUser));
} catch (Exception $e) {
return false;
}
}
/**
* @return string Two letters language code, eg. "fr"
*/
public static function getLanguageCodeForCurrentUser()
{
$languageCode = self::getLanguageFromPreferences();
mattab
a validé
if (!API::getInstance()->isLanguageAvailable($languageCode)) {
$languageCode = Common::extractLanguageCodeFromBrowserLanguage(Common::getBrowserLanguage(), API::getInstance()->getAvailableLanguages());
mattab
a validé
if (!API::getInstance()->isLanguageAvailable($languageCode)) {
$languageCode = Translate::getLanguageDefault();
}
return $languageCode;
}
/**
* @return string Full english language string, eg. "French"
*/
public static function getLanguageNameForCurrentUser()
{
$languageCode = self::getLanguageCodeForCurrentUser();
mattab
a validé
$languages = API::getInstance()->getAvailableLanguageNames();
foreach ($languages as $language) {
if ($language['code'] === $languageCode) {
return $language['name'];
}
}
}
/**
* @return string|false if language preference could not be loaded
*/
protected static function getLanguageFromPreferences()
{
if (($language = self::getLanguageForSession()) != null) {
return $language;
}
try {
$currentUser = Piwik::getCurrentUserLogin();
mattab
a validé
return API::getInstance()->getLanguageForUser($currentUser);
} catch (Exception $e) {
return false;
}
}
/**
mattab
a validé
* Returns the language for the session
*
* @return string|null
*/
public static 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
*/
public static function setLanguageForSession($languageCode)
mattab
a validé
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();