function menu_link_weight_menu_link_content_form_validate in Menu Link Weight 8
Same name and namespace in other branches
- 8.2 menu_link_weight.menu_ui.inc \menu_link_weight_menu_link_content_form_validate()
Validation hook for the menu_link weight element.
1 string reference to 'menu_link_weight_menu_link_content_form_validate'
- _menu_link_weight_menu_link_form_alter in ./
menu_link_weight.menu_ui.inc - Alter and attach the menu link weight widgets for menu link edit form.
File
- ./
menu_link_weight.menu_ui.inc, line 230
Code
function menu_link_weight_menu_link_content_form_validate($form, FormStateInterface $form_state) {
/** @var \Drupal\Core\Menu\MenuLinkManagerInterface $menu_link_manager */
$menu_link_manager = \Drupal::service('plugin.manager.menu.link');
$parent_element = $form['menu_parent'];
$parent_value = _menu_link_weight_get_parent_value_from_element($parent_element, $form_state);
if ($form_state
->hasValue([
'menu_link_weight',
])) {
list($menu_name, $parent_id) = explode(':', $parent_value, 2);
// Loop through submitted weights and confirm that the parent link/menu
// are still the same.
$weights = $form_state
->getValue([
'menu_link_weight',
]);
unset($weights['link_current']);
foreach ($weights as $link_id => $weight) {
/** @var \Drupal\Core\Menu\MenuLinkInterface $link */
$link = $menu_link_manager
->createInstance($link_id);
if ($link
->getParent() != $parent_id) {
$form_state
->setErrorByName('menu][menu_link_weight', t('The parent for one of the menu links have been changed by another user, please try again.'));
}
if ($link
->getMenuName() != $menu_name) {
$form_state
->setErrorByName('menu][menu_link_weight', t('The menu for one of the menu links have been changed by another user, please try again.'));
}
}
}
if ($form_state
->hasValue([
'db_weights',
])) {
// Check that children and weights are still the same as when the form was
// loaded. Get the old values from the "hidden" form elements.
foreach ($form_state
->getValue([
'db_weights',
]) as $link_id => $db_weight) {
$link = $menu_link_manager
->createInstance($link_id);
if ($link
->getWeight() != $db_weight) {
$form_state
->setErrorByName('menu][menu_link_weight', t('The menu link weights have been changed by another user, please try again.'));
}
}
}
if (!$form_state
->getErrors() && $form_state
->hasValue([
'menu',
'menu_link_weight',
'link_current',
'weight',
])) {
// Override the weight of the current link.
// MenuLinkContent form has different form structure.
if ($form_state
->hasValue([
'weight',
0,
'value',
])) {
$form_state
->setValue([
'weight',
0,
'value',
], $form_state
->getValue([
'menu',
'menu_link_weight',
'link_current',
'weight',
]));
}
else {
$form_state
->setValue([
'weight',
], $form_state
->getValue([
'menu',
'menu_link_weight',
'link_current',
'weight',
]));
}
}
}