content_entity_builder-8.x-1.x-dev/src/Plugin/BaseFieldConfig/ListItemBaseFieldConfigBase.php
src/Plugin/BaseFieldConfig/ListItemBaseFieldConfigBase.php
<?php
namespace Drupal\content_entity_builder\Plugin\BaseFieldConfig;
use Drupal\Core\Form\FormStateInterface;
use Drupal\content_entity_builder\ConfigurableBaseFieldConfigBase;
use Drupal\Core\Field\FieldFilteredMarkup;
/**
* ListItemBaseFieldConfigBase.
*/
class ListItemBaseFieldConfigBase extends ConfigurableBaseFieldConfigBase {
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return [
'allowed_values' => '',
];
}
/**
* {@inheritdoc}
*/
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form['allowed_values'] = [
'#type' => 'textarea',
'#title' => t('Allowed values list'),
'#default_value' => $this->configuration['allowed_values'],
'#required' => TRUE,
'#rows' => 10,
'#description' => $this->allowedValuesDescription(),
];
return $form;
}
/**
* {@inheritdoc}
*/
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
parent::submitConfigurationForm($form, $form_state);
$this->configuration['allowed_values'] = $form_state->getValue('allowed_values');
}
/**
* {@inheritdoc}
*/
public function buildBaseFieldDefinition() {
return FALSE;
}
/**
* Extracts the allowed values array from the allowed_values element.
*
* @param string $string
* The raw string to extract values from.
*
* @return array|null
* The array of extracted key/value pairs, or NULL if the string is invalid.
*
* @see \Drupal\options\Plugin\Field\FieldType\ListItemBase::allowedValuesString()
*/
protected static function extractAllowedValues($string) {
$values = [];
$list = explode("\n", $string);
$list = array_map('trim', $list);
$list = array_filter($list, 'strlen');
$generated_keys = $explicit_keys = FALSE;
foreach ($list as $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;
}
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;
}
/**
* {@inheritdoc}
*/
protected function allowedValuesDescription() {
$description = '<p>' . t('The possible values this field can contain. Enter one value per line, in the format key|label.');
$description .= '<br/>' . t('The key is the stored value. The label will be used in displayed values and edit forms.');
$description .= '<br/>' . t('Both the key and the label are required.');
$description .= '</p>';
$description .= '<p>' . t('Allowed HTML tags in labels: @tags', ['@tags' => FieldFilteredMarkup::displayAllowedTags()]) . '</p>';
return $description;
}
/**
* {@inheritdoc}
*/
public function buildDefaultValueForm(array $form, FormStateInterface $form_state) {
$default_value_options = $this->extractAllowedValues($this->configuration['allowed_values']);
$form['value'] = [
'#type' => 'select',
'#title' => $this->getFieldName(),
'#default_value' => $this->getDefaultValue(),
'#options' => $default_value_options,
'#empty_option' => $this->t('Select a value'),
];
return $form;
}
}
