Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/LanguagesManager')
-rw-r--r--plugins/LanguagesManager/API.php49
-rw-r--r--plugins/LanguagesManager/Controller.php4
-rw-r--r--plugins/LanguagesManager/LanguagesManager.php48
-rw-r--r--plugins/LanguagesManager/templates/languages.tpl5
-rw-r--r--plugins/LanguagesManager/tests/LanguagesManager.test.php45
5 files changed, 99 insertions, 52 deletions
diff --git a/plugins/LanguagesManager/API.php b/plugins/LanguagesManager/API.php
index 16199235a8..0e128ceb68 100644
--- a/plugins/LanguagesManager/API.php
+++ b/plugins/LanguagesManager/API.php
@@ -27,8 +27,9 @@ class Piwik_LanguagesManager_API
}
return self::$instance;
}
- static protected $availableLanguageNames = null;
- static protected $languageNames = null;
+
+ protected $availableLanguageNames = null;
+ protected $languageNames = null;
/**
* Returns true if specified language is available
@@ -36,10 +37,10 @@ class Piwik_LanguagesManager_API
* @param string $languageCode
* @return bool true if language available; false otherwise
*/
- static public function isLanguageAvailable($languageCode)
+ public function isLanguageAvailable($languageCode)
{
return $languageCode !== false
- && in_array($languageCode, self::getAvailableLanguages());
+ && in_array($languageCode, $this->getAvailableLanguages());
}
/**
@@ -47,11 +48,11 @@ class Piwik_LanguagesManager_API
*
* @return array Arry of strings, each containing its ISO language code
*/
- static public function getAvailableLanguages()
+ public function getAvailableLanguages()
{
- if(!is_null(self::$languageNames))
+ if(!is_null($this->languageNames))
{
- return self::$languageNames;
+ return $this->languageNames;
}
$path = PIWIK_INCLUDE_PATH . "/lang/";
$languages = glob($path . "*.php");
@@ -61,7 +62,7 @@ class Piwik_LanguagesManager_API
{
$languageNames[] = substr($language, $pathLength, -strlen('.php'));
}
- self::$languageNames = $languageNames;
+ $this->languageNames = $languageNames;
return $languageNames;
}
@@ -70,11 +71,11 @@ class Piwik_LanguagesManager_API
*
* @return array Array of arrays
*/
- static public function getAvailableLanguagesInfo()
+ public function getAvailableLanguagesInfo()
{
require PIWIK_INCLUDE_PATH . '/lang/en.php';
$englishTranslation = $translations;
- $filenames = self::getAvailableLanguages();
+ $filenames = $this->getAvailableLanguages();
$languagesInfo = array();
foreach($filenames as $filename)
{
@@ -99,22 +100,22 @@ class Piwik_LanguagesManager_API
*
* @return array Arry of array, each containing its ISO language code and name of the language
*/
- static public function getAvailableLanguageNames()
+ public function getAvailableLanguageNames()
{
- if(!is_null(self::$availableLanguageNames))
+ if(!is_null($this->availableLanguageNames))
{
- return self::$availableLanguageNames;
+ return $this->availableLanguageNames;
}
- $filenames = self::getAvailableLanguages();
+ $filenames = $this->getAvailableLanguages();
$languagesInfo = array();
foreach($filenames as $filename)
{
require PIWIK_INCLUDE_PATH . "/lang/$filename.php";
$languagesInfo[] = array( 'code' => $filename, 'name' => $translations['General_OriginalLanguageName']);
}
- self::$availableLanguageNames = $languagesInfo;
- return self::$availableLanguageNames;
+ $this->availableLanguageNames = $languagesInfo;
+ return $this->availableLanguageNames;
}
/**
@@ -123,9 +124,9 @@ class Piwik_LanguagesManager_API
* @param string $languageCode ISO language code
* @return array|false Array of arrays, each containing 'label' (translation index) and 'value' (translated string); false if language unavailable
*/
- static public function getTranslationsForLanguage($languageCode)
+ public function getTranslationsForLanguage($languageCode)
{
- if(!self::isLanguageAvailable($languageCode))
+ if(!$this->isLanguageAvailable($languageCode))
{
return false;
}
@@ -144,10 +145,10 @@ class Piwik_LanguagesManager_API
* @param string $login
* @param string|false $layout
*/
- static public function getLanguageForUser( $login )
+ public function getLanguageForUser( $login )
{
Piwik::checkUserIsSuperUserOrTheUser($login);
- return Piwik_FetchOne('SELECT language FROM '.Piwik::prefixTable('user_language') .
+ return Piwik_FetchOne('SELECT language FROM '.Piwik_Common::prefixTable('user_language') .
' WHERE login = ? ', array($login ));
}
@@ -157,11 +158,11 @@ class Piwik_LanguagesManager_API
* @param string $login
* @param string $languageCode
*/
- static public function setLanguageForUser($login, $languageCode)
+ public function setLanguageForUser($login, $languageCode)
{
Piwik::checkUserIsSuperUserOrTheUser($login);
$paramsBind = array($login, $languageCode, $languageCode);
- Piwik_Query('INSERT INTO '.Piwik::prefixTable('user_language') .
+ Piwik_Query('INSERT INTO '.Piwik_Common::prefixTable('user_language') .
' (login, language)
VALUES (?,?)
ON DUPLICATE KEY UPDATE language=?',
@@ -173,7 +174,7 @@ class Piwik_LanguagesManager_API
*
* @return string|null
*/
- static public function getLanguageForSession()
+ public function getLanguageForSession()
{
$session = new Zend_Session_Namespace("Piwik_LanguagesManager");
if(isset($session->language))
@@ -188,7 +189,7 @@ class Piwik_LanguagesManager_API
*
* @param string $languageCode ISO language code
*/
- static public function setLanguageForSession($languageCode)
+ public function setLanguageForSession($languageCode)
{
$session = new Zend_Session_Namespace("Piwik_LanguagesManager");
$session->language = $languageCode;
diff --git a/plugins/LanguagesManager/Controller.php b/plugins/LanguagesManager/Controller.php
index c7546540f2..f0e678125f 100644
--- a/plugins/LanguagesManager/Controller.php
+++ b/plugins/LanguagesManager/Controller.php
@@ -23,12 +23,12 @@ class Piwik_LanguagesManager_Controller extends Piwik_Controller
public function saveLanguage()
{
$language = Piwik_Common::getRequestVar('language');
- Piwik_LanguagesManager_API::setLanguageForSession($language);
+ Piwik_LanguagesManager_API::getInstance()->setLanguageForSession($language);
if(Zend_Registry::isRegistered('access')) {
$currentUser = Piwik::getCurrentUserLogin();
if($currentUser && $currentUser !== 'anonymous')
{
- Piwik_LanguagesManager_API::setLanguageForUser($currentUser, $language);
+ Piwik_LanguagesManager_API::getInstance()->setLanguageForUser($currentUser, $language);
}
}
Piwik_Url::redirectToReferer();
diff --git a/plugins/LanguagesManager/LanguagesManager.php b/plugins/LanguagesManager/LanguagesManager.php
index 8db9f2e353..6ee5178910 100644
--- a/plugins/LanguagesManager/LanguagesManager.php
+++ b/plugins/LanguagesManager/LanguagesManager.php
@@ -20,11 +20,10 @@ class Piwik_LanguagesManager extends Piwik_Plugin
public function getInformation()
{
return array(
- 'name' => 'Languages Management',
- 'description' => 'This plugin will display a list of the available languages for the Piwik interface. The language selected will be saved in the preferences for each user.',
+ 'description' => Piwik_Translate('LanguagesManager_PluginDescription'),
'author' => 'Piwik',
- 'homepage' => 'http://piwik.org/',
- 'version' => '0.1',
+ 'author_homepage' => 'http://piwik.org/',
+ 'version' => Piwik_Version::VERSION,
);
}
@@ -34,6 +33,7 @@ class Piwik_LanguagesManager extends Piwik_Plugin
'template_css_import' => 'css',
'template_topBar' => 'showLanguagesSelector',
'Translate.getLanguageToLoad' => 'getLanguageToLoad',
+ 'UsersManager.deleteUser' => 'deleteUserLanguage',
);
}
@@ -49,11 +49,12 @@ class Piwik_LanguagesManager extends Piwik_Plugin
*/
function showLanguagesSelector()
{
- $view = Piwik_View::factory("languages");
- $view->languages = Piwik_LanguagesManager_API::getAvailableLanguageNames();
+ // don't use Piwik_View::factory() here
+ $view = new Piwik_View("LanguagesManager/templates/languages.tpl");
+ $view->languages = Piwik_LanguagesManager_API::getInstance()->getAvailableLanguageNames();
$view->currentLanguageCode = self::getLanguageCodeForCurrentUser();
$view->currentLanguageName = self::getLanguageNameForCurrentUser();
- echo $view ->render();
+ echo $view->render();
}
function getLanguageToLoad($notification)
@@ -61,21 +62,27 @@ class Piwik_LanguagesManager extends Piwik_Plugin
$language =& $notification->getNotificationObject();
$language = self::getLanguageCodeForCurrentUser();
}
-
+
+ function deleteUserLanguage($notification)
+ {
+ $userLogin = $notification->getNotificationObject();
+ Piwik_Query('DELETE FROM ' . Piwik_Common::prefixTable('user_language') . ' WHERE login = ?', $userLogin);
+ }
+
/**
- * @throws Zend_Db_Statement_Exception if non-recoverable error
+ * @throws Exception if non-recoverable error
*/
public function install()
{
// we catch the exception
try{
- $sql = "CREATE TABLE ". Piwik::prefixTable('user_language')." (
+ $sql = "CREATE TABLE ". Piwik_Common::prefixTable('user_language')." (
login VARCHAR( 100 ) NOT NULL ,
language VARCHAR( 10 ) NOT NULL ,
PRIMARY KEY ( login )
) DEFAULT CHARSET=utf8 " ;
Piwik_Exec($sql);
- } catch(Zend_Db_Statement_Exception $e){
+ } catch(Exception $e){
// mysql code error 1050:table already exists
// see bug #153 http://dev.piwik.org/trac/ticket/153
if(!Zend_Registry::get('db')->isErrNo($e, '1050'))
@@ -86,26 +93,25 @@ class Piwik_LanguagesManager extends Piwik_Plugin
}
/**
- * @throws Zend_Db_Statement_Exception if non-recoverable error
+ * @throws Exception if non-recoverable error
*/
public function uninstall()
{
- $sql = "DROP TABLE ". Piwik::prefixTable('user_language') ;
+ $sql = "DROP TABLE ". Piwik_Common::prefixTable('user_language') ;
Piwik_Exec($sql);
}
-
-
+
/**
* @return string Two letters language code, eg. "fr"
*/
static public function getLanguageCodeForCurrentUser()
{
$languageCode = self::getLanguageFromPreferences();
- if(!Piwik_LanguagesManager_API::isLanguageAvailable($languageCode))
+ if(!Piwik_LanguagesManager_API::getInstance()->isLanguageAvailable($languageCode))
{
- $languageCode = Piwik_Common::extractLanguageCodeFromBrowserLanguage(Piwik_Common::getBrowserLanguage(), Piwik_LanguagesManager_API::getAvailableLanguages());
+ $languageCode = Piwik_Common::extractLanguageCodeFromBrowserLanguage(Piwik_Common::getBrowserLanguage(), Piwik_LanguagesManager_API::getInstance()->getAvailableLanguages());
}
- if(!Piwik_LanguagesManager_API::isLanguageAvailable($languageCode))
+ if(!Piwik_LanguagesManager_API::getInstance()->isLanguageAvailable($languageCode))
{
$languageCode = 'en';
}
@@ -118,7 +124,7 @@ class Piwik_LanguagesManager extends Piwik_Plugin
static public function getLanguageNameForCurrentUser()
{
$languageCode = self::getLanguageCodeForCurrentUser();
- $languages = Piwik_LanguagesManager_API::getAvailableLanguageNames();
+ $languages = Piwik_LanguagesManager_API::getInstance()->getAvailableLanguageNames();
foreach($languages as $language)
{
if($language['code'] === $languageCode)
@@ -133,14 +139,14 @@ class Piwik_LanguagesManager extends Piwik_Plugin
*/
static protected function getLanguageFromPreferences()
{
- if ($language = Piwik_LanguagesManager_API::getLanguageForSession())
+ if ($language = Piwik_LanguagesManager_API::getInstance()->getLanguageForSession())
{
return $language;
}
try {
$currentUser = Piwik::getCurrentUserLogin();
- return Piwik_LanguagesManager_API::getLanguageForUser($currentUser);
+ return Piwik_LanguagesManager_API::getInstance()->getLanguageForUser($currentUser);
} catch(Exception $e) {
return false;
}
diff --git a/plugins/LanguagesManager/templates/languages.tpl b/plugins/LanguagesManager/templates/languages.tpl
index a7ebf9ff03..444caf7218 100644
--- a/plugins/LanguagesManager/templates/languages.tpl
+++ b/plugins/LanguagesManager/templates/languages.tpl
@@ -3,15 +3,16 @@
<form action="index.php?{if $currentModule != ''}module=LanguagesManager&{/if}action=saveLanguage" method="get">
<select name="language">
<option value="{$currentLanguageCode}">{$currentLanguageName}</option>
+ <option href='misc/redirectToUrl.php?url=http://piwik.org/translations/'>{'LanguagesManager_AboutPiwikTranslations'|translate}</option>
{foreach from=$languages item=language}
<option value="{$language.code}">{$language.name}</option>
{/foreach}
</select>
- <input type="submit" value="go"/>
+ <input type="submit" value="go" />
</form>
</span>
- {literal}<script language="javascript">
+ {literal}<script type="text/javascript">
$(document).ready(function() {
$("#languageSelection").fdd2div({CssClassName:"formDiv"});
$("#languageSelection").show();
diff --git a/plugins/LanguagesManager/tests/LanguagesManager.test.php b/plugins/LanguagesManager/tests/LanguagesManager.test.php
index bdd44e3c90..b7a0c84711 100644
--- a/plugins/LanguagesManager/tests/LanguagesManager.test.php
+++ b/plugins/LanguagesManager/tests/LanguagesManager.test.php
@@ -19,23 +19,62 @@ class Test_Languages_Manager extends UnitTestCase
// test all languages
function test_getTranslationsForLanguages()
{
+ $englishStrings = Piwik_LanguagesManager_API::getInstance()->getTranslationsForLanguage('en');
+ $englishStringsWithParameters = array();
+ foreach($englishStrings as $englishString)
+ {
+ $stringLabel = $englishString['label'];
+ $stringValue = $englishString['value'];
+ $count = $this->getCountParametersToReplace($stringValue);
+ if($count > 0)
+ {
+ $englishStringsWithParameters[$stringLabel] = $count;
+ }
+ }
+
// we also test that none of the language php files outputs any character on the screen (eg. space before the <?php)
- $languages = Piwik_LanguagesManager_API::getAvailableLanguages();
+ $languages = Piwik_LanguagesManager_API::getInstance()->getAvailableLanguages();
foreach($languages as $language)
{
ob_start();
- $strings = Piwik_LanguagesManager_API::getTranslationsForLanguage($language);
+ $strings = Piwik_LanguagesManager_API::getInstance()->getTranslationsForLanguage($language);
$content = ob_get_flush();
$this->assertTrue(strpos(serialize($strings), "<script") === false, " language file containing javascript");
$this->assertTrue(count($strings) > 100); // at least 100 translations in the language file
$this->assertTrue(strlen($content) == 0, "buffer was ".strlen($content)." long but should be zero. Translation file for '$language' must be buggy.");
+
+ // checking that translated strings have the same number of %s as the english source strings
+ foreach($strings as $string)
+ {
+ $stringLabel = $string['label'];
+ $stringValue = $string['value'];
+
+ if(!empty($stringValue)
+ && isset($englishStringsWithParameters[$stringLabel]))
+ {
+ $englishParametersCount = $englishStringsWithParameters[$stringLabel];
+ $countTranslation = $this->getCountParametersToReplace($stringValue);
+ //$this->assertEqual($countTranslation, $englishParametersCount,
+ // "The string $stringLabel has $englishParametersCount parameters in English, but $countTranslation in the language $language.");
+ }
+ }
}
$this->pass();
}
+ private function getCountParametersToReplace($string)
+ {
+ $sprintfParameters = array('%s', '%1$s', '%2$s', '%3$s', '%4$s', '%5$s', '%6$s');
+ $count = 0;
+ foreach($sprintfParameters as $parameter)
+ {
+ $count += substr_count($string, $parameter);
+ }
+ return $count;
+ }
//test language when it's not defined
function test_getTranslationsForLanguages_not()
{
- $this->assertFalse(Piwik_LanguagesManager_API::getTranslationsForLanguage("../no-language"));
+ $this->assertFalse(Piwik_LanguagesManager_API::getInstance()->getTranslationsForLanguage("../no-language"));
}
}