public static function WebformCompositeBase::processWebformCompositeElementsRecursive in Webform 6.x
Same name and namespace in other branches
- 8.5 src/Element/WebformCompositeBase.php \Drupal\webform\Element\WebformCompositeBase::processWebformCompositeElementsRecursive()
Recursively processes a composite's elements.
1 call to WebformCompositeBase::processWebformCompositeElementsRecursive()
- WebformCompositeBase::processWebformComposite in src/
Element/ WebformCompositeBase.php - Processes a composite webform element.
File
- src/
Element/ WebformCompositeBase.php, line 112
Class
- WebformCompositeBase
- Provides an base composite webform element.
Namespace
Drupal\webform\ElementCode
public static function processWebformCompositeElementsRecursive(&$element, array &$composite_elements, FormStateInterface $form_state, &$complete_form) {
/** @var \Drupal\webform\Plugin\WebformElementManagerInterface $element_manager */
$element_manager = \Drupal::service('plugin.manager.webform.element');
// Get composite element required/options states from visible/hidden states.
$composite_required_states = WebformElementHelper::getRequiredFromVisibleStates($element);
foreach ($composite_elements as $composite_key => &$composite_element) {
// Make sure the composite key is a string.
$composite_key = (string) $composite_key;
if (!Element::child($composite_key) || !is_array($composite_element)) {
continue;
}
// Set parents.
$composite_element['#parents'] = array_merge($element['#parents'], [
$composite_key,
]);
// If the element's #access is FALSE, apply it to all sub elements.
if ($element['#access'] === FALSE) {
$composite_element['#access'] = FALSE;
}
// Get element plugin and set inputs #default_value.
$element_plugin = $element_manager
->getElementInstance($composite_element);
if ($element_plugin
->isInput($composite_element)) {
// Set #default_value for sub elements.
if (isset($element['#value'][$composite_key])) {
$composite_element['#default_value'] = $element['#value'][$composite_key];
}
}
// Build the webform element.
$element_manager
->buildElement($composite_element, $complete_form, $form_state);
// Custom validate required sub-element because they can be hidden
// via #access or #states.
// @see \Drupal\webform\Element\WebformCompositeBase::validateWebformComposite
if ($composite_required_states && !empty($composite_element['#required'])) {
unset($composite_element['#required']);
$composite_element['#_required'] = TRUE;
if (!isset($composite_element['#states'])) {
$composite_element['#states'] = [];
}
$composite_element['#states'] += $composite_required_states;
}
static::processWebformCompositeElementsRecursive($element, $composite_element, $form_state, $complete_form);
}
}