diff --git a/core/ArchiveProcessing/Day.php b/core/ArchiveProcessing/Day.php index f2e72a9e40631e9b49d1e1fd7f56df900fa924d2..2e6aaad3054498f039d7df167105b7bd618e5755 100644 --- a/core/ArchiveProcessing/Day.php +++ b/core/ArchiveProcessing/Day.php @@ -157,8 +157,7 @@ class Piwik_ArchiveProcessing_Day extends Piwik_ArchiveProcessing * ie (AND, OR, etc.). * @return array An array of SQL SELECT expressions. */ - public static function buildReduceByRangeSelect( - $column, $ranges, $table, $selectColumnPrefix = '', $extraCondition = false) + public static function buildReduceByRangeSelect( $column, $ranges, $table, $selectColumnPrefix = '', $extraCondition = false) { $selects = array(); @@ -662,67 +661,6 @@ class Piwik_ArchiveProcessing_Day extends Piwik_ArchiveProcessing return $metrics; } - /** - * Generates a dataTable given a multidimensional PHP array that associates LABELS to Piwik_DataTableRows - * This is used for the "Actions" DataTable, where a line is the aggregate of all the subtables - * Example: the category /blog has 3 visits because it has /blog/index (2 visits) + /blog/about (1 visit) - * - * @param array $table - * @param array $parents - * @return Piwik_DataTable - */ - static public function generateDataTable($table, $parents = array()) - { - $dataTableToReturn = new Piwik_DataTable(); - foreach ($table as $label => $maybeDatatableRow) { - // case the aInfo is a subtable-like array - // it means that we have to go recursively and process it - // then we build the row that is an aggregate of all the children - // and we associate this row to the subtable - if (!($maybeDatatableRow instanceof Piwik_DataTable_Row)) { - array_push($parents, array($dataTableToReturn->getId(), $label)); - - $subTable = self::generateDataTable($maybeDatatableRow, $parents); - $subTable->setParents($parents); - $row = new Piwik_DataTable_Row_DataTableSummary($subTable); - $row->setColumns(array('label' => $label) + $row->getColumns()); - $row->addSubtable($subTable); - - array_pop($parents); - } // if aInfo is a simple Row we build it - else { - $row = $maybeDatatableRow; - } - - if ($row->getMetadata('issummaryrow') == true) { - $row->deleteMetadata('issummaryrow'); - $dataTableToReturn->addSummaryRow($row); - } else { - $dataTableToReturn->addRow($row); - } - } - return $dataTableToReturn; - } - - /** - * Helper function that returns the serialized DataTable of the given PHP array. - * The array must have the format of Piwik_DataTable::addRowsFromArrayWithIndexLabel() - * Example: array ( - * LABEL => array(col1 => X, col2 => Y), - * LABEL2 => array(col1 => X, col2 => Y), - * ) - * - * @param array $array at the given format - * @return array Array with one element: the serialized data table string - */ - public function getDataTableSerialized($array) - { - $table = new Piwik_DataTable(); - $table->addRowsFromArrayWithIndexLabel($array); - $toReturn = $table->getSerialized(); - return $toReturn; - } - /** * Helper function that returns the multiple serialized DataTable of the given PHP array. @@ -920,7 +858,7 @@ class Piwik_ArchiveProcessing_Day extends Piwik_ArchiveProcessing * * @param array $metricsByLabel Passed by reference, will be modified */ - function enrichConversionsByLabelArray(&$metricsByLabel) + function enrichMetricsWithConversions(&$metricsByLabel) { foreach ($metricsByLabel as $label => &$values) { if (isset($values[Piwik_Archive::INDEX_GOALS])) { @@ -950,10 +888,10 @@ class Piwik_ArchiveProcessing_Day extends Piwik_ArchiveProcessing * * @param array $metricsByLabelAndSubLabel Passed by reference, will be modified */ - function enrichConversionsByLabelArrayHasTwoLevels(&$metricsByLabelAndSubLabel) + function enrichPivotMetricsWithConversions(&$metricsByLabelAndSubLabel) { foreach ($metricsByLabelAndSubLabel as $mainLabel => &$metricsBySubLabel) { - $this->enrichConversionsByLabelArray($metricsBySubLabel); + $this->enrichMetricsWithConversions($metricsBySubLabel); } } diff --git a/core/PluginsArchiver.php b/core/PluginsArchiver.php index ac8cc924b6b1af43fba158cf53908f2fbe5218a5..d29497f042bc317f0a41e4473b1a609e6f68da7a 100644 --- a/core/PluginsArchiver.php +++ b/core/PluginsArchiver.php @@ -26,6 +26,7 @@ abstract class Piwik_PluginsArchiver abstract public function archivePeriod(); + // TODO: Review this concept / each plugin should somehow maintain the list of report names they generate public function shouldArchive() { $pluginName = Piwik::unprefixClass(get_class($this)); diff --git a/plugins/CustomVariables/Archiver.php b/plugins/CustomVariables/Archiver.php index 2aab034424aa61f72038f9d4ffaa8b8302d089d5..896b5335bc5184e1336b96934d53548223fd6b24 100644 --- a/plugins/CustomVariables/Archiver.php +++ b/plugins/CustomVariables/Archiver.php @@ -33,8 +33,8 @@ class Piwik_CustomVariables_Archiver extends Piwik_PluginsArchiver } $this->removeVisitsMetricsFromActionsAggregate(); - $this->getProcessor()->enrichConversionsByLabelArray($this->metricsByKey); - $this->getProcessor()->enrichConversionsByLabelArrayHasTwoLevels($this->metricsByKeyAndValue); + $this->getProcessor()->enrichMetricsWithConversions($this->metricsByKey); + $this->getProcessor()->enrichPivotMetricsWithConversions($this->metricsByKeyAndValue); $table = $this->getProcessor()->getDataTableWithSubtablesFromArraysIndexedByLabel($this->metricsByKeyAndValue, $this->metricsByKey); $blob = $table->getSerialized( diff --git a/plugins/Referers/Archiver.php b/plugins/Referers/Archiver.php index 9da599887167597950493dfbcce47dac9c9d6678..f540d1c2a22f9031dcd88a0dc7f6aebaad787a2e 100644 --- a/plugins/Referers/Archiver.php +++ b/plugins/Referers/Archiver.php @@ -164,12 +164,12 @@ class Piwik_Referers_Archiver extends Piwik_PluginsArchiver } } - $this->getProcessor()->enrichConversionsByLabelArray($this->metricsByType); - $this->getProcessor()->enrichConversionsByLabelArray($this->metricsBySearchEngine); - $this->getProcessor()->enrichConversionsByLabelArray($this->metricsByKeyword); - $this->getProcessor()->enrichConversionsByLabelArray($this->metricsByWebsite); - $this->getProcessor()->enrichConversionsByLabelArray($this->metricsByCampaign); - $this->getProcessor()->enrichConversionsByLabelArrayHasTwoLevels($this->metricsByCampaignAndKeyword); + $this->getProcessor()->enrichMetricsWithConversions($this->metricsByType); + $this->getProcessor()->enrichMetricsWithConversions($this->metricsBySearchEngine); + $this->getProcessor()->enrichMetricsWithConversions($this->metricsByKeyword); + $this->getProcessor()->enrichMetricsWithConversions($this->metricsByWebsite); + $this->getProcessor()->enrichMetricsWithConversions($this->metricsByCampaign); + $this->getProcessor()->enrichPivotMetricsWithConversions($this->metricsByCampaignAndKeyword); } protected function aggregateConversion($row) @@ -254,21 +254,15 @@ class Piwik_Referers_Archiver extends Piwik_PluginsArchiver */ protected function recordDayReports() { - $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); - } + $this->recordDayNumeric(); + $this->recordDayBlobs(); + } - $dataTable = $this->getProcessor()->getDataTableSerialized($this->metricsByType); - $this->getProcessor()->insertBlobRecord('Referers_type', $dataTable); - destroy($dataTable); + protected function recordDayBlobs() + { + $table = new Piwik_DataTable(); + $table->addRowsFromArrayWithIndexLabel($this->metricsByType); + $this->getProcessor()->insertBlobRecord('Referers_type', $table->getSerialized()); $blobRecords = array( 'Referers_keywordBySearchEngine' => $this->getProcessor()->getDataTableWithSubtablesFromArraysIndexedByLabel($this->metricsBySearchEngineAndKeyword, $this->metricsBySearchEngine), @@ -279,7 +273,21 @@ class Piwik_Referers_Archiver extends Piwik_PluginsArchiver foreach ($blobRecords as $recordName => $table) { $blob = $table->getSerialized($this->maximumRowsInDataTableLevelZero, $this->maximumRowsInSubDataTable, $this->columnToSortByBeforeTruncation); $this->getProcessor()->insertBlobRecord($recordName, $blob); - destroy($table); + } + } + + 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); } } diff --git a/plugins/UserCountry/Archiver.php b/plugins/UserCountry/Archiver.php index 5f2a30310be9882223aa7e22736209a0f63a998b..bdd7c10f02a9d438e826eb6c50c856ff8349cb3b 100644 --- a/plugins/UserCountry/Archiver.php +++ b/plugins/UserCountry/Archiver.php @@ -139,7 +139,7 @@ class Piwik_UserCountry_Archiver extends Piwik_PluginsArchiver } foreach ($this->metricsByDimension as &$table) { - $this->getProcessor()->enrichConversionsByLabelArray($table); + $this->getProcessor()->enrichMetricsWithConversions($table); } } diff --git a/plugins/UserSettings/Archiver.php b/plugins/UserSettings/Archiver.php index d8039d9fd792b3f28f54d4525950c93dfccee173..fa8721c6e7caf3eb6098dd48c2ed3dd940084178 100644 --- a/plugins/UserSettings/Archiver.php +++ b/plugins/UserSettings/Archiver.php @@ -109,8 +109,11 @@ class Piwik_UserSettings_Archiver extends Piwik_PluginsArchiver sum(case log_visit.config_gears when 1 then 1 else 0 end) as gears, sum(case log_visit.config_silverlight when 1 then 1 else 0 end) as silverlight, sum(case log_visit.config_cookie when 1 then 1 else 0 end) as cookie "; - $table = $this->getProcessor()->getSimpleDataTableFromSelect($toSelect, Piwik_Archive::INDEX_NB_VISITS); - $this->getProcessor()->insertBlobRecord(self::PLUGIN_RECORD_NAME, $table->getSerialized()); + + $processor = $this->getProcessor(); + $data = $processor->queryVisitsSimple($toSelect); + $table = $processor->getSimpleDataTableFromRow($data, Piwik_Archive::INDEX_NB_VISITS); + $processor->insertBlobRecord(self::PLUGIN_RECORD_NAME, $table->getSerialized()); } protected function aggregateByLanguage() diff --git a/plugins/VisitTime/Archiver.php b/plugins/VisitTime/Archiver.php index 36b3c94aeb7da5aaad4564577f9f711aa4bc1f79..52d3bdbc7f881fd4bfdb9f3a292e5d5d0d0c7c91 100644 --- a/plugins/VisitTime/Archiver.php +++ b/plugins/VisitTime/Archiver.php @@ -30,7 +30,7 @@ class Piwik_VisitTime_Archiver extends Piwik_PluginsArchiver } $this->getProcessor()->sumGoalMetrics($row, $metricsByServerTime[$row['label']][Piwik_Archive::INDEX_GOALS][$row['idgoal']]); } - $this->getProcessor()->enrichConversionsByLabelArray($metricsByServerTime); + $this->getProcessor()->enrichMetricsWithConversions($metricsByServerTime); $metricsByServerTime = $this->convertServerTimeToLocalTimezone($metricsByServerTime); $tableServerTime = $this->getProcessor()->getDataTableFromArray($metricsByServerTime); diff --git a/tests/PHPUnit/Core/ArchiveProcessing/DayTest.php b/tests/PHPUnit/Core/ArchiveProcessing/DayTest.php deleted file mode 100644 index 369b0ef2a35f043722f1fc485624be580a90cee5..0000000000000000000000000000000000000000 --- a/tests/PHPUnit/Core/ArchiveProcessing/DayTest.php +++ /dev/null @@ -1,260 +0,0 @@ -<?php -/** - * Piwik - Open source web analytics - * - * @link http://piwik.org - * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */ -class ArchiveProcessing_DayTest extends PHPUnit_Framework_TestCase -{ - /** - * @group Core - * @group ArchiveProcessing - * @group ArchiveProcessing_Day - */ - public function testGenerateDataTableSimple() - { - $row1 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => - array('label' => 'page1', 'visits' => 1, 'actions' => 2, '666' => 'evil'))); - - $input = array( - 'page1' => $row1, - ); - - $table = new Piwik_DataTable; - $table->addRow($row1); - - $tableGenerated = Piwik_ArchiveProcessing_Day::generateDataTable($input); - - $this->assertTrue(Piwik_DataTable::isEqual($table, $tableGenerated)); - } - - /** - * @group Core - * @group ArchiveProcessing - * @group ArchiveProcessing_Day - */ - public function testGenerateDataTable2rows() - { - $row1 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => - array('label' => 'page1', 'visits' => 1, 'actions' => 2))); - $row2 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => - array('label' => 'page2', 'visits' => 3, 'actions' => 5))); - - $input = array( - 'page1' => $row1, - 'page2' => $row2, - ); - - $table = new Piwik_DataTable; - $table->addRow($row1); - $table->addRow($row2); - - $tableGenerated = Piwik_ArchiveProcessing_Day::generateDataTable($input); - - $this->assertTrue(Piwik_DataTable::isEqual($table, $tableGenerated)); - } - - /** - * @group Core - * @group ArchiveProcessing - * @group ArchiveProcessing_Day - */ - public function testGenerateDataTable1row2level() - { - $row1 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => - array('label' => 'cat1', 'visits' => 3, 'actions' => 5))); - - $rowLevel2 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => - array('label' => 'page1', 'visits' => 3, 'actions' => 5))); - $subtable = new Piwik_DataTable; - $subtable->addRow($rowLevel2); - $row1->addSubtable($subtable); - - $table = new Piwik_DataTable; - $table->addRow($row1); - - $input = array( - 'cat1' => array( - 'page1' => $rowLevel2, - ) - ); - - $tableGenerated = Piwik_ArchiveProcessing_Day::generateDataTable($input); - - $r1 = new Piwik_DataTable_Renderer_Console(); - $r1->setTable($table); - $r2 = new Piwik_DataTable_Renderer_Console(); - $r2->setTable($tableGenerated); - - $this->assertTrue(Piwik_DataTable::isEqual($table, $tableGenerated)); - } - - /** - * @group Core - * @group ArchiveProcessing - * @group ArchiveProcessing_Day - */ - public function testGenerateDataTable2rows2level() - { - $table = new Piwik_DataTable; - - //FIRST ROW + SUBTABLE - $row1 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => - array('label' => 'cat1', 'visits' => 3, 'actions' => 5))); - - $rowLevel2a = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => - array('label' => 'page1', 'visits' => 3, 'actions' => 5))); - $subtable = new Piwik_DataTable; - $subtable->addRow($rowLevel2a); - $row1->addSubtable($subtable); - - //-- add - $table->addRow($row1); - - //SECOND ROW + SUBTABLE MULTI ROWS - $row1 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => - array('label' => 'cat2', 'visits' => 13, 'actions' => 9))); - - $rowLevel2b1 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => - array('label' => 'page2a', 'visits' => 6, 'actions' => 8))); - - $rowLevel2b2 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => - array('label' => 'page2b', 'visits' => 7, 'actions' => 1))); - $subtable = new Piwik_DataTable; - $subtable->addRow($rowLevel2b1); - $subtable->addRow($rowLevel2b2); - $row1->addSubtable($subtable); - - //-- add - $table->addRow($row1); - - // WHAT WE TEST - $input = array( - 'cat1' => array( - 'page1' => $rowLevel2a, - ), - 'cat2' => array( - 'page2a' => $rowLevel2b1, - 'page2b' => $rowLevel2b2, - ) - ); - $tableGenerated = Piwik_ArchiveProcessing_Day::generateDataTable($input); - - $r1 = new Piwik_DataTable_Renderer_Console(); - $r1->setTable($table); - $r2 = new Piwik_DataTable_Renderer_Console(); - $r2->setTable($tableGenerated); - - $this->assertTrue(Piwik_DataTable::isEqual($table, $tableGenerated)); - } - - /** - * @group Core - * @group ArchiveProcessing - * @group ArchiveProcessing_Day - */ - public function testGenerateDataTable1row4levelMultiRows() - { - $table = new Piwik_DataTable; - - //FIRST ROW + SUBTABLE - $rowcat2 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => - array('label' => '456', 'visits' => 3, 'actions' => 5))); - - $cat2 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => - array('label' => 'cat2', 'visits' => 3, 'actions' => 5))); - - $rowcat1 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => - array('label' => 'pagecat1', 'visits' => 6, 'actions' => 4))); - - $cat1 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => - array('label' => 'cat1', 'visits' => 9, 'actions' => 9))); - - $subtablecat2 = new Piwik_DataTable; - $subtablecat2->addRow($rowcat2); - $cat2->addSubtable($subtablecat2); - - $subtablecat1 = new Piwik_DataTable; - $subtablecat1->addRow($rowcat1); - $subtablecat1->addRow($cat2); - - $cat1->addSubtable($subtablecat1); - - //-- add - $table->addRow($cat1); - - // WHAT WE TEST - $input = array( - 'cat1' => array( - 'pagecat1' => $rowcat1, - 'cat2' => array( - 'pagecat2' => $rowcat2, - ), - ), - ); - $tableGenerated = Piwik_ArchiveProcessing_Day::generateDataTable($input); - - $r1 = new Piwik_DataTable_Renderer_Console(); - $r1->setTable($table); - $r2 = new Piwik_DataTable_Renderer_Console(); - $r2->setTable($tableGenerated); - - $this->assertTrue(Piwik_DataTable::isEqual($table, $tableGenerated)); - } - - /** - * @group Core - * @group ArchiveProcessing - * @group ArchiveProcessing_Day - */ - public function testGenerateDataTable1row4level() - { - $table = new Piwik_DataTable; - - $rowpagecat3 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => - array('label' => '123123', 'visits' => 3, 'actions' => 5))); - - $rowcat3 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => - array('label' => '789.654', 'visits' => 3, 'actions' => 5))); - $rowcat2 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => - array('label' => 'cat2', 'visits' => 3, 'actions' => 5))); - $rowcat1 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => - array('label' => '&*()', 'visits' => 3, 'actions' => 5))); - - $subtablerowpagecat3 = new Piwik_DataTable; - $subtablerowpagecat3->addRow($rowpagecat3); - $rowcat3->addSubtable($subtablerowpagecat3); - - $subtablecat2 = new Piwik_DataTable; - $subtablecat2->addRow($rowcat3); - $rowcat2->addSubtable($subtablecat2); - - - $subtablecat1 = new Piwik_DataTable; - $subtablecat1->addRow($rowcat2); - $rowcat1->addSubtable($subtablecat1); - - //-- add - $table->addRow($rowcat1); - - // WHAT WE TEST - $input = array( - '&*()' => array( - 'cat2' => array( - '789.654' => array( - '123123' => $rowpagecat3, - ), - ), - ), - ); - - $tableGenerated = Piwik_ArchiveProcessing_Day::generateDataTable($input); - - $r1 = new Piwik_DataTable_Renderer_Console(); - $r1->setTable($table); - $r2 = new Piwik_DataTable_Renderer_Console(); - $r2->setTable($tableGenerated); - $this->assertTrue(Piwik_DataTable::isEqual($table, $tableGenerated)); - } -}