You are here

public function ViewsDateFormatSqlField::getValue in Views Date Format SQL 8.3

Gets the value that's supposed to be rendered.

This api exists so that other modules can easy set the values of the field without having the need to change the render method as well.

Parameters

\Drupal\views\ResultRow $values: An object containing all retrieved values.

string $field: Optional name of the field where the value is stored.

Overrides EntityField::getValue

File

src/Plugin/views/field/ViewsDateFormatSqlField.php, line 135

Class

ViewsDateFormatSqlField
A field that displays entity timestamp field data. Supports grouping.

Namespace

Drupal\views_date_format_sql\Plugin\views\field

Code

public function getValue(ResultRow $values, $field = NULL) {
  if (empty($this->options['format_date_sql'])) {
    return parent::getValue($values, $field);
  }
  $entity = $this
    ->getEntity($values);

  // Some bundles might not have a specific field, in which case the entity
  // (potentially a fake one) doesn't have it either.

  /** @var \Drupal\Core\Field\FieldItemListInterface $field_item_list */
  $field_item_list = isset($entity->{$this->definition['field_name']}) ? $entity->{$this->definition['field_name']} : NULL;
  if (!isset($field_item_list)) {

    // Check empty date field for "empty rows".
    if (!empty($values->is_empty_row)) {

      // Render empty date.
      if (isset($this->field_alias) && !empty($values->{$this->field_alias})) {
        return $values->{$this->field_alias};
      }
    }

    // There isn't anything we can do without a valid field.
    return NULL;
  }
  $field_item_definition = $field_item_list
    ->getFieldDefinition();
  $values = [];
  foreach ($field_item_list as $field_item) {

    /** @var \Drupal\Core\Field\FieldItemInterface $field_item */
    if ($field) {
      $values[] = $field_item->{$field};
    }
    elseif ($main_property_name = $field_item
      ->mainPropertyName()) {
      $values[] = $field_item->{$main_property_name};
    }
    else {
      $values[] = $field_item->value;
    }
  }

  /* @var DateFormatter $dateFormatter */
  $dateFormatter = \Drupal::service('date.formatter');
  if ($field_item_definition
    ->getFieldStorageDefinition()
    ->getCardinality() == 1) {
    $timestamp = reset($values);
    if (empty($this->format)) {
      return $timestamp;
    }
    return $dateFormatter
      ->format($timestamp, $this->format, $this->format_string);
  }
  else {
    if (empty($this->format)) {
      return $values;
    }
    foreach ($values as &$value) {
      $value = $dateFormatter
        ->format($value, $this->format, $this->format_string);
    }
    return $values;
  }
}