Files
YuCheng Hu c454fd63ee 添加 Piwik 到代码库中。
+YUCHENG HU+

git-svn-id: https://svn.code.sf.net/p/hawebs/svn@478 a2543c7e-f6e9-4f8a-8bff-1ffc34733512
2010-07-10 04:35:19 +00:00

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;
}
}
}