startRowToSummarize = $startRowToSummarize; $this->labelSummaryRow = $labelSummaryRow; $this->columnToSortByBeforeTruncating = $columnToSortByBeforeTruncating; $this->deleteRows = $deleteRows; } /** * Adds a summary row to the given data table * * @param Piwik_DataTable $table */ public function filter($table) { $table->filter('Sort', array($this->columnToSortByBeforeTruncating, 'desc')); if ($table->getRowsCount() <= $this->startRowToSummarize + 1) { return; } $rows = $table->getRows(); $count = $table->getRowsCount(); $newRow = new Piwik_DataTable_Row(); for ($i = $this->startRowToSummarize; $i < $count; $i++) { if (!isset($rows[$i])) { // case when the last row is a summary row, it is not indexed by $cout but by Piwik_DataTable::ID_SUMMARY_ROW $summaryRow = $table->getRowFromId(Piwik_DataTable::ID_SUMMARY_ROW); //FIXME: I'm not sure why it could return false, but it was reported in: http://forum.piwik.org/read.php?2,89324,page=1#msg-89442 if ($summaryRow) { $newRow->sumRow($summaryRow, $enableCopyMetadata = false, $table->getColumnAggregationOperations()); } } else { $newRow->sumRow($rows[$i], $enableCopyMetadata = false, $table->getColumnAggregationOperations()); } } $newRow->setColumns(array('label' => $this->labelSummaryRow) + $newRow->getColumns()); if ($this->deleteRows) { $table->filter('Limit', array(0, $this->startRowToSummarize)); } $table->addSummaryRow($newRow); unset($rows); } }