/** * Adds a summary row to the given data table * * @param Piwik_DataTable $table */ public function filter($table) { if ($table->getRowsCount() <= $this->startRowToSummarize + 1) { return; } $table->filter('Sort', array($this->columnToSortByBeforeTruncating, 'desc')); $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); } } else { $newRow->sumRow($rows[$i], $enableCopyMetadata = false); } } $newRow->setColumns(array('label' => $this->labelSummaryRow) + $newRow->getColumns()); if ($this->deleteRows) { $table->filter('Limit', array(0, $this->startRowToSummarize)); } $table->addSummaryRow($newRow); unset($rows); }
/** * Limits the given data table * * @param Piwik_DataTable $table */ public function filter($table) { $table->setRowsCountBeforeLimitFilter(); if ($this->keepSummaryRow) { $summaryRow = $table->getRowFromId(Piwik_DataTable::ID_SUMMARY_ROW); } // we delete from 0 to offset if ($this->offset > 0) { $table->deleteRowsOffset(0, $this->offset); } // at this point the array has offset less elements. We delete from limit to the end if ($this->limit >= 0) { $table->deleteRowsOffset($this->limit); } if ($this->keepSummaryRow && $summaryRow) { $table->addSummaryRow($summaryRow); } }
/** * Generates a dataTable given a multidimensional PHP array that associates LABELS to Piwik_DataTableRows * This is used for the "Actions" DataTable, where a line is the aggregate of all the subtables * Example: the category /blog has 3 visits because it has /blog/index (2 visits) + /blog/about (1 visit) * * @param array $table * @param array $parents * @return Piwik_DataTable */ public static function generateDataTable($table, $parents = array()) { $dataTableToReturn = new Piwik_DataTable(); foreach ($table as $label => $maybeDatatableRow) { // case the aInfo is a subtable-like array // it means that we have to go recursively and process it // then we build the row that is an aggregate of all the children // and we associate this row to the subtable if (!$maybeDatatableRow instanceof Piwik_DataTable_Row) { array_push($parents, array($dataTableToReturn->getId(), $label)); $subTable = self::generateDataTable($maybeDatatableRow, $parents); $subTable->setParents($parents); $row = new Piwik_DataTable_Row_DataTableSummary($subTable); $row->setColumns(array('label' => $label) + $row->getColumns()); $row->addSubtable($subTable); array_pop($parents); } else { $row = $maybeDatatableRow; } if ($row->getMetadata('issummaryrow') == true) { $row->deleteMetadata('issummaryrow'); $dataTableToReturn->addSummaryRow($row); } else { $dataTableToReturn->addRow($row); } } return $dataTableToReturn; }