c454fd63ee
+YUCHENG HU+ git-svn-id: https://svn.code.sf.net/p/hawebs/svn@478 a2543c7e-f6e9-4f8a-8bff-1ffc34733512
155 lines
4.0 KiB
PHP
155 lines
4.0 KiB
PHP
<?php
|
|
/**
|
|
* Piwik - Open source web analytics
|
|
*
|
|
* @link http://piwik.org
|
|
* @license http://www.gnu.org/licenses/gpl-3.0.html Gpl v3 or later
|
|
* @version $Id: LanguagesManager.php 2265 2010-06-03 17:46:05Z vipsoft $
|
|
*
|
|
* @category Piwik_Plugins
|
|
* @package Piwik_LanguagesManager
|
|
*
|
|
*/
|
|
|
|
/**
|
|
*
|
|
* @package Piwik_LanguagesManager
|
|
*/
|
|
class Piwik_LanguagesManager extends Piwik_Plugin
|
|
{
|
|
public function getInformation()
|
|
{
|
|
return array(
|
|
'description' => Piwik_Translate('LanguagesManager_PluginDescription'),
|
|
'author' => 'Piwik',
|
|
'author_homepage' => 'http://piwik.org/',
|
|
'version' => Piwik_Version::VERSION,
|
|
);
|
|
}
|
|
|
|
public function getListHooksRegistered()
|
|
{
|
|
return array(
|
|
'template_css_import' => 'css',
|
|
'template_topBar' => 'showLanguagesSelector',
|
|
'Translate.getLanguageToLoad' => 'getLanguageToLoad',
|
|
'UsersManager.deleteUser' => 'deleteUserLanguage',
|
|
);
|
|
}
|
|
|
|
function css()
|
|
{
|
|
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"themes/default/styles.css\" />\n";
|
|
}
|
|
|
|
/**
|
|
* Show styled language selection drop-down list
|
|
*
|
|
* @param string $url The form action. Default is to save language.
|
|
*/
|
|
function showLanguagesSelector()
|
|
{
|
|
// 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();
|
|
}
|
|
|
|
function getLanguageToLoad($notification)
|
|
{
|
|
$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 Exception if non-recoverable error
|
|
*/
|
|
public function install()
|
|
{
|
|
// we catch the exception
|
|
try{
|
|
$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(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'))
|
|
{
|
|
throw $e;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @throws Exception if non-recoverable error
|
|
*/
|
|
public function uninstall()
|
|
{
|
|
$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::getInstance()->isLanguageAvailable($languageCode))
|
|
{
|
|
$languageCode = Piwik_Common::extractLanguageCodeFromBrowserLanguage(Piwik_Common::getBrowserLanguage(), Piwik_LanguagesManager_API::getInstance()->getAvailableLanguages());
|
|
}
|
|
if(!Piwik_LanguagesManager_API::getInstance()->isLanguageAvailable($languageCode))
|
|
{
|
|
$languageCode = 'en';
|
|
}
|
|
return $languageCode;
|
|
}
|
|
|
|
/**
|
|
* @return string Full english language string, eg. "French"
|
|
*/
|
|
static public function getLanguageNameForCurrentUser()
|
|
{
|
|
$languageCode = self::getLanguageCodeForCurrentUser();
|
|
$languages = Piwik_LanguagesManager_API::getInstance()->getAvailableLanguageNames();
|
|
foreach($languages as $language)
|
|
{
|
|
if($language['code'] === $languageCode)
|
|
{
|
|
return $language['name'];
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return string|false if language preference could not be loaded
|
|
*/
|
|
static protected function getLanguageFromPreferences()
|
|
{
|
|
if ($language = Piwik_LanguagesManager_API::getInstance()->getLanguageForSession())
|
|
{
|
|
return $language;
|
|
}
|
|
|
|
try {
|
|
$currentUser = Piwik::getCurrentUserLogin();
|
|
return Piwik_LanguagesManager_API::getInstance()->getLanguageForUser($currentUser);
|
|
} catch(Exception $e) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|