function WidgetBase::deleteSubmit
Same name in other branches
- 10 core/lib/Drupal/Core/Field/WidgetBase.php \Drupal\Core\Field\WidgetBase::deleteSubmit()
Ajax submit callback for the "Remove" button.
This re-numbers form elements and removes an item.
Parameters
array $form: The form array to remove elements from.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.
File
-
core/
lib/ Drupal/ Core/ Field/ WidgetBase.php, line 379
Class
- WidgetBase
- Base class for 'Field widget' plugin implementations.
Namespace
Drupal\Core\FieldCode
public static function deleteSubmit(&$form, FormStateInterface $form_state) {
$button = $form_state->getTriggeringElement();
$delta = (int) $button['#delta'];
$array_parents = array_slice($button['#array_parents'], 0, -4);
$parent_element = NestedArray::getValue($form, array_merge($array_parents, [
'widget',
]));
$field_name = $parent_element['#field_name'];
$parents = $parent_element['#field_parents'];
$field_state = static::getWidgetState($parents, $field_name, $form_state);
$user_input = $form_state->getUserInput();
$field_input = NestedArray::getValue($user_input, $parent_element['#parents'], $exists);
if ($exists) {
$field_values = [];
foreach ($field_input as $key => $input) {
if (is_numeric($key) && $key >= $delta) {
if ((int) $key === $delta) {
--$key;
continue;
}
}
$field_values[$key] = $input;
}
NestedArray::setValue($user_input, $parent_element['#parents'], $field_values);
$form_state->setUserInput($user_input);
}
$field_state['deleted_item'] = $delta;
unset($parent_element[$delta]);
NestedArray::setValue($form, $array_parents, $parent_element);
if ($field_state['items_count'] > 0) {
$field_state['items_count']--;
}
$user_input = $form_state->getUserInput();
$input = NestedArray::getValue($user_input, $parent_element['#parents'], $exists);
$weight = -1 * $field_state['items_count'];
foreach ($input as $key => $item) {
if ($item) {
$input[$key]['_weight'] = $weight++;
}
}
// Reset indices.
$input = array_values($input);
$user_input = $form_state->getUserInput();
NestedArray::setValue($user_input, $parent_element['#parents'], $input);
$form_state->setUserInput($user_input);
static::setWidgetState($parents, $field_name, $form_state, $field_state);
$form_state->setRebuild();
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.