You are here

public function FieldTypeExportBase::export in Entity Export CSV 8

Export the value of a field.

Parameters

\Drupal\Core\Entity\ContentEntityInterface $entity: The entity to export.

\Drupal\Core\Field\FieldDefinitionInterface $field_definition: The field definition.

array $options: An array of additionnal options.

Return value

string The string value to be export in the CSV file.

Overrides FieldTypeExportInterface::export

File

src/Plugin/FieldTypeExportBase.php, line 309

Class

FieldTypeExportBase
Base class for Field type export plugins.

Namespace

Drupal\entity_export_csv\Plugin

Code

public function export(ContentEntityInterface $entity, FieldDefinitionInterface $field_definition, array $options = []) {
  $configuration = $this
    ->getConfiguration();
  $row = [];
  $values = [];
  $field_name = $field_definition
    ->getName();
  $property_names = $this
    ->getPropertiesSelected($field_definition);
  if ($entity
    ->hasField($field_name)) {

    /** @var \Drupal\Core\Field\FieldItemListInterface $field_items */
    $field_items = $entity
      ->get($field_name);

    /** @var \Drupal\Core\Field\FieldItemInterface $field_item */
    foreach ($field_items as $index => $field_item) {
      foreach ($property_names as $property_name) {
        $values[$index][$property_name] = $this
          ->massageExportPropertyValue($field_item, $property_name, $field_definition, $options);
      }
    }
  }
  $values_per_property = [];
  foreach ($values as $index => $properties) {
    foreach ($properties as $property_name => $property_value) {
      $values_per_property[$property_name][$index] = $property_value;
    }
  }
  $columns = $this
    ->getColumns($field_definition);
  if ($columns === 1) {
    if ($this
      ->propertiesInSeparateColumns()) {
      foreach ($property_names as $property_name) {
        $row[] = implode($configuration['separator'], $values_per_property[$property_name]);
      }
    }
    else {
      foreach ($values as $index => $properties) {
        $properties = array_filter($properties);
        $values[$index] = implode($this
          ->getPropertyColumnSeparator(), $properties);
      }
      $row[] = implode($configuration['separator'], $values);
    }
  }
  else {
    for ($i = 0; $i < $columns; $i++) {
      if ($this
        ->propertiesInSeparateColumns()) {
        foreach ($property_names as $property_name) {
          $row[] = isset($values[$i][$property_name]) ? $values[$i][$property_name] : NULL;
        }
      }
      else {
        $properties = isset($values[$i]) ? $values[$i] : [];
        $properties = array_filter($properties);
        $row[] = implode($this
          ->getPropertyColumnSeparator(), $properties);
      }
    }
  }
  return $row;
}