View source
<?php
namespace Drupal\field_ui\Form;
use Drupal\Core\Entity\EntityForm;
use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
use Drupal\Core\Field\FieldFilteredMarkup;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;
use Drupal\field\FieldConfigInterface;
use Drupal\field_ui\FieldUI;
use Symfony\Component\DependencyInjection\ContainerInterface;
class FieldConfigEditForm extends EntityForm {
protected $entity;
protected $entityTypeBundleInfo;
public function __construct(EntityTypeBundleInfoInterface $entity_type_bundle_info) {
$this->entityTypeBundleInfo = $entity_type_bundle_info;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('entity_type.bundle.info'));
}
public function form(array $form, FormStateInterface $form_state) {
$form = parent::form($form, $form_state);
$field_storage = $this->entity
->getFieldStorageDefinition();
$bundles = $this->entityTypeBundleInfo
->getBundleInfo($this->entity
->getTargetEntityTypeId());
$form_title = $this
->t('%field settings for %bundle', [
'%field' => $this->entity
->getLabel(),
'%bundle' => $bundles[$this->entity
->getTargetBundle()]['label'],
]);
$form['#title'] = $form_title;
if ($field_storage
->isLocked()) {
$form['locked'] = [
'#markup' => $this
->t('The field %field is locked and cannot be edited.', [
'%field' => $this->entity
->getLabel(),
]),
];
return $form;
}
$form['label'] = [
'#type' => 'textfield',
'#title' => $this
->t('Label'),
'#default_value' => $this->entity
->getLabel() ?: $field_storage
->getName(),
'#required' => TRUE,
'#maxlength' => 255,
'#weight' => -20,
];
$form['description'] = [
'#type' => 'textarea',
'#title' => $this
->t('Help text'),
'#default_value' => $this->entity
->getDescription(),
'#rows' => 5,
'#description' => $this
->t('Instructions to present to the user below this field on the editing form.<br />Allowed HTML tags: @tags', [
'@tags' => FieldFilteredMarkup::displayAllowedTags(),
]) . '<br />' . $this
->t('This field supports tokens.'),
'#weight' => -10,
];
$form['required'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Required field'),
'#default_value' => $this->entity
->isRequired(),
'#weight' => -5,
];
$ids = (object) [
'entity_type' => $this->entity
->getTargetEntityTypeId(),
'bundle' => $this->entity
->getTargetBundle(),
'entity_id' => NULL,
];
$form['#entity'] = _field_create_entity_from_ids($ids);
$items = $form['#entity']
->get($this->entity
->getName());
$item = $items
->first() ?: $items
->appendItem();
$form['settings'] = [
'#tree' => TRUE,
'#weight' => 10,
];
$form['settings'] += $item
->fieldSettingsForm($form, $form_state);
$form['third_party_settings'] = [
'#tree' => TRUE,
'#weight' => 11,
];
if ($element = $items
->defaultValuesForm($form, $form_state)) {
$element = array_merge($element, [
'#type' => 'details',
'#title' => $this
->t('Default value'),
'#open' => TRUE,
'#tree' => TRUE,
'#description' => $this
->t('The default value for this field, used when creating new content.'),
'#weight' => 12,
]);
$form['default_value'] = $element;
}
return $form;
}
protected function actions(array $form, FormStateInterface $form_state) {
$actions = parent::actions($form, $form_state);
$actions['submit']['#value'] = $this
->t('Save settings');
if (!$this->entity
->isNew()) {
$target_entity_type = $this->entityTypeManager
->getDefinition($this->entity
->getTargetEntityTypeId());
$route_parameters = [
'field_config' => $this->entity
->id(),
] + FieldUI::getRouteBundleParameter($target_entity_type, $this->entity
->getTargetBundle());
$url = new Url('entity.field_config.' . $target_entity_type
->id() . '_field_delete_form', $route_parameters);
if ($this
->getRequest()->query
->has('destination')) {
$query = $url
->getOption('query');
$query['destination'] = $this
->getRequest()->query
->get('destination');
$url
->setOption('query', $query);
}
$actions['delete'] = [
'#type' => 'link',
'#title' => $this
->t('Delete'),
'#url' => $url,
'#access' => $this->entity
->access('delete'),
'#attributes' => [
'class' => [
'button',
'button--danger',
],
],
];
}
return $actions;
}
public function validateForm(array &$form, FormStateInterface $form_state) {
parent::validateForm($form, $form_state);
if (isset($form['default_value'])) {
$item = $form['#entity']
->get($this->entity
->getName());
$item
->defaultValuesFormValidate($form['default_value'], $form, $form_state);
}
}
public function submitForm(array &$form, FormStateInterface $form_state) {
parent::submitForm($form, $form_state);
$default_value = [];
if (isset($form['default_value'])) {
$items = $form['#entity']
->get($this->entity
->getName());
$default_value = $items
->defaultValuesFormSubmit($form['default_value'], $form, $form_state);
}
$this->entity
->setDefaultValue($default_value);
}
public function save(array $form, FormStateInterface $form_state) {
$this->entity
->save();
$this
->messenger()
->addStatus($this
->t('Saved %label configuration.', [
'%label' => $this->entity
->getLabel(),
]));
$request = $this
->getRequest();
if (($destinations = $request->query
->all('destinations')) && ($next_destination = FieldUI::getNextDestination($destinations))) {
$request->query
->remove('destinations');
$form_state
->setRedirectUrl($next_destination);
}
else {
$form_state
->setRedirectUrl(FieldUI::getOverviewRouteInfo($this->entity
->getTargetEntityTypeId(), $this->entity
->getTargetBundle()));
}
}
public function getTitle(FieldConfigInterface $field_config) {
return $field_config
->label();
}
}