original_string: private function getSingleRowEvolution($idSite, $dataTable, $metadata, $apiModule, $apiAction, $label, $labelUseAbsoluteUrl = true)
      {
          $metricNames = array_keys($metadata['metrics']);
  
          $logo = $actualLabel = false;
          $urlFound = false;
          foreach ($dataTable->getDataTables() as $subTable) {
              /** @var $subTable DataTable */
              $subTable->applyQueuedFilters();
              if ($subTable->getRowsCount() > 0) {
                  /** @var $row Row */
                  $row = $subTable->getFirstRow();
  
                  if (!$actualLabel) {
                      $logo = $row->getMetadata('logo');
  
                      $actualLabel = $this->getRowUrlForEvolutionLabel($row, $apiModule, $apiAction, $labelUseAbsoluteUrl);
                      $urlFound = $actualLabel !== false;
                      if (empty($actualLabel)) {
                          $actualLabel = $row->getColumn('label');
                      }
                  }
  
                  // remove all columns that are not in the available metrics.
                  // this removes the label as well (which is desired for two reasons: (1) it was passed
                  // in the request, (2) it would cause the evolution graph to show the label in the legend).
                  foreach ($row->getColumns() as $column => $value) {
                      if (!in_array($column, $metricNames) && $column != 'label_html') {
                          $row->deleteColumn($column);
                      }
                  }
                  $row->deleteMetadata();
              }
          }
  
          $this->enhanceRowEvolutionMetaData($metadata, $dataTable);
  
          // if we have a recursive label and no url, use the path
          if (!$urlFound) {
              $actualLabel = $this->formatQueryLabelForDisplay($idSite, $apiModule, $apiAction, $label);
          }
  
          $return = array(
              'label'      => SafeDecodeLabel::decodeLabelSafe($actualLabel),
              'reportData' => $dataTable,
              'metadata'   => $metadata
          );
          if (!empty($logo)) {
              $return['logo'] = $logo;
          }
          return $return;
      }
code: private function getSingleRowEvolution($idSite, $dataTable, $metadata, $apiModule, $apiAction, $label, $labelUseAbsoluteUrl = true)
      {
          $metricNames = array_keys($metadata['metrics']);
  
          $logo = $actualLabel = false;
          $urlFound = false;
          foreach ($dataTable->getDataTables() as $subTable) {
              /** @var $subTable DataTable */
              $subTable->applyQueuedFilters();
              if ($subTable->getRowsCount() > 0) {
                  /** @var $row Row */
                  $row = $subTable->getFirstRow();
  
                  if (!$actualLabel) {
                      $logo = $row->getMetadata('logo');
  
                      $actualLabel = $this->getRowUrlForEvolutionLabel($row, $apiModule, $apiAction, $labelUseAbsoluteUrl);
                      $urlFound = $actualLabel !== false;
                      if (empty($actualLabel)) {
                          $actualLabel = $row->getColumn('label');
                      }
                  }
  
                  // remove all columns that are not in the available metrics.
                  // this removes the label as well (which is desired for two reasons: (1) it was passed
                  // in the request, (2) it would cause the evolution graph to show the label in the legend).
                  foreach ($row->getColumns() as $column => $value) {
                      if (!in_array($column, $metricNames) && $column != 'label_html') {
                          $row->deleteColumn($column);
                      }
                  }
                  $row->deleteMetadata();
              }
          }
  
          $this->enhanceRowEvolutionMetaData($metadata, $dataTable);
  
          // if we have a recursive label and no url, use the path
          if (!$urlFound) {
              $actualLabel = $this->formatQueryLabelForDisplay($idSite, $apiModule, $apiAction, $label);
          }
  
          $return = array(
              'label'      => SafeDecodeLabel::decodeLabelSafe($actualLabel),
              'reportData' => $dataTable,
              'metadata'   => $metadata
          );
          if (!empty($logo)) {
              $return['logo'] = $logo;
          }
          return $return;
      }
code_tokens: private function getSingleRowEvolution ( $ idSite , $ dataTable , $ metadata , $ apiModule , $ apiAction , $ label , $ labelUseAbsoluteUrl = true ) { $ metricNames = array_keys ( $ metadata [ 'metrics' ] ) ; $ logo = $ actualLabel = false ; $ urlFound = false ; foreach ( $ dataTable -> getDataTables ( ) as $ subTable ) { /** @var $subTable DataTable */ $ subTable -> applyQueuedFilters ( ) ; if ( $ subTable -> getRowsCount ( ) > 0 ) { /** @var $row Row */ $ row = $ subTable -> getFirstRow ( ) ; if ( ! $ actualLabel ) { $ logo = $ row -> getMetadata ( 'logo' ) ; $ actualLabel = $ this -> getRowUrlForEvolutionLabel ( $ row , $ apiModule , $ apiAction , $ labelUseAbsoluteUrl ) ; $ urlFound = $ actualLabel !== false ; if ( empty ( $ actualLabel ) ) { $ actualLabel = $ row -> getColumn ( 'label' ) ; } } // remove all columns that are not in the available metrics. // this removes the label as well (which is desired for two reasons: (1) it was passed // in the request, (2) it would cause the evolution graph to show the label in the legend). foreach ( $ row -> getColumns ( ) as $ column => $ value ) { if ( ! in_array ( $ column , $ metricNames ) && $ column != 'label_html' ) { $ row -> deleteColumn ( $ column ) ; } } $ row -> deleteMetadata ( ) ; } } $ this -> enhanceRowEvolutionMetaData ( $ metadata , $ dataTable ) ; // if we have a recursive label and no url, use the path if ( ! $ urlFound ) { $ actualLabel = $ this -> formatQueryLabelForDisplay ( $ idSite , $ apiModule , $ apiAction , $ label ) ; } $ return = array ( 'label' => SafeDecodeLabel :: decodeLabelSafe ( $ actualLabel ) , 'reportData' => $ dataTable , 'metadata' => $ metadata ) ; if ( ! empty ( $ logo ) ) { $ return [ 'logo' ] = $ logo ; } return $ return ; }
docstring: Get row evolution for a single label
  @param DataTable\Map $dataTable
  @param array $metadata
  @param string $apiModule
  @param string $apiAction
  @param string $label
  @param bool $labelUseAbsoluteUrl
  @return array containing  report data, metadata, label, logo
docstring_tokens: Get row evolution for a single label