getRowFromLabel() public method

This method executes in constant time except for the first call which caches row label => row ID mappings.
public getRowFromLabel ( string $label ) : Row | false
$label string `'label'` column value to look for.
return Piwik\DataTable\Row | false The row if found, `false` if otherwise.
Exemplo n.º 1
0
 /**
  * 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);
 }
Exemplo n.º 2
0
 /**
  * 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')));
     }
 }
Exemplo n.º 4
0
 /**
  * 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);
         }
     }
 }
Exemplo n.º 5
0
 /**
  * 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'));
 }
Exemplo n.º 7
0
 private function getRowFromTable(DataTable $table, DataTable\Row $row)
 {
     return $table->getRowFromLabel($row->getColumn('label'));
 }
Exemplo n.º 8
0
 private function setGroupForSiteId(DataTable $table, $siteId, $groupName)
 {
     $table->getRowFromLabel('Site' . $siteId)->setMetadata('group', $groupName);
 }
Exemplo n.º 9
0
 /**
  * public for Insights use.
  */
 public function getPastRowFromCurrent(Row $row)
 {
     return $this->pastData->getRowFromLabel($row->getColumn('label'));
 }
Exemplo n.º 10
0
 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");
     }
 }