re-implemented tracklist to term_reference_tree

This commit is contained in:
2019-06-26 15:40:49 +02:00
parent b02f874d6b
commit 63592652b0
5 changed files with 165 additions and 204 deletions

View File

@@ -78,7 +78,43 @@ class CheckboxTree extends FormElement {
$tree = new \stdClass();
$tree->children = $terms;
unset($element['#needs_validation']);
$element[] = _term_reference_tree_build_level($element, $tree, $form_state, $value, $element['#max_choices'], [], 1);
$element['checkbox_tree'] = _term_reference_tree_build_level($element, $tree, $form_state, $value, $element['#max_choices'], [], 1);
// track list
if ($element['#track_list']) {
if($form_state->getTriggeringElement()){
// we are on ajax
// $value is not updated on ajax callback
// we need an other way to get wich options are checked
// and give an accurate track list
$parent = $element['#parents'][0]; // get the element's parent field
$input = $form_state->getUserInput(); // get all inputs from form state
$checkbox_tree_input = $input[$parent]['checkbox_tree']; // get the chekbox_tree input
$selected = _term_reference_tree_get_flatten_selected_values($checkbox_tree_input); // get selected flattenized
$track_list_input = $input[$parent]['track_list']; // get the current track_list input with correct order
$old_list = array_keys($track_list_input); // flattenize
// remove all chebox_tree input unselected from the list
$list = [];
foreach ($old_list as $id) {
if(in_array($id, $selected)){
$list[] = $id;
}
}
// append newly selected
$diff = array_diff($selected, $list);
foreach ($diff as $id) {
$list[] = $id;
}
}else{
// if not ajax just get the default value
$list = $value;
}
// build the track_list form element
$element['track_list'] = _term_reference_tree_build_track_list_order($list, $element['#options']);
}
return $element;
}