diff options
author | Thomas Steur <thomas.steur@gmail.com> | 2015-02-26 05:23:28 +0300 |
---|---|---|
committer | Thomas Steur <thomas.steur@gmail.com> | 2015-03-05 05:31:18 +0300 |
commit | 287aad82841f0f0e85406192b2f1f865bc0be67d (patch) | |
tree | d9c035a484c3f2727d7fa1cdf14ccd213c308508 | |
parent | a1cb3695319b321f92bb0a4fd31892a9bc1bdf38 (diff) |
Faster flattening for many reports
48 files changed, 1584 insertions, 300 deletions
diff --git a/core/API/DataTableManipulator.php b/core/API/DataTableManipulator.php index 23036c8e82..862f2db087 100644 --- a/core/API/DataTableManipulator.php +++ b/core/API/DataTableManipulator.php @@ -114,14 +114,6 @@ abstract class DataTableManipulator return null; } - if ($row->getMetadata('idsubdatatable_in_db')) { - $manager = DataTable\Manager::getInstance(); - $table = $manager->getTable($idSubTable); - if ($table) { - return $table; - } - } - $request['idSubtable'] = $idSubTable; if ($dataTable) { $period = $dataTable->getMetadata(DataTableFactory::TABLE_METADATA_PERIOD_INDEX); diff --git a/core/API/DataTableManipulator/Flattener.php b/core/API/DataTableManipulator/Flattener.php index cfee16e6ba..a976b7a62e 100644 --- a/core/API/DataTableManipulator/Flattener.php +++ b/core/API/DataTableManipulator/Flattener.php @@ -38,17 +38,16 @@ class Flattener extends DataTableManipulator * Separator for building recursive labels (or paths) * @var string */ - public $recursiveLabelSeparator = ' - '; + public $recursiveLabelSeparator = ''; /** * @param DataTable $dataTable + * @param string $recursiveLabelSeparator * @return DataTable|DataTable\Map */ - public function flatten($dataTable) + public function flatten($dataTable, $recursiveLabelSeparator) { - if ($this->apiModule == 'Actions' || $this->apiMethod == 'getWebsites') { - $this->recursiveLabelSeparator = '/'; - } + $this->recursiveLabelSeparator = $recursiveLabelSeparator; return $this->manipulate($dataTable); } @@ -72,9 +71,10 @@ class Flattener extends DataTableManipulator } $newDataTable = $dataTable->getEmptyClone($keepFilters); - foreach ($dataTable->getRows() as $row) { - $this->flattenRow($row, $newDataTable); + foreach ($dataTable->getRows() as $rowId => $row) { + $this->flattenRow($row, $rowId, $newDataTable); } + return $newDataTable; } @@ -84,15 +84,21 @@ class Flattener extends DataTableManipulator * @param string $labelPrefix * @param bool $parentLogo */ - private function flattenRow(Row $row, DataTable $dataTable, + private function flattenRow(Row $row, $rowId, DataTable $dataTable, $labelPrefix = '', $parentLogo = false) { $label = $row->getColumn('label'); if ($label !== false) { $label = trim($label); - if (substr($label, 0, 1) == '/' && $this->recursiveLabelSeparator == '/') { - $label = substr($label, 1); + + if ($this->recursiveLabelSeparator == '/') { + if (substr($label, 0, 1) == '/') { + $label = substr($label, 1); + } elseif ($rowId === DataTable::ID_SUMMARY_ROW && $labelPrefix && $label != DataTable::LABEL_SUMMARY_ROW) { + $label = ' - ' . $label; + } } + $label = $labelPrefix . $label; $row->setColumn('label', $label); } @@ -103,7 +109,16 @@ class Flattener extends DataTableManipulator $row->setMetadata('logo', $logo); } - $subTable = $this->loadSubtable($dataTable, $row); + /** @var DataTable $subTable */ + $subTable = $row->getSubtable(); + + if ($subTable) { + $subTable->applyQueuedFilters(); + $row->deleteMetadata('idsubdatatable_in_db'); + } else { + $subTable = $this->loadSubtable($dataTable, $row); + } + $row->removeSubtable(); if ($subTable === null) { @@ -117,8 +132,8 @@ class Flattener extends DataTableManipulator $dataTable->addRow($row); } $prefix = $label . $this->recursiveLabelSeparator; - foreach ($subTable->getRows() as $row) { - $this->flattenRow($row, $dataTable, $prefix, $logo); + foreach ($subTable->getRows() as $rowId => $row) { + $this->flattenRow($row, $rowId, $dataTable, $prefix, $logo); } } } diff --git a/core/API/DataTableManipulator/ReportTotalsCalculator.php b/core/API/DataTableManipulator/ReportTotalsCalculator.php index b6b82effad..4703c36c7d 100644 --- a/core/API/DataTableManipulator/ReportTotalsCalculator.php +++ b/core/API/DataTableManipulator/ReportTotalsCalculator.php @@ -66,14 +66,19 @@ class ReportTotalsCalculator extends DataTableManipulator $firstLevelTable = $this->makeSureToWorkOnFirstLevelDataTable($dataTable); $metricsToCalculate = Metrics::getMetricIdsToProcessReportTotal(); + $realMetricNames = array(); foreach ($metricsToCalculate as $metricId) { - $realMetricName = $this->hasDataTableMetric($firstLevelTable, $metricId); - if (empty($realMetricName)) { - continue; + $metricName = Metrics::getReadableColumnName($metricId); + $realMetricName = $this->hasDataTableMetric($firstLevelTable, $metricId, $metricName); + if (!empty($realMetricName)) { + $realMetricNames[$metricName] = $realMetricName; } + } - foreach ($firstLevelTable->getRows() as $row) { - $totalValues = $this->sumColumnValueToTotal($row, $metricId, $realMetricName, $totalValues); + foreach ($firstLevelTable->getRows() as $row) { + $columns = $row->getColumns(); + foreach ($realMetricNames as $metricName => $realMetricName) { + $totalValues = $this->sumColumnValueToTotal($columns, $metricName, $realMetricName, $totalValues); } } @@ -82,7 +87,7 @@ class ReportTotalsCalculator extends DataTableManipulator return $dataTable; } - private function hasDataTableMetric(DataTable $dataTable, $metricId) + private function hasDataTableMetric(DataTable $dataTable, $metricId, $readableColumnName) { $firstRow = $dataTable->getFirstRow(); @@ -90,7 +95,6 @@ class ReportTotalsCalculator extends DataTableManipulator return false; } - $readableColumnName = Metrics::getReadableColumnName($metricId); $columnAlternatives = array( $metricId, $readableColumnName, @@ -151,17 +155,18 @@ class ReportTotalsCalculator extends DataTableManipulator return $table; } - private function sumColumnValueToTotal(Row $row, $metricId, $realMetricId, $totalValues) + private function sumColumnValueToTotal($columns, $metricName, $realMetricId, $totalValues) { - $value = $row->getColumn($realMetricId); + $value = false; + if (array_key_exists($realMetricId, $columns)) { + $value = $columns[$realMetricId]; + } if (false === $value) { return $totalValues; } - $metricName = Metrics::getReadableColumnName($metricId); - if (array_key_exists($metricName, $totalValues)) { $totalValues[$metricName] += $value; } else { diff --git a/core/API/DataTablePostProcessor.php b/core/API/DataTablePostProcessor.php index 999b3fe339..b13fff1439 100644 --- a/core/API/DataTablePostProcessor.php +++ b/core/API/DataTablePostProcessor.php @@ -85,8 +85,8 @@ class DataTablePostProcessor // this is non-trivial since it will require, eg, to make sure processed metrics aren't added // after pivotBy is handled. $dataTable = $this->applyPivotByFilter($dataTable); - $dataTable = $this->applyFlattener($dataTable); $dataTable = $this->applyTotalsCalculator($dataTable); + $dataTable = $this->applyFlattener($dataTable); $dataTable = $this->applyGenericFilters($dataTable); @@ -145,7 +145,13 @@ class DataTablePostProcessor if (Common::getRequestVar('include_aggregate_rows', '0', 'string', $this->request) == '1') { $flattener->includeAggregateRows(); } - $dataTable = $flattener->flatten($dataTable); + + $recursiveLabelSeparator = ' - '; + if ($this->report) { + $recursiveLabelSeparator = $this->report->getRecursiveLabelSeparator(); + } + + $dataTable = $flattener->flatten($dataTable, $recursiveLabelSeparator); } return $dataTable; } diff --git a/core/Archive.php b/core/Archive.php index 1931b6a343..c7eb6e3106 100644 --- a/core/Archive.php +++ b/core/Archive.php @@ -452,6 +452,7 @@ class Archive * @return DataTable|DataTable\Map See {@link getDataTable()} and * {@link getDataTableExpanded()} for more * information + * @deprecated Since Piwik 2.12.0 Use Archive::createDataTableFromArchive() instead */ public static function getDataTableFromArchive($name, $idSite, $period, $date, $segment, $expanded, $idSubtable = null, $depth = null) @@ -474,6 +475,38 @@ class Archive return $dataTable; } + /** + * Helper function that creates an Archive instance and queries for report data using + * query parameter data. API methods can use this method to reduce code redundancy. + * + * @param string $recordName The name of the report to return. + * @param int|string|array $idSite @see {@link build()} + * @param string $period @see {@link build()} + * @param string $date @see {@link build()} + * @param string $segment @see {@link build()} + * @param bool $expanded If true, loads all subtables. See {@link getDataTableExpanded()} + * @param bool $flat If true, loads all subtables and disabled all recursive filters. + * @param int|null $idSubtable See {@link getDataTableExpanded()} + * @param int|null $depth See {@link getDataTableExpanded()} + * @return DataTable|DataTable\Map + */ + public static function createDataTableFromArchive($recordName, $idSite, $period, $date, $segment, $expanded = false, $flat = false, $idSubtable = null, $depth = null) + { + if ($flat && !$idSubtable) { + $expanded = true; + } + + $dataTable = self::getDataTableFromArchive($recordName, $idSite, $period, $date, $segment, $expanded, $idSubtable, $depth); + + $dataTable->filter('ReplaceColumnNames'); + + if ($flat) { + $dataTable->disableRecursiveFilters(); + } + + return $dataTable; + } + private function appendIdSubtable($recordName, $id) { return $recordName . "_" . $id; diff --git a/core/DataTable.php b/core/DataTable.php index b060a87245..0b0d9845f0 100644 --- a/core/DataTable.php +++ b/core/DataTable.php @@ -342,6 +342,17 @@ class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess } /** + * @ignore + * does not update the summary row! + */ + public function setRows($rows) + { + unset($this->rows); + $this->rows = $rows; + $this->indexNotUpToDate = true; + } + + /** * Sorts the DataTable rows using the supplied callback function. * * @param string $functionCallback A comparison callback compatible with {@link usort}. @@ -350,11 +361,11 @@ class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess */ public function sort($functionCallback, $columnSortedBy) { - $this->indexNotUpToDate = true; - $this->tableSortedBy = $columnSortedBy; + $this->setTableSortedBy($columnSortedBy); + usort($this->rows, $functionCallback); - if ($this->enableRecursiveSort === true) { + if ($this->isSortRecursiveEnabled()) { foreach ($this->getRows() as $row) { $subTable = $row->getSubtable(); @@ -388,6 +399,23 @@ class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess } /** + * @ignore + */ + public function isSortRecursiveEnabled() + { + return $this->enableRecursiveSort === true; + } + + /** + * @ignore + */ + public function setTableSortedBy($column) + { + $this->indexNotUpToDate = true; + $this->tableSortedBy = $column; + } + + /** * Enables recursive filtering. If this method is called then the {@link filter()} method * will apply filters to every subtable in addition to this instance. */ @@ -397,6 +425,14 @@ class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess } /** + * @ignore + */ + public function disableRecursiveFilters() + { + $this->enableRecursiveFilters = false; + } + + /** * Applies a filter to this datatable. * * If {@link enableRecursiveFilters()} was called, the filter will be applied @@ -434,6 +470,25 @@ class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess } /** + * Applies a filter to all subtables but not to this datatable. + * + * @param string|Closure $className Class name, eg. `"Sort"` or "Piwik\DataTable\Filters\Sort"`. If no + * namespace is supplied, `Piwik\DataTable\BaseFilter` is assumed. This parameter + * can also be a closure that takes a DataTable as its first parameter. + * @param array $parameters Array of extra parameters to pass to the filter. + */ + public function filterSubtables($className, $parameters = array()) + { + foreach ($this->getRows() as $row) { + $subtable = $row->getSubtable(); + if ($subtable) { + $subtable->filter($className, $parameters); + $subtable->filterSubtables($className, $parameters); + } + } + } + + /** * Adds a filter and a list of parameters to the list of queued filters. These filters will be * executed when {@link applyQueuedFilters()} is called. * @@ -730,6 +785,14 @@ class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess } /** + * @ignore + */ + public function getRowsWithoutSummaryRow() + { + return $this->rows; + } + + /** * Returns an array containing all column values for the requested column. * * @param string $name The column name. diff --git a/core/DataTable/Filter/Sort.php b/core/DataTable/Filter/Sort.php index 42441c8e30..632da35dc8 100644 --- a/core/DataTable/Filter/Sort.php +++ b/core/DataTable/Filter/Sort.php @@ -21,7 +21,8 @@ use Piwik\Metrics; * * @api */ -class Sort extends BaseFilter +class +Sort extends BaseFilter { protected $columnToSort; protected $order; @@ -71,34 +72,21 @@ class Sort extends BaseFilter * @param Row $b * @return int */ - public function numberSort($a, $b) + public function numberSort($rowA, $rowB) { - $valA = $this->getColumnValue($a); - $valB = $this->getColumnValue($b); + if (isset($rowA[0]) && isset($rowB[0])) { + if ($rowA[0] != $rowB[0] || !isset($rowA[1])) { + return $this->sign * ($rowA[0] < $rowB[0] ? -1 : 1); + } else { + return -1 * $this->sign * strnatcasecmp($rowA[1], $rowB[1]); + } + } elseif (!isset($rowB[0])) { + return -1; + } elseif (!isset($rowA[0])) { + return 1; + } - return !isset($valA) - && !isset($valB) - ? 0 - : ( - !isset($valA) - ? 1 - : ( - !isset($valB) - ? -1 - : (($valA != $valB - || !isset($a->c[Row::COLUMNS]['label'])) - ? ($this->sign * ( - $valA - < $valB - ? -1 - : 1) - ) - : -1 * $this->sign * strnatcasecmp( - $a->c[Row::COLUMNS]['label'], - $b->c[Row::COLUMNS]['label']) - ) - ) - ); + return 0; } /** @@ -108,10 +96,10 @@ class Sort extends BaseFilter * @param mixed $b * @return int */ - function naturalSort($a, $b) + function naturalSort($rowA, $rowB) { - $valA = $this->getColumnValue($a); - $valB = $this->getColumnValue($b); + $valA = $rowA[0]; + $valB = $rowB[0]; return !isset($valA) && !isset($valB) @@ -135,10 +123,10 @@ class Sort extends BaseFilter * @param mixed $b * @return int */ - function sortString($a, $b) + function sortString($rowA, $rowB) { - $valA = $this->getColumnValue($a); - $valB = $this->getColumnValue($b); + $valA = $rowA[0]; + $valB = $rowB[0]; return !isset($valA) && !isset($valB) @@ -243,6 +231,51 @@ class Sort extends BaseFilter } } - $table->sort(array($this, $methodToUse), $this->columnToSort); + $this->sort($table, $methodToUse); } + + /** + * Sorts the DataTable rows using the supplied callback function. + * + * @param string $functionCallback A comparison callback compatible with {@link usort}. + * @param string $columnSortedBy The column name `$functionCallback` sorts by. This is stored + * so we can determine how the DataTable was sorted in the future. + */ + private function sort(DataTable $table, $functionCallback) + { + $table->setTableSortedBy($this->columnToSort); + + $rows = $table->getRowsWithoutSummaryRow(); + + // get column value and label only once for performance tweak + $values = array(); + foreach ($rows as $key => $row) { + $values[$key] = array($this->getColumnValue($row), $row->getColumn('label')); + } + + uasort($values, array($this, $functionCallback)); + + $sortedRows = array(); + foreach ($values as $key => $value) { + $sortedRows[$key] = $rows[$key]; + } + + $table->setRows(array_values($sortedRows)); + + unset($rows); + unset($sortedRows); + + if ($table->isSortRecursiveEnabled()) { + foreach ($table->getRows() as $row) { + + $subTable = $row->getSubtable(); + if ($subTable) { + $subTable->enableRecursiveSort(); + $this->sort($subTable, $functionCallback); + } + } + } + + } + } diff --git a/core/DataTable/Filter/Truncate.php b/core/DataTable/Filter/Truncate.php index 632eb2755e..a8fa0bd08f 100644 --- a/core/DataTable/Filter/Truncate.php +++ b/core/DataTable/Filter/Truncate.php @@ -96,7 +96,7 @@ class Truncate extends BaseFilter return; } - $rows = $table->getRows(); + $rows = array_values($table->getRows()); $count = $table->getRowsCount(); $newRow = new Row(array(Row::COLUMNS => array('label' => DataTable::LABEL_SUMMARY_ROW))); diff --git a/core/DataTable/Map.php b/core/DataTable/Map.php index 8795eac134..8787b06404 100644 --- a/core/DataTable/Map.php +++ b/core/DataTable/Map.php @@ -110,6 +110,19 @@ class Map implements DataTableInterface } /** + * Apply a filter to all subtables contained by this instance. + * + * @param string|Closure $className Name of filter class or a Closure. + * @param array $parameters Parameters to pass to the filter. + */ + public function filterSubtables($className, $parameters = array()) + { + foreach ($this->getDataTables() as $table) { + $table->filterSubtables($className, $parameters); + } + } + + /** * Returns the array of DataTables contained by this class. * * @return DataTable[]|Map[] @@ -185,6 +198,26 @@ class Map implements DataTableInterface } /** + * @ignore + */ + public function disableRecursiveFilters() + { + foreach ($this->getDataTables() as $table) { + $table->disableRecursiveFilters(); + } + } + + /** + * @ignore + */ + public function enableRecursiveFilters() + { + foreach ($this->getDataTables() as $table) { + $table->enableRecursiveFilters(); + } + } + + /** * Renames the given column in each contained {@link DataTable}. * * See {@link DataTable::renameColumn()}. diff --git a/core/DataTable/Row.php b/core/DataTable/Row.php index 5f21f3fdec..71dde68031 100644 --- a/core/DataTable/Row.php +++ b/core/DataTable/Row.php @@ -209,37 +209,9 @@ class Row implements \ArrayAccess, \IteratorAggregate return false; } - if ($this->isColumnValueCallable($this->c[self::COLUMNS][$name])) { - $value = $this->resolveCallableColumn($name); - - if (!isset($value)) { - return false; - } - - return $value; - } - return $this->c[self::COLUMNS][$name]; } - private function isColumnValueCallable($name) - { - if (! is_callable($name)) { - return false; - } - - if (is_object($name) && ($name instanceof \Closure)) { - return true; - } - - return is_array($name) && isset($name[0]) && is_object($name[0]); - } - - private function resolveCallableColumn($columnName) - { - return call_user_func($this->c[self::COLUMNS][$columnName], $this); - } - /** * Returns the array of all metadata, or one requested metadata value. * @@ -287,16 +259,7 @@ class Row implements \ArrayAccess, \IteratorAggregate */ public function getColumns() { - $values = array(); - foreach ($this->c[self::COLUMNS] as $columnName => $val) { - if ($this->isColumnValueCallable($val)) { - $values[$columnName] = $this->resolveCallableColumn($columnName); - } else { - $values[$columnName] = $val; - } - } - - return $values; + return $this->c[self::COLUMNS]; } /** @@ -517,11 +480,6 @@ class Row implements \ArrayAccess, \IteratorAggregate continue; } - if ($this->isColumnValueCallable($columnToSumValue)) { - $this->setColumn($columnToSumName, $columnToSumValue); - continue; - } - $thisColumnValue = $this->getColumn($columnToSumName); $operation = 'sum'; diff --git a/core/Plugin/API.php b/core/Plugin/API.php index cc16cfb64c..4e5095a3aa 100644 --- a/core/Plugin/API.php +++ b/core/Plugin/API.php @@ -41,5 +41,5 @@ use Piwik\Singleton; */ abstract class API extends Singleton { - + } diff --git a/core/Plugin/Metric.php b/core/Plugin/Metric.php index e475eb837f..6d69350d92 100644 --- a/core/Plugin/Metric.php +++ b/core/Plugin/Metric.php @@ -108,26 +108,41 @@ abstract class Metric */ public static function getMetric($row, $columnName, $mappingNameToId = null) { - if (empty($mappingNameToId)) { - $mappingNameToId = Metrics::getMappingFromNameToId(); - } - if ($row instanceof Row) { $value = $row->getColumn($columnName); - if ($value === false - && isset($mappingNameToId[$columnName]) - ) { - $value = $row->getColumn($mappingNameToId[$columnName]); + + if ($value === false) { + + if (empty($mappingNameToId)) { + $mappingNameToId = Metrics::getMappingFromNameToId(); + } + + if (isset($mappingNameToId[$columnName])) { + return $row->getColumn($mappingNameToId[$columnName]); + } } + + return $value; + } else { - $value = @$row[$columnName]; - if ($value === null - && isset($mappingNameToId[$columnName]) - ) { - $columnName = $mappingNameToId[$columnName]; - $value = @$row[$columnName]; + $value = null; + if (array_key_exists($columnName, $row)) { + $value = $row[$columnName]; + } else { + + if (empty($mappingNameToId)) { + $mappingNameToId = Metrics::getMappingFromNameToId(); + } + + if (isset($mappingNameToId[$columnName])) { + $columnName = $mappingNameToId[$columnName]; + + if (array_key_exists($columnName, $row)) { + return $row[$columnName]; + } + } } - return $value; + } return $value; diff --git a/core/Plugin/Report.php b/core/Plugin/Report.php index 62ed594f8c..b9c407e10e 100644 --- a/core/Plugin/Report.php +++ b/core/Plugin/Report.php @@ -182,6 +182,13 @@ class Report protected $order = 1; /** + * Separator for building recursive labels (or paths) + * @var string + * @api + */ + protected $recursiveLabelSeparator = ' - '; + + /** * @var array * @ignore */ @@ -357,6 +364,15 @@ class Report } /** + * @ignore + * @see $recursiveLabelSeparator + */ + public function getRecursiveLabelSeparator() + { + return $this->recursiveLabelSeparator; + } + + /** * Returns an array of supported metrics and their corresponding translations. Eg `array('nb_visits' => 'Visits')`. * By default the given {@link $metrics} are used and their corresponding translations are looked up automatically. * If a metric is not translated, you should add the default metric translation for this metric using diff --git a/core/UrlHelper.php b/core/UrlHelper.php index a0bc340bbd..78682acbfc 100644 --- a/core/UrlHelper.php +++ b/core/UrlHelper.php @@ -231,7 +231,10 @@ class UrlHelper $parsedUrl = parse_url($url); $result = ''; if (isset($parsedUrl['path'])) { - $result .= substr($parsedUrl['path'], 1); + if (substr($parsedUrl['path'], 0, 1) == '/') { + $parsedUrl['path'] = substr($parsedUrl['path'], 1); + } + $result .= $parsedUrl['path']; } if (isset($parsedUrl['query'])) { $result .= '?' . $parsedUrl['query']; diff --git a/plugins/Actions/API.php b/plugins/Actions/API.php index 0ec50bceea..7204ddfa50 100644 --- a/plugins/Actions/API.php +++ b/plugins/Actions/API.php @@ -9,7 +9,6 @@ namespace Piwik\Plugins\Actions; use Exception; -use Piwik\API\Request; use Piwik\Archive; use Piwik\Common; use Piwik\DataTable; @@ -84,18 +83,16 @@ class API extends \Piwik\Plugin\API * @param bool $expanded * @param bool|int $idSubtable * @param bool|int $depth + * @param bool|int $flat * * @return DataTable|DataTable\Map */ public function getPageUrls($idSite, $period, $date, $segment = false, $expanded = false, $idSubtable = false, - $depth = false, $flat= false) + $depth = false, $flat = false) { - if ($flat && !$idSubtable) { - $expanded = true; - } + $dataTable = Archive::createDataTableFromArchive('Actions_actions_url', $idSite, $period, $date, $segment, $expanded, $flat, $idSubtable, $depth); - $dataTable = $this->getDataTableFromArchive('Actions_actions_url', $idSite, $period, $date, $segment, $expanded, $idSubtable, $depth); - $this->filterActionsDataTable($dataTable, $expanded); + $this->filterActionsDataTable($dataTable); return $dataTable; } @@ -172,17 +169,19 @@ class API extends \Piwik\Plugin\API public function getPageUrl($pageUrl, $idSite, $period, $date, $segment = false) { - $callBackParameters = array('Actions_actions_url', $idSite, $period, $date, $segment, $expanded = false, $idSubtable = false); + $callBackParameters = array('Actions_actions_url', $idSite, $period, $date, $segment, $expanded = false, $flat = false, $idSubtable = null); $dataTable = $this->getFilterPageDatatableSearch($callBackParameters, $pageUrl, Action::TYPE_PAGE_URL); $this->addPageProcessedMetrics($dataTable); $this->filterActionsDataTable($dataTable); return $dataTable; } - public function getPageTitles($idSite, $period, $date, $segment = false, $expanded = false, $idSubtable = false) + public function getPageTitles($idSite, $period, $date, $segment = false, $expanded = false, $idSubtable = false, $flat = false) { - $dataTable = $this->getDataTableFromArchive('Actions_actions', $idSite, $period, $date, $segment, $expanded, $idSubtable); - $this->filterActionsDataTable($dataTable, $expanded); + $dataTable = Archive::createDataTableFromArchive('Actions_actions', $idSite, $period, $date, $segment, $expanded, $flat, $idSubtable); + + $this->filterActionsDataTable($dataTable); + return $dataTable; } @@ -212,38 +211,38 @@ class API extends \Piwik\Plugin\API public function getPageTitle($pageName, $idSite, $period, $date, $segment = false) { - $callBackParameters = array('Actions_actions', $idSite, $period, $date, $segment, $expanded = false, $idSubtable = false); + $callBackParameters = array('Actions_actions', $idSite, $period, $date, $segment, $expanded = false, $flat = false, $idSubtable = null); $dataTable = $this->getFilterPageDatatableSearch($callBackParameters, $pageName, Action::TYPE_PAGE_TITLE); $this->addPageProcessedMetrics($dataTable); $this->filterActionsDataTable($dataTable); return $dataTable; } - public function getDownloads($idSite, $period, $date, $segment = false, $expanded = false, $idSubtable = false) + public function getDownloads($idSite, $period, $date, $segment = false, $expanded = false, $idSubtable = false, $flat = false) { - $dataTable = $this->getDataTableFromArchive('Actions_downloads', $idSite, $period, $date, $segment, $expanded, $idSubtable); + $dataTable = Archive::createDataTableFromArchive('Actions_downloads', $idSite, $period, $date, $segment, $expanded, $flat, $idSubtable); $this->filterActionsDataTable($dataTable, $expanded); return $dataTable; } public function getDownload($downloadUrl, $idSite, $period, $date, $segment = false) { - $callBackParameters = array('Actions_downloads', $idSite, $period, $date, $segment, $expanded = false, $idSubtable = false); + $callBackParameters = array('Actions_downloads', $idSite, $period, $date, $segment, $expanded = false, $flat = false, $idSubtable = null); $dataTable = $this->getFilterPageDatatableSearch($callBackParameters, $downloadUrl, Action::TYPE_DOWNLOAD); $this->filterActionsDataTable($dataTable); return $dataTable; } - public function getOutlinks($idSite, $period, $date, $segment = false, $expanded = false, $idSubtable = false) + public function getOutlinks($idSite, $period, $date, $segment = false, $expanded = false, $idSubtable = false, $flat = false) { - $dataTable = $this->getDataTableFromArchive('Actions_outlink', $idSite, $period, $date, $segment, $expanded, $idSubtable); + $dataTable = Archive::createDataTableFromArchive('Actions_outlink', $idSite, $period, $date, $segment, $expanded, $flat, $idSubtable); $this->filterActionsDataTable($dataTable, $expanded); return $dataTable; } public function getOutlink($outlinkUrl, $idSite, $period, $date, $segment = false) { - $callBackParameters = array('Actions_outlink', $idSite, $period, $date, $segment, $expanded = false, $idSubtable = false); + $callBackParameters = array('Actions_outlink', $idSite, $period, $date, $segment, $expanded = false, $flat = false, $idSubtable = null); $dataTable = $this->getFilterPageDatatableSearch($callBackParameters, $outlinkUrl, Action::TYPE_OUTLINK); $this->filterActionsDataTable($dataTable); return $dataTable; @@ -254,6 +253,7 @@ class API extends \Piwik\Plugin\API $dataTable = $this->getSiteSearchKeywordsRaw($idSite, $period, $date, $segment); $dataTable->deleteColumn(PiwikMetrics::INDEX_SITE_SEARCH_HAS_NO_RESULT); $this->filterActionsDataTable($dataTable); + $dataTable->filter('ReplaceColumnNames'); $this->addPagesPerSearchColumn($dataTable); return $dataTable; } @@ -271,7 +271,7 @@ class API extends \Piwik\Plugin\API protected function getSiteSearchKeywordsRaw($idSite, $period, $date, $segment) { - $dataTable = $this->getDataTableFromArchive('Actions_sitesearch', $idSite, $period, $date, $segment, $expanded = false); + $dataTable = Archive::createDataTableFromArchive('Actions_sitesearch', $idSite, $period, $date, $segment, $expanded = false); return $dataTable; } @@ -289,6 +289,7 @@ class API extends \Piwik\Plugin\API $dataTable->deleteRow(DataTable::ID_SUMMARY_ROW); $dataTable->deleteColumn(PiwikMetrics::INDEX_SITE_SEARCH_HAS_NO_RESULT); $this->filterActionsDataTable($dataTable); + $dataTable->filter('ReplaceColumnNames'); $this->addPagesPerSearchColumn($dataTable); return $dataTable; } @@ -337,6 +338,7 @@ class API extends \Piwik\Plugin\API } } $this->filterActionsDataTable($dataTable); + $dataTable->filter('ReplaceColumnNames'); $this->addPagesPerSearchColumn($dataTable, $columnToRead = 'nb_actions'); return $dataTable; } @@ -366,7 +368,7 @@ class API extends \Piwik\Plugin\API if ($table === false) { // fetch the data table - $table = call_user_func_array(array($this, 'getDataTableFromArchive'), $callBackParameters); + $table = call_user_func_array('\Piwik\Archive::createDataTableFromArchive', $callBackParameters); if ($table instanceof DataTable\Map) { // search an array of tables, e.g. when using date=last30 @@ -429,7 +431,7 @@ class API extends \Piwik\Plugin\API // match found on this level and more levels remaining: go deeper $idSubTable = $row->getIdSubDataTable(); - $callBackParameters[6] = $idSubTable; + $callBackParameters[7] = $idSubTable; /** * @var \Piwik\Period $period @@ -439,7 +441,7 @@ class API extends \Piwik\Plugin\API $callBackParameters[3] = $period->getDateStart() . ',' . $period->getDateEnd(); } - $table = call_user_func_array(array($this, 'getDataTableFromArchive'), $callBackParameters); + $table = call_user_func_array('\Piwik\Archive::createDataTableFromArchive', $callBackParameters); return $this->doFilterPageDatatableSearch($callBackParameters, $table, $searchTree); } @@ -450,28 +452,15 @@ class API extends \Piwik\Plugin\API * Common filters for all Actions API * * @param DataTable|DataTable\Simple|DataTable\Map $dataTable - * @param bool $expanded */ - protected function filterActionsDataTable($dataTable, $expanded = false) + private function filterActionsDataTable($dataTable) { // Must be applied before Sort in this case, since the DataTable can contain both int and strings indexes // (in the transition period between pre 1.2 and post 1.2 datatable structure) - $dataTable->filter('ReplaceColumnNames'); - $dataTable->filter('Sort', array('nb_visits', 'desc', $naturalSort = false, $expanded)); - $dataTable->filter(function (DataTable $dataTable) { - foreach ($dataTable->getRows() as $row) { - $url = $row->getMetadata('url'); - if ($url) { - $row->setMetadata('segmentValue', urldecode($url)); - } - } - }); - $dataTable->filter('GroupBy', array('label', function ($label) { - return urldecode($label); - })); + $dataTable->filter('Piwik\Plugins\Actions\DataTable\Filter\Actions'); - $dataTable->queueFilter('ReplaceSummaryRowLabel'); + return $dataTable; } /** @@ -505,11 +494,6 @@ class API extends \Piwik\Plugin\API ); } - protected function getDataTableFromArchive($name, $idSite, $period, $date, $segment, $expanded = false, $idSubtable = null, $depth = null) - { - return Archive::getDataTableFromArchive($name, $idSite, $period, $date, $segment, $expanded, $idSubtable, $depth); - } - private function addPageProcessedMetrics(DataTable\DataTableInterface $dataTable) { $dataTable->filter(function (DataTable $table) { diff --git a/plugins/Actions/DataTable/Filter/Actions.php b/plugins/Actions/DataTable/Filter/Actions.php new file mode 100644 index 0000000000..71abe4190b --- /dev/null +++ b/plugins/Actions/DataTable/Filter/Actions.php @@ -0,0 +1,53 @@ +<?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\Actions\DataTable\Filter; + +use Piwik\DataTable\BaseFilter; +use Piwik\DataTable\Row; +use Piwik\DataTable; + +class Actions extends BaseFilter +{ + /** + * Constructor. + * + * @param DataTable $table The table to eventually filter. + */ + public function __construct($table) + { + parent::__construct($table); + } + + /** + * @param DataTable $table + */ + public function filter($table) + { + $table->filter(function (DataTable $dataTable) { + foreach ($dataTable->getRows() as $row) { + $url = $row->getMetadata('url'); + if ($url) { + $row->setMetadata('segmentValue', urldecode($url)); + } + } + }); + + // TODO can we remove this one again? + $table->queueFilter('GroupBy', array('label', function ($label) { + return urldecode($label); + })); + + foreach ($table->getRows() as $row) { + $subtable = $row->getSubtable(); + if ($subtable) { + $this->filter($subtable); + } + } + } +}
\ No newline at end of file diff --git a/plugins/Actions/Reports/Base.php b/plugins/Actions/Reports/Base.php index 68bca741a3..6d7146ae73 100644 --- a/plugins/Actions/Reports/Base.php +++ b/plugins/Actions/Reports/Base.php @@ -22,6 +22,7 @@ abstract class Base extends \Piwik\Plugin\Report { $this->category = 'General_Actions'; $this->processedMetrics = false; + $this->recursiveLabelSeparator = '/'; } protected function addBaseDisplayProperties(ViewDataTable $view) diff --git a/plugins/Events/API.php b/plugins/Events/API.php index bb6584b777..7950cd2637 100644 --- a/plugins/Events/API.php +++ b/plugins/Events/API.php @@ -148,14 +148,17 @@ class API extends \Piwik\Plugin\API } } - protected function getDataTable($name, $idSite, $period, $date, $segment, $expanded = false, $idSubtable = null, $secondaryDimension = false) + protected function getDataTable($name, $idSite, $period, $date, $segment, $expanded = false, $idSubtable = null, $secondaryDimension = false, $flat = false) { Piwik::checkUserHasViewAccess($idSite); $this->checkSecondaryDimension($name, $secondaryDimension); $recordName = $this->getRecordNameForAction($name, $secondaryDimension); - $dataTable = Archive::getDataTableFromArchive($recordName, $idSite, $period, $date, $segment, $expanded, $idSubtable); - if (empty($idSubtable)) { + $dataTable = Archive::createDataTableFromArchive($recordName, $idSite, $period, $date, $segment, $expanded, $flat, $idSubtable); + + if ($flat) { + $dataTable->filterSubtables('Piwik\Plugins\Events\DataTable\Filter\ReplaceEventNameNotSet'); + } else { $dataTable->filter('AddSegmentValue', array(function ($label) { if ($label === Archiver::EVENT_NAME_NOT_SET) { return false; @@ -165,23 +168,24 @@ class API extends \Piwik\Plugin\API })); } - $this->filterDataTable($dataTable); + $dataTable->filter('Piwik\Plugins\Events\DataTable\Filter\ReplaceEventNameNotSet'); + return $dataTable; } - public function getCategory($idSite, $period, $date, $segment = false, $expanded = false, $secondaryDimension = false) + public function getCategory($idSite, $period, $date, $segment = false, $expanded = false, $secondaryDimension = false, $flat = false) { - return $this->getDataTable(__FUNCTION__, $idSite, $period, $date, $segment, $expanded, $idSubtable = false, $secondaryDimension); + return $this->getDataTable(__FUNCTION__, $idSite, $period, $date, $segment, $expanded, $idSubtable = false, $secondaryDimension, $flat); } - public function getAction($idSite, $period, $date, $segment = false, $expanded = false, $secondaryDimension = false) + public function getAction($idSite, $period, $date, $segment = false, $expanded = false, $secondaryDimension = false, $flat = false) { - return $this->getDataTable(__FUNCTION__, $idSite, $period, $date, $segment, $expanded, $idSubtable = false, $secondaryDimension); + return $this->getDataTable(__FUNCTION__, $idSite, $period, $date, $segment, $expanded, $idSubtable = false, $secondaryDimension, $flat); } - public function getName($idSite, $period, $date, $segment = false, $expanded = false, $secondaryDimension = false) + public function getName($idSite, $period, $date, $segment = false, $expanded = false, $secondaryDimension = false, $flat = false) { - return $this->getDataTable(__FUNCTION__, $idSite, $period, $date, $segment, $expanded, $idSubtable = false, $secondaryDimension); + return $this->getDataTable(__FUNCTION__, $idSite, $period, $date, $segment, $expanded, $idSubtable = false, $secondaryDimension, $flat); } public function getActionFromCategoryId($idSite, $period, $date, $idSubtable, $segment = false) @@ -213,20 +217,4 @@ class API extends \Piwik\Plugin\API { return $this->getDataTable(__FUNCTION__, $idSite, $period, $date, $segment, $expanded = false, $idSubtable); } - - /** - * @param DataTable $dataTable - */ - protected function filterDataTable($dataTable) - { - $dataTable->filter('Sort', array(Metrics::INDEX_NB_VISITS)); - $dataTable->queueFilter('ReplaceColumnNames'); - $dataTable->queueFilter('ReplaceSummaryRowLabel'); - $dataTable->filter(function (DataTable $table) { - $row = $table->getRowFromLabel(Archiver::EVENT_NAME_NOT_SET); - if ($row) { - $row->setColumn('label', Piwik::translate('General_NotDefined', Piwik::translate('Events_EventName'))); - } - }); - } }
\ No newline at end of file diff --git a/plugins/Events/DataTable/Filter/ReplaceEventNameNotSet.php b/plugins/Events/DataTable/Filter/ReplaceEventNameNotSet.php new file mode 100644 index 0000000000..a07695b5f8 --- /dev/null +++ b/plugins/Events/DataTable/Filter/ReplaceEventNameNotSet.php @@ -0,0 +1,39 @@ +<?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\Events\DataTable\Filter; + +use Piwik\DataTable\BaseFilter; +use Piwik\DataTable\Row; +use Piwik\DataTable; +use Piwik\Piwik; +use Piwik\Plugins\Events\Archiver; + +class ReplaceEventNameNotSet extends BaseFilter +{ + /** + * Constructor. + * + * @param DataTable $table The table to eventually filter. + */ + public function __construct($table) + { + parent::__construct($table); + } + + /** + * @param DataTable $table + */ + public function filter($table) + { + $row = $table->getRowFromLabel(Archiver::EVENT_NAME_NOT_SET); + if ($row) { + $row->setColumn('label', Piwik::translate('General_NotDefined', Piwik::translate('Events_EventName'))); + } + } +}
\ No newline at end of file diff --git a/plugins/Referrers/API.php b/plugins/Referrers/API.php index 4ac28978e3..aa1a3e0419 100644 --- a/plugins/Referrers/API.php +++ b/plugins/Referrers/API.php @@ -43,7 +43,6 @@ class API extends \Piwik\Plugin\API protected function getDataTable($name, $idSite, $period, $date, $segment, $expanded = false, $idSubtable = null) { $dataTable = Archive::getDataTableFromArchive($name, $idSite, $period, $date, $segment, $expanded, $idSubtable); - $dataTable->filter('Sort', array(Metrics::INDEX_NB_VISITS, 'desc', $naturalSort = false, $expanded)); $dataTable->queueFilter('ReplaceColumnNames'); return $dataTable; } @@ -296,22 +295,24 @@ class API extends \Piwik\Plugin\API return $dataTable; } - public function getWebsites($idSite, $period, $date, $segment = false, $expanded = false) + public function getWebsites($idSite, $period, $date, $segment = false, $expanded = false, $flat = false) { - $dataTable = $this->getDataTable(Archiver::WEBSITES_RECORD_NAME, $idSite, $period, $date, $segment, $expanded); - $dataTable->filter('AddSegmentByLabel', array('referrerName')); + $dataTable = Archive::createDataTableFromArchive(Archiver::WEBSITES_RECORD_NAME, $idSite, $period, $date, $segment, $expanded, $flat, $idSubtable = null); + + if ($flat) { + $dataTable->filterSubtables('Piwik\Plugins\Referrers\DataTable\Filter\UrlsFromWebsiteId'); + } else { + $dataTable->filter('AddSegmentByLabel', array('referrerName')); + } + return $dataTable; } public function getUrlsFromWebsiteId($idSite, $period, $date, $idSubtable, $segment = false) { $dataTable = $this->getDataTable(Archiver::WEBSITES_RECORD_NAME, $idSite, $period, $date, $segment, $expanded = false, $idSubtable); - // the htmlspecialchars_decode call is for BC for before 1.1 - // as the Referrer URL was previously encoded in the log tables, but is now recorded raw - $dataTable->queueFilter('ColumnCallbackAddMetadata', array('label', 'url', function ($label) { - return htmlspecialchars_decode($label); - })); - $dataTable->queueFilter('ColumnCallbackReplace', array('label', __NAMESPACE__ . '\getPathFromUrl')); + $dataTable->filter('Piwik\Plugins\Referrers\DataTable\Filter\UrlsFromWebsiteId'); + return $dataTable; } diff --git a/plugins/Referrers/DataTable/Filter/UrlsFromWebsiteId.php b/plugins/Referrers/DataTable/Filter/UrlsFromWebsiteId.php new file mode 100644 index 0000000000..c35d60b463 --- /dev/null +++ b/plugins/Referrers/DataTable/Filter/UrlsFromWebsiteId.php @@ -0,0 +1,46 @@ +<?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\Referrers\DataTable\Filter; + +use Piwik\DataTable\BaseFilter; +use Piwik\DataTable\Row; +use Piwik\DataTable; + +class UrlsFromWebsiteId extends BaseFilter +{ + /** + * Constructor. + * + * @param DataTable $table The table to eventually filter. + */ + public function __construct($table) + { + parent::__construct($table); + } + + /** + * @param DataTable $table + */ + public function filter($table) + { + // the htmlspecialchars_decode call is for BC for before 1.1 + // as the Referrer URL was previously encoded in the log tables, but is now recorded raw + $table->queueFilter('ColumnCallbackAddMetadata', array('label', 'url', function ($label) { + return htmlspecialchars_decode($label); + })); + $table->queueFilter('ColumnCallbackReplace', array('label', 'Piwik\Plugins\Referrers\getPathFromUrl')); + + foreach ($table->getRows() as $row) { + $subtable = $row->getSubtable(); + if ($subtable) { + $this->filter($subtable); + } + } + } +}
\ No newline at end of file diff --git a/plugins/Referrers/Reports/GetWebsites.php b/plugins/Referrers/Reports/GetWebsites.php index e394eb43d9..18f9336a63 100644 --- a/plugins/Referrers/Reports/GetWebsites.php +++ b/plugins/Referrers/Reports/GetWebsites.php @@ -21,6 +21,7 @@ class GetWebsites extends Base $this->dimension = new Website(); $this->name = Piwik::translate('CorePluginsAdmin_Websites'); $this->documentation = Piwik::translate('Referrers_WebsitesReportDocumentation', '<br />'); + $this->recursiveLabelSeparator = '/'; $this->actionToLoadSubTables = 'getUrlsFromWebsiteId'; $this->hasGoalMetrics = true; $this->order = 5; diff --git a/tests/PHPUnit/System/BlobReportLimitingTest.php b/tests/PHPUnit/System/BlobReportLimitingTest.php index f40305d1ad..84734b7b80 100755 --- a/tests/PHPUnit/System/BlobReportLimitingTest.php +++ b/tests/PHPUnit/System/BlobReportLimitingTest.php @@ -94,6 +94,23 @@ class BlobReportLimitingTest extends SystemTestCase $this->runApiTests($api, $params); } + /** + * @dataProvider getApiForTesting + */ + public function testApiWithFlattening($apiToCall, $params) + { + if (empty($params['testSuffix'])) { + $params['testSuffix'] = ''; + } + $params['testSuffix'] .= '_flattened'; + if (empty($params['otherRequestParameters'])) { + $params['otherRequestParameters'] = array(); + } + $params['otherRequestParameters']['flat'] = '1'; + + $this->runApiTests($apiToCall, $params); + } + public function testApiWithRankingQuery() { // custom setup diff --git a/tests/PHPUnit/System/expected/test_CustomEvents_Events.getAction_flat__API.getProcessedReport_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents_Events.getAction_flat__API.getProcessedReport_day.xml index ee9ccea1e0..acf2eb6cf2 100644 --- a/tests/PHPUnit/System/expected/test_CustomEvents_Events.getAction_flat__API.getProcessedReport_day.xml +++ b/tests/PHPUnit/System/expected/test_CustomEvents_Events.getAction_flat__API.getProcessedReport_day.xml @@ -222,11 +222,7 @@ <result prettyDate="Saturday 9 January 2010" /> </reportData> <reportMetadata> - <result prettyDate="Sunday 3 January 2010"> - <row> - <segment>eventAction==Purchase</segment> - </row> - </result> + <result prettyDate="Sunday 3 January 2010" /> <result prettyDate="Monday 4 January 2010" /> <result prettyDate="Tuesday 5 January 2010" /> <result prettyDate="Wednesday 6 January 2010" /> @@ -235,7 +231,7 @@ <result prettyDate="Saturday 9 January 2010" /> </reportMetadata> <reportTotal> - <nb_visits>38</nb_visits> - <nb_uniq_visitors>38</nb_uniq_visitors> + <nb_visits>42</nb_visits> + <nb_uniq_visitors>40</nb_uniq_visitors> </reportTotal> </result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_FlattenReports__Actions.getPageUrls_week.xml b/tests/PHPUnit/System/expected/test_FlattenReports__Actions.getPageUrls_week.xml index 59b45f61fe..1f0e32ad7d 100644 --- a/tests/PHPUnit/System/expected/test_FlattenReports__Actions.getPageUrls_week.xml +++ b/tests/PHPUnit/System/expected/test_FlattenReports__Actions.getPageUrls_week.xml @@ -179,6 +179,7 @@ <avg_time_on_page>0</avg_time_on_page> <bounce_rate>0%</bounce_rate> <exit_rate>100%</exit_rate> + <avg_time_generation>0</avg_time_generation> <url>http://example.org/page1.html</url> <segment>pageUrl==http%3A%2F%2Fexample.org%2Fpage1.html</segment> </row> @@ -187,6 +188,9 @@ <nb_visits>1</nb_visits> <nb_hits>1</nb_hits> <sum_time_spent>0</sum_time_spent> + <nb_hits_with_time_generation>0</nb_hits_with_time_generation> + <min_time_generation /> + <max_time_generation /> <entry_nb_visits>1</entry_nb_visits> <entry_nb_actions>2</entry_nb_actions> <entry_sum_visit_length>1</entry_sum_visit_length> @@ -196,6 +200,7 @@ <avg_time_on_page>0</avg_time_on_page> <bounce_rate>0%</bounce_rate> <exit_rate>0%</exit_rate> + <avg_time_generation>0</avg_time_generation> <url>http://example.org/sub/dir/dir1/page1.html</url> <segment>pageUrl==http%3A%2F%2Fexample.org%2Fsub%2Fdir%2Fdir1%2Fpage1.html</segment> </row> diff --git a/tests/PHPUnit/System/expected/test_FlattenReports_withAggregate__Actions.getPageUrls_week.xml b/tests/PHPUnit/System/expected/test_FlattenReports_withAggregate__Actions.getPageUrls_week.xml index d02a61ce87..f5a617dfd0 100644 --- a/tests/PHPUnit/System/expected/test_FlattenReports_withAggregate__Actions.getPageUrls_week.xml +++ b/tests/PHPUnit/System/expected/test_FlattenReports_withAggregate__Actions.getPageUrls_week.xml @@ -76,8 +76,8 @@ <exit_rate>0%</exit_rate> <avg_time_generation>0.15</avg_time_generation> <url>http://example.org/dir1/sub/dir/page0.html</url> - <segment>pageUrl==http%3A%2F%2Fexample.org%2Fdir1%2Fsub%2Fdir%2Fpage0.html</segment> <is_aggregate>0</is_aggregate> + <segment>pageUrl==http%3A%2F%2Fexample.org%2Fdir1%2Fsub%2Fdir%2Fpage0.html</segment> </row> <row> <label>dir1/sub/dir/page1.html</label> @@ -93,8 +93,8 @@ <exit_rate>0%</exit_rate> <avg_time_generation>0.3</avg_time_generation> <url>http://example.org/dir1/sub/dir/page1.html</url> - <segment>pageUrl==http%3A%2F%2Fexample.org%2Fdir1%2Fsub%2Fdir%2Fpage1.html</segment> <is_aggregate>0</is_aggregate> + <segment>pageUrl==http%3A%2F%2Fexample.org%2Fdir1%2Fsub%2Fdir%2Fpage1.html</segment> </row> <row> <label>dir1/sub/dir/page2.html</label> @@ -112,8 +112,8 @@ <exit_rate>100%</exit_rate> <avg_time_generation>0.45</avg_time_generation> <url>http://example.org/dir1/sub/dir/page2.html</url> - <segment>pageUrl==http%3A%2F%2Fexample.org%2Fdir1%2Fsub%2Fdir%2Fpage2.html</segment> <is_aggregate>0</is_aggregate> + <segment>pageUrl==http%3A%2F%2Fexample.org%2Fdir1%2Fsub%2Fdir%2Fpage2.html</segment> </row> <row> <label>dir2</label> @@ -191,8 +191,8 @@ <exit_rate>0%</exit_rate> <avg_time_generation>0.3</avg_time_generation> <url>http://example.org/dir2/sub/dir/page0.html</url> - <segment>pageUrl==http%3A%2F%2Fexample.org%2Fdir2%2Fsub%2Fdir%2Fpage0.html</segment> <is_aggregate>0</is_aggregate> + <segment>pageUrl==http%3A%2F%2Fexample.org%2Fdir2%2Fsub%2Fdir%2Fpage0.html</segment> </row> <row> <label>dir2/sub/dir/page1.html</label> @@ -208,8 +208,8 @@ <exit_rate>0%</exit_rate> <avg_time_generation>0.6</avg_time_generation> <url>http://example.org/dir2/sub/dir/page1.html</url> - <segment>pageUrl==http%3A%2F%2Fexample.org%2Fdir2%2Fsub%2Fdir%2Fpage1.html</segment> <is_aggregate>0</is_aggregate> + <segment>pageUrl==http%3A%2F%2Fexample.org%2Fdir2%2Fsub%2Fdir%2Fpage1.html</segment> </row> <row> <label>dir2/sub/dir/page2.html</label> @@ -227,8 +227,8 @@ <exit_rate>100%</exit_rate> <avg_time_generation>0.9</avg_time_generation> <url>http://example.org/dir2/sub/dir/page2.html</url> - <segment>pageUrl==http%3A%2F%2Fexample.org%2Fdir2%2Fsub%2Fdir%2Fpage2.html</segment> <is_aggregate>0</is_aggregate> + <segment>pageUrl==http%3A%2F%2Fexample.org%2Fdir2%2Fsub%2Fdir%2Fpage2.html</segment> </row> <row> <label>dir3</label> @@ -306,8 +306,8 @@ <exit_rate>0%</exit_rate> <avg_time_generation>0.45</avg_time_generation> <url>http://example.org/dir3/sub/dir/page0.html</url> - <segment>pageUrl==http%3A%2F%2Fexample.org%2Fdir3%2Fsub%2Fdir%2Fpage0.html</segment> <is_aggregate>0</is_aggregate> + <segment>pageUrl==http%3A%2F%2Fexample.org%2Fdir3%2Fsub%2Fdir%2Fpage0.html</segment> </row> <row> <label>dir3/sub/dir/page1.html</label> @@ -323,8 +323,8 @@ <exit_rate>0%</exit_rate> <avg_time_generation>0.9</avg_time_generation> <url>http://example.org/dir3/sub/dir/page1.html</url> - <segment>pageUrl==http%3A%2F%2Fexample.org%2Fdir3%2Fsub%2Fdir%2Fpage1.html</segment> <is_aggregate>0</is_aggregate> + <segment>pageUrl==http%3A%2F%2Fexample.org%2Fdir3%2Fsub%2Fdir%2Fpage1.html</segment> </row> <row> <label>dir3/sub/dir/page2.html</label> @@ -342,8 +342,8 @@ <exit_rate>100%</exit_rate> <avg_time_generation>1.35</avg_time_generation> <url>http://example.org/dir3/sub/dir/page2.html</url> - <segment>pageUrl==http%3A%2F%2Fexample.org%2Fdir3%2Fsub%2Fdir%2Fpage2.html</segment> <is_aggregate>0</is_aggregate> + <segment>pageUrl==http%3A%2F%2Fexample.org%2Fdir3%2Fsub%2Fdir%2Fpage2.html</segment> </row> <row> <label>page1.html</label> @@ -387,6 +387,9 @@ <nb_visits>1</nb_visits> <nb_hits>1</nb_hits> <sum_time_spent>0</sum_time_spent> + <nb_hits_with_time_generation>0</nb_hits_with_time_generation> + <min_time_generation /> + <max_time_generation>0</max_time_generation> <entry_nb_visits>1</entry_nb_visits> <entry_nb_actions>2</entry_nb_actions> <entry_sum_visit_length>1</entry_sum_visit_length> @@ -402,6 +405,9 @@ <nb_visits>1</nb_visits> <nb_hits>1</nb_hits> <sum_time_spent>0</sum_time_spent> + <nb_hits_with_time_generation>0</nb_hits_with_time_generation> + <min_time_generation /> + <max_time_generation>0</max_time_generation> <entry_nb_visits>1</entry_nb_visits> <entry_nb_actions>2</entry_nb_actions> <entry_sum_visit_length>1</entry_sum_visit_length> @@ -417,6 +423,9 @@ <nb_visits>1</nb_visits> <nb_hits>1</nb_hits> <sum_time_spent>0</sum_time_spent> + <nb_hits_with_time_generation>0</nb_hits_with_time_generation> + <min_time_generation /> + <max_time_generation /> <entry_nb_visits>1</entry_nb_visits> <entry_nb_actions>2</entry_nb_actions> <entry_sum_visit_length>1</entry_sum_visit_length> @@ -428,7 +437,7 @@ <exit_rate>0%</exit_rate> <avg_time_generation>0</avg_time_generation> <url>http://example.org/sub/dir/dir1/page1.html</url> - <segment>pageUrl==http%3A%2F%2Fexample.org%2Fsub%2Fdir%2Fdir1%2Fpage1.html</segment> <is_aggregate>0</is_aggregate> + <segment>pageUrl==http%3A%2F%2Fexample.org%2Fsub%2Fdir%2Fdir1%2Fpage1.html</segment> </row> </result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getDownloads_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getDownloads_day.xml new file mode 100644 index 0000000000..72511ca5a3 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getDownloads_day.xml @@ -0,0 +1,92 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result> + <row> + <label>cloudsite5.com/20/download</label> + <nb_visits>1</nb_visits> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_hits>1</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors> + <entry_nb_visits>1</entry_nb_visits> + <entry_nb_actions>1</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>1</entry_bounce_count> + <exit_nb_uniq_visitors>1</exit_nb_uniq_visitors> + <exit_nb_visits>1</exit_nb_visits> + <url>http://cloudsite5.com/20/download</url> + </row> + <row> + <label>cloudsite5.com/ - Others</label> + <nb_visits>4</nb_visits> + <nb_hits>4</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_visits>4</entry_nb_visits> + <entry_nb_actions>4</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>4</entry_bounce_count> + <exit_nb_visits>4</exit_nb_visits> + </row> + <row> + <label>cloudsite6.com/24/download</label> + <nb_visits>1</nb_visits> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_hits>1</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors> + <entry_nb_visits>1</entry_nb_visits> + <entry_nb_actions>1</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>1</entry_bounce_count> + <exit_nb_uniq_visitors>1</exit_nb_uniq_visitors> + <exit_nb_visits>1</exit_nb_visits> + <url>http://cloudsite6.com/24/download</url> + </row> + <row> + <label>cloudsite6.com/ - Others</label> + <nb_visits>4</nb_visits> + <nb_hits>4</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_visits>4</entry_nb_visits> + <entry_nb_actions>4</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>4</entry_bounce_count> + <exit_nb_visits>4</exit_nb_visits> + </row> + <row> + <label>cloudsite7.com/28/download</label> + <nb_visits>1</nb_visits> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_hits>1</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors> + <entry_nb_visits>1</entry_nb_visits> + <entry_nb_actions>1</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>1</entry_bounce_count> + <exit_nb_uniq_visitors>1</exit_nb_uniq_visitors> + <exit_nb_visits>1</exit_nb_visits> + <url>http://cloudsite7.com/28/download</url> + </row> + <row> + <label>cloudsite7.com/ - Others</label> + <nb_visits>4</nb_visits> + <nb_hits>4</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_visits>4</entry_nb_visits> + <entry_nb_actions>4</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>4</entry_bounce_count> + <exit_nb_visits>4</exit_nb_visits> + </row> + <row> + <label>Others</label> + <nb_visits>10</nb_visits> + <nb_hits>10</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_visits>10</entry_nb_visits> + <entry_nb_actions>10</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>10</entry_bounce_count> + <exit_nb_visits>10</exit_nb_visits> + </row> +</result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getOutlinks_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getOutlinks_day.xml new file mode 100644 index 0000000000..b64d792953 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getOutlinks_day.xml @@ -0,0 +1,92 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result> + <row> + <label>othersite10.com/</label> + <nb_visits>1</nb_visits> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_hits>1</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors> + <entry_nb_visits>1</entry_nb_visits> + <entry_nb_actions>1</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>1</entry_bounce_count> + <exit_nb_uniq_visitors>1</exit_nb_uniq_visitors> + <exit_nb_visits>1</exit_nb_visits> + <url>http://othersite10.com/</url> + </row> + <row> + <label>othersite10.com/ - Others</label> + <nb_visits>4</nb_visits> + <nb_hits>4</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_visits>4</entry_nb_visits> + <entry_nb_actions>4</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>4</entry_bounce_count> + <exit_nb_visits>4</exit_nb_visits> + </row> + <row> + <label>othersite11.com/</label> + <nb_visits>1</nb_visits> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_hits>1</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors> + <entry_nb_visits>1</entry_nb_visits> + <entry_nb_actions>1</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>1</entry_bounce_count> + <exit_nb_uniq_visitors>1</exit_nb_uniq_visitors> + <exit_nb_visits>1</exit_nb_visits> + <url>http://othersite11.com/</url> + </row> + <row> + <label>othersite11.com/ - Others</label> + <nb_visits>4</nb_visits> + <nb_hits>4</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_visits>4</entry_nb_visits> + <entry_nb_actions>4</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>4</entry_bounce_count> + <exit_nb_visits>4</exit_nb_visits> + </row> + <row> + <label>othersite12.com/</label> + <nb_visits>1</nb_visits> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_hits>1</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors> + <entry_nb_visits>1</entry_nb_visits> + <entry_nb_actions>1</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>1</entry_bounce_count> + <exit_nb_uniq_visitors>1</exit_nb_uniq_visitors> + <exit_nb_visits>1</exit_nb_visits> + <url>http://othersite12.com/</url> + </row> + <row> + <label>othersite12.com/ - Others</label> + <nb_visits>4</nb_visits> + <nb_hits>4</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_visits>4</entry_nb_visits> + <entry_nb_actions>4</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>4</entry_bounce_count> + <exit_nb_visits>4</exit_nb_visits> + </row> + <row> + <label>Others</label> + <nb_visits>10</nb_visits> + <nb_hits>10</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_visits>10</entry_nb_visits> + <entry_nb_actions>10</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>10</entry_bounce_count> + <exit_nb_visits>10</exit_nb_visits> + </row> +</result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getPageTitles_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getPageTitles_day.xml new file mode 100644 index 0000000000..cad09e34a6 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getPageTitles_day.xml @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result> + <row> + <label>title_0/title_0</label> + <nb_visits>1</nb_visits> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_hits>1</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors> + <entry_nb_visits>1</entry_nb_visits> + <entry_nb_actions>1</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>1</entry_bounce_count> + <exit_nb_uniq_visitors>1</exit_nb_uniq_visitors> + <exit_nb_visits>1</exit_nb_visits> + <avg_time_on_page>0</avg_time_on_page> + <bounce_rate>100%</bounce_rate> + <exit_rate>100%</exit_rate> + </row> + <row> + <label>title_0/ - Others</label> + <nb_visits>3</nb_visits> + <nb_hits>3</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_visits>3</entry_nb_visits> + <entry_nb_actions>3</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>3</entry_bounce_count> + <exit_nb_visits>3</exit_nb_visits> + <avg_time_on_page>0</avg_time_on_page> + <bounce_rate>100%</bounce_rate> + <exit_rate>100%</exit_rate> + </row> + <row> + <label>title_0</label> + <nb_visits>1</nb_visits> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_hits>1</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors> + <entry_nb_visits>1</entry_nb_visits> + <entry_nb_actions>1</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>1</entry_bounce_count> + <exit_nb_uniq_visitors>1</exit_nb_uniq_visitors> + <exit_nb_visits>1</exit_nb_visits> + <avg_time_on_page>0</avg_time_on_page> + <bounce_rate>100%</bounce_rate> + <exit_rate>100%</exit_rate> + </row> + <row> + <label>title_1</label> + <nb_visits>1</nb_visits> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_hits>1</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors> + <entry_nb_visits>1</entry_nb_visits> + <entry_nb_actions>1</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>1</entry_bounce_count> + <exit_nb_uniq_visitors>1</exit_nb_uniq_visitors> + <exit_nb_visits>1</exit_nb_visits> + <avg_time_on_page>0</avg_time_on_page> + <bounce_rate>100%</bounce_rate> + <exit_rate>100%</exit_rate> + </row> + <row> + <label>Others</label> + <nb_visits>19</nb_visits> + <nb_hits>19</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_visits>19</entry_nb_visits> + <entry_nb_actions>19</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>19</entry_bounce_count> + <exit_nb_visits>19</exit_nb_visits> + <avg_time_on_page>0</avg_time_on_page> + <bounce_rate>100%</bounce_rate> + <exit_rate>100%</exit_rate> + </row> +</result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getPageUrls_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getPageUrls_day.xml new file mode 100644 index 0000000000..d040324503 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Actions.getPageUrls_day.xml @@ -0,0 +1,116 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result> + <row> + <label>0/index</label> + <nb_visits>1</nb_visits> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_hits>1</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors> + <entry_nb_visits>1</entry_nb_visits> + <entry_nb_actions>1</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>1</entry_bounce_count> + <exit_nb_uniq_visitors>1</exit_nb_uniq_visitors> + <exit_nb_visits>1</exit_nb_visits> + <avg_time_on_page>0</avg_time_on_page> + <bounce_rate>100%</bounce_rate> + <exit_rate>100%</exit_rate> + <url>http://piwik.net/0/</url> + <segment>pageUrl==http%3A%2F%2Fpiwik.net%2F0%2F</segment> + </row> + <row> + <label>0/ - Others</label> + <nb_visits>4</nb_visits> + <nb_hits>4</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_visits>4</entry_nb_visits> + <entry_nb_actions>4</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>4</entry_bounce_count> + <exit_nb_visits>4</exit_nb_visits> + <avg_time_on_page>0</avg_time_on_page> + <bounce_rate>100%</bounce_rate> + <exit_rate>100%</exit_rate> + </row> + <row> + <label>1/index</label> + <nb_visits>1</nb_visits> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_hits>1</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors> + <entry_nb_visits>1</entry_nb_visits> + <entry_nb_actions>1</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>1</entry_bounce_count> + <exit_nb_uniq_visitors>1</exit_nb_uniq_visitors> + <exit_nb_visits>1</exit_nb_visits> + <avg_time_on_page>0</avg_time_on_page> + <bounce_rate>100%</bounce_rate> + <exit_rate>100%</exit_rate> + <url>http://piwik.net/1/</url> + <segment>pageUrl==http%3A%2F%2Fpiwik.net%2F1%2F</segment> + </row> + <row> + <label>1/ - Others</label> + <nb_visits>4</nb_visits> + <nb_hits>4</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_visits>4</entry_nb_visits> + <entry_nb_actions>4</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>4</entry_bounce_count> + <exit_nb_visits>4</exit_nb_visits> + <avg_time_on_page>0</avg_time_on_page> + <bounce_rate>100%</bounce_rate> + <exit_rate>100%</exit_rate> + </row> + <row> + <label>2/index</label> + <nb_visits>1</nb_visits> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_hits>1</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_uniq_visitors>1</entry_nb_uniq_visitors> + <entry_nb_visits>1</entry_nb_visits> + <entry_nb_actions>1</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>1</entry_bounce_count> + <exit_nb_uniq_visitors>1</exit_nb_uniq_visitors> + <exit_nb_visits>1</exit_nb_visits> + <avg_time_on_page>0</avg_time_on_page> + <bounce_rate>100%</bounce_rate> + <exit_rate>100%</exit_rate> + <url>http://piwik.net/2/</url> + <segment>pageUrl==http%3A%2F%2Fpiwik.net%2F2%2F</segment> + </row> + <row> + <label>2/ - Others</label> + <nb_visits>4</nb_visits> + <nb_hits>4</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_visits>4</entry_nb_visits> + <entry_nb_actions>4</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>4</entry_bounce_count> + <exit_nb_visits>4</exit_nb_visits> + <avg_time_on_page>0</avg_time_on_page> + <bounce_rate>100%</bounce_rate> + <exit_rate>100%</exit_rate> + </row> + <row> + <label>Others</label> + <nb_visits>10</nb_visits> + <nb_hits>10</nb_hits> + <sum_time_spent>0</sum_time_spent> + <entry_nb_visits>10</entry_nb_visits> + <entry_nb_actions>10</entry_nb_actions> + <entry_sum_visit_length>0</entry_sum_visit_length> + <entry_bounce_count>10</entry_bounce_count> + <exit_nb_visits>10</exit_nb_visits> + <avg_time_on_page>0</avg_time_on_page> + <bounce_rate>100%</bounce_rate> + <exit_rate>100%</exit_rate> + </row> +</result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__CustomVariables.getCustomVariables_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__CustomVariables.getCustomVariables_day.xml new file mode 100644 index 0000000000..174bde9a67 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__CustomVariables.getCustomVariables_day.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result> + <row> + <label>liked - y</label> + <nb_visits>16</nb_visits> + <nb_actions>16</nb_actions> + </row> + <row> + <label>liked - Others</label> + <nb_visits>4</nb_visits> + <nb_actions>4</nb_actions> + </row> + <row> + <label>tweeted - n</label> + <nb_visits>10</nb_visits> + <nb_actions>10</nb_actions> + </row> + <row> + <label>tweeted - Others</label> + <nb_visits>10</nb_visits> + <nb_actions>10</nb_actions> + </row> + <row> + <label>Others</label> + <nb_actions>60</nb_actions> + </row> +</result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__DevicesDetection.getBrowserVersions_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__DevicesDetection.getBrowserVersions_day.xml new file mode 100644 index 0000000000..23bcf1329b --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__DevicesDetection.getBrowserVersions_day.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result> + <row> + <label>Firefox 6.0</label> + <nb_uniq_visitors>3</nb_uniq_visitors> + <nb_visits>15</nb_visits> + <nb_actions>15</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>15</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <segment>browserCode==FF;browserVersion==6.0</segment> + <logo>plugins/DevicesDetection/images/browsers/FF.gif</logo> + </row> + <row> + <label>Internet Explorer 9.0</label> + <nb_uniq_visitors>3</nb_uniq_visitors> + <nb_visits>15</nb_visits> + <nb_actions>15</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>15</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <segment>browserCode==IE;browserVersion==9.0</segment> + <logo>plugins/DevicesDetection/images/browsers/IE.gif</logo> + </row> + <row> + <label>Others</label> + <nb_uniq_visitors>9</nb_uniq_visitors> + <nb_visits>45</nb_visits> + <nb_actions>45</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>45</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <logo>plugins/DevicesDetection/images/browsers/UNK.gif</logo> + </row> +</result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__DevicesDetection.getOsVersions_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__DevicesDetection.getOsVersions_day.xml new file mode 100644 index 0000000000..99b2ce1993 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__DevicesDetection.getOsVersions_day.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result> + <row> + <label>GNU/Linux</label> + <nb_uniq_visitors>4</nb_uniq_visitors> + <nb_visits>20</nb_visits> + <nb_actions>20</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>20</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <segment>operatingSystemCode==LIN;operatingSystemVersion==</segment> + <logo>plugins/DevicesDetection/images/os/LIN.gif</logo> + </row> + <row> + <label>Android 4.0</label> + <nb_uniq_visitors>3</nb_uniq_visitors> + <nb_visits>15</nb_visits> + <nb_actions>15</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>15</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <segment>operatingSystemCode==AND;operatingSystemVersion==4.0</segment> + <logo>plugins/DevicesDetection/images/os/AND.gif</logo> + </row> + <row> + <label>Others</label> + <nb_uniq_visitors>8</nb_uniq_visitors> + <nb_visits>40</nb_visits> + <nb_actions>40</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>40</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <logo>plugins/DevicesDetection/images/os/UNK.gif</logo> + </row> +</result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Goals.getItemsCategory_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Goals.getItemsCategory_day.xml new file mode 100644 index 0000000000..a8d3e17e53 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Goals.getItemsCategory_day.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result> + <row> + <label>Books Cat #0</label> + <nb_uniq_visitors>5</nb_uniq_visitors> + <nb_visits>5</nb_visits> + <nb_actions>5</nb_actions> + <avg_price>7.5</avg_price> + <avg_quantity>0</avg_quantity> + <conversion_rate>0%</conversion_rate> + </row> + <row> + <label>Others</label> + <nb_uniq_visitors>20</nb_uniq_visitors> + <nb_visits>20</nb_visits> + <nb_actions>20</nb_actions> + <avg_price>30</avg_price> + <avg_quantity>0</avg_quantity> + <conversion_rate>0%</conversion_rate> + </row> +</result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Goals.getItemsName_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Goals.getItemsName_day.xml new file mode 100644 index 0000000000..95cb364b56 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Goals.getItemsName_day.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result> + <row> + <label>Book0</label> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_visits>1</nb_visits> + <nb_actions>1</nb_actions> + <avg_price>7.5</avg_price> + <avg_quantity>0</avg_quantity> + <conversion_rate>0%</conversion_rate> + </row> + <row> + <label>Others</label> + <nb_uniq_visitors>24</nb_uniq_visitors> + <nb_visits>24</nb_visits> + <nb_actions>24</nb_actions> + <avg_price>180</avg_price> + <avg_quantity>0</avg_quantity> + <conversion_rate>0%</conversion_rate> + </row> +</result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Goals.getItemsSku_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Goals.getItemsSku_day.xml new file mode 100644 index 0000000000..c234bed59e --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Goals.getItemsSku_day.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result />
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getAll_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getAll_day.xml new file mode 100644 index 0000000000..8202c35460 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getAll_day.xml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result> + <row> + <label>whatever1.com</label> + <nb_uniq_visitors>2</nb_uniq_visitors> + <nb_visits>2</nb_visits> + <nb_actions>2</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>2</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <referer_type>3</referer_type> + </row> + <row> + <label>whatever0.com</label> + <nb_uniq_visitors>3</nb_uniq_visitors> + <nb_visits>4</nb_visits> + <nb_actions>4</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>4</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <referer_type>3</referer_type> + </row> + <row> + <label>search term 2</label> + <nb_uniq_visitors>2</nb_uniq_visitors> + <nb_visits>2</nb_visits> + <nb_actions>2</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>2</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <referer_type>2</referer_type> + </row> + <row> + <label>this search term</label> + <nb_uniq_visitors>3</nb_uniq_visitors> + <nb_visits>3</nb_visits> + <nb_actions>3</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>3</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <referer_type>2</referer_type> + </row> + <row> + <label>Others</label> + <nb_uniq_visitors>9</nb_uniq_visitors> + <nb_visits>9</nb_visits> + <nb_actions>9</nb_actions> + <nb_users>0</nb_users> + <max_actions>2</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>9</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + </row> +</result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getKeywords_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getKeywords_day.xml new file mode 100644 index 0000000000..d093798ebf --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getKeywords_day.xml @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result> + <row> + <label>this search term - Ask</label> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_visits>1</nb_visits> + <nb_actions>1</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>1</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + </row> + <row> + <label>this search term - Others</label> + <nb_uniq_visitors>2</nb_uniq_visitors> + <nb_visits>2</nb_visits> + <nb_actions>2</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>2</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + </row> + <row> + <label>search term 2 - Alexa</label> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_visits>1</nb_visits> + <nb_actions>1</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>1</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + </row> + <row> + <label>search term 2 - Babylon</label> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_visits>1</nb_visits> + <nb_actions>1</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>1</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + </row> + <row> + <label>Others</label> + <nb_uniq_visitors>7</nb_uniq_visitors> + <nb_visits>7</nb_visits> + <nb_actions>7</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>7</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + </row> +</result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getReferrerType_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getReferrerType_day.xml new file mode 100644 index 0000000000..f07a335d7a --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getReferrerType_day.xml @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result> + <row> + <label>Direct Entry</label> + <nb_uniq_visitors>15</nb_uniq_visitors> + <nb_visits>55</nb_visits> + <nb_actions>55</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>55</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + </row> + <row> + <label>Search Engines - this search term</label> + <nb_uniq_visitors>3</nb_uniq_visitors> + <nb_visits>3</nb_visits> + <nb_actions>3</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>3</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + </row> + <row> + <label>Search Engines - search term 2</label> + <nb_uniq_visitors>2</nb_uniq_visitors> + <nb_visits>2</nb_visits> + <nb_actions>2</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>2</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + </row> + <row> + <label>Search Engines - Others</label> + <nb_uniq_visitors>7</nb_uniq_visitors> + <nb_visits>7</nb_visits> + <nb_actions>7</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>7</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + </row> + <row> + <label>Websites - whatever0.com</label> + <nb_uniq_visitors>3</nb_uniq_visitors> + <nb_visits>4</nb_visits> + <nb_actions>4</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>4</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + </row> + <row> + <label>Websites - whatever1.com</label> + <nb_uniq_visitors>2</nb_uniq_visitors> + <nb_visits>2</nb_visits> + <nb_actions>2</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>2</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + </row> + <row> + <label>Websites - Others</label> + <nb_uniq_visitors>2</nb_uniq_visitors> + <nb_visits>2</nb_visits> + <nb_actions>2</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>2</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + </row> +</result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getSearchEngines_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getSearchEngines_day.xml new file mode 100644 index 0000000000..cb1d70e35b --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getSearchEngines_day.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result> + <row> + <label>Google - search term 3</label> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_visits>1</nb_visits> + <nb_actions>1</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>1</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <logo>plugins/Referrers/images/searchEngines/google.com.png</logo> + </row> + <row> + <label>Google - Others</label> + <nb_uniq_visitors>2</nb_uniq_visitors> + <nb_visits>2</nb_visits> + <nb_actions>2</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>2</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <logo>plugins/Referrers/images/searchEngines/google.com.png</logo> + </row> + <row> + <label>Yahoo! - search term 4</label> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_visits>1</nb_visits> + <nb_actions>1</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>1</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <logo>plugins/Referrers/images/searchEngines/search.yahoo.com.png</logo> + </row> + <row> + <label>Yahoo! - Others</label> + <nb_uniq_visitors>2</nb_uniq_visitors> + <nb_visits>2</nb_visits> + <nb_actions>2</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>2</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <logo>plugins/Referrers/images/searchEngines/search.yahoo.com.png</logo> + </row> + <row> + <label>Others</label> + <nb_uniq_visitors>6</nb_uniq_visitors> + <nb_visits>6</nb_visits> + <nb_actions>6</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>6</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <url>URL unknown!</url> + <logo>plugins/Referrers/images/searchEngines/xx.png</logo> + </row> +</result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getWebsites_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getWebsites_day.xml new file mode 100644 index 0000000000..3691c0259b --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getWebsites_day.xml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result> + <row> + <label>whatever0.com/index</label> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_visits>2</nb_visits> + <nb_actions>2</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>2</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <url>http://whatever0.com/0</url> + </row> + <row> + <label>whatever0.com/ - Others</label> + <nb_uniq_visitors>2</nb_uniq_visitors> + <nb_visits>2</nb_visits> + <nb_actions>2</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>2</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <url>Others</url> + </row> + <row> + <label>whatever1.com/index</label> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_visits>1</nb_visits> + <nb_actions>1</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>1</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <url>http://whatever1.com/0</url> + </row> + <row> + <label>whatever1.com/2</label> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_visits>1</nb_visits> + <nb_actions>1</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>1</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <url>http://whatever1.com/2</url> + </row> + <row> + <label>Others</label> + <nb_uniq_visitors>2</nb_uniq_visitors> + <nb_visits>2</nb_visits> + <nb_actions>2</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>2</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + </row> +</result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Resolution.getConfiguration_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Resolution.getConfiguration_day.xml new file mode 100644 index 0000000000..b90214c2e9 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Resolution.getConfiguration_day.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result> + <row> + <label>GNU/Linux / Firefox / 1920x1080</label> + <nb_uniq_visitors>2</nb_uniq_visitors> + <nb_visits>10</nb_visits> + <nb_actions>10</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>10</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + </row> + <row> + <label>Android / Chrome / 1280x1024</label> + <nb_uniq_visitors>1</nb_uniq_visitors> + <nb_visits>5</nb_visits> + <nb_actions>5</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>5</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + </row> + <row> + <label>Others</label> + <nb_uniq_visitors>12</nb_uniq_visitors> + <nb_visits>60</nb_visits> + <nb_actions>60</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>60</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + </row> +</result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Resolution.getResolution_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Resolution.getResolution_day.xml new file mode 100644 index 0000000000..70e4bab0ff --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Resolution.getResolution_day.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result> + <row> + <label>1920x1080</label> + <nb_uniq_visitors>4</nb_uniq_visitors> + <nb_visits>20</nb_visits> + <nb_actions>20</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>20</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <segment>resolution==1920x1080</segment> + </row> + <row> + <label>1280x1024</label> + <nb_uniq_visitors>3</nb_uniq_visitors> + <nb_visits>15</nb_visits> + <nb_actions>15</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>15</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <segment>resolution==1280x1024</segment> + </row> + <row> + <label>Others</label> + <nb_uniq_visitors>8</nb_uniq_visitors> + <nb_visits>40</nb_visits> + <nb_actions>40</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>40</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + </row> +</result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getCity_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getCity_day.xml new file mode 100644 index 0000000000..b9c8e33524 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getCity_day.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result> + <row> + <label>Melbourne, Victoria, Australia</label> + <nb_uniq_visitors>4</nb_uniq_visitors> + <nb_visits>20</nb_visits> + <nb_actions>20</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>20</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <segment>city==Melbourne;regionCode==07;countryCode==au</segment> + <city_name>Melbourne</city_name> + <region>07</region> + <country>au</country> + <country_name>Australia</country_name> + <region_name>Victoria</region_name> + <logo>plugins/UserCountry/images/flags/au.png</logo> + </row> + <row> + <label>Nice, Provence-Alpes-Cote d&#039;Azur, France</label> + <nb_uniq_visitors>4</nb_uniq_visitors> + <nb_visits>20</nb_visits> + <nb_actions>20</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>20</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <segment>city==Nice;regionCode==B8;countryCode==fr</segment> + <city_name>Nice</city_name> + <region>B8</region> + <country>fr</country> + <country_name>France</country_name> + <region_name>Provence-Alpes-Cote d'Azur</region_name> + <logo>plugins/UserCountry/images/flags/fr.png</logo> + </row> + <row> + <label>Others</label> + <nb_uniq_visitors>7</nb_uniq_visitors> + <nb_visits>35</nb_visits> + <nb_actions>35</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>35</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <logo>plugins/UserCountry/images/flags/xx.png</logo> + </row> +</result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getRegion_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getRegion_day.xml new file mode 100644 index 0000000000..e1782dfd61 --- /dev/null +++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getRegion_day.xml @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result> + <row> + <label>Victoria, Australia</label> + <nb_uniq_visitors>4</nb_uniq_visitors> + <nb_visits>20</nb_visits> + <nb_actions>20</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>20</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <segment>regionCode==07;countryCode==au</segment> + <region>07</region> + <country>au</country> + <country_name>Australia</country_name> + <region_name>Victoria</region_name> + <logo>plugins/UserCountry/images/flags/au.png</logo> + </row> + <row> + <label>Provence-Alpes-Cote d&#039;Azur, France</label> + <nb_uniq_visitors>4</nb_uniq_visitors> + <nb_visits>20</nb_visits> + <nb_actions>20</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>20</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <segment>regionCode==B8;countryCode==fr</segment> + <region>B8</region> + <country>fr</country> + <country_name>France</country_name> + <region_name>Provence-Alpes-Cote d'Azur</region_name> + <logo>plugins/UserCountry/images/flags/fr.png</logo> + </row> + <row> + <label>Others</label> + <nb_uniq_visitors>7</nb_uniq_visitors> + <nb_visits>35</nb_visits> + <nb_actions>35</nb_actions> + <nb_users>0</nb_users> + <max_actions>1</max_actions> + <sum_visit_length>0</sum_visit_length> + <bounce_count>35</bounce_count> + <nb_visits_converted>0</nb_visits_converted> + <logo>plugins/UserCountry/images/flags/xx.png</logo> + </row> +</result>
\ No newline at end of file diff --git a/tests/PHPUnit/Unit/DataTable/RowTest.php b/tests/PHPUnit/Unit/DataTable/RowTest.php index 7033299df5..ae8bf699ef 100644 --- a/tests/PHPUnit/Unit/DataTable/RowTest.php +++ b/tests/PHPUnit/Unit/DataTable/RowTest.php @@ -89,35 +89,9 @@ class RowTest extends \PHPUnit_Framework_TestCase $this->assertColumnSavesValue(array(array(1 => '5')), 'testArray', array(array(1 => '5'))); } - public function test_getColumn_shouldResolveACallable() - { - $this->assertColumnSavesValue(6, 'testClosure', function () { - return 6; - }); - - $this->assertColumnSavesValue(7, 'testCallable', array($this, 'callbackReturnScalar')); - } - - public function test_getColumn_shouldPassRowToCallable() - { - $callbackRow = null; - - $this->row->addColumn('testClosure', function (Row $row) use (&$callbackRow) { - $callbackRow = $row; - return $row; - }); - - $returnedRow = $this->row->getColumn('testClosure'); - $this->assertNotEmpty($callbackRow); - $this->assertSame($returnedRow, $callbackRow); - } - public function test_getColumn_shouldReturnFalseIfValueIsNull() { $this->assertColumnSavesValue(false, 'testScalar', null); - $this->assertColumnSavesValue(false, 'testClosure', function () { - return null; - }); } public function test_getColumns_shouldNotCallAnyCallableForSecurity() @@ -136,64 +110,18 @@ class RowTest extends \PHPUnit_Framework_TestCase $this->row->setColumns(array( 'nb_visits' => 4, 'label' => 'Test', - 'closure' => function () { return 5; }, - 'callable' => array($this, 'callbackReturnScalar'), 'goals' => array(1 => array()) )); $expected = array( 'nb_visits' => 4, 'label' => 'Test', - 'closure' => 5, - 'callable' => 7, 'goals' => array(1 => array()) ); $this->assertEquals($expected, $this->row->getColumns()); } - public function test_getColumns_shouldNotConvertNullValuesToFalse() - { - $this->row->setColumns(array( - 'nb_visits' => null, - 'label' => 'Test', - 'closure' => function () { return null; }, - 'boolean' => false - )); - - $expected = array( - 'nb_visits' => null, - 'label' => 'Test', - 'closure' => null, - 'boolean' => false - ); - - $this->assertSame($expected, $this->row->getColumns()); - } - - public function callbackReturnScalar(Row $row) - { - return 7; - } - - public function test_SumRow_shouldIgnoreCallableValues_AndNotRaiseAnyException() - { - $columns = array( - 'nb_visits' => 5, - 'label' => 'Test', - 'closure' => function () { return 7; }, - ); - - $this->row->setColumns($columns); - - $secondRow = new Row(array(Row::COLUMNS => $columns)); - - $this->row->sumRow($secondRow); - - $this->assertEquals(10, $this->row->getColumn('nb_visits')); - $this->assertEquals(7, $this->row->getColumn('closure')); - } - public function test_sumSubTable_whenSubTableAlreadyExists_overwriteExistingSubtable() { $testRow = $this->getTestRowWithSubDataTableNotLoaded(); diff --git a/tests/PHPUnit/Unit/DeprecatedMethodsTest.php b/tests/PHPUnit/Unit/DeprecatedMethodsTest.php index 8336c73c4e..f1a03890c8 100644 --- a/tests/PHPUnit/Unit/DeprecatedMethodsTest.php +++ b/tests/PHPUnit/Unit/DeprecatedMethodsTest.php @@ -61,6 +61,7 @@ class DeprecatedMethodsTest extends \PHPUnit_Framework_TestCase $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\UserSettings', 'renameDeprecatedModuleAndAction', $validTill); $this->assertDeprecatedMethodIsRemovedInPiwik3('\Piwik\Menu\MenuAbstract', 'add'); + $this->assertDeprecatedMethodIsRemovedInPiwik3('\Piwik\Archive', 'getDataTableFromArchive'); } private function assertDeprecatedMethodIsRemoved($className, $method, $removalDate) diff --git a/tests/PHPUnit/Unit/UrlHelperTest.php b/tests/PHPUnit/Unit/UrlHelperTest.php index 189b026828..8ae396d7df 100644 --- a/tests/PHPUnit/Unit/UrlHelperTest.php +++ b/tests/PHPUnit/Unit/UrlHelperTest.php @@ -122,6 +122,14 @@ class UrlHelperTest extends \PHPUnit_Framework_TestCase /**
* @group Core
*/
+ public function testGetPathAndQueryFromNonUrl()
+ {
+ $this->assertEquals('Others', UrlHelper::getPathAndQueryFromUrl('Others'));
+ }
+
+ /**
+ * @group Core
+ */
public function testGetArrayFromQueryString()
{
$expected = array(
|