You are here

protected function ViewsPreRenderHookHandler::preRenderHighestValue in Views Merge Rows 8.2

Manipulates data if merge option is 'highest_value'.

Parameters

\Drupal\views\ViewExecutable $view: View object.

array $merged_rows: Array of merged rows.

array $merged_row: Current merged row.

bool $merged_row_replaced: Indicates whether $merged_row has been replaced.

bool $is_filter_row: TRUE if row merges rows of one or more filtered fields; FALSE otherwise.

array $rendered_row: Row from $rendered_fields from which data is extracted.

int $row_index: Row index to which data shall be reported if the row is a filtered one ($merged_rows).

string $field_name: Name of the field being under work.

int $merged_row_index: Row index to which data shall be reported if the row is not a filtered one ($merged_rows).

1 call to ViewsPreRenderHookHandler::preRenderHighestValue()
ViewsPreRenderHookHandler::process in src/HookHandler/ViewsPreRenderHookHandler.php
Alter the view according to merge rows configuration.

File

src/HookHandler/ViewsPreRenderHookHandler.php, line 698

Class

ViewsPreRenderHookHandler
Hook handler for the hook_views_pre_render() hook.

Namespace

Drupal\views_merge_rows\HookHandler

Code

protected function preRenderHighestValue(ViewExecutable $view, array &$merged_rows, array &$merged_row, bool &$merged_row_replaced, bool $is_filter_row, array $rendered_row, int $row_index, string $field_name, int $merged_row_index) : void {
  if ($is_filter_row) {
    $merged_row[$field_name] = $rendered_row[$field_name];
    $merged_rows[$row_index] = $merged_row;
  }
  else {

    // Strip the HTML from the rendered and merged fields data and grab
    // the raw value.
    $rendered_row_data = floatval((string) $rendered_row[$field_name]);
    $merged_row_data = floatval((string) $merged_row[$field_name]);

    // Place the higher value into the merged row array.
    if ($rendered_row_data > $merged_row_data) {
      $merged_row[$field_name] = $rendered_row[$field_name];
      $merged_row_replaced = TRUE;
    }
    else {
      $this
        ->unsetRow($view, $row_index);
      $merged_row_replaced = FALSE;
    }
  }

  // If we replaced the row with a higher value, then update all array
  // indexes with the new index values.
  if ($merged_row_replaced == TRUE) {
    $this
      ->updateArrayIndexes($view, $merged_row, $row_index, $merged_row_index);
  }
}