This method executes in constant time except for the first call which caches row
label => row ID mappings.
public getRowFromLabel ( string $label ) : |
||
$label | string | `'label'` column value to look for. |
return | The row if found, `false` if otherwise. |
/** * Method for the recursive descend * * @param array $labelParts * @param DataTable $dataTable * @return Row|bool */ private function doFilterRecursiveDescend($labelParts, $dataTable) { // search for the first part of the tree search $labelPart = array_shift($labelParts); $row = false; foreach ($this->getLabelVariations($labelPart) as $labelPart) { $row = $dataTable->getRowFromLabel($labelPart); if ($row !== false) { break; } } if ($row === false) { // not found return false; } // end of tree search reached if (count($labelParts) == 0) { return $row; } $subTable = $this->loadSubtable($dataTable, $row); if ($subTable === null) { // no more subtables but label parts left => no match found return false; } return $this->doFilterRecursiveDescend($labelParts, $subTable); }
/** * Method for the recursive descend * * @param array $labelParts * @param DataTable $dataTable * @return Row|bool */ private function doFilterRecursiveDescend($labelParts, $dataTable) { // we need to make sure to rebuild the index as some filters change the label column directly via // $row->setColumn('label', '') which would not be noticed in the label index otherwise. $dataTable->rebuildIndex(); // search for the first part of the tree search $labelPart = array_shift($labelParts); $row = false; foreach ($this->getLabelVariations($labelPart) as $labelPart) { $row = $dataTable->getRowFromLabel($labelPart); if ($row !== false) { break; } } if ($row === false) { // not found return false; } // end of tree search reached if (count($labelParts) == 0) { return $row; } $subTable = $this->loadSubtable($dataTable, $row); if ($subTable === null) { // no more subtables but label parts left => no match found return false; } return $this->doFilterRecursiveDescend($labelParts, $subTable); }
/** * @param DataTable $table */ public function filter($table) { $row = $table->getRowFromLabel(Archiver::EVENT_NAME_NOT_SET); if ($row) { $row->setColumn('label', Piwik::translate('General_NotDefined', Piwik::translate('Events_EventName'))); } }
/** * See {@link ReplaceSummaryRowLabel}. * * @param DataTable $table */ public function filter($table) { $row = $table->getRowFromId(DataTable::ID_SUMMARY_ROW); if ($row) { $row->setColumn('label', $this->newLabel); } else { $row = $table->getRowFromLabel(DataTable::LABEL_SUMMARY_ROW); if ($row) { $row->setColumn('label', $this->newLabel); } } // recurse foreach ($table->getRowsWithoutSummaryRow() as $row) { $subTable = $row->getSubtable(); if ($subTable) { $this->filter($subTable); } } }
/** * Returns true if both DataTable instances are exactly the same. * * DataTables are equal if they have the same number of rows, if * each row has a label that exists in the other table, and if each row * is equal to the row in the other table with the same label. The order * of rows is not important. * * @param \Piwik\DataTable $table1 * @param \Piwik\DataTable $table2 * @return bool */ public static function isEqual(DataTable $table1, DataTable $table2) { $table1->rebuildIndex(); $table2->rebuildIndex(); if ($table1->getRowsCount() != $table2->getRowsCount()) { return false; } $rows1 = $table1->getRows(); foreach ($rows1 as $row1) { $row2 = $table2->getRowFromLabel($row1->getColumn('label')); if ($row2 === false || !Row::isEqual($row1, $row2)) { return false; } } return true; }
/** * Utility function. Returns the current row in the past DataTable. * * @param Row $row The row in the 'current' DataTable. * @return bool|Row */ protected function getPastRowFromCurrent($row) { return $this->pastDataTable->getRowFromLabel($row->getColumn('label')); }
private function getRowFromTable(DataTable $table, DataTable\Row $row) { return $table->getRowFromLabel($row->getColumn('label')); }
private function setGroupForSiteId(DataTable $table, $siteId, $groupName) { $table->getRowFromLabel('Site' . $siteId)->setMetadata('group', $groupName); }
/** * public for Insights use. */ public function getPastRowFromCurrent(Row $row) { return $this->pastData->getRowFromLabel($row->getColumn('label')); }
private function assertMoversAndShakers(DataTable $report, $movers, $nonMovers) { foreach ($movers as $mover) { $row = $report->getRowFromLabel($mover); if (!$row) { $this->fail("{$mover} is not a valid label"); continue; } $this->assertTrue($row->getColumn('isMoverAndShaker'), "{$mover} is not a mover but should be"); } foreach ($nonMovers as $nonMover) { $row = $report->getRowFromLabel($nonMover); if (!$row) { $this->fail("{$nonMover} is not a valid label"); continue; } $this->assertFalse($row->getColumn('isMoverAndShaker'), "{$nonMover} is a mover but should be not"); } }