function multiple_registration_field_widget_form_alter in Multiple Registration 8.2
Same name and namespace in other branches
- 8 multiple_registration.module \multiple_registration_field_widget_form_alter()
- 7 multiple_registration.module \multiple_registration_field_widget_form_alter()
- 3.x multiple_registration.module \multiple_registration_field_widget_form_alter()
Implements hook_field_widget_form_alter().
File
- ./
multiple_registration.module, line 242 - Contains multiple_registration.module.
Code
function multiple_registration_field_widget_form_alter(&$element, FormStateInterface $form_state, $context) {
$field_definition = $context['items']
->getFieldDefinition();
$field_name = $field_definition
->getName();
$parents = $context['form']['#parents'];
$widget_state = WidgetBase::getWidgetState($parents, $field_name, $form_state);
if ($field_definition
->getTargetEntityTypeId() === 'user' && $field_definition instanceof ThirdPartySettingsInterface) {
if ($field_definition
->getThirdPartySetting('multiple_registration', 'user_additional_register_form')) {
$field_roles = $field_definition
->getThirdPartySetting('multiple_registration', 'user_additional_register_form');
}
else {
$field_roles = [];
}
if ($field_definition
->getThirdPartySetting('multiple_registration', 'user_additional_register_form_required')) {
$field_roles_required = $field_definition
->getThirdPartySetting('multiple_registration', 'user_additional_register_form_required');
}
else {
$field_roles_required = [];
}
// Conditions for AJAX triggers and paragraphs with removed states.
$has_not_triggering_elements = $form_state
->getTriggeringElement() === NULL;
$paragraphs_with_removed_mode = !isset($form_state
->getTriggeringElement()['#paragraphs_mode']) && (isset($form_state
->getTriggeringElement()['#paragraphs_mode']) && $form_state
->getTriggeringElement()['#paragraphs_mode'] !== 'removed');
// If something was selected.
if (!empty($field_roles) && max($field_roles) !== 0) {
if ($has_not_triggering_elements || $paragraphs_with_removed_mode) {
$element['#access'] = MultipleRegistrationController::checkFieldAccess($field_roles);
}
}
if ((!isset($element['#required']) || $element['#required'] === FALSE) && !empty($field_roles_required)) {
// If something was selected.
if (max($field_roles_required) !== 0) {
$required = MultipleRegistrationController::checkFieldAccess($field_roles_required);
$element['#required'] = $required;
// Fix 'N/A' element option for 'required' widgets to make them
// similar with core widgets behaviour.
if (isset($element['#options']['_none'])) {
if ($element['#type'] === 'radios' || $element['#type'] === 'checkboxes') {
unset($element['#options']['_none']);
}
if ($element['#type'] === 'select') {
$element['#options']['_none'] = \Drupal::translation()
->translate('- Select a value -');
}
}
foreach (Element::children($element) as $child) {
if ($widget_state['items_count'] === 0 || isset($element[$child]['#delta']) && $element[$child]['#delta'] < $widget_state['items_count']) {
$element[$child]['#required'] = $required;
}
}
}
}
}
}