diff --git a/core/PluginsArchiver.php b/core/PluginsArchiver.php index dca85a7c770c3128f6f5d296ddee51344c709eff..7dcdf3e54f8c0644962cf0586805e97c7e9c3bac 100644 --- a/core/PluginsArchiver.php +++ b/core/PluginsArchiver.php @@ -19,6 +19,7 @@ abstract class Piwik_PluginsArchiver public function __construct(Piwik_ArchiveProcessing $processing) { + $this->maximumRows = Piwik_Config::getInstance()->General['datatable_archiving_maximum_rows_standard']; $this->maximumRows = Piwik_Config::getInstance()->General['datatable_archiving_maximum_rows_standard']; $this->processor = $processing; } diff --git a/plugins/Actions/Archiver.php b/plugins/Actions/Archiver.php index e8a4855463721ff5843808fc51ce6617455adb59..d34fb147dca34da38e1ba637c6d29f490190c568 100644 --- a/plugins/Actions/Archiver.php +++ b/plugins/Actions/Archiver.php @@ -16,6 +16,23 @@ */ class Piwik_Actions_Archiver extends Piwik_PluginsArchiver { + const DOWNLOADS_RECORD_NAME = 'Actions_downloads'; + const OUTLINKS_RECORD_NAME = 'Actions_outlink'; + const PAGE_TITLES_RECORD_NAME = 'Actions_actions'; + const SITE_SEARCH_RECORD_NAME = 'Actions_sitesearch'; + const PAGE_URLS_RECORD_NAME = 'Actions_actions_url'; + + const METRIC_PAGEVIEWS_RECORD_NAME = 'Actions_nb_pageviews'; + const METRIC_UNIQ_PAGEVIEWS_RECORD_NAME = 'Actions_nb_uniq_pageviews'; + const METRIC_SUM_TIME_RECORD_NAME = 'Actions_sum_time_generation'; + const METRIC_HITS_TIMED_RECORD_NAME = 'Actions_nb_hits_with_time_generation'; + const METRIC_DOWNLOADS_RECORD_NAME = 'Actions_nb_downloads'; + const METRIC_UNIQ_DOWNLOADS_RECORD_NAME = 'Actions_nb_uniq_downloads'; + const METRIC_OUTLINKS_RECORD_NAME = 'Actions_nb_outlinks'; + const METRIC_UNIQ_OUTLINKS_RECORD_NAME = 'Actions_nb_uniq_outlinks'; + const METRIC_SEARCHES_RECORD_NAME = 'Actions_nb_searches'; + const METRIC_KEYWORDS_RECORD_NAME = 'Actions_nb_keywords'; + public static $actionTypes = array( Piwik_Tracker_Action::TYPE_ACTION_URL, Piwik_Tracker_Action::TYPE_OUTLINK, @@ -421,11 +438,11 @@ class Piwik_Actions_Archiver extends Piwik_PluginsArchiver protected function recordPageUrlsReports() { $dataTable = $this->getDataTable(Piwik_Tracker_Action::TYPE_ACTION_URL); - $this->recordDataTable($dataTable, 'Actions_actions_url'); - $this->getProcessor()->insertNumericRecord('Actions_nb_pageviews', array_sum($dataTable->getColumn(Piwik_Archive::INDEX_PAGE_NB_HITS))); - $this->getProcessor()->insertNumericRecord('Actions_nb_uniq_pageviews', array_sum($dataTable->getColumn(Piwik_Archive::INDEX_NB_VISITS))); - $this->getProcessor()->insertNumericRecord('Actions_sum_time_generation', array_sum($dataTable->getColumn(Piwik_Archive::INDEX_PAGE_SUM_TIME_GENERATION))); - $this->getProcessor()->insertNumericRecord('Actions_nb_hits_with_time_generation', array_sum($dataTable->getColumn(Piwik_Archive::INDEX_PAGE_NB_HITS_WITH_TIME_GENERATION))); + $this->recordDataTable($dataTable, self::PAGE_URLS_RECORD_NAME); + $this->getProcessor()->insertNumericRecord(self::METRIC_PAGEVIEWS_RECORD_NAME, array_sum($dataTable->getColumn(Piwik_Archive::INDEX_PAGE_NB_HITS))); + $this->getProcessor()->insertNumericRecord(self::METRIC_UNIQ_PAGEVIEWS_RECORD_NAME, array_sum($dataTable->getColumn(Piwik_Archive::INDEX_NB_VISITS))); + $this->getProcessor()->insertNumericRecord(self::METRIC_SUM_TIME_RECORD_NAME, array_sum($dataTable->getColumn(Piwik_Archive::INDEX_PAGE_SUM_TIME_GENERATION))); + $this->getProcessor()->insertNumericRecord(self::METRIC_HITS_TIMED_RECORD_NAME, array_sum($dataTable->getColumn(Piwik_Archive::INDEX_PAGE_NB_HITS_WITH_TIME_GENERATION))); } /** @@ -488,35 +505,35 @@ class Piwik_Actions_Archiver extends Piwik_PluginsArchiver protected function recordDownloadsReports() { $dataTable = $this->getDataTable(Piwik_Tracker_Action::TYPE_DOWNLOAD); - $this->recordDataTable($dataTable, 'Actions_downloads'); + $this->recordDataTable($dataTable, self::DOWNLOADS_RECORD_NAME); - $this->getProcessor()->insertNumericRecord('Actions_nb_downloads', array_sum($dataTable->getColumn(Piwik_Archive::INDEX_PAGE_NB_HITS))); - $this->getProcessor()->insertNumericRecord('Actions_nb_uniq_downloads', array_sum($dataTable->getColumn(Piwik_Archive::INDEX_NB_VISITS))); + $this->getProcessor()->insertNumericRecord(self::METRIC_DOWNLOADS_RECORD_NAME, array_sum($dataTable->getColumn(Piwik_Archive::INDEX_PAGE_NB_HITS))); + $this->getProcessor()->insertNumericRecord(self::METRIC_UNIQ_DOWNLOADS_RECORD_NAME, array_sum($dataTable->getColumn(Piwik_Archive::INDEX_NB_VISITS))); } protected function recordOutlinksReports() { $dataTable = $this->getDataTable(Piwik_Tracker_Action::TYPE_OUTLINK); - $this->recordDataTable($dataTable, 'Actions_outlink'); + $this->recordDataTable($dataTable, self::OUTLINKS_RECORD_NAME); - $this->getProcessor()->insertNumericRecord('Actions_nb_outlinks', array_sum($dataTable->getColumn(Piwik_Archive::INDEX_PAGE_NB_HITS))); - $this->getProcessor()->insertNumericRecord('Actions_nb_uniq_outlinks', array_sum($dataTable->getColumn(Piwik_Archive::INDEX_NB_VISITS))); + $this->getProcessor()->insertNumericRecord(self::METRIC_OUTLINKS_RECORD_NAME, array_sum($dataTable->getColumn(Piwik_Archive::INDEX_PAGE_NB_HITS))); + $this->getProcessor()->insertNumericRecord(self::METRIC_UNIQ_OUTLINKS_RECORD_NAME, array_sum($dataTable->getColumn(Piwik_Archive::INDEX_NB_VISITS))); } protected function recordPageTitlesReports() { $dataTable = $this->getDataTable(Piwik_Tracker_Action::TYPE_ACTION_NAME); - $this->recordDataTable($dataTable, 'Actions_actions'); + $this->recordDataTable($dataTable, self::PAGE_TITLES_RECORD_NAME); } protected function recordSiteSearchReports() { $dataTable = $this->getDataTable(Piwik_Tracker_Action::TYPE_SITE_SEARCH); $this->deleteUnusedColumnsFromKeywordsDataTable($dataTable); - $this->recordDataTable($dataTable, 'Actions_sitesearch'); + $this->recordDataTable($dataTable, self::SITE_SEARCH_RECORD_NAME); - $this->getProcessor()->insertNumericRecord('Actions_nb_searches', array_sum($dataTable->getColumn(Piwik_Archive::INDEX_NB_VISITS))); - $this->getProcessor()->insertNumericRecord('Actions_nb_keywords', $dataTable->getRowsCount()); + $this->getProcessor()->insertNumericRecord(self::METRIC_SEARCHES_RECORD_NAME, array_sum($dataTable->getColumn(Piwik_Archive::INDEX_NB_VISITS))); + $this->getProcessor()->insertNumericRecord(self::METRIC_KEYWORDS_RECORD_NAME, $dataTable->getRowsCount()); } protected function deleteUnusedColumnsFromKeywordsDataTable($dataTable) @@ -538,8 +555,8 @@ class Piwik_Actions_Archiver extends Piwik_PluginsArchiver { Piwik_Actions_ArchivingHelper::reloadConfig(); $dataTableToSum = array( - 'Actions_actions', - 'Actions_actions_url', + self::PAGE_TITLES_RECORD_NAME, + self::PAGE_URLS_RECORD_NAME, ); $this->getProcessor()->archiveDataTable($dataTableToSum, self::$invalidSummedColumnNameToRenamedNameFromPeriodArchive, @@ -549,9 +566,9 @@ class Piwik_Actions_Archiver extends Piwik_PluginsArchiver self::$actionColumnAggregationOperations); $dataTableToSum = array( - 'Actions_downloads', - 'Actions_outlink', - 'Actions_sitesearch', + self::DOWNLOADS_RECORD_NAME, + self::OUTLINKS_RECORD_NAME, + self::SITE_SEARCH_RECORD_NAME, ); $nameToCount = $this->getProcessor()->archiveDataTable($dataTableToSum, self::$invalidSummedColumnNameToRenamedNameFromPeriodArchive, @@ -560,18 +577,18 @@ class Piwik_Actions_Archiver extends Piwik_PluginsArchiver Piwik_Actions_ArchivingHelper::$columnToSortByBeforeTruncation); $this->getProcessor()->archiveNumericValuesSum(array( - 'Actions_nb_pageviews', - 'Actions_nb_uniq_pageviews', - 'Actions_nb_downloads', - 'Actions_nb_uniq_downloads', - 'Actions_nb_outlinks', - 'Actions_nb_uniq_outlinks', - 'Actions_nb_searches', - 'Actions_sum_time_generation', - 'Actions_nb_hits_with_time_generation', + self::METRIC_PAGEVIEWS_RECORD_NAME, + self::METRIC_UNIQ_PAGEVIEWS_RECORD_NAME, + self::METRIC_DOWNLOADS_RECORD_NAME, + self::METRIC_UNIQ_DOWNLOADS_RECORD_NAME, + self::METRIC_OUTLINKS_RECORD_NAME, + self::METRIC_UNIQ_OUTLINKS_RECORD_NAME, + self::METRIC_SEARCHES_RECORD_NAME, + self::METRIC_SUM_TIME_RECORD_NAME, + self::METRIC_HITS_TIMED_RECORD_NAME, )); // Unique Keywords can't be summed, instead we take the RowsCount() of the keyword table - $this->getProcessor()->insertNumericRecord('Actions_nb_keywords', $nameToCount['Actions_sitesearch']['level0']); + $this->getProcessor()->insertNumericRecord(self::METRIC_KEYWORDS_RECORD_NAME, $nameToCount[self::SITE_SEARCH_RECORD_NAME]['level0']); } } diff --git a/plugins/CustomVariables/API.php b/plugins/CustomVariables/API.php index abdbfb80f10496daaf897e450ee6fa757f2d2bea..96d05c4c30825391771efc3d27b56dc42ff77090 100644 --- a/plugins/CustomVariables/API.php +++ b/plugins/CustomVariables/API.php @@ -41,7 +41,7 @@ class Piwik_CustomVariables_API */ protected function getDataTable($idSite, $period, $date, $segment, $expanded, $idSubtable) { - $dataTable = Piwik_Archive::getDataTableFromArchive('CustomVariables_valueByName', $idSite, $period, $date, $segment, $expanded, $idSubtable); + $dataTable = Piwik_Archive::getDataTableFromArchive(Piwik_CustomVariables_Archiver::CUSTOM_VARIABLE_RECORD_NAME, $idSite, $period, $date, $segment, $expanded, $idSubtable); $dataTable->filter('Sort', array(Piwik_Archive::INDEX_NB_ACTIONS, 'desc', $naturalSort = false, $expanded)); $dataTable->queueFilter('ReplaceColumnNames'); $dataTable->queueFilter('ColumnDelete', 'nb_uniq_visitors'); diff --git a/plugins/CustomVariables/Archiver.php b/plugins/CustomVariables/Archiver.php index 896b5335bc5184e1336b96934d53548223fd6b24..f5df35ba3892268c3f3b9cdc449559aed97371a9 100644 --- a/plugins/CustomVariables/Archiver.php +++ b/plugins/CustomVariables/Archiver.php @@ -12,7 +12,7 @@ class Piwik_CustomVariables_Archiver extends Piwik_PluginsArchiver { const LABEL_CUSTOM_VALUE_NOT_DEFINED = "Value not defined"; - const BLOB_NAME = 'CustomVariables_valueByName'; + const CUSTOM_VARIABLE_RECORD_NAME = 'CustomVariables_valueByName'; protected $metricsByKey = array(); protected $metricsByKeyAndValue = array(); protected $maximumRowsInDataTableLevelZero; @@ -42,7 +42,7 @@ class Piwik_CustomVariables_Archiver extends Piwik_PluginsArchiver $columnToSort = Piwik_Archive::INDEX_NB_VISITS ); - $this->getProcessor()->insertBlobRecord(self::BLOB_NAME, $blob); + $this->getProcessor()->insertBlobRecord(self::CUSTOM_VARIABLE_RECORD_NAME, $blob); } protected function aggregateCustomVariable($slot) @@ -218,7 +218,7 @@ class Piwik_CustomVariables_Archiver extends Piwik_PluginsArchiver public function archivePeriod() { $nameToCount = $this->getProcessor()->archiveDataTable( - self::BLOB_NAME, null, $this->maximumRowsInDataTableLevelZero, $this->maximumRowsInSubDataTable, + self::CUSTOM_VARIABLE_RECORD_NAME, null, $this->maximumRowsInDataTableLevelZero, $this->maximumRowsInSubDataTable, $columnToSort = Piwik_Archive::INDEX_NB_VISITS); } } \ No newline at end of file diff --git a/plugins/DBStats/MySQLMetadataProvider.php b/plugins/DBStats/MySQLMetadataProvider.php index 6240a24b19e0635cebc0aacc438c926942b0c896..be487346cbeb732c7a785fba66cf5adb8db8fedb 100755 --- a/plugins/DBStats/MySQLMetadataProvider.php +++ b/plugins/DBStats/MySQLMetadataProvider.php @@ -243,7 +243,6 @@ class Piwik_DBStats_MySQLMetadataProvider array($cols, 'estimated_size', $getEstimatedSize, array($status))); $dataTable->addDataTable($table); - destroy($table); } return $dataTable; } diff --git a/plugins/DevicesDetection/Archiver.php b/plugins/DevicesDetection/Archiver.php index 1fdbe6f8cceb6c91a5bcb4fbb9a1499187f0f523..5ff05d3f3a6812d2b34d13fae1c6cc859db26746 100644 --- a/plugins/DevicesDetection/Archiver.php +++ b/plugins/DevicesDetection/Archiver.php @@ -11,6 +11,14 @@ class Piwik_DevicesDetection_Archiver extends Piwik_PluginsArchiver { + const TYPE_RECORD_NAME = 'DevicesDetection_types'; + const BRAND_RECORD_NAME = 'DevicesDetection_brands'; + const MODEL_RECORD_NAME = 'DevicesDetection_models'; + const OS_RECORD_NAME = 'DevicesDetection_os'; + const OS_VERSION_RECORD_NAME = 'DevicesDetection_osVersions'; + const BROWSER_RECORD_NAME = 'DevicesDetection_browsers'; + const BROWSER_VERSION_RECORD_NAME = 'DevicesDetection_browserVersions'; + public function __construct($processor) { parent::__construct($processor); @@ -30,9 +38,8 @@ class Piwik_DevicesDetection_Archiver extends Piwik_PluginsArchiver private function archiveDayDeviceTypes() { - $recordName = 'DevicesDetection_types'; $labelSQL = "log_visit.config_device_type"; - $this->aggregateByLabel( $labelSQL, $recordName); + $this->aggregateByLabel( $labelSQL, self::TYPE_RECORD_NAME); } private function aggregateByLabel( $labelSQL, $recordName) @@ -45,57 +52,45 @@ class Piwik_DevicesDetection_Archiver extends Piwik_PluginsArchiver private function archiveDayDeviceBrands() { - $recordName = 'DevicesDetection_brands'; - $labelSQL = "log_visit.config_device_brand"; - $this->aggregateByLabel( $labelSQL, $recordName); + $this->aggregateByLabel( "log_visit.config_device_brand", self::BRAND_RECORD_NAME); } private function archiveDayDeviceModels() { - $recordName = 'DevicesDetection_models'; - $labelSQL = "log_visit.config_device_model"; - $this->aggregateByLabel( $labelSQL, $recordName); + $this->aggregateByLabel( "log_visit.config_device_model", self::MODEL_RECORD_NAME); } private function archiveDayOs() { - $recordName = 'DevicesDetection_os'; - $labelSQL = "log_visit.config_os"; - $this->aggregateByLabel( $labelSQL, $recordName); + $this->aggregateByLabel( "log_visit.config_os", self::OS_RECORD_NAME); } private function archiveDayOsVersions() { - $recordName = 'DevicesDetection_osVersions'; - $labelSQL = "CONCAT(log_visit.config_os, ';', log_visit.config_os_version)"; - $this->aggregateByLabel( $labelSQL, $recordName); + $this->aggregateByLabel( "CONCAT(log_visit.config_os, ';', log_visit.config_os_version)", self::OS_VERSION_RECORD_NAME); } private function archiveDayBrowserFamilies() { - $recordName = 'DevicesDetection_browsers'; - $labelSQL = "log_visit.config_browser_name"; - $this->aggregateByLabel( $labelSQL, $recordName); + $this->aggregateByLabel( "log_visit.config_browser_name", self::BROWSER_RECORD_NAME); } private function archiveDayBrowsersVersions() { - $recordName = 'DevicesDetection_browserVersions'; - $labelSQL = "CONCAT(log_visit.config_browser_name, ';', log_visit.config_browser_version)"; - $this->aggregateByLabel( $labelSQL, $recordName); + $this->aggregateByLabel( "CONCAT(log_visit.config_browser_name, ';', log_visit.config_browser_version)", self::BROWSER_VERSION_RECORD_NAME); } public function archivePeriod() { $maximumRowsInSubDataTable = $this->maximumRowsInDataTable; $dataTablesToSum = array( - 'DevicesDetection_types', - 'DevicesDetection_brands', - 'DevicesDetection_models', - 'DevicesDetection_os', - 'DevicesDetection_osVersions', - 'DevicesDetection_browsers', - 'DevicesDetection_browserVersions' + self::TYPE_RECORD_NAME, + self::BRAND_RECORD_NAME, + self::MODEL_RECORD_NAME, + self::OS_RECORD_NAME, + self::OS_VERSION_RECORD_NAME, + self::BROWSER_RECORD_NAME, + self::BROWSER_VERSION_RECORD_NAME ); foreach ($dataTablesToSum as $dt) { $this->getProcessor()->archiveDataTable( diff --git a/plugins/Goals/Archiver.php b/plugins/Goals/Archiver.php index 7effc4e4f78d403867677284a91b85890f8b983d..403e320fa35ff56dc2f8f368f85f10f204058b86 100644 --- a/plugins/Goals/Archiver.php +++ b/plugins/Goals/Archiver.php @@ -13,6 +13,9 @@ class Piwik_Goals_Archiver extends Piwik_PluginsArchiver { const VISITS_UNTIL_RECORD_NAME = 'visits_until_conv'; const DAYS_UNTIL_CONV_RECORD_NAME = 'days_until_conv'; + const ITEMS_SKU_RECORD_NAME = 'Goals_ItemsSku'; + const ITEMS_NAME_RECORD_NAME = 'Goals_ItemsName'; + const ITEMS_CATEGORY_RECORD_NAME = 'Goals_ItemsCategory'; /** * This array stores the ranges to use when displaying the 'visits to conversion' report */ @@ -52,9 +55,9 @@ class Piwik_Goals_Archiver extends Piwik_PluginsArchiver ); protected $dimensions = array( - 'idaction_sku' => 'Goals_ItemsSku', - 'idaction_name' => 'Goals_ItemsName', - 'idaction_category' => 'Goals_ItemsCategory' + 'idaction_sku' => self::ITEMS_SKU_RECORD_NAME, + 'idaction_name' => self::ITEMS_NAME_RECORD_NAME, + 'idaction_category' => self::ITEMS_CATEGORY_RECORD_NAME ); public function archiveDay() @@ -65,16 +68,17 @@ class Piwik_Goals_Archiver extends Piwik_PluginsArchiver function archiveGeneralGoalMetrics() { + $selectAsVisitCount = 'vcv'; + $selectAsDaysSince = 'vdsf'; // extra aggregate selects for the visits to conversion report $visitToConvExtraCols = Piwik_ArchiveProcessing_Day::buildReduceByRangeSelect( - 'visitor_count_visits', self::$visitCountRanges, 'log_conversion', 'vcv'); + 'visitor_count_visits', self::$visitCountRanges, 'log_conversion', $selectAsVisitCount); // extra aggregate selects for the days to conversion report $daysToConvExtraCols = Piwik_ArchiveProcessing_Day::buildReduceByRangeSelect( - 'visitor_days_since_first', self::$daysToConvRanges, 'log_conversion', 'vdsf'); + 'visitor_days_since_first', self::$daysToConvRanges, 'log_conversion', $selectAsDaysSince); - $query = $this->getProcessor()->queryConversionsByDimension( - array(), '', array_merge($visitToConvExtraCols, $daysToConvExtraCols)); + $query = $this->getProcessor()->queryConversionsByDimension(array(), '', array_merge($visitToConvExtraCols, $daysToConvExtraCols)); if ($query === false) { return; @@ -104,11 +108,11 @@ class Piwik_Goals_Archiver extends Piwik_PluginsArchiver } // map the goal + visit number of a visitor with the # of conversions that happened on that visit - $table = $this->getProcessor()->getSimpleDataTableFromRow($row, Piwik_Archive::INDEX_NB_CONVERSIONS, 'vcv'); + $table = $this->getProcessor()->getSimpleDataTableFromRow($row, Piwik_Archive::INDEX_NB_CONVERSIONS, $selectAsVisitCount); $visitsToConvReport[$idgoal]->addDataTable($table); // map the goal + day number of a visit with the # of conversion that happened on that day - $table = $this->getProcessor()->getSimpleDataTableFromRow($row, Piwik_Archive::INDEX_NB_CONVERSIONS, 'vdsf'); + $table = $this->getProcessor()->getSimpleDataTableFromRow($row, Piwik_Archive::INDEX_NB_CONVERSIONS, $selectAsDaysSince); $daysToConvReport[$idgoal]->addDataTable($table); } diff --git a/plugins/Provider/API.php b/plugins/Provider/API.php index 603a8dfc94324fb06842bdf950c042fc5d70085e..851b1b74f2eedf37ace2ec50bcd983002ffd8d77 100644 --- a/plugins/Provider/API.php +++ b/plugins/Provider/API.php @@ -35,7 +35,7 @@ class Piwik_Provider_API { Piwik::checkUserHasViewAccess($idSite); $archive = Piwik_Archive::build($idSite, $period, $date, $segment); - $dataTable = $archive->getDataTable('Provider_hostnameExt'); + $dataTable = $archive->getDataTable(Piwik_Provider_Archiver::PROVIDER_RECORD_NAME); $dataTable->filter('Sort', array(Piwik_Archive::INDEX_NB_VISITS)); $dataTable->queueFilter('ColumnCallbackAddMetadata', array('label', 'url', 'Piwik_getHostnameUrl')); $dataTable->queueFilter('ColumnCallbackReplace', array('label', 'Piwik_Provider_getPrettyProviderName')); diff --git a/plugins/Provider/Archiver.php b/plugins/Provider/Archiver.php index a82ff846ce089fa9be80609fe87fa5fd51d375de..3cc703a0e286c498522a8fb744c7a517aa98de53 100644 --- a/plugins/Provider/Archiver.php +++ b/plugins/Provider/Archiver.php @@ -10,21 +10,25 @@ */ class Piwik_Provider_Archiver extends Piwik_PluginsArchiver { + const PROVIDER_RECORD_NAME = 'Provider_hostnameExt'; + protected $maximumRows; + + public function __construct($processor) + { + parent::__construct($processor); + $this->maximumRows = Piwik_Config::getInstance()->General['datatable_archiving_maximum_rows_standard']; + } + public function archiveDay() { - $recordName = 'Provider_hostnameExt'; $labelSQL = "log_visit.location_provider"; $metricsByProvider = $this->getProcessor()->getMetricsForLabel($labelSQL); $tableProvider = $this->getProcessor()->getDataTableFromArray($metricsByProvider); - $columnToSortByBeforeTruncation = Piwik_Archive::INDEX_NB_VISITS; - $maximumRowsInDataTable = Piwik_Config::getInstance()->General['datatable_archiving_maximum_rows_standard']; - $this->getProcessor()->insertBlobRecord($recordName, $tableProvider->getSerialized($maximumRowsInDataTable, null, $columnToSortByBeforeTruncation)); + $this->getProcessor()->insertBlobRecord(self::PROVIDER_RECORD_NAME, $tableProvider->getSerialized($this->maximumRows, null, Piwik_Archive::INDEX_NB_VISITS)); } public function archivePeriod() { - $maximumRowsInDataTable = Piwik_Config::getInstance()->General['datatable_archiving_maximum_rows_standard']; - $dataTableToSum = array('Provider_hostnameExt'); - $this->getProcessor()->archiveDataTable($dataTableToSum, null, $maximumRowsInDataTable); + $this->getProcessor()->archiveDataTable(array(self::PROVIDER_RECORD_NAME), null, $this->maximumRows); } } \ No newline at end of file diff --git a/plugins/Referers/API.php b/plugins/Referers/API.php index 327fa59c2cb936e54bb109f65ec256609c28a5a3..abec869e5647a67432aa79cde2e4ed75b022cd42 100644 --- a/plugins/Referers/API.php +++ b/plugins/Referers/API.php @@ -88,7 +88,7 @@ class Piwik_Referers_API } // get visits by referrer type - $dataTable = $this->getDataTable('Referers_type', $idSite, $period, $date, $segment); + $dataTable = $this->getDataTable(Piwik_Referers_Archiver::REFERER_TYPE_RECORD_NAME, $idSite, $period, $date, $segment); if ($typeReferer !== false) // filter for a specific referrer type { @@ -112,8 +112,7 @@ class Piwik_Referers_API */ public function getAll($idSite, $period, $date, $segment = false) { - $dataTable = $this->getRefererType($idSite, $period, $date, $segment, $typeReferer = false, - $idSubtable = false, $expanded = true); + $dataTable = $this->getRefererType($idSite, $period, $date, $segment, $typeReferer = false, $idSubtable = false, $expanded = true); if ($dataTable instanceof Piwik_DataTable_Array) { throw new Exception("Referrers.getAll with multiple sites or dates is not supported (yet)."); @@ -121,7 +120,6 @@ class Piwik_Referers_API $dataTable = $dataTable->mergeSubtables($labelColumn = 'referrer_type', $useMetadataColumn = true); - // presentation filters $dataTable->filter('Sort', array(Piwik_Archive::INDEX_NB_VISITS, 'desc')); $dataTable->queueFilter('ReplaceColumnNames'); $dataTable->queueFilter('ReplaceSummaryRowLabel'); @@ -131,7 +129,7 @@ class Piwik_Referers_API public function getKeywords($idSite, $period, $date, $segment = false, $expanded = false) { - $dataTable = $this->getDataTable('Referers_searchEngineByKeyword', $idSite, $period, $date, $segment, $expanded); + $dataTable = $this->getDataTable(Piwik_Referers_Archiver::SEARCH_ENGINE_BY_KEYWORD_RECORD_NAME, $idSite, $period, $date, $segment, $expanded); $dataTable = $this->handleKeywordNotDefined($dataTable); return $dataTable; } @@ -214,7 +212,7 @@ class Piwik_Referers_API public function getSearchEnginesFromKeywordId($idSite, $period, $date, $idSubtable, $segment = false) { - $dataTable = $this->getDataTable('Referers_searchEngineByKeyword', $idSite, $period, $date, $segment, $expanded = false, $idSubtable); + $dataTable = $this->getDataTable(Piwik_Referers_Archiver::SEARCH_ENGINE_BY_KEYWORD_RECORD_NAME, $idSite, $period, $date, $segment, $expanded = false, $idSubtable); $dataTable->queueFilter('ColumnCallbackAddMetadata', array('label', 'url', 'Piwik_getSearchEngineUrlFromName')); $dataTable->queueFilter('MetadataCallbackAddMetadata', array('url', 'logo', 'Piwik_getSearchEngineLogoFromUrl')); @@ -230,7 +228,7 @@ class Piwik_Referers_API public function getSearchEngines($idSite, $period, $date, $segment = false, $expanded = false) { - $dataTable = $this->getDataTable('Referers_keywordBySearchEngine', $idSite, $period, $date, $segment, $expanded); + $dataTable = $this->getDataTable(Piwik_Referers_Archiver::KEYWORDS_BY_SEARCH_ENGINE_RECORD_NAME, $idSite, $period, $date, $segment, $expanded); $dataTable->queueFilter('ColumnCallbackAddMetadata', array('label', 'url', 'Piwik_getSearchEngineUrlFromName')); $dataTable->queueFilter('MetadataCallbackAddMetadata', array('url', 'logo', 'Piwik_getSearchEngineLogoFromUrl')); return $dataTable; @@ -238,7 +236,7 @@ class Piwik_Referers_API public function getKeywordsFromSearchEngineId($idSite, $period, $date, $idSubtable, $segment = false) { - $dataTable = $this->getDataTable('Referers_keywordBySearchEngine', $idSite, $period, $date, $segment, $expanded = false, $idSubtable); + $dataTable = $this->getDataTable(Piwik_Referers_Archiver::KEYWORDS_BY_SEARCH_ENGINE_RECORD_NAME, $idSite, $period, $date, $segment, $expanded = false, $idSubtable); // get the search engine and create the URL to the search result page $searchEngines = $this->getSearchEngines($idSite, $period, $date, $segment); @@ -269,25 +267,25 @@ class Piwik_Referers_API public function getCampaigns($idSite, $period, $date, $segment = false, $expanded = false) { - $dataTable = $this->getDataTable('Referers_keywordByCampaign', $idSite, $period, $date, $segment, $expanded); + $dataTable = $this->getDataTable(Piwik_Referers_Archiver::KEYWORD_BY_CAMPAIGN_RECORD_NAME, $idSite, $period, $date, $segment, $expanded); return $dataTable; } public function getKeywordsFromCampaignId($idSite, $period, $date, $idSubtable, $segment = false) { - $dataTable = $this->getDataTable('Referers_keywordByCampaign', $idSite, $period, $date, $segment, $expanded = false, $idSubtable); + $dataTable = $this->getDataTable(Piwik_Referers_Archiver::KEYWORD_BY_CAMPAIGN_RECORD_NAME, $idSite, $period, $date, $segment, $expanded = false, $idSubtable); return $dataTable; } public function getWebsites($idSite, $period, $date, $segment = false, $expanded = false) { - $dataTable = $this->getDataTable('Referers_urlByWebsite', $idSite, $period, $date, $segment, $expanded); + $dataTable = $this->getDataTable(Piwik_Referers_Archiver::URL_BY_WEBSITE_RECORD_NAME, $idSite, $period, $date, $segment, $expanded); return $dataTable; } public function getUrlsFromWebsiteId($idSite, $period, $date, $idSubtable, $segment = false) { - $dataTable = $this->getDataTable('Referers_urlByWebsite', $idSite, $period, $date, $segment, $expanded = false, $idSubtable); + $dataTable = $this->getDataTable(Piwik_Referers_Archiver::URL_BY_WEBSITE_RECORD_NAME, $idSite, $period, $date, $segment, $expanded = false, $idSubtable); // the htmlspecialchars_decode call is for BC for before 1.1 // as the Referer URL was previously encoded in the log tables, but is now recorded raw $dataTable->queueFilter('ColumnCallbackAddMetadata', array('label', 'url', create_function('$label', 'return htmlspecialchars_decode($label);'))); @@ -310,7 +308,7 @@ class Piwik_Referers_API { require PIWIK_INCLUDE_PATH . '/core/DataFiles/Socials.php'; - $dataTable = $this->getDataTable('Referers_urlByWebsite', $idSite, $period, $date, $segment, $expanded); + $dataTable = $this->getDataTable( Piwik_Referers_Archiver::URL_BY_WEBSITE_RECORD_NAME, $idSite, $period, $date, $segment, $expanded); $dataTable->filter('ColumnCallbackDeleteRow', array('label', 'Piwik_Referrers_isSocialUrl')); @@ -343,8 +341,7 @@ class Piwik_Referers_API { require PIWIK_INCLUDE_PATH . '/core/DataFiles/Socials.php'; - $dataTable = $this->getDataTable( - 'Referers_urlByWebsite', $idSite, $period, $date, $segment, $expanded = true); + $dataTable = $this->getDataTable( Piwik_Referers_Archiver::URL_BY_WEBSITE_RECORD_NAME, $idSite, $period, $date, $segment, $expanded = true); // get the social network domain referred to by $idSubtable $social = false; @@ -378,27 +375,27 @@ class Piwik_Referers_API public function getNumberOfDistinctSearchEngines($idSite, $period, $date, $segment = false) { - return $this->getNumeric('Referers_distinctSearchEngines', $idSite, $period, $date, $segment); + return $this->getNumeric(Piwik_Referers_Archiver::METRIC_DISTINCT_SEARCH_ENGINE_RECORD_NAME, $idSite, $period, $date, $segment); } public function getNumberOfDistinctKeywords($idSite, $period, $date, $segment = false) { - return $this->getNumeric('Referers_distinctKeywords', $idSite, $period, $date, $segment); + return $this->getNumeric(Piwik_Referers_Archiver::METRIC_DISTINCT_KEYWORD_RECORD_NAME, $idSite, $period, $date, $segment); } public function getNumberOfDistinctCampaigns($idSite, $period, $date, $segment = false) { - return $this->getNumeric('Referers_distinctCampaigns', $idSite, $period, $date, $segment); + return $this->getNumeric(Piwik_Referers_Archiver::METRIC_DISTINCT_CAMPAIGN_RECORD_NAME, $idSite, $period, $date, $segment); } public function getNumberOfDistinctWebsites($idSite, $period, $date, $segment = false) { - return $this->getNumeric('Referers_distinctWebsites', $idSite, $period, $date, $segment); + return $this->getNumeric(Piwik_Referers_Archiver::METRIC_DISTINCT_WEBSITE_RECORD_NAME, $idSite, $period, $date, $segment); } public function getNumberOfDistinctWebsitesUrls($idSite, $period, $date, $segment = false) { - return $this->getNumeric('Referers_distinctWebsitesUrls', $idSite, $period, $date, $segment); + return $this->getNumeric(Piwik_Referers_Archiver::METRIC_DISTINCT_URLS_RECORD_NAME, $idSite, $period, $date, $segment); } private function getNumeric($name, $idSite, $period, $date, $segment) diff --git a/plugins/Referers/Archiver.php b/plugins/Referers/Archiver.php index f540d1c2a22f9031dcd88a0dc7f6aebaad787a2e..58907702ad94f70e3f19dd01334844724fb55803 100644 --- a/plugins/Referers/Archiver.php +++ b/plugins/Referers/Archiver.php @@ -11,6 +11,18 @@ class Piwik_Referers_Archiver extends Piwik_PluginsArchiver { + const KEYWORDS_BY_SEARCH_ENGINE_RECORD_NAME = 'Referers_keywordBySearchEngine'; + const SEARCH_ENGINE_BY_KEYWORD_RECORD_NAME = 'Referers_searchEngineByKeyword'; + const KEYWORD_BY_CAMPAIGN_RECORD_NAME = 'Referers_keywordByCampaign'; + const URL_BY_WEBSITE_RECORD_NAME = 'Referers_urlByWebsite'; + const REFERER_TYPE_RECORD_NAME = 'Referers_type'; + + const METRIC_DISTINCT_SEARCH_ENGINE_RECORD_NAME = 'Referers_distinctSearchEngines'; + const METRIC_DISTINCT_KEYWORD_RECORD_NAME = 'Referers_distinctKeywords'; + const METRIC_DISTINCT_CAMPAIGN_RECORD_NAME = 'Referers_distinctCampaigns'; + const METRIC_DISTINCT_WEBSITE_RECORD_NAME = 'Referers_distinctWebsites'; + const METRIC_DISTINCT_URLS_RECORD_NAME = 'Referers_distinctWebsitesUrls'; + protected $columnToSortByBeforeTruncation; protected $maximumRowsInDataTableLevelZero; protected $maximumRowsInSubDataTable; @@ -258,17 +270,32 @@ class Piwik_Referers_Archiver extends Piwik_PluginsArchiver $this->recordDayBlobs(); } + protected function recordDayNumeric() + { + $numericRecords = array( + self::METRIC_DISTINCT_SEARCH_ENGINE_RECORD_NAME => count($this->metricsBySearchEngineAndKeyword), + self::METRIC_DISTINCT_KEYWORD_RECORD_NAME => count($this->metricsByKeywordAndSearchEngine), + self::METRIC_DISTINCT_CAMPAIGN_RECORD_NAME => count($this->metricsByCampaign), + self::METRIC_DISTINCT_WEBSITE_RECORD_NAME => count($this->metricsByWebsite), + self::METRIC_DISTINCT_URLS_RECORD_NAME => count($this->distinctUrls), + ); + + foreach ($numericRecords as $name => $value) { + $this->getProcessor()->insertNumericRecord($name, $value); + } + } + protected function recordDayBlobs() { $table = new Piwik_DataTable(); $table->addRowsFromArrayWithIndexLabel($this->metricsByType); - $this->getProcessor()->insertBlobRecord('Referers_type', $table->getSerialized()); + $this->getProcessor()->insertBlobRecord(self::REFERER_TYPE_RECORD_NAME, $table->getSerialized()); $blobRecords = array( - 'Referers_keywordBySearchEngine' => $this->getProcessor()->getDataTableWithSubtablesFromArraysIndexedByLabel($this->metricsBySearchEngineAndKeyword, $this->metricsBySearchEngine), - 'Referers_searchEngineByKeyword' => $this->getProcessor()->getDataTableWithSubtablesFromArraysIndexedByLabel($this->metricsByKeywordAndSearchEngine, $this->metricsByKeyword), - 'Referers_keywordByCampaign' => $this->getProcessor()->getDataTableWithSubtablesFromArraysIndexedByLabel($this->metricsByCampaignAndKeyword, $this->metricsByCampaign), - 'Referers_urlByWebsite' => $this->getProcessor()->getDataTableWithSubtablesFromArraysIndexedByLabel($this->metricsByWebsiteAndUrl, $this->metricsByWebsite), + self::KEYWORDS_BY_SEARCH_ENGINE_RECORD_NAME => $this->getProcessor()->getDataTableWithSubtablesFromArraysIndexedByLabel($this->metricsBySearchEngineAndKeyword, $this->metricsBySearchEngine), + self::SEARCH_ENGINE_BY_KEYWORD_RECORD_NAME => $this->getProcessor()->getDataTableWithSubtablesFromArraysIndexedByLabel($this->metricsByKeywordAndSearchEngine, $this->metricsByKeyword), + self::KEYWORD_BY_CAMPAIGN_RECORD_NAME => $this->getProcessor()->getDataTableWithSubtablesFromArraysIndexedByLabel($this->metricsByCampaignAndKeyword, $this->metricsByCampaign), + self::URL_BY_WEBSITE_RECORD_NAME => $this->getProcessor()->getDataTableWithSubtablesFromArraysIndexedByLabel($this->metricsByWebsiteAndUrl, $this->metricsByWebsite), ); foreach ($blobRecords as $recordName => $table) { $blob = $table->getSerialized($this->maximumRowsInDataTableLevelZero, $this->maximumRowsInSubDataTable, $this->columnToSortByBeforeTruncation); @@ -276,52 +303,37 @@ class Piwik_Referers_Archiver extends Piwik_PluginsArchiver } } - protected function recordDayNumeric() - { - $numericRecords = array( - 'Referers_distinctSearchEngines' => count($this->metricsBySearchEngineAndKeyword), - 'Referers_distinctKeywords' => count($this->metricsByKeywordAndSearchEngine), - 'Referers_distinctCampaigns' => count($this->metricsByCampaign), - 'Referers_distinctWebsites' => count($this->metricsByWebsite), - 'Referers_distinctWebsitesUrls' => count($this->distinctUrls), - ); - - foreach ($numericRecords as $name => $value) { - $this->getProcessor()->insertNumericRecord($name, $value); - } - } - public function archivePeriod() { $dataTableToSum = array( - 'Referers_type', - 'Referers_keywordBySearchEngine', - 'Referers_searchEngineByKeyword', - 'Referers_keywordByCampaign', - 'Referers_urlByWebsite', + self::REFERER_TYPE_RECORD_NAME, + self::KEYWORDS_BY_SEARCH_ENGINE_RECORD_NAME, + self::SEARCH_ENGINE_BY_KEYWORD_RECORD_NAME, + self::KEYWORD_BY_CAMPAIGN_RECORD_NAME, + self::URL_BY_WEBSITE_RECORD_NAME, ); $nameToCount = $this->getProcessor()->archiveDataTable($dataTableToSum, null, $this->maximumRowsInDataTableLevelZero, $this->maximumRowsInSubDataTable, $this->columnToSortByBeforeTruncation); $mappingFromArchiveName = array( - 'Referers_distinctSearchEngines' => + self::METRIC_DISTINCT_SEARCH_ENGINE_RECORD_NAME => array('typeCountToUse' => 'level0', - 'nameTableToUse' => 'Referers_keywordBySearchEngine', + 'nameTableToUse' => self::KEYWORDS_BY_SEARCH_ENGINE_RECORD_NAME, ), - 'Referers_distinctKeywords' => + self::METRIC_DISTINCT_KEYWORD_RECORD_NAME => array('typeCountToUse' => 'level0', - 'nameTableToUse' => 'Referers_searchEngineByKeyword', + 'nameTableToUse' => self::SEARCH_ENGINE_BY_KEYWORD_RECORD_NAME, ), - 'Referers_distinctCampaigns' => + self::METRIC_DISTINCT_CAMPAIGN_RECORD_NAME => array('typeCountToUse' => 'level0', - 'nameTableToUse' => 'Referers_keywordByCampaign', + 'nameTableToUse' => self::KEYWORD_BY_CAMPAIGN_RECORD_NAME, ), - 'Referers_distinctWebsites' => + self::METRIC_DISTINCT_WEBSITE_RECORD_NAME => array('typeCountToUse' => 'level0', - 'nameTableToUse' => 'Referers_urlByWebsite', + 'nameTableToUse' => self::URL_BY_WEBSITE_RECORD_NAME, ), - 'Referers_distinctWebsitesUrls' => + self::METRIC_DISTINCT_URLS_RECORD_NAME => array('typeCountToUse' => 'recursive', - 'nameTableToUse' => 'Referers_urlByWebsite', + 'nameTableToUse' => self::URL_BY_WEBSITE_RECORD_NAME, ), ); diff --git a/plugins/UserCountry/API.php b/plugins/UserCountry/API.php index ec8c8c12754e136b7041632563bb7a1ca52c2f71..15f5f69ecf38c9c60fb3a2f4967022688da9c122 100644 --- a/plugins/UserCountry/API.php +++ b/plugins/UserCountry/API.php @@ -32,11 +32,9 @@ class Piwik_UserCountry_API public function getCountry($idSite, $period, $date, $segment = false) { - $recordName = Piwik_UserCountry_Archiver::VISITS_BY_COUNTRY_RECORD_NAME; - $dataTable = $this->getDataTable($recordName, $idSite, $period, $date, $segment); + $dataTable = $this->getDataTable(Piwik_UserCountry_Archiver::VISITS_BY_COUNTRY_RECORD_NAME, $idSite, $period, $date, $segment); - // apply filter on the whole datatable in order the inline search to work (searches - // are done on "beautiful" label) + // apply filter on the whole datatable in order the inline search to work (searches are done on "beautiful" label) $dataTable->filter('ColumnCallbackAddMetadata', array('label', 'code')); $dataTable->filter('ColumnCallbackAddMetadata', array('label', 'logo', 'Piwik_getFlagFromCode')); $dataTable->filter('ColumnCallbackReplace', array('label', 'Piwik_CountryTranslate')); @@ -48,8 +46,7 @@ class Piwik_UserCountry_API public function getContinent($idSite, $period, $date, $segment = false) { - $recordName = Piwik_UserCountry_Archiver::VISITS_BY_COUNTRY_RECORD_NAME; - $dataTable = $this->getDataTable($recordName, $idSite, $period, $date, $segment); + $dataTable = $this->getDataTable(Piwik_UserCountry_Archiver::VISITS_BY_COUNTRY_RECORD_NAME, $idSite, $period, $date, $segment); $getContinent = array('Piwik_Common', 'getContinent'); $dataTable->filter('GroupBy', array('label', $getContinent)); @@ -71,8 +68,7 @@ class Piwik_UserCountry_API */ public function getRegion($idSite, $period, $date, $segment = false) { - $recordName = Piwik_UserCountry_Archiver::VISITS_BY_REGION_RECORD_NAME; - $dataTable = $this->getDataTable($recordName, $idSite, $period, $date, $segment); + $dataTable = $this->getDataTable(Piwik_UserCountry_Archiver::VISITS_BY_REGION_RECORD_NAME, $idSite, $period, $date, $segment); $separator = Piwik_UserCountry_Archiver::LOCATION_SEPARATOR; $unk = Piwik_Tracker_Visit::UNKNOWN_CODE; @@ -114,8 +110,7 @@ class Piwik_UserCountry_API */ public function getCity($idSite, $period, $date, $segment = false) { - $recordName = Piwik_UserCountry_Archiver::VISITS_BY_CITY_RECORD_NAME; - $dataTable = $this->getDataTable($recordName, $idSite, $period, $date, $segment); + $dataTable = $this->getDataTable(Piwik_UserCountry_Archiver::VISITS_BY_CITY_RECORD_NAME, $idSite, $period, $date, $segment); $separator = Piwik_UserCountry_Archiver::LOCATION_SEPARATOR; $unk = Piwik_Tracker_Visit::UNKNOWN_CODE; @@ -204,6 +199,6 @@ class Piwik_UserCountry_API { Piwik::checkUserHasViewAccess($idSite); $archive = Piwik_Archive::build($idSite, $period, $date, $segment); - return $archive->getDataTableFromNumeric('UserCountry_distinctCountries'); + return $archive->getDataTableFromNumeric(Piwik_UserCountry_Archiver::DISTINCT_COUNTRIES_METRIC); } } diff --git a/plugins/UserCountry/Archiver.php b/plugins/UserCountry/Archiver.php index 99bd1e40a185d8217fc8ea6d5bf548e21d3ba0f6..ecd124d67f7d42c2ef77c03105774146af1c1a52 100644 --- a/plugins/UserCountry/Archiver.php +++ b/plugins/UserCountry/Archiver.php @@ -150,7 +150,6 @@ class Piwik_UserCountry_Archiver extends Piwik_PluginsArchiver $tableCountry = Piwik_ArchiveProcessing_Day::getDataTableFromArray($this->metricsByDimension['location_country']); $this->getProcessor()->insertBlobRecord(self::VISITS_BY_COUNTRY_RECORD_NAME, $tableCountry->getSerialized()); $this->getProcessor()->insertNumericRecord(self::DISTINCT_COUNTRIES_METRIC, $tableCountry->getRowsCount()); - destroy($tableCountry); $tableRegion = Piwik_ArchiveProcessing_Day::getDataTableFromArray($this->metricsByDimension['location_region']); $serialized = $tableRegion->getSerialized($this->maximumRows, $this->maximumRows, Piwik_Archive::INDEX_NB_VISITS); diff --git a/plugins/UserSettings/API.php b/plugins/UserSettings/API.php index dd3820fff729412498f6162f636912887188bbf5..4369d397b903b44a6405cfdab71819fea701e88c 100644 --- a/plugins/UserSettings/API.php +++ b/plugins/UserSettings/API.php @@ -45,20 +45,20 @@ class Piwik_UserSettings_API public function getResolution($idSite, $period, $date, $segment = false) { - $dataTable = $this->getDataTable('UserSettings_resolution', $idSite, $period, $date, $segment); + $dataTable = $this->getDataTable(Piwik_UserSettings_Archiver::RESOLUTION_RECORD_NAME, $idSite, $period, $date, $segment); return $dataTable; } public function getConfiguration($idSite, $period, $date, $segment = false) { - $dataTable = $this->getDataTable('UserSettings_configuration', $idSite, $period, $date, $segment); + $dataTable = $this->getDataTable(Piwik_UserSettings_Archiver::CONFIGURATION_RECORD_NAME, $idSite, $period, $date, $segment); $dataTable->queueFilter('ColumnCallbackReplace', array('label', 'Piwik_getConfigurationLabel')); return $dataTable; } public function getOS($idSite, $period, $date, $segment = false, $addShortLabel = true) { - $dataTable = $this->getDataTable('UserSettings_os', $idSite, $period, $date, $segment); + $dataTable = $this->getDataTable(Piwik_UserSettings_Archiver::OS_RECORD_NAME, $idSite, $period, $date, $segment); // these filters are applied directly so other API methods can use GroupBy on the result of this method $dataTable->filter('ColumnCallbackAddMetadata', array('label', 'logo', 'Piwik_getOSLogo')); if ($addShortLabel) { @@ -88,18 +88,29 @@ class Piwik_UserSettings_API { $dataTable = $this->getOS($idSite, $period, $date, $segment, $addShortLabel = false); $dataTable->filter('GroupBy', array('label', 'Piwik_UserSettings_getDeviceTypeFromOS')); + $this->ensureDefaultRowsInTable($dataTable); - // make sure the datatable has a row for mobile & desktop (if it has rows) - $dataTables = array($dataTable); - if ($dataTable instanceof Piwik_DataTable_Array) { - $dataTables = $dataTable->getArray(); - } + // set the logo metadata + $dataTable->queueFilter('MetadataCallbackReplace', + array('logo', 'Piwik_UserSettings_getDeviceTypeImg', null, array('label'))); + + // translate the labels + $dataTable->queueFilter('ColumnCallbackReplace', array('label', 'Piwik_Translate')); + return $dataTable; + } + + protected function ensureDefaultRowsInTable($dataTable) + { $requiredRows = array( 'General_Desktop' => Piwik_Archive::INDEX_NB_VISITS, 'General_Mobile' => Piwik_Archive::INDEX_NB_VISITS ); + $dataTables = array($dataTable); + if ($dataTable instanceof Piwik_DataTable_Array) { + $dataTables = $dataTable->getArray(); + } foreach ($dataTables AS $table) { if ($table->getRowsCount() == 0) { continue; @@ -113,22 +124,19 @@ class Piwik_UserSettings_API } } } + } - // set the logo metadata - $dataTable->queueFilter('MetadataCallbackReplace', - array('logo', 'Piwik_UserSettings_getDeviceTypeImg', null, array('label'))); - - // translate the labels - $dataTable->queueFilter('ColumnCallbackReplace', array('label', 'Piwik_Translate')); - + public function getBrowserVersion($idSite, $period, $date, $segment = false) + { + $dataTable = $this->getBrowserTable($idSite, $period, $date, $segment); + $dataTable->filter('ColumnCallbackAddMetadata', array('label', 'shortLabel', 'Piwik_getBrowserShortLabel')); return $dataTable; } - public function getBrowserVersion($idSite, $period, $date, $segment = false) + protected function getBrowserTable($idSite, $period, $date, $segment) { - $dataTable = $this->getDataTable('UserSettings_browser', $idSite, $period, $date, $segment); + $dataTable = $this->getDataTable(Piwik_UserSettings_Archiver::BROWSER_RECORD_NAME, $idSite, $period, $date, $segment); $dataTable->filter('ColumnCallbackAddMetadata', array('label', 'logo', 'Piwik_getBrowsersLogo')); - $dataTable->filter('ColumnCallbackAddMetadata', array('label', 'shortLabel', 'Piwik_getBrowserShortLabel')); $dataTable->filter('ColumnCallbackReplace', array('label', 'Piwik_getBrowserLabel')); return $dataTable; } @@ -139,19 +147,14 @@ class Piwik_UserSettings_API */ public function getBrowser($idSite, $period, $date, $segment = false) { - $dataTable = $this->getDataTable('UserSettings_browser', $idSite, $period, $date, $segment); - $dataTable->filter('ColumnCallbackAddMetadata', array('label', 'logo', 'Piwik_getBrowsersLogo')); - $dataTable->filter('ColumnCallbackReplace', array('label', 'Piwik_getBrowserLabel')); - - $getBrowserFromBrowserVersion = 'Piwik_UserSettings_getBrowserFromBrowserVersion'; - $dataTable->filter('GroupBy', array('label', $getBrowserFromBrowserVersion)); - + $dataTable = $this->getBrowserTable($idSite, $period, $date, $segment); + $dataTable->filter('GroupBy', array('label', 'Piwik_UserSettings_getBrowserFromBrowserVersion')); return $dataTable; } public function getBrowserType($idSite, $period, $date, $segment = false) { - $dataTable = $this->getDataTable('UserSettings_browserType', $idSite, $period, $date, $segment); + $dataTable = $this->getDataTable(Piwik_UserSettings_Archiver::BROWSER_TYPE_RECORD_NAME, $idSite, $period, $date, $segment); $dataTable->queueFilter('ColumnCallbackAddMetadata', array('label', 'shortLabel', 'ucfirst')); $dataTable->queueFilter('ColumnCallbackReplace', array('label', 'Piwik_getBrowserTypeLabel')); return $dataTable; @@ -159,7 +162,7 @@ class Piwik_UserSettings_API public function getWideScreen($idSite, $period, $date, $segment = false) { - $dataTable = $this->getDataTable('UserSettings_wideScreen', $idSite, $period, $date, $segment); + $dataTable = $this->getDataTable(Piwik_UserSettings_Archiver::SCREEN_TYPE_RECORD_NAME, $idSite, $period, $date, $segment); $dataTable->queueFilter('ColumnCallbackAddMetadata', array('label', 'logo', 'Piwik_getScreensLogo')); $dataTable->queueFilter('ColumnCallbackReplace', array('label', 'ucfirst')); return $dataTable; @@ -168,8 +171,8 @@ class Piwik_UserSettings_API public function getPlugin($idSite, $period, $date, $segment = false) { // fetch all archive data required - $dataTable = $this->getDataTable('UserSettings_plugin', $idSite, $period, $date, $segment); - $browserTypes = $this->getDataTable('UserSettings_browserType', $idSite, $period, $date, $segment); + $dataTable = $this->getDataTable(Piwik_UserSettings_Archiver::PLUGIN_RECORD_NAME, $idSite, $period, $date, $segment); + $browserTypes = $this->getDataTable(Piwik_UserSettings_Archiver::BROWSER_TYPE_RECORD_NAME, $idSite, $period, $date, $segment); $archive = Piwik_Archive::build($idSite, $period, $date, $segment); $visitsSums = $archive->getDataTableFromNumeric('nb_visits'); @@ -238,7 +241,7 @@ class Piwik_UserSettings_API public function getLanguage($idSite, $period, $date, $segment = false) { - $dataTable = $this->getDataTable('UserSettings_language', $idSite, $period, $date, $segment); + $dataTable = $this->getDataTable(Piwik_UserSettings_Archiver::LANGUAGE_RECORD_NAME, $idSite, $period, $date, $segment); $dataTable->filter('ColumnCallbackReplace', array('label', 'Piwik_LanguageTranslate')); $dataTable->filter('ReplaceColumnNames'); return $dataTable; diff --git a/plugins/UserSettings/Archiver.php b/plugins/UserSettings/Archiver.php index fa8721c6e7caf3eb6098dd48c2ed3dd940084178..0e545350b7d3f593b62718221b5008f205ed4451 100644 --- a/plugins/UserSettings/Archiver.php +++ b/plugins/UserSettings/Archiver.php @@ -15,7 +15,7 @@ class Piwik_UserSettings_Archiver extends Piwik_PluginsArchiver { const LANGUAGE_RECORD_NAME = 'UserSettings_language'; const PLUGIN_RECORD_NAME = 'UserSettings_plugin'; - const SCREEN_TYPES_RECORD_NAME = 'UserSettings_wideScreen'; + const SCREEN_TYPE_RECORD_NAME = 'UserSettings_wideScreen'; const RESOLUTION_RECORD_NAME = 'UserSettings_resolution'; const BROWSER_RECORD_NAME = 'UserSettings_browser'; const BROWSER_TYPE_RECORD_NAME = 'UserSettings_browserType'; @@ -94,7 +94,7 @@ class Piwik_UserSettings_Archiver extends Piwik_PluginsArchiver protected function aggregateByScreenType(Piwik_DataTable $resolutions) { $resolutions->filter('GroupBy', array('label', 'Piwik_getScreenTypeFromResolution')); - $this->getProcessor()->insertBlobRecord(self::SCREEN_TYPES_RECORD_NAME, $resolutions->getSerialized()); + $this->getProcessor()->insertBlobRecord(self::SCREEN_TYPE_RECORD_NAME, $resolutions->getSerialized()); } protected function aggregateByPlugin() @@ -142,10 +142,11 @@ class Piwik_UserSettings_Archiver extends Piwik_PluginsArchiver self::BROWSER_RECORD_NAME, self::BROWSER_TYPE_RECORD_NAME, self::RESOLUTION_RECORD_NAME, - self::SCREEN_TYPES_RECORD_NAME, + self::SCREEN_TYPE_RECORD_NAME, self::PLUGIN_RECORD_NAME, self::LANGUAGE_RECORD_NAME, ); $this->getProcessor()->archiveDataTable($dataTableToSum, null, $this->maximumRowsInDataTable); } -} \ No newline at end of file +} + diff --git a/plugins/VisitTime/API.php b/plugins/VisitTime/API.php index 973a8d3dd850b02ccf88f8199211345a1e861583..50d7f61491523e737128e1ea81eb130fd1fd0abc 100644 --- a/plugins/VisitTime/API.php +++ b/plugins/VisitTime/API.php @@ -39,12 +39,12 @@ class Piwik_VisitTime_API public function getVisitInformationPerLocalTime($idSite, $period, $date, $segment = false) { - return $this->getDataTable('VisitTime_localTime', $idSite, $period, $date, $segment); + return $this->getDataTable(Piwik_VisitTime_Archiver::LOCAL_TIME_RECORD_NAME, $idSite, $period, $date, $segment); } public function getVisitInformationPerServerTime($idSite, $period, $date, $segment = false, $hideFutureHoursWhenToday = false) { - $table = $this->getDataTable('VisitTime_serverTime', $idSite, $period, $date, $segment); + $table = $this->getDataTable(Piwik_VisitTime_Archiver::SERVER_TIME_RECORD_NAME, $idSite, $period, $date, $segment); if ($hideFutureHoursWhenToday) { $table = $this->removeHoursInFuture($table, $idSite, $period, $date); } diff --git a/plugins/VisitTime/Archiver.php b/plugins/VisitTime/Archiver.php index 52d3bdbc7f881fd4bfdb9f3a292e5d5d0d0c7c91..6aafc3dcbcc5d3395ad65edf70d8821aaaa41e73 100644 --- a/plugins/VisitTime/Archiver.php +++ b/plugins/VisitTime/Archiver.php @@ -11,6 +11,9 @@ class Piwik_VisitTime_Archiver extends Piwik_PluginsArchiver { + const SERVER_TIME_RECORD_NAME = 'VisitTime_serverTime'; + const LOCAL_TIME_RECORD_NAME = 'VisitTime_localTime'; + public function archiveDay() { $this->aggregateByLocalTime(); @@ -35,7 +38,7 @@ class Piwik_VisitTime_Archiver extends Piwik_PluginsArchiver $metricsByServerTime = $this->convertServerTimeToLocalTimezone($metricsByServerTime); $tableServerTime = $this->getProcessor()->getDataTableFromArray($metricsByServerTime); $this->makeSureAllHoursAreSet($tableServerTime); - $this->getProcessor()->insertBlobRecord('VisitTime_serverTime', $tableServerTime->getSerialized()); + $this->getProcessor()->insertBlobRecord(self::SERVER_TIME_RECORD_NAME, $tableServerTime->getSerialized()); } protected function aggregateByLocalTime() @@ -43,7 +46,7 @@ class Piwik_VisitTime_Archiver extends Piwik_PluginsArchiver $metricsByLocalTime = $this->getProcessor()->getMetricsForLabel("HOUR(log_visit.visitor_localtime)"); $tableLocalTime = $this->getProcessor()->getDataTableFromArray($metricsByLocalTime); $this->makeSureAllHoursAreSet($tableLocalTime); - $this->getProcessor()->insertBlobRecord('VisitTime_localTime', $tableLocalTime->getSerialized()); + $this->getProcessor()->insertBlobRecord(self::LOCAL_TIME_RECORD_NAME, $tableLocalTime->getSerialized()); } protected function convertServerTimeToLocalTimezone($metricsByServerTime) @@ -73,8 +76,8 @@ class Piwik_VisitTime_Archiver extends Piwik_PluginsArchiver public function archivePeriod() { $dataTableToSum = array( - 'VisitTime_localTime', - 'VisitTime_serverTime', + self::LOCAL_TIME_RECORD_NAME, + self::SERVER_TIME_RECORD_NAME, ); $this->getProcessor()->archiveDataTable($dataTableToSum); } diff --git a/plugins/VisitorInterest/API.php b/plugins/VisitorInterest/API.php index 7adfd7ca4e332a8062d7505f178aba8860a3e348..d3fcd13382ce7770c31b41f0e2b70be4dc55dd01 100644 --- a/plugins/VisitorInterest/API.php +++ b/plugins/VisitorInterest/API.php @@ -38,7 +38,7 @@ class Piwik_VisitorInterest_API public function getNumberOfVisitsPerVisitDuration($idSite, $period, $date, $segment = false) { - $dataTable = $this->getDataTable('VisitorInterest_timeGap', $idSite, $period, $date, $segment); + $dataTable = $this->getDataTable(Piwik_VisitorInterest_Archiver::TIME_SPENT_RECORD_NAME, $idSite, $period, $date, $segment); $dataTable->queueFilter('Sort', array('label', 'asc', true)); $dataTable->queueFilter('BeautifyTimeRangeLabels', array( Piwik_Translate('VisitorInterest_BetweenXYSeconds'), @@ -49,7 +49,7 @@ class Piwik_VisitorInterest_API public function getNumberOfVisitsPerPage($idSite, $period, $date, $segment = false) { - $dataTable = $this->getDataTable('VisitorInterest_pageGap', $idSite, $period, $date, $segment); + $dataTable = $this->getDataTable(Piwik_VisitorInterest_Archiver::PAGES_VIEWED_RECORD_NAME, $idSite, $period, $date, $segment); $dataTable->queueFilter('Sort', array('label', 'asc', true)); $dataTable->queueFilter('BeautifyRangeLabels', array( Piwik_Translate('VisitorInterest_OnePage'), @@ -69,9 +69,8 @@ class Piwik_VisitorInterest_API */ public function getNumberOfVisitsByDaysSinceLast($idSite, $period, $date, $segment = false) { - $recordName = 'VisitorInterest_daysSinceLastVisit'; $dataTable = $this->getDataTable( - $recordName, $idSite, $period, $date, $segment, Piwik_Archive::INDEX_NB_VISITS); + Piwik_VisitorInterest_Archiver::DAYS_SINCE_LAST_RECORD_NAME, $idSite, $period, $date, $segment, Piwik_Archive::INDEX_NB_VISITS); $dataTable->queueFilter('BeautifyRangeLabels', array( Piwik_Translate('General_OneDay'), Piwik_Translate('General_NDays'))); @@ -92,7 +91,7 @@ class Piwik_VisitorInterest_API public function getNumberOfVisitsByVisitCount($idSite, $period, $date, $segment = false) { $dataTable = $this->getDataTable( - 'VisitorInterest_visitsByVisitCount', $idSite, $period, $date, $segment, Piwik_Archive::INDEX_NB_VISITS); + Piwik_VisitorInterest_Archiver::VISITS_COUNT_RECORD_NAME, $idSite, $period, $date, $segment, Piwik_Archive::INDEX_NB_VISITS); $dataTable->queueFilter('BeautifyRangeLabels', array( Piwik_Translate('General_OneVisit'), Piwik_Translate('General_NVisits'))); diff --git a/plugins/VisitorInterest/Archiver.php b/plugins/VisitorInterest/Archiver.php index 59e7e348c14785348de147743334ea072cd5eaf8..fc797e44f3581d87c39ee1caa0fbcccf4efbedff 100644 --- a/plugins/VisitorInterest/Archiver.php +++ b/plugins/VisitorInterest/Archiver.php @@ -14,8 +14,9 @@ class Piwik_VisitorInterest_Archiver extends Piwik_PluginsArchiver // third element is unit (s for seconds, default is munutes) const TIME_SPENT_RECORD_NAME = 'VisitorInterest_timeGap'; const PAGES_VIEWED_RECORD_NAME = 'VisitorInterest_pageGap'; - const BY_VISIT_COUNT_RECORD_NAME = 'VisitorInterest_visitsByVisitCount'; + const VISITS_COUNT_RECORD_NAME = 'VisitorInterest_visitsByVisitCount'; const DAYS_SINCE_LAST_RECORD_NAME = 'VisitorInterest_daysSinceLastVisit'; + protected static $timeGap = array( array(0, 10, 's'), array(11, 30, 's'), @@ -83,29 +84,44 @@ class Piwik_VisitorInterest_Archiver extends Piwik_PluginsArchiver { // these prefixes are prepended to the 'SELECT as' parts of each SELECT expression. detecting // these prefixes allows us to get all the data in one query. - $timeGapPrefix = 'tg'; - $pageGapPrefix = 'pg'; - $visitsByVisitNumPrefix = 'vbvn'; - $daysSinceLastVisitPrefix = 'dslv'; + $prefixes = array( + self::TIME_SPENT_RECORD_NAME => 'tg', + self::PAGES_VIEWED_RECORD_NAME => 'pg', + self::VISITS_COUNT_RECORD_NAME => 'vbvn', + self::DAYS_SINCE_LAST_RECORD_NAME => 'dslv', + ); + $row = $this->aggregateFromVisits($prefixes); + + foreach($prefixes as $recordName => $selectAsPrefix) { + $processor = $this->getProcessor(); + $dataTable = $processor->getSimpleDataTableFromRow($row, Piwik_Archive::INDEX_NB_VISITS, $selectAsPrefix); + $processor->insertBlobRecord($recordName, $dataTable->getSerialized()); + } + } + protected function aggregateFromVisits($prefixes) + { // extra condition for the SQL SELECT that makes sure only returning visits are counted // when creating the 'days since last visit' report. the SELECT expression below it // is used to count all new visits. $daysSinceLastExtraCondition = 'and log_visit.visitor_returning = 1'; - $selectAs = $daysSinceLastVisitPrefix . 'General_NewVisits'; + $selectAs = $prefixes[self::DAYS_SINCE_LAST_RECORD_NAME] . 'General_NewVisits'; $newVisitCountSelect = "sum(case when log_visit.visitor_returning = 0 then 1 else 0 end) as `$selectAs`"; // create the select expressions to use $timeGapSelects = Piwik_ArchiveProcessing_Day::buildReduceByRangeSelect( - 'visit_total_time', self::getSecondsGap(), 'log_visit', $timeGapPrefix); + 'visit_total_time', self::getSecondsGap(), 'log_visit', $prefixes[self::TIME_SPENT_RECORD_NAME]); + $pageGapSelects = Piwik_ArchiveProcessing_Day::buildReduceByRangeSelect( - 'visit_total_actions', self::$pageGap, 'log_visit', $pageGapPrefix); + 'visit_total_actions', self::$pageGap, 'log_visit', $prefixes[self::PAGES_VIEWED_RECORD_NAME]); + $visitsByVisitNumSelects = Piwik_ArchiveProcessing_Day::buildReduceByRangeSelect( - 'visitor_count_visits', self::$visitNumberGap, 'log_visit', $visitsByVisitNumPrefix); + 'visitor_count_visits', self::$visitNumberGap, 'log_visit', $prefixes[self::VISITS_COUNT_RECORD_NAME]); $daysSinceLastVisitSelects = Piwik_ArchiveProcessing_Day::buildReduceByRangeSelect( - 'visitor_days_since_last', self::$daysSinceLastVisitGap, 'log_visit', $daysSinceLastVisitPrefix, + 'visitor_days_since_last', self::$daysSinceLastVisitGap, 'log_visit', $prefixes[self::DAYS_SINCE_LAST_RECORD_NAME], $daysSinceLastExtraCondition); + array_unshift($daysSinceLastVisitSelects, $newVisitCountSelect); $selects = array_merge( @@ -113,19 +129,7 @@ class Piwik_VisitorInterest_Archiver extends Piwik_PluginsArchiver // select data for every report $row = $this->getProcessor()->queryVisitsSimple(implode(',', $selects)); - - $prefixes = array( - self::TIME_SPENT_RECORD_NAME => $timeGapPrefix, - self::PAGES_VIEWED_RECORD_NAME => $pageGapPrefix, - self::BY_VISIT_COUNT_RECORD_NAME => $visitsByVisitNumPrefix, - self::DAYS_SINCE_LAST_RECORD_NAME => $daysSinceLastVisitPrefix, - ); - - foreach($prefixes as $recordName => $selectAsPrefix) { - $processor = $this->getProcessor(); - $dataTable = $processor->getSimpleDataTableFromRow($row, Piwik_Archive::INDEX_NB_VISITS, $selectAsPrefix); - $processor->insertBlobRecord($recordName, $dataTable->getSerialized()); - } + return $row; } /** @@ -153,7 +157,7 @@ class Piwik_VisitorInterest_Archiver extends Piwik_PluginsArchiver $dataTableToSum = array( self::TIME_SPENT_RECORD_NAME, self::PAGES_VIEWED_RECORD_NAME, - self::BY_VISIT_COUNT_RECORD_NAME, + self::VISITS_COUNT_RECORD_NAME, self::DAYS_SINCE_LAST_RECORD_NAME ); $this->getProcessor()->archiveDataTable($dataTableToSum); diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__VisitsSummary.getColumns_day.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__VisitsSummary.getColumns_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..6f5b9fe0780d74e7c40843ea68ef32766bddf6df --- /dev/null +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__VisitsSummary.getColumns_day.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result> + <row>nb_uniq_visitors</row> + <row>nb_visits</row> + <row>nb_actions</row> + <row>nb_visits_converted</row> + <row>bounce_count</row> + <row>sum_visit_length</row> + <row>max_actions</row> + <row>bounce_rate</row> + <row>nb_actions_per_visit</row> + <row>avg_time_on_site</row> +</result> \ No newline at end of file