diff --git a/hierarchical_select.module b/hierarchical_select.module index 731267d..7b80b0a 100644 --- a/hierarchical_select.module +++ b/hierarchical_select.module @@ -358,6 +358,10 @@ function _hs_process_determine_hsid($element, &$form_state) { else { $hsid = check_plain($element['#value']['hsid']); } + + $last_hsid = drupal_array_get_nested_value($form_state, array('storage', 'hs', 'last_hsid')); + if ($last_hsid <= $hsid) + $form_state['storage']['hs']['last_hsid'] = $hsid; return $hsid; } @@ -689,14 +693,19 @@ function _hs_process_render_nojs($element, $config) { /** * Hierarchical select form element type #process callback. */ -function form_hierarchical_select_process($element, &$form_state, $complete_form) { - // dpm('#process'); - // dpm($form_state); - // - // Calculations. - // - - // Determine the HSID. +function form_hierarchical_select_process($element, &$form_state, $complete_form) { + if(arg(0) != 'hierarchical_select_ajax') { //@TODO: verify if we have AJAX call + $cid = isset($element['#parents']) ? implode("-",$element['#parents']) : implode("-",$element['#field_parents']); //Get unique identifier using parents of the field + $elhsid = drupal_array_get_nested_value($element, array('#value', 'hsid')); // verify if hsid is present or not + if (!isset($elhsid)) { + $cached = drupal_array_get_nested_value($form_state, array('storage', 'hs', 'hs_fields', $cid)); //retrieve previous element from form_state + } + if (empty($cached)) + $docache = TRUE; + else + return $cached; //switch courrent element with the "cached" one)) + } + // Determine the HSID. $hsid = _hs_process_determine_hsid($element, $form_state); // Config. @@ -812,6 +821,9 @@ function form_hierarchical_select_process($element, &$form_state, $complete_form // Send the collected developer mode logs (by using #attached JS). $element = _hs_process_developer_mode_send_log_js($element, $hsid); + if (!empty($docache)) + $form_state['storage']['hs']['hs_fields'][$cid] = $element; //store new element in cache + return $element; }