You are here

protected static function ListItemBase::extractAllowedValues in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/options/src/Plugin/Field/FieldType/ListItemBase.php \Drupal\options\Plugin\Field\FieldType\ListItemBase::extractAllowedValues()

Extracts the allowed values array from the allowed_values element.

Parameters

string $string: The raw string to extract values from.

bool $has_data: The current field already has data inserted or not.

Return value

array|null The array of extracted key/value pairs, or NULL if the string is invalid.

See also

\Drupal\options\Plugin\Field\FieldType\ListItemBase::allowedValuesString()

2 calls to ListItemBase::extractAllowedValues()
ListFloatItem::extractAllowedValues in core/modules/options/src/Plugin/Field/FieldType/ListFloatItem.php
Extracts the allowed values array from the allowed_values element.
ListItemBase::validateAllowedValues in core/modules/options/src/Plugin/Field/FieldType/ListItemBase.php
#element_validate callback for options field allowed values.
1 method overrides ListItemBase::extractAllowedValues()
ListFloatItem::extractAllowedValues in core/modules/options/src/Plugin/Field/FieldType/ListFloatItem.php
Extracts the allowed values array from the allowed_values element.

File

core/modules/options/src/Plugin/Field/FieldType/ListItemBase.php, line 170

Class

ListItemBase
Plugin base class inherited by the options field types.

Namespace

Drupal\options\Plugin\Field\FieldType

Code

protected static function extractAllowedValues($string, $has_data) {
  $values = [];
  $list = explode("\n", $string);
  $list = array_map('trim', $list);
  $list = array_filter($list, 'strlen');
  $generated_keys = $explicit_keys = FALSE;
  foreach ($list as $position => $text) {

    // Check for an explicit key.
    $matches = [];
    if (preg_match('/(.*)\\|(.*)/', $text, $matches)) {

      // Trim key and value to avoid unwanted spaces issues.
      $key = trim($matches[1]);
      $value = trim($matches[2]);
      $explicit_keys = TRUE;
    }
    elseif (!static::validateAllowedValue($text)) {
      $key = $value = $text;
      $explicit_keys = TRUE;
    }
    elseif (!$has_data) {
      $key = (string) $position;
      $value = $text;
      $generated_keys = TRUE;
    }
    else {
      return;
    }
    $values[$key] = $value;
  }

  // We generate keys only if the list contains no explicit key at all.
  if ($explicit_keys && $generated_keys) {
    return;
  }
  return $values;
}