function language_hierarchy_form_language_admin_overview_form_alter in Language Hierarchy 2.x
Same name and namespace in other branches
- 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';
}