columnsToRemove = $columnsToRemove; $this->columnsToKeep = array_flip($columnsToKeep); // flip so we can use isset instead of in_array $this->deleteIfZeroOnly = $deleteIfZeroOnly; } /** * Filters the given DataTable. Removes columns that are not desired from * each DataTable row. * * @param Piwik_DataTable $table */ public function filter($table) { // always do recursive filter $this->enableRecursive(true); $recurse = false; // only recurse if there are columns to remove/keep // remove columns specified in $this->columnsToRemove if (!empty($this->columnsToRemove)) { foreach ($table->getRows() as $row) { foreach ($this->columnsToRemove as $column) { if ($this->deleteIfZeroOnly) { $value = $row->getColumn($column); if ($value === false || !empty($value)) { continue; } } $row->deleteColumn($column); } } $recurse = true; } // remove columns not specified in $columnsToKeep if (!empty($this->columnsToKeep)) { foreach ($table->getRows() as $row) { foreach ($row->getColumns() as $name => $value) { $keep = false; // @see self::APPEND_TO_COLUMN_NAME_TO_KEEP foreach($this->columnsToKeep as $nameKeep => $true) { if(strpos($name, $nameKeep . self::APPEND_TO_COLUMN_NAME_TO_KEEP) === 0) { $keep = true; } } if (!$keep && $name != 'label' // label cannot be removed via whitelisting && !isset($this->columnsToKeep[$name])) { $row->deleteColumn($name); } } } $recurse = true; } // recurse if ($recurse) { foreach ($table->getRows() as $row) { $this->filterSubTable($row); } } } }