public function WebformUiElementFormBase::buildForm in Webform 6.x
Same name and namespace in other branches
- 8.5 modules/webform_ui/src/Form/WebformUiElementFormBase.php \Drupal\webform_ui\Form\WebformUiElementFormBase::buildForm()
Form constructor.
Parameters
array $form: An associative array containing the structure of the form.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.
Return value
array The form structure.
Overrides FormInterface::buildForm
3 calls to WebformUiElementFormBase::buildForm()
- WebformUiElementAddForm::buildForm in modules/
webform_ui/ src/ Form/ WebformUiElementAddForm.php - Form constructor.
- WebformUiElementDuplicateForm::buildForm in modules/
webform_ui/ src/ Form/ WebformUiElementDuplicateForm.php - Form constructor.
- WebformUiElementEditForm::buildForm in modules/
webform_ui/ src/ Form/ WebformUiElementEditForm.php - Form constructor.
4 methods override WebformUiElementFormBase::buildForm()
- WebformUiElementAddForm::buildForm in modules/
webform_ui/ src/ Form/ WebformUiElementAddForm.php - Form constructor.
- WebformUiElementDuplicateForm::buildForm in modules/
webform_ui/ src/ Form/ WebformUiElementDuplicateForm.php - Form constructor.
- WebformUiElementEditForm::buildForm in modules/
webform_ui/ src/ Form/ WebformUiElementEditForm.php - Form constructor.
- WebformUiElementTestForm::buildForm in modules/
webform_ui/ src/ Form/ WebformUiElementTestForm.php - Form constructor.
File
- modules/
webform_ui/ src/ Form/ WebformUiElementFormBase.php, line 148
Class
- WebformUiElementFormBase
- Provides a base class for webform element webforms.
Namespace
Drupal\webform_ui\FormCode
public function buildForm(array $form, FormStateInterface $form_state, WebformInterface $webform = NULL, $key = NULL, $parent_key = NULL, $type = NULL) {
// Override an element's default value using the $form_state.
if ($form_state
->get('default_value')) {
$this->element['#default_value'] = $form_state
->get('default_value');
}
$this->webform = $webform;
$this->key = $key;
$this->parentKey = $parent_key;
$element_plugin = $this
->getWebformElementPlugin();
$form['#parents'] = [];
$form['properties'] = [
'#parents' => [
'properties',
],
];
$subform_state = SubformState::createForSubform($form['properties'], $form, $form_state);
$subform_state
->set('element', $this->element);
$form['properties'] = $element_plugin
->buildConfigurationForm($form['properties'], $subform_state);
// Move messages to the top of the webform.
if (isset($form['properties']['messages'])) {
$form['messages'] = $form['properties']['messages'];
$form['messages']['#weight'] = -100;
unset($form['properties']['messages']);
}
// Set parent key.
$form['parent_key'] = [
'#type' => 'value',
'#value' => $parent_key,
];
// Set element type.
$form['properties']['element']['type'] = [
'#type' => 'item',
'#title' => $this
->t('Type'),
'label' => [
'#markup' => $element_plugin
->getPluginLabel(),
],
'#weight' => -100,
'#parents' => [
'type',
],
];
// Set change element type.
if ($key && $element_plugin
->getRelatedTypes($this->element)) {
$route_parameters = [
'webform' => $webform
->id(),
'key' => $key,
];
if ($this->originalType) {
$original_webform_element = $this->elementManager
->createInstance($this->originalType);
$route_parameters = [
'webform' => $webform
->id(),
'key' => $key,
];
$form['properties']['element']['type']['cancel'] = [
'#type' => 'link',
'#title' => $this
->t('Cancel'),
'#url' => new Url('entity.webform_ui.element.edit_form', $route_parameters),
'#attributes' => WebformDialogHelper::getOffCanvasDialogAttributes(WebformDialogHelper::DIALOG_NORMAL, [
'button',
'button--small',
]),
'#prefix' => ' ',
];
$form['properties']['element']['type']['#description'] = '(' . $this
->t('Changing from %type', [
'%type' => $original_webform_element
->getPluginLabel(),
]) . ')';
}
else {
$form['properties']['element']['type']['change_type'] = [
'#type' => 'link',
'#title' => $this
->t('Change'),
'#url' => new Url('entity.webform_ui.change_element', $route_parameters),
'#attributes' => WebformDialogHelper::getModalDialogAttributes(WebformDialogHelper::DIALOG_NORMAL, [
'button',
'button--small',
]),
'#prefix' => ' ',
];
}
}
// Set element key reserved word warning message.
// @see Drupal.behaviors.webformUiElementKey
if (!$key) {
$reserved_keys = [
'form_build_id',
'form_token',
'form_id',
'data',
'op',
'destination',
];
$reserved_keys = array_merge($reserved_keys, array_keys($this->entityFieldManager
->getBaseFieldDefinitions('webform_submission')));
$form['#attached']['drupalSettings']['webform_ui']['reserved_keys'] = $reserved_keys;
$form['properties']['element']['key_warning'] = [
'#type' => 'webform_message',
'#message_type' => 'warning',
'#message_message' => [
'#markup' => $this
->t("Please avoid using the reserved word '@key' as the element's key."),
'#prefix' => '<div id="webform-ui-reserved-key-warning">',
'#suffix' => '</div>',
],
'#weight' => -99,
'#attributes' => [
'style' => 'display:none',
],
];
}
// Set element key with custom machine name pattern.
// @see \Drupal\webform\WebformEntityElementsValidator::validateNames
$machine_name_pattern = $this
->config('webform.settings')
->get('element.machine_name_pattern') ?: 'a-z0-9_';
switch ($machine_name_pattern) {
case 'a-z0-9_':
$machine_name_requirements = $this
->t('lowercase letters, numbers, and underscores');
break;
case 'a-zA-Z0-9_':
$machine_name_requirements = $this
->t('letters, numbers, and underscores');
break;
case 'a-z0-9_-':
$machine_name_requirements = $this
->t('lowercase letters, numbers, and underscores');
break;
case 'a-zA-Z0-9_-':
$machine_name_requirements = $this
->t('letters, numbers, underscores, and dashes');
break;
}
$t_args = [
'@requirements' => $machine_name_requirements,
];
$form['properties']['element']['key'] = [
'#type' => 'machine_name',
'#title' => $this
->t('Key'),
'#description' => $this
->t('A unique element key. Can only contain @requirements.', $t_args),
'#machine_name' => [
'label' => '<br/>' . $this
->t('Key'),
'exists' => [
$this,
'exists',
],
'source' => [
'title',
],
'replace_pattern' => '[^' . $machine_name_pattern . ']+',
'error' => $this
->t('The element key name must contain only @requirements.', $t_args),
],
'#required' => TRUE,
'#parents' => [
'key',
],
'#disabled' => $key ? TRUE : FALSE,
'#default_value' => $key ?: $this
->getDefaultKey(),
'#weight' => -97,
];
// Remove the key's help text (aka description) once it has been set.
if ($key) {
$form['properties']['element']['key']['#description'] = NULL;
}
// Use title for key (machine_name).
if (isset($form['properties']['element']['title'])) {
$form['properties']['element']['key']['#machine_name']['source'] = [
'properties',
'element',
'title',
];
$form['properties']['element']['title']['#id'] = 'title';
}
// Prefix table row child elements with the table row key.
if ($this
->isNew() && ($parent_prefix = $this
->getParentKeyPrefix($parent_key))) {
$form['properties']['element']['key']['#field_prefix'] = $parent_prefix . '_';
$form['properties']['element']['table_message'] = [
'#type' => 'webform_message',
'#message_message' => $this
->t("Element keys are automatically prefixed with parent row's key."),
'#message_type' => 'warning',
'#message_close' => TRUE,
'#message_storage' => WebformMessage::STORAGE_SESSION,
'#weight' => -98,
];
}
// Set flex.
// Hide #flex property if parent element is not a 'webform_flexbox'.
if (isset($form['properties']['flex']) && !$this
->isParentElementFlexbox($key, $parent_key)) {
$form['properties']['flex']['#access'] = FALSE;
}
$form['#attached']['library'][] = 'webform_ui/webform_ui';
// Set actions.
$form['actions'] = [
'#type' => 'actions',
];
$form['actions']['submit'] = [
'#type' => 'submit',
'#value' => $this
->t('Save'),
'#button_type' => 'primary',
'#_validate_form' => TRUE,
];
if ($this->operation === 'create' && $this
->isAjax() && !$element_plugin instanceof WebformTable && !$element_plugin instanceof WebformTableRow) {
$form['actions']['save_add_element'] = [
'#type' => 'submit',
'#value' => $this
->t('Save + Add element'),
'#_validate_form' => TRUE,
];
}
// Add token links below the form and on every tab.
$form['token_tree_link'] = $this->tokenManager
->buildTreeElement();
if ($form['token_tree_link']) {
$form['token_tree_link'] += [
'#weight' => 101,
];
}
$form = $this
->buildDefaultValueForm($form, $form_state);
return $this
->buildDialogForm($form, $form_state);
}