You are here

function multiple_registration_field_widget_form_alter in Multiple Registration 8.2

Same name and namespace in other branches
  1. 8 multiple_registration.module \multiple_registration_field_widget_form_alter()
  2. 7 multiple_registration.module \multiple_registration_field_widget_form_alter()
  3. 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;
          }
        }
      }
    }
  }
}