| 1 | <?php |
|---|
| 2 | |
|---|
| 3 | |
|---|
| 4 | |
|---|
| 5 | class Piwik_LanguagesManager_API |
|---|
| 6 | { |
|---|
| 7 | static private $instance = null; |
|---|
| 8 | static public function getInstance() |
|---|
| 9 | { |
|---|
| 10 | if (self::$instance == null) |
|---|
| 11 | { |
|---|
| 12 | $c = __CLASS__; |
|---|
| 13 | self::$instance = new $c(); |
|---|
| 14 | } |
|---|
| 15 | return self::$instance; |
|---|
| 16 | } |
|---|
| 17 | static protected $availableLanguageNames = null; |
|---|
| 18 | static protected $languageNames = null; |
|---|
| 19 | |
|---|
| 20 | static public function isLanguageAvailable($languageCode) |
|---|
| 21 | { |
|---|
| 22 | return $languageCode !== false |
|---|
| 23 | && in_array($languageCode, self::getAvailableLanguages()); |
|---|
| 24 | } |
|---|
| 25 | |
|---|
| 26 | static public function getAvailableLanguages() |
|---|
| 27 | { |
|---|
| 28 | if(!is_null(self::$languageNames)) |
|---|
| 29 | { |
|---|
| 30 | return self::$languageNames; |
|---|
| 31 | } |
|---|
| 32 | $path = PIWIK_INCLUDE_PATH . "/lang/"; |
|---|
| 33 | $languages = glob($path . "*.php"); |
|---|
| 34 | $pathLength = strlen($path); |
|---|
| 35 | $languageNames = array(); |
|---|
| 36 | foreach($languages as $language) |
|---|
| 37 | { |
|---|
| 38 | $languageNames[] = substr($language, $pathLength, -strlen('.php')); |
|---|
| 39 | } |
|---|
| 40 | self::$languageNames = $languageNames; |
|---|
| 41 | return $languageNames; |
|---|
| 42 | } |
|---|
| 43 | |
|---|
| 44 | static public function getAvailableLanguagesInfo() |
|---|
| 45 | { |
|---|
| 46 | require "lang/en.php"; |
|---|
| 47 | $englishTranslation = $translations; |
|---|
| 48 | $filenames = self::getAvailableLanguages(); |
|---|
| 49 | $languagesInfo = array(); |
|---|
| 50 | foreach($filenames as $filename) |
|---|
| 51 | { |
|---|
| 52 | require "lang/$filename.php"; |
|---|
| 53 | $translationStringsDone = array_intersect_key($englishTranslation, $translations); |
|---|
| 54 | $percentageComplete = count($translationStringsDone) / count($englishTranslation); |
|---|
| 55 | $percentageComplete = round(100 * $percentageComplete, 0); |
|---|
| 56 | $languageInfo = array( 'code' => $filename, |
|---|
| 57 | 'name' => $translations['General_OriginalLanguageName'], |
|---|
| 58 | 'english_name' => $translations['General_EnglishLanguageName'], |
|---|
| 59 | 'translators' => $translations['General_TranslatorName'], |
|---|
| 60 | 'translators_email' => $translations['General_TranslatorEmail'], |
|---|
| 61 | 'percentage_complete' => $percentageComplete . '%', |
|---|
| 62 | ); |
|---|
| 63 | $languagesInfo[] = $languageInfo; |
|---|
| 64 | } |
|---|
| 65 | return $languagesInfo; |
|---|
| 66 | } |
|---|
| 67 | |
|---|
| 68 | static public function getAvailableLanguageNames() |
|---|
| 69 | { |
|---|
| 70 | if(!is_null(self::$availableLanguageNames)) |
|---|
| 71 | { |
|---|
| 72 | return self::$availableLanguageNames; |
|---|
| 73 | } |
|---|
| 74 | |
|---|
| 75 | $filenames = self::getAvailableLanguages(); |
|---|
| 76 | $languagesInfo = array(); |
|---|
| 77 | foreach($filenames as $filename) |
|---|
| 78 | { |
|---|
| 79 | require "lang/$filename.php"; |
|---|
| 80 | $languagesInfo[] = array( 'code' => $filename, 'name' => $translations['General_OriginalLanguageName']); |
|---|
| 81 | } |
|---|
| 82 | self::$availableLanguageNames = $languagesInfo; |
|---|
| 83 | return self::$availableLanguageNames; |
|---|
| 84 | } |
|---|
| 85 | |
|---|
| 86 | static public function getTranslationsForLanguages($languageCode) |
|---|
| 87 | { |
|---|
| 88 | if(!self::isLanguageAvailable($languageCode)) |
|---|
| 89 | { |
|---|
| 90 | return false; |
|---|
| 91 | }else |
|---|
| 92 | { |
|---|
| 93 | require "lang/$languageCode.php"; |
|---|
| 94 | $languageInfo = array(); |
|---|
| 95 | foreach($translations as $key => $value) |
|---|
| 96 | { |
|---|
| 97 | $languageInfo[] = array('label' => $key, 'value' => $value); |
|---|
| 98 | } |
|---|
| 99 | return $languageInfo; |
|---|
| 100 | } |
|---|
| 101 | } |
|---|
| 102 | |
|---|
| 103 | |
|---|
| 104 | |
|---|
| 105 | |
|---|
| 106 | |
|---|
| 107 | |
|---|
| 108 | static public function getLanguageForUser( $login ) |
|---|
| 109 | { |
|---|
| 110 | Piwik::checkUserIsSuperUserOrTheUser($login); |
|---|
| 111 | return Piwik_FetchOne('SELECT language FROM '.Piwik::prefixTable('user_language') . |
|---|
| 112 | ' WHERE login = ? ', array($login )); |
|---|
| 113 | } |
|---|
| 114 | |
|---|
| 115 | static public function setLanguageForUser($login, $language) |
|---|
| 116 | { |
|---|
| 117 | Piwik::checkUserIsSuperUserOrTheUser($login); |
|---|
| 118 | $paramsBind = array($login, $language, $language); |
|---|
| 119 | Piwik_Query('INSERT INTO '.Piwik::prefixTable('user_language') . |
|---|
| 120 | ' (login, language) |
|---|
| 121 | VALUES (?,?) |
|---|
| 122 | ON DUPLICATE KEY UPDATE language=?', |
|---|
| 123 | $paramsBind); |
|---|
| 124 | } |
|---|
| 125 | } |
|---|