public function WebformSame::alterForm in Webform 6.x
Same name and namespace in other branches
- 8.5 src/Plugin/WebformElement/WebformSame.php \Drupal\webform\Plugin\WebformElement\WebformSame::alterForm()
Alter an element's associated form.
Parameters
array $element: An element.
array $form: An associative array containing the structure of the form.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.
Overrides WebformElementBase::alterForm
File
- src/
Plugin/ WebformElement/ WebformSame.php, line 128
Class
- WebformSame
- Provides a 'webform_same' element.
Namespace
Drupal\webform\Plugin\WebformElementCode
public function alterForm(array &$element, array &$form, FormStateInterface $form_state) {
if (!isset($element['#source']) || !isset($element['#destination'])) {
return;
}
// Get source element.
$source = $element['#source'];
$source_element = WebformElementHelper::getElement($form, $source);
if (!$source_element) {
return;
}
// Get destination element.
$destination = $element['#destination'];
$destination_element =& WebformElementHelper::getElement($form, $destination);
if (!$destination_element) {
return;
}
// Add #states to destination element.
$selector = ':input[name="' . $element['#webform_key'] . '"]';
$state = !empty($element['#destination_state']) ? $element['#destination_state'] : 'visible';
$destination_element['#states'][$state][$selector] = [
'checked' => FALSE,
];
$destination_element['#states_clear'] = FALSE;
// Track webform same elements and add validation callback used
// to sync source to destination.
$form += [
'#webform_same' => [],
];
$form['#webform_same'][$element['#webform_key']] = [
'source' => $source,
'destination' => $destination,
];
$form['#validate'][] = [
get_called_class(),
'validateForm',
];
}