Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorThomas Steur <thomas.steur@googlemail.com>2014-08-06 00:40:53 +0400
committerThomas Steur <thomas.steur@googlemail.com>2014-08-06 11:02:59 +0400
commit3528547ccf8e7c2a354b31be2b7e0f4c7ebcc093 (patch)
tree3a8f1533cfc693ffafd1b82854a4d17e6b774584 /core
parent1380c33bc5b9996a09e3c5b3b5a5eac808c7b320 (diff)
refs #5896 tests are showing converting an array to a dataTable and run the filters on it will not work. Instead run the filters directly on the array. Therefore, to not have duplicated code the dataTable and row can be now treated as an array and we access them like an array in the ColumnDelete filter which will be for now the only filter is applied on arrays
Diffstat (limited to 'core')
-rw-r--r--core/API/ResponseBuilder.php13
-rw-r--r--core/DataTable.php6
-rw-r--r--core/DataTable/Filter/ColumnDelete.php19
-rw-r--r--core/DataTable/Row.php26
4 files changed, 48 insertions, 16 deletions
diff --git a/core/API/ResponseBuilder.php b/core/API/ResponseBuilder.php
index 5943fdd442..e66f9aadcc 100644
--- a/core/API/ResponseBuilder.php
+++ b/core/API/ResponseBuilder.php
@@ -13,9 +13,10 @@ use Piwik\API\DataTableManipulator\Flattener;
use Piwik\API\DataTableManipulator\LabelFilter;
use Piwik\API\DataTableManipulator\ReportTotalsCalculator;
use Piwik\Common;
+use Piwik\DataTable;
use Piwik\DataTable\Renderer;
use Piwik\DataTable\DataTableInterface;
-use Piwik\DataTable;
+use Piwik\DataTable\Filter\ColumnDelete;
use Piwik\Piwik;
/**
@@ -223,12 +224,12 @@ class ResponseBuilder
$isAssoc = !empty($firstArray) && is_numeric($firstKey) && is_array($firstArray) && !Piwik::isMultiDimensionalArray($array) && count(array_filter(array_keys($firstArray), 'is_string'));
if ($isAssoc) {
- if ('original' == $this->outputFormat) {
- return $this->apiRenderer->renderArray($array);
+ $hideColumns = Common::getRequestVar('hideColumns', '', 'string', $this->request);
+ $showColumns = Common::getRequestVar('showColumns', '', 'string', $this->request);
+ if ($hideColumns !== '' || $showColumns !== '') {
+ $columnDelete = new ColumnDelete(new DataTable(), $hideColumns, $showColumns);
+ $array = $columnDelete->filter($array);
}
-
- $dataTable = DataTable::makeFromSimpleArray($array);
- return $this->handleDataTable($dataTable);
}
return $this->apiRenderer->renderArray($array);
diff --git a/core/DataTable.php b/core/DataTable.php
index 3f112edb1f..1e594e4e41 100644
--- a/core/DataTable.php
+++ b/core/DataTable.php
@@ -165,7 +165,7 @@ require_once PIWIK_INCLUDE_PATH . '/core/Common.php';
*
* @api
*/
-class DataTable implements DataTableInterface
+class DataTable implements DataTableInterface, \IteratorAggregate
{
const MAX_DEPTH_DEFAULT = 15;
@@ -1633,4 +1633,8 @@ class DataTable implements DataTableInterface
}
$thisRow->sumRow($row, $copyMeta = true, $this->getMetadata(self::COLUMN_AGGREGATION_OPS_METADATA_NAME));
}
+
+ public function getIterator() {
+ return new \ArrayIterator($this->rows);
+ }
} \ No newline at end of file
diff --git a/core/DataTable/Filter/ColumnDelete.php b/core/DataTable/Filter/ColumnDelete.php
index 976519c6fa..f9f9773af8 100644
--- a/core/DataTable/Filter/ColumnDelete.php
+++ b/core/DataTable/Filter/ColumnDelete.php
@@ -100,15 +100,16 @@ class ColumnDelete extends BaseFilter
// remove columns specified in $this->columnsToRemove
if (!empty($this->columnsToRemove)) {
- foreach ($table->getRows() as $row) {
+ foreach ($table as $row) {
foreach ($this->columnsToRemove as $column) {
if ($this->deleteIfZeroOnly) {
- $value = $row->getColumn($column);
+ $value = $row[$column];
if ($value === false || !empty($value)) {
continue;
}
}
- $row->deleteColumn($column);
+
+ unset($row[$column]);
}
}
@@ -117,8 +118,8 @@ class ColumnDelete extends BaseFilter
// remove columns not specified in $columnsToKeep
if (!empty($this->columnsToKeep)) {
- foreach ($table->getRows() as $row) {
- foreach ($row->getColumns() as $name => $value) {
+ foreach ($table as $row) {
+ foreach ($row as $name => $value) {
$keep = false;
// @see self::APPEND_TO_COLUMN_NAME_TO_KEEP
@@ -132,7 +133,7 @@ class ColumnDelete extends BaseFilter
&& $name != 'label' // label cannot be removed via whitelisting
&& !isset($this->columnsToKeep[$name])
) {
- $row->deleteColumn($name);
+ unset($row[$name]);
}
}
}
@@ -141,10 +142,12 @@ class ColumnDelete extends BaseFilter
}
// recurse
- if ($recurse) {
- foreach ($table->getRows() as $row) {
+ if ($recurse && !is_array($table)) {
+ foreach ($table as $row) {
$this->filterSubTable($row);
}
}
+
+ return $table;
}
}
diff --git a/core/DataTable/Row.php b/core/DataTable/Row.php
index 3612cbe96a..72e6d67b6c 100644
--- a/core/DataTable/Row.php
+++ b/core/DataTable/Row.php
@@ -21,7 +21,7 @@ use Piwik\Metrics;
*
* @api
*/
-class Row
+class Row implements \ArrayAccess, \IteratorAggregate
{
/**
* List of columns that cannot be summed. An associative array for speed.
@@ -726,4 +726,28 @@ class Row
}
return true;
}
+
+ public function offsetExists($offset)
+ {
+ return $this->hasColumn($offset);
+ }
+
+ public function offsetGet($offset)
+ {
+ return $this->getColumn($offset);
+ }
+
+ public function offsetSet($offset, $value)
+ {
+ $this->setColumn($offset, $value);
+ }
+
+ public function offsetUnset($offset)
+ {
+ $this->deleteColumn($offset);
+ }
+
+ public function getIterator() {
+ return new \ArrayIterator($this->c[self::COLUMNS]);
+ }
}