NEW_COLUMN NAME, * OLD_COLUMN_NAME2 => NEW_COLUMN NAME2, * ) */ public function __construct( $table, $recursive = false, $mappingToApply = null ) { parent::__construct($table); $this->mappingToApply = Piwik_Archive::$mappingFromIdToName; $this->applyFilterRecursively = $recursive; if(!is_null($mappingToApply)) { $this->mappingToApply = $mappingToApply; } $this->filter(); } protected function filter() { $this->filterTable($this->table); } protected function filterTable($table) { foreach($table->getRows() as $key => $row) { $oldColumns = $row->getColumns(); $newColumns = $this->getRenamedColumns($oldColumns); $row->setColumns( $newColumns ); if($this->applyFilterRecursively) { try { $subTable = Piwik_DataTable_Manager::getInstance()->getTable( $row->getIdSubDataTable() ); $this->filterTable($subTable); } catch(Exception $e){ // case idSubTable == null, or if the table is not loaded in memory } } } } protected function getRenamedColumns($columns) { $newColumns = array(); foreach($columns as $columnName => $columnValue) { if(isset(Piwik_Archive::$mappingFromIdToName[$columnName])) { $columnName = Piwik_Archive::$mappingFromIdToName[$columnName]; if($columnName == 'goals') { $newSubColumns = array(); foreach($columnValue as $idGoal => $goalValues) { foreach($goalValues as $id => $goalValue) { $subColumnName = Piwik_Archive::$mappingFromIdToNameGoal[$id]; $newSubColumns['idgoal='.$idGoal][$subColumnName] = $goalValue; } } $columnValue = $newSubColumns; } } $newColumns[$columnName] = $columnValue; } return $newColumns; } }