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.
14 class ConfigTestForm extends EntityForm {
19 public function form(array $form, FormStateInterface $form_state) {
20 $form = parent::form($form, $form_state);
22 $entity = $this->entity;
24 '#type' => 'textfield',
26 '#default_value' => $entity->label(),
30 '#type' => 'machine_name',
31 '#default_value' => $entity->id(),
34 'exists' => [$this, 'exists'],
35 'replace_pattern' => '[^a-z0-9_.]+',
41 '#default_value' => $entity->get('weight'),
45 '#title' => 'Image style',
47 '#default_value' => $entity->get('style'),
50 if ($this->moduleHandler->moduleExists('image')) {
51 $form['style']['#access'] = TRUE;
52 $form['style']['#options'] = image_style_options();
55 // The main premise of entity forms is that we get to work with an entity
56 // object at all times instead of checking submitted values from the form
58 $size = $entity->get('size');
60 $form['size_wrapper'] = [
61 '#type' => 'container',
63 'id' => 'size-wrapper',
66 $form['size_wrapper']['size'] = [
72 '#empty_option' => '- None -',
73 '#default_value' => $size,
75 'callback' => '::updateSize',
76 'wrapper' => 'size-wrapper',
79 $form['size_wrapper']['size_submit'] = [
81 '#value' => t('Change size'),
83 'class' => ['js-hide'],
85 '#submit' => [[get_class($this), 'changeSize']],
87 $form['size_wrapper']['size_value'] = [
89 '#title' => 'Custom size value',
95 '#default_value' => $entity->get('size_value'),
96 '#access' => !empty($size),
100 '#type' => 'language_select',
101 '#title' => t('Language'),
102 '#languages' => LanguageInterface::STATE_ALL,
103 '#default_value' => $entity->language()->getId(),
106 $form['actions'] = ['#type' => 'actions'];
107 $form['actions']['submit'] = [
111 $form['actions']['delete'] = [
113 '#value' => 'Delete',
120 * Ajax callback for the size selection element.
122 public static function updateSize(array $form, FormStateInterface $form_state) {
123 return $form['size_wrapper'];
127 * Element submit handler for non-JS testing.
129 public static function changeSize(array $form, FormStateInterface $form_state) {
130 $form_state->setRebuild();
136 public function save(array $form, FormStateInterface $form_state) {
137 $entity = $this->entity;
138 $status = $entity->save();
140 if ($status === SAVED_UPDATED) {
141 drupal_set_message(format_string('%label configuration has been updated.', ['%label' => $entity->label()]));
144 drupal_set_message(format_string('%label configuration has been created.', ['%label' => $entity->label()]));
147 $form_state->setRedirectUrl($this->entity->urlInfo('collection'));
151 * Determines if the entity already exists.
153 * @param string|int $entity_id
155 * @param array $element
157 * @param \Drupal\Core\Form\FormStateInterface $form_state
158 * The current state of the form.
161 * TRUE if the entity exists, FALSE otherwise.
163 public function exists($entity_id, array $element, FormStateInterface $form_state) {
164 /** @var \Drupal\Core\Config\Entity\ConfigEntityInterface $entity */
165 $entity = $form_state->getFormObject()->getEntity();
166 return (bool) $this->entityTypeManager->getStorage($entity->getEntityTypeId())
168 ->condition($entity->getEntityType()->getKey('id'), $entity_id)