Skip to content

Commit

Permalink
refs #3726 adding reports for browser language of visitors
Browse files Browse the repository at this point in the history
  • Loading branch information
Stefan Giehl committed Feb 3, 2013
1 parent 4f10999 commit 3f49038
Show file tree
Hide file tree
Showing 5 changed files with 128 additions and 6 deletions.
9 changes: 8 additions & 1 deletion plugins/UserSettings/API.php
Expand Up @@ -229,5 +229,12 @@ public function getPlugin( $idSite, $period, $date, $segment = false )

return $dataTable;
}


public function getLanguage( $idSite, $period, $date, $segment = false )
{
$dataTable = $this->getDataTable('UserSettings_language', $idSite, $period, $date, $segment);
$dataTable->filter('ColumnCallbackReplace', array('label', 'Piwik_LanguageTranslate'));
$dataTable->filter('ReplaceColumnNames');
return $dataTable;
}
}
27 changes: 25 additions & 2 deletions plugins/UserSettings/Controller.php
Expand Up @@ -39,7 +39,8 @@ function index()
$view->dataTableBrowser = $this->getBrowser( true );
$view->dataTableBrowserType = $this->getBrowserType ( true );
$view->dataTableMobileVsDesktop = $this->getMobileVsDesktop( true );

$view->dataTableBrowserLanguage = $this->getLanguage( true );

echo $view->render();
}

Expand Down Expand Up @@ -188,4 +189,26 @@ protected function getStandardDataTableUserSettings( $currentControllerAction,

return $view;
}
}

/**
* Renders datatable for browser language
*
* @param bool $fetch
*
* @return string|void
*/
public function getLanguage( $fetch = false)
{
$view = Piwik_ViewDataTable::factory();
$view->init( $this->pluginName, __FUNCTION__, "UserSettings.getLanguage" );
$view->disableExcludeLowPopulation();

$view->setColumnsToDisplay( array('label','nb_visits') );
$view->setColumnTranslation('label', Piwik_Translate('General_Language'));
$view->setSortedColumn('nb_visits');
$view->disableSearchBox();
$view->setLimit( 5 );

return $this->renderView($view, $fetch);
}
}
71 changes: 68 additions & 3 deletions plugins/UserSettings/UserSettings.php
Expand Up @@ -147,6 +147,17 @@ public function getInformation()
null,
null,
null),

// Browser language
array( 'UserSettings_VisitorSettings',
'UserSettings_BrowserLanguage',
'UserSettings',
'getLanguage',
'General_Language',
null,
null,
null,
null),
);

/*
Expand Down Expand Up @@ -321,8 +332,61 @@ function archiveDay( $notification )
$tablePlugin = $this->getDataTablePlugin();
$archiveProcessing->insertBlobRecord($recordName, $tablePlugin->getSerialized());
destroy($tablePlugin);
}


$recordName = 'UserSettings_language';
$labelSQL = "log_visit.location_browser_lang";
$interestByLanguage = $archiveProcessing->getArrayInterestForLabel($labelSQL);
foreach ($interestByLanguage as $lang => $count) {
// get clean language code
$code = $this->_getLanguageCodeFromBrowserSetting($lang);
if ($code != $lang) {
if (!array_key_exists($code, $interestByLanguage)) {
$interestByLanguage[$code] = array();
}
// Add the values to the primary language
foreach ($count as $key => $value) {
if (array_key_exists($key, $interestByLanguage[$code])) {
$interestByLanguage[$code][$key] += $value;
} else {
$interestByLanguage[$code][$key] = $value;
}
}
unset($interestByLanguage[$lang]);
}
}
$tableLanguage = $archiveProcessing->getDataTableFromArray($interestByLanguage);
$archiveProcessing->insertBlobRecord($recordName, $tableLanguage->getSerialized($maximumRowsInDataTable, null, $columnToSortByBeforeTruncation));
}

/**
* Returns the language code for the given browser language setting
*
* @param string $setting browser language (en-us | de-de;en | ...)
*
* @return string
*/
protected function _getLanguageCodeFromBrowserSetting($setting)
{
// small clean up
$setting = strtolower(trim($setting, ', '));
// only use first 2 letters for language code
$setting = substr($setting, 0, 2);

if ($setting == 'us') {
$setting = 'en';
}

$languageCodes = array_keys(Piwik_Common::getLanguagesList());

// check if language code is valid
if (!in_array($setting, $languageCodes)) {
$setting = 'xx';
}

return $setting;
}


/**
* Period archiving: simply sums up daily archives
*
Expand All @@ -345,6 +409,7 @@ function archivePeriod( $notification )
'UserSettings_resolution',
'UserSettings_wideScreen',
'UserSettings_plugin',
'UserSettings_language',
);

$archiveProcessing->archiveDataTable($dataTableToSum, null, $maximumRowsInDataTable);
Expand Down Expand Up @@ -406,7 +471,7 @@ protected function getTableBrowserByType(Piwik_DataTable $tableBrowser)
/**
* Returns SQL that processes stats for Plugins
*
* @return unknown_type
* @return Piwik_DataTable_Simple
*/
protected function getDataTablePlugin()
{
Expand Down
24 changes: 24 additions & 0 deletions plugins/UserSettings/functions.php
Expand Up @@ -260,3 +260,27 @@ function Piwik_UserSettings_getBrowserFromBrowserVersion( $browserWithVersion )
return $matches[1];
}

/**
* Returns the given language code to translated language name
*
* @param $label
*
* @return string
*/
function Piwik_LanguageTranslate($label)
{
if ($label == '' || $label == 'xx') {
return Piwik_Translate('General_Unknown');
}

$key = 'UserLanguage_Language_' . $label;

$translation = Piwik_Translate($key);

// Show language code if unknown code
if ($translation == $key) {
$translation = Piwik_Translate('TranslationsAdmin_LanguageCode') . ' ' . $label;
}

return $translation;
}
3 changes: 3 additions & 0 deletions plugins/UserSettings/templates/index.tpl
Expand Up @@ -21,4 +21,7 @@

<h2>{'UserSettings_MobileVsDesktop'|translate}</h2>
{$dataTableMobileVsDesktop}

<h2>{'UserSettings_BrowserLanguage'|translate}</h2>
{$dataTableBrowserLanguage}
</div>

0 comments on commit 3f49038

Please sign in to comment.