diff options
author | sgiehl <stefan@piwik.org> | 2015-01-13 01:13:14 +0300 |
---|---|---|
committer | sgiehl <stefan@piwik.org> | 2015-01-13 01:13:14 +0300 |
commit | a0ce768662bea281f88fb64b90a9fca4d668fd41 (patch) | |
tree | 17fd24f16111dc61fd04d4f4d63b950d97b7e4c3 /plugins/UserLanguage/Archiver.php | |
parent | e2b9956e4bd92ca9e234d10d527be9e8caf2b68f (diff) |
refs #3962 - moved language reports to their own plugin
Diffstat (limited to 'plugins/UserLanguage/Archiver.php')
-rw-r--r-- | plugins/UserLanguage/Archiver.php | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/plugins/UserLanguage/Archiver.php b/plugins/UserLanguage/Archiver.php new file mode 100644 index 0000000000..0fd4a63b7d --- /dev/null +++ b/plugins/UserLanguage/Archiver.php @@ -0,0 +1,79 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ + +namespace Piwik\Plugins\UserLanguage; + +use Piwik\Common; +use Piwik\DataArray; +use Piwik\DataTable; +use Piwik\Metrics; + +require_once PIWIK_INCLUDE_PATH . '/plugins/UserLanguage/functions.php'; + +/** + * Archiver for UserLanguage Plugin + * + * @see PluginsArchiver + */ +class Archiver extends \Piwik\Plugin\Archiver +{ + const LANGUAGE_RECORD_NAME = 'UserLanguage_language'; + + const LANGUAGE_DIMENSION = "log_visit.location_browser_lang"; + + /** + * Daily archive of User Settings report. Processes reports for Visits by Resolution, + * browser plugins, etc. Some reports are built from the logs, some reports are superset of an existing report + */ + public function aggregateDayReport() + { + $this->aggregateByLanguage(); + } + + /** + * Period archiving: simply sums up daily archives + */ + public function aggregateMultipleReports() + { + $dataTableRecords = array( + self::LANGUAGE_RECORD_NAME, + ); + $this->getProcessor()->aggregateDataTableRecords($dataTableRecords, $this->maximumRows); + } + + protected function aggregateByLanguage() + { + $query = $this->getLogAggregator()->queryVisitsByDimension(array("label" => self::LANGUAGE_DIMENSION)); + $countryCodes = Common::getCountriesList($includeInternalCodes = true); + $metricsByLanguage = new DataArray(); + + while ($row = $query->fetch()) { + $langCode = Common::extractLanguageCodeFromBrowserLanguage($row['label']); + $countryCode = Common::extractCountryCodeFromBrowserLanguage($row['label'], $countryCodes, $enableLanguageToCountryGuess = true); + + if ($countryCode == 'xx' || $countryCode == $langCode) { + $metricsByLanguage->sumMetricsVisits($langCode, $row); + } else { + $metricsByLanguage->sumMetricsVisits($langCode . '-' . $countryCode, $row); + } + } + + $report = $metricsByLanguage->asDataTable(); + $this->insertTable(self::LANGUAGE_RECORD_NAME, $report); + } + + + protected function insertTable($recordName, DataTable $table) + { + $report = $table->getSerialized($this->maximumRows, null, Metrics::INDEX_NB_VISITS); + return $this->getProcessor()->insertBlobRecord($recordName, $report); + } + +} + |