diff --git a/core/DataTable.php b/core/DataTable.php index d4c1976d60c520a89066f65de906c3dceb842e8c..3049dbf9669f97584edeef12a96ed76eec16df95 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, \IteratorAggregate +class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess { const MAX_DEPTH_DEFAULT = 15; @@ -1640,4 +1640,26 @@ class DataTable implements DataTableInterface, \IteratorAggregate public function getIterator() { return new \ArrayIterator($this->getRows()); } + + public function offsetExists($offset) + { + $row = $this->getRowFromId($offset); + + return false !== $row; + } + + public function offsetGet($offset) + { + return $this->getRowFromId($offset); + } + + public function offsetSet($offset, $value) + { + $this->rows[$offset] = $value; + } + + public function offsetUnset($offset) + { + $this->deleteRow($offset); + } } \ No newline at end of file diff --git a/core/DataTable/Filter/ColumnDelete.php b/core/DataTable/Filter/ColumnDelete.php index 532cd5c644685e7ef9acfcefb5b33dc2753b7d3a..5aac6d44a63e54ebbca7797c3457cdc391ace6f1 100644 --- a/core/DataTable/Filter/ColumnDelete.php +++ b/core/DataTable/Filter/ColumnDelete.php @@ -100,7 +100,7 @@ class ColumnDelete extends BaseFilter // remove columns specified in $this->columnsToRemove if (!empty($this->columnsToRemove)) { - foreach ($table as &$row) { + foreach ($table as $index => $row) { foreach ($this->columnsToRemove as $column) { if ($this->deleteIfZeroOnly) { $value = $row[$column]; @@ -109,7 +109,7 @@ class ColumnDelete extends BaseFilter } } - unset($row[$column]); + unset($table[$index][$column]); } } @@ -118,7 +118,7 @@ class ColumnDelete extends BaseFilter // remove columns not specified in $columnsToKeep if (!empty($this->columnsToKeep)) { - foreach ($table as &$row) { + foreach ($table as $index => $row) { foreach ($row as $name => $value) { $keep = false; @@ -133,7 +133,7 @@ class ColumnDelete extends BaseFilter && $name != 'label' // label cannot be removed via whitelisting && !isset($this->columnsToKeep[$name]) ) { - unset($row[$name]); + unset($table[$index][$name]); } } }