You are here

function entity_language_fallback_form_language_admin_edit_form_alter in Entity Language Fallback 8

Implements hook_form_FORM_ID_alter()

File

./entity_language_fallback.module, line 32
Add fallback languages to entities.

Code

function entity_language_fallback_form_language_admin_edit_form_alter(&$form, FormStateInterface $form_state) {

  /** @var Drupal\language\Entity\ConfigurableLanguage $this_language */
  $this_language = $form_state
    ->getFormObject()
    ->getEntity();
  $languages = Drupal::languageManager()
    ->getLanguages();
  $options = [];
  foreach ($languages as $language) {

    // Only include this language if its not itself.
    if ($language
      ->getId() != $this_language
      ->getId()) {
      $options[$language
        ->getId()] = $language
        ->getName();
    }
  }
  $form['entity_language_fallback'] = [
    '#title' => t('Entity fallback language'),
    '#description' => t('Choose one or more fallback languages in prioritized order. The languages are used as fallback in entity view.'),
    '#type' => 'details',
    '#open' => TRUE,
    '#tree' => TRUE,
  ];

  // Creating one priority field per available language.
  $default_values = $this_language
    ->getThirdPartySetting('entity_language_fallback', 'fallback_langcodes', []);
  for ($i = 0; $i < count($options); $i++) {
    $form['entity_language_fallback'][$i] = [
      '#type' => 'select',
      '#title' => t('Priority @priority', [
        '@priority' => $i + 1,
      ]),
      '#description' => t('Choose the language used as priority @priority fallback language.', [
        '@priority' => $i + 1,
      ]),
      '#options' => $options,
      '#default_value' => !empty($default_values[$i]) ? $default_values[$i] : '',
      '#empty_option' => t('-None-'),
      '#tree' => TRUE,
    ];
  }
  $form['#entity_builders'][] = 'entity_language_fallback_form_language_admin_edit_form_builder';
}