patternToSearch = $patternToSearch; $this->patternToSearchQuoted = Piwik_DataTable_Filter_Pattern::getPatternQuoted($patternToSearch); $this->patternToSearch = $patternToSearch;//preg_quote($patternToSearch); $this->columnToFilter = $columnToFilter; $this->filter(); } protected function filter( $table = null ) { if(is_null($table)) { $table = $this->table; } $rows = $table->getRows(); foreach($rows as $key => $row) { // A row is deleted if // 1 - its label doesnt contain the pattern // AND 2 - the label is not found in the children $patternNotFoundInChildren = false; try{ $idSubTable = $row->getIdSubDataTable(); $subTable = Piwik_DataTable_Manager::getInstance()->getTable($idSubTable); // we delete the row if we couldn't find the pattern in any row in the // children hierarchy if( $this->filter($subTable) == 0 ) { $patternNotFoundInChildren = true; } } catch(Exception $e) { // there is no subtable loaded for example $patternNotFoundInChildren = true; } if( $patternNotFoundInChildren && !Piwik_DataTable_Filter_Pattern::match($this->patternToSearch, $this->patternToSearchQuoted, $row->getColumn($this->columnToFilter)) ) { $table->deleteRow($key); } } return $table->getRowsCount(); } }