3 namespace Drupal\config_test;
5 use Drupal\Core\Entity\EntityForm;
6 use Drupal\Core\Form\FormStateInterface;
7 use Drupal\Core\Language\LanguageInterface;
10 * Form controller for the test config edit forms.
12 class ConfigTestForm extends EntityForm {
17 public function form(array $form, FormStateInterface $form_state) {
18 $form = parent::form($form, $form_state);
20 $entity = $this->entity;
22 '#type' => 'textfield',
24 '#default_value' => $entity->label(),
28 '#type' => 'machine_name',
29 '#default_value' => $entity->id(),
32 'exists' => [$this, 'exists'],
33 'replace_pattern' => '[^a-z0-9_.]+',
39 '#default_value' => $entity->get('weight'),
43 '#title' => 'Image style',
45 '#default_value' => $entity->get('style'),
48 if ($this->moduleHandler->moduleExists('image')) {
49 $form['style']['#access'] = TRUE;
50 $form['style']['#options'] = image_style_options();
53 // The main premise of entity forms is that we get to work with an entity
54 // object at all times instead of checking submitted values from the form
56 $size = $entity->get('size');
58 $form['size_wrapper'] = [
59 '#type' => 'container',
61 'id' => 'size-wrapper',
64 $form['size_wrapper']['size'] = [
70 '#empty_option' => '- None -',
71 '#default_value' => $size,
73 'callback' => '::updateSize',
74 'wrapper' => 'size-wrapper',
77 $form['size_wrapper']['size_submit'] = [
79 '#value' => t('Change size'),
81 'class' => ['js-hide'],
83 '#submit' => [[get_class($this), 'changeSize']],
85 $form['size_wrapper']['size_value'] = [
87 '#title' => 'Custom size value',
93 '#default_value' => $entity->get('size_value'),
94 '#access' => !empty($size),
98 '#type' => 'language_select',
99 '#title' => t('Language'),
100 '#languages' => LanguageInterface::STATE_ALL,
101 '#default_value' => $entity->language()->getId(),
104 $form['actions'] = ['#type' => 'actions'];
105 $form['actions']['submit'] = [
109 $form['actions']['delete'] = [
111 '#value' => 'Delete',
118 * Ajax callback for the size selection element.
120 public static function updateSize(array $form, FormStateInterface $form_state) {
121 return $form['size_wrapper'];
125 * Element submit handler for non-JS testing.
127 public static function changeSize(array $form, FormStateInterface $form_state) {
128 $form_state->setRebuild();
134 public function save(array $form, FormStateInterface $form_state) {
135 $entity = $this->entity;
136 $status = $entity->save();
138 if ($status === SAVED_UPDATED) {
139 drupal_set_message(format_string('%label configuration has been updated.', ['%label' => $entity->label()]));
142 drupal_set_message(format_string('%label configuration has been created.', ['%label' => $entity->label()]));
145 $form_state->setRedirectUrl($this->entity->urlInfo('collection'));
149 * Determines if the entity already exists.
151 * @param string|int $entity_id
153 * @param array $element
155 * @param \Drupal\Core\Form\FormStateInterface $form_state
156 * The current state of the form.
159 * TRUE if the entity exists, FALSE otherwise.
161 public function exists($entity_id, array $element, FormStateInterface $form_state) {
162 /** @var \Drupal\Core\Config\Entity\ConfigEntityInterface $entity */
163 $entity = $form_state->getFormObject()->getEntity();
164 return (bool) $this->entityTypeManager->getStorage($entity->getEntityTypeId())
166 ->condition($entity->getEntityType()->getKey('id'), $entity_id)