ordre non respect (js compare delatas as string and not numbers)
term disparaissant (car delta identiques)
translate (entity translate) delete terms

Signed-off-by: bachy <git@g-u-i.net>
This commit is contained in:
bachy 2012-05-24 23:38:22 +02:00
parent 461c93d48a
commit 4cf9d7b2c6
2 changed files with 91 additions and 64 deletions

View File

@ -246,10 +246,14 @@
if(delta == -1){ if(delta == -1){
track_list_container.append(new_item); track_list_container.append(new_item);
inserted_flag = true; inserted_flag = true;
$hiddenInput = $('#'+control_id).parent('.form-item').next('input[type=hidden]');
// console.log('$hiddenInput',$hiddenInput);
$hiddenInput.val(new_item.index());
}else{ }else{
list_items.each(function(index){ list_items.each(function(index){
item_comparing_to = $(this); item_comparing_to = $(this);
if ( delta < item_comparing_to.attr('delta') ) { if ( parseInt(delta) < parseInt(item_comparing_to.attr('delta')) ) {
//Add it here. //Add it here.
item_comparing_to.before(new_item); item_comparing_to.before(new_item);
inserted_flag = true; inserted_flag = true;
@ -262,8 +266,6 @@
} }
$hiddenInput = $('#'+control_id).parent('.form-item').next('input[type=hidden]');
$hiddenInput.val(new_item.index());
track_list_container.sortable('refresh'); track_list_container.sortable('refresh');
} }

View File

@ -587,6 +587,11 @@ function term_reference_tree_field_widget_form(&$form, &$form_state, $field, $in
* The validated element. * The validated element.
*/ */
function _term_reference_tree_widget_validate(&$element, &$form_state) { function _term_reference_tree_widget_validate(&$element, &$form_state) {
// dsm($element, '$element');
// dsm($form_state, '$form_state');
# if the field was in the form
if(isset($form_state['input'][$element['#field_name']])){
$items = _term_reference_tree_flatten($element, $form_state); $items = _term_reference_tree_flatten($element, $form_state);
$value = array(); $value = array();
@ -611,29 +616,41 @@ function _term_reference_tree_widget_validate(&$element, &$form_state) {
}else{ }else{
$selected_terms = array(); $selected_terms = array();
$deltas = array();
foreach($items as $child) { foreach($items as $child) {
if (array_key_exists('#value', $child) && $child['#value'] !== 0) { if (array_key_exists('#value', $child) && $child['#value'] !== 0) {
$delta = $form_state['input'][$child['#value'].'-weight']; $selected_terms[] = array(
$selected_terms[$delta] = array($element['#value_key'] => $child['#value']); "delta" => $form_state['input'][$child['#value'].'-weight'],
"term" => array($element['#value_key'] => $child['#value']),
);
// If the element is leaves only and select parents is on, then automatically // If the element is leaves only and select parents is on, then automatically
// add all the parents of each selected value. // add all the parents of each selected value.
if ($element['#select_parents'] && $element['#leaves_only']) { if ($element['#select_parents'] && $element['#leaves_only']) {
foreach($child['#parent_values'] as $parent_tid) { foreach($child['#parent_values'] as $parent_tid) {
if (!in_array(array($element['#value_key'] => $parent_tid), $selected_terms)) { if (!in_array(array($element['#value_key'] => $parent_tid), $selected_terms)) {
$delta = $form_state['input'][$parent_tid.'-weight']; $selected_terms[] = array(
$selected_terms[$delta] = array($element['#value_key'] => $parent_tid); "delta" => $form_state['input'][$parent_tid.'-weight'],
"term" => array($element['#value_key'] => $child['#value']),
);
} }
} }
} }
} }
} }
// dsm($deltas, '$deltas');
// dsm($selected_terms, '$selected_terms before sort');
// reorder items // reorder items
ksort($selected_terms); usort($selected_terms, function($a, $b){
return $a['delta'] > $b['delta'];
});
dsm($selected_terms, '$selected_terms after sort');
// record in value // record in value
foreach ($selected_terms as $delta => $term) { foreach ($selected_terms as $selected_term) {
$value[] = $term; $value[] = $selected_term['term'];
} }
} }
@ -655,7 +672,15 @@ function _term_reference_tree_widget_validate(&$element, &$form_state) {
} }
form_set_value($element, $value, $form_state); form_set_value($element, $value, $form_state);
// dsm($element, '$element afetr form_set_value');
return $element; return $element;
}else{
# if the field was not in the form
form_set_value($element, $element['#default_value'], $form_state);
// dsm($element, '$element afetr form_set_value');
return $element;
}
} }
/** /**