original_string: public function mergeSubtables($labelColumn = false, $useMetadataColumn = false)
      {
          $result = new DataTable();
          $result->setAllTableMetadata($this->getAllTableMetadata());
          foreach ($this->getRowsWithoutSummaryRow() as $row) {
              $subtable = $row->getSubtable();
              if ($subtable !== false) {
                  $parentLabel = $row->getColumn('label');
  
                  // add a copy of each subtable row to the new datatable
                  foreach ($subtable->getRows() as $id => $subRow) {
                      $copy = clone $subRow;
  
                      // if the summary row, add it to the existing summary row (or add a new one)
                      if ($id == self::ID_SUMMARY_ROW) {
                          $existing = $result->getRowFromId(self::ID_SUMMARY_ROW);
                          if ($existing === false) {
                              $result->addSummaryRow($copy);
                          } else {
                              $existing->sumRow($copy, $copyMeta = true, $this->getMetadata(self::COLUMN_AGGREGATION_OPS_METADATA_NAME));
                          }
                      } else {
                          if ($labelColumn !== false) {
                              // if we're modifying the subtable's rows' label column, then we make
                              // sure to prepend the existing label w/ the parent row's label. otherwise
                              // we're just adding the parent row's label as a new column/metadata.
                              $newLabel = $parentLabel;
                              if ($labelColumn == 'label') {
                                  $newLabel .= ' - ' . $copy->getColumn('label');
                              }
  
                              // modify the child row's label or add new column/metadata
                              if ($useMetadataColumn) {
                                  $copy->setMetadata($labelColumn, $newLabel);
                              } else {
                                  $copy->setColumn($labelColumn, $newLabel);
                              }
                          }
  
                          $result->addRow($copy);
                      }
                  }
              }
          }
          return $result;
      }
code: public function mergeSubtables($labelColumn = false, $useMetadataColumn = false)
      {
          $result = new DataTable();
          $result->setAllTableMetadata($this->getAllTableMetadata());
          foreach ($this->getRowsWithoutSummaryRow() as $row) {
              $subtable = $row->getSubtable();
              if ($subtable !== false) {
                  $parentLabel = $row->getColumn('label');
  
                  // add a copy of each subtable row to the new datatable
                  foreach ($subtable->getRows() as $id => $subRow) {
                      $copy = clone $subRow;
  
                      // if the summary row, add it to the existing summary row (or add a new one)
                      if ($id == self::ID_SUMMARY_ROW) {
                          $existing = $result->getRowFromId(self::ID_SUMMARY_ROW);
                          if ($existing === false) {
                              $result->addSummaryRow($copy);
                          } else {
                              $existing->sumRow($copy, $copyMeta = true, $this->getMetadata(self::COLUMN_AGGREGATION_OPS_METADATA_NAME));
                          }
                      } else {
                          if ($labelColumn !== false) {
                              // if we're modifying the subtable's rows' label column, then we make
                              // sure to prepend the existing label w/ the parent row's label. otherwise
                              // we're just adding the parent row's label as a new column/metadata.
                              $newLabel = $parentLabel;
                              if ($labelColumn == 'label') {
                                  $newLabel .= ' - ' . $copy->getColumn('label');
                              }
  
                              // modify the child row's label or add new column/metadata
                              if ($useMetadataColumn) {
                                  $copy->setMetadata($labelColumn, $newLabel);
                              } else {
                                  $copy->setColumn($labelColumn, $newLabel);
                              }
                          }
  
                          $result->addRow($copy);
                      }
                  }
              }
          }
          return $result;
      }
code_tokens: public function mergeSubtables ( $ labelColumn = false , $ useMetadataColumn = false ) { $ result = new DataTable ( ) ; $ result -> setAllTableMetadata ( $ this -> getAllTableMetadata ( ) ) ; foreach ( $ this -> getRowsWithoutSummaryRow ( ) as $ row ) { $ subtable = $ row -> getSubtable ( ) ; if ( $ subtable !== false ) { $ parentLabel = $ row -> getColumn ( 'label' ) ; // add a copy of each subtable row to the new datatable foreach ( $ subtable -> getRows ( ) as $ id => $ subRow ) { $ copy = clone $ subRow ; // if the summary row, add it to the existing summary row (or add a new one) if ( $ id == self :: ID_SUMMARY_ROW ) { $ existing = $ result -> getRowFromId ( self :: ID_SUMMARY_ROW ) ; if ( $ existing === false ) { $ result -> addSummaryRow ( $ copy ) ; } else { $ existing -> sumRow ( $ copy , $ copyMeta = true , $ this -> getMetadata ( self :: COLUMN_AGGREGATION_OPS_METADATA_NAME ) ) ; } } else { if ( $ labelColumn !== false ) { // if we're modifying the subtable's rows' label column, then we make // sure to prepend the existing label w/ the parent row's label. otherwise // we're just adding the parent row's label as a new column/metadata. $ newLabel = $ parentLabel ; if ( $ labelColumn == 'label' ) { $ newLabel .= ' - ' . $ copy -> getColumn ( 'label' ) ; } // modify the child row's label or add new column/metadata if ( $ useMetadataColumn ) { $ copy -> setMetadata ( $ labelColumn , $ newLabel ) ; } else { $ copy -> setColumn ( $ labelColumn , $ newLabel ) ; } } $ result -> addRow ( $ copy ) ; } } } } return $ result ; }
docstring: Returns a new DataTable in which the rows of this table are replaced with the aggregatated rows of all its subtables.
  
  @param string|bool $labelColumn If supplied the label of the parent row will be added to
  a new column in each subtable row.
  
  If set to, `'label'` each subtable row's label will be prepended
  w/ the parent row's label. So `'child_label'` becomes
  `'parent_label - child_label'`.
  @param bool $useMetadataColumn If true and if `$labelColumn` is supplied, the parent row's
  label will be added as metadata and not a new column.
  @return \Piwik\DataTable
docstring_tokens: Returns a new DataTable in which the rows of this table are replaced with the aggregatated rows of all its subtables .