functionToApply = $functionToApply; $this->functionParameters = $functionParameters; if (!is_array($columnsToFilter)) { $columnsToFilter = array($columnsToFilter); } $this->columnsToFilter = $columnsToFilter; $this->extraColumnParameters = $extraColumnParameters; } /** * Filters the given data table * * @param Piwik_DataTable $table */ public function filter($table) { foreach ($table->getRows() as $key => $row) { $extraColumnParameters = array(); foreach ($this->extraColumnParameters as $columnName) { $extraColumnParameters[] = $row->getColumn($columnName); } foreach ($this->columnsToFilter as $column) { // when a value is not defined, we set it to zero by default (rather than displaying '-') $value = $this->getElementToReplace($row, $column); if ($value === false) { $value = 0; } $parameters = array_merge(array($value), $extraColumnParameters); if (!is_null($this->functionParameters)) { $parameters = array_merge($parameters, $this->functionParameters); } $newValue = call_user_func_array($this->functionToApply, $parameters); $this->setElementToReplace($row, $column, $newValue); $this->filterSubTable($row); } } } /** * Replaces the given column within given row with the given value * * @param Piwik_DataTable_Row $row * @param string $columnToFilter * @param mixed $newValue */ protected function setElementToReplace($row, $columnToFilter, $newValue) { $row->setColumn($columnToFilter, $newValue); } /** * Returns the element that should be replaced * * @param Piwik_DataTable_Row $row * @param string $columnToFilter * @return mixed */ protected function getElementToReplace($row, $columnToFilter) { return $row->getColumn($columnToFilter); } }