You are here

function language_hierarchy_form_language_admin_overview_form_alter in Language Hierarchy 2.x

Same name and namespace in other branches
  1. 8 language_hierarchy.module \language_hierarchy_form_language_admin_overview_form_alter()

Implements hook_form_FORM_ID_alter() for language_admin_overview_form().

File

./language_hierarchy.module, line 128
Add sublanguage handling functionality to Drupal.

Code

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

  /** @var \Drupal\language\ConfigurableLanguageInterface[] $languages */
  $languages = $form['languages']['#languages'];
  $hierarchy = [];
  foreach ($languages as $langcode => $language) {
    $ancestors = [
      $langcode => [],
    ] + language_hierarchy_get_ancestors($language);
    $location = array_reverse(array_keys($ancestors));
    $hierarchy_element = [
      '#weight' => $language
        ->getWeight(),
      '#title' => $language
        ->getName(),
    ];
    $existing = NestedArray::getValue($hierarchy, $location);
    if (is_array($existing)) {
      $hierarchy_element = $hierarchy_element + $existing;
    }
    NestedArray::setValue($hierarchy, $location, $hierarchy_element);
  }
  $flattened = language_hierarchy_get_sorted_flattened_hierarchy($hierarchy);
  $weights = array_combine(array_keys($flattened), range(0, count($flattened) - 1));
  $pos = array_search('weight', array_keys($form['languages']['#header']));
  $insert = [
    'parent' => [
      'data' => t('Parent'),
    ],
    'id' => [
      'data' => t('ID'),
      'class' => 'hidden',
    ],
  ];
  $form['languages']['#header'] = array_slice($form['languages']['#header'], 0, $pos + 1) + $insert + array_slice($form['languages']['#header'], count($form['languages']['#header']) - $pos - 1);
  foreach ($languages as $langcode => $language) {
    $depth = language_hierarchy_calculate_depth($language);
    $form['languages'][$langcode]['#weight'] = $weights[$langcode];
    $form['languages'][$langcode]['label'] = [
      [
        '#theme' => 'indentation',
        '#size' => $depth,
      ],
      $form['languages'][$langcode]['label'],
    ];
    $form['languages'][$langcode]['id'] = [
      '#type' => 'hidden',
      '#value' => $langcode,
      '#attributes' => [
        'class' => [
          'language-id',
        ],
      ],
      '#wrapper_attributes' => [
        'class' => [
          'hidden',
        ],
      ],
      '#weight' => 10,
    ];
    $form['languages'][$langcode]['parent'] = [
      '#type' => 'select',
      '#empty_value' => '',
      '#options' => $flattened,
      '#attributes' => [
        'class' => [
          'language-parent',
        ],
      ],
      '#default_value' => $language
        ->getThirdPartySetting('language_hierarchy', 'fallback_langcode', NULL),
    ];
    $form['languages'][$langcode]['operations']['#weight'] = 11;
    uasort($form['languages'][$langcode], [
      '\\Drupal\\Component\\Utility\\SortArray',
      'sortByWeightProperty',
    ]);
  }
  uasort($form['languages'], [
    '\\Drupal\\Component\\Utility\\SortArray',
    'sortByWeightProperty',
  ]);
  $form['languages']['#tabledrag'] = [
    [
      'action' => 'match',
      'relationship' => 'parent',
      'group' => 'language-parent',
      'subgroup' => 'language-parent',
      'source' => 'language-id',
    ],
    [
      'action' => 'order',
      'relationship' => 'sibling',
      'group' => 'weight',
    ],
  ];
  $form['#submit'][] = 'language_hierarchy_language_admin_overview_form_submit';
}