You are here

protected function MultipleValuesGenerator::generateMissingValuesForField in Computed Field 3.x

Generates missing values for a particular computed field.

Parameters

string $field_id: The field machine name.

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

Throws

\Exception If the entity is missing.

1 call to MultipleValuesGenerator::generateMissingValuesForField()
MultipleValuesGenerator::generateMissingValues in src/MultipleValuesGenerator.php
Generates missing computed-field values in multi-valued computed fields.

File

src/MultipleValuesGenerator.php, line 142

Class

MultipleValuesGenerator
Service for generating missing values for multi-valued computed fields.

Namespace

Drupal\computed_field

Code

protected function generateMissingValuesForField($field_id, FieldDefinitionInterface $field_definition) {
  $field_item_list = $this
    ->getEntity()
    ->get($field_id);
  $updated_values = $field_item_list
    ->getValue();
  $field_item_list_index = count($updated_values);
  $field_cardinality = $field_definition
    ->getFieldStorageDefinition()
    ->getCardinality();
  while ($this
    ->thereAreMoreValuesToCompute($field_cardinality, $field_item_list_index)) {
    $field_item_list
      ->appendItem();
    $field_item = $field_item_list
      ->get($field_item_list_index);
    if ($field_item
      ->isEmpty()) {
      $field_item_list
        ->removeItem($field_item_list_index);
      break;
    }
    $updated_values[] = [
      'value' => $field_item
        ->executeCode(),
    ];
    $field_item_list_index++;
  }
  $this
    ->updateFieldIfMoreValuesHaveBeenAdded($field_item_list, $updated_values);
}