danielebarchiesi@4: $data){ danielebarchiesi@4: $items['biblio_autocomplete/'.$field] = array( danielebarchiesi@4: 'title' => t('Biblio autocomplete for ').$field, danielebarchiesi@4: 'page callback' => 'biblio_autocomplete_json', danielebarchiesi@4: 'page arguments' => array($field, 2), danielebarchiesi@4: 'access callback' => TRUE, danielebarchiesi@4: 'type' => MENU_CALLBACK, danielebarchiesi@4: ); danielebarchiesi@4: } danielebarchiesi@4: return $items; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: function biblio_autocomplete_json($biblio_field, $string){ danielebarchiesi@4: $autocompletes = module_invoke_all('biblio_autocomplete_info'); danielebarchiesi@4: $matches = array(); danielebarchiesi@4: foreach ($autocompletes as $field => $data){ danielebarchiesi@4: if ($field == $biblio_field){ danielebarchiesi@4: if (!is_array($data['function'])){ danielebarchiesi@4: $data['function'] = array($data['function']); danielebarchiesi@4: } danielebarchiesi@4: foreach($data['function'] as $function){ danielebarchiesi@4: $matches = array_merge($matches, $function($string) ); danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: asort($matches); danielebarchiesi@4: danielebarchiesi@4: $return_matches = array(); danielebarchiesi@4: $i = 0; danielebarchiesi@4: foreach ($matches as $key => $data){ danielebarchiesi@4: if ($data['key'] != '' && $data['description'] != ''){ danielebarchiesi@4: $i++; danielebarchiesi@4: $return_matches[$data['key']] = $data['provider'].': '.$data['description']; danielebarchiesi@4: if ($i >= 10){ danielebarchiesi@4: break; danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: print drupal_json_output($return_matches); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Implemets hook_form_alter(). danielebarchiesi@4: * danielebarchiesi@4: * @param unknown_type $form danielebarchiesi@4: * @param unknown_type $form_state danielebarchiesi@4: * @param unknown_type $form_id danielebarchiesi@4: */ danielebarchiesi@4: function biblio_autocomplete_form_alter(&$form, &$form_state, $form_id){ danielebarchiesi@4: if ($form_id == 'biblio_node_form'){ danielebarchiesi@4: $autocompletes = module_invoke_all('biblio_autocomplete_info'); danielebarchiesi@4: foreach ($autocompletes as $field => $values){ danielebarchiesi@4: if (in_array($field, $form)){ danielebarchiesi@4: $key = array_tree_search_key($form, $field); danielebarchiesi@4: if (!is_null($key)){ danielebarchiesi@4: array_tree_update_autocomplete($form, $key, 'biblio_autocomplete/'.$field); danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: function array_tree_search_key($a, $subkey) { danielebarchiesi@4: if (is_array($a)){ danielebarchiesi@4: foreach (array_keys($a) as $i=>$k) { danielebarchiesi@4: if ($k === $subkey) { danielebarchiesi@4: return array($k); danielebarchiesi@4: } danielebarchiesi@4: elseif ($pos = array_tree_search_key($a[$k], $subkey)) { danielebarchiesi@4: return array_merge(array($k), $pos); danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: function array_tree_update_autocomplete(&$a, $key_array, $autocomplete){ danielebarchiesi@4: if (count($key_array) == 0){ danielebarchiesi@4: $a['#autocomplete_path'] = $autocomplete; danielebarchiesi@4: } else { danielebarchiesi@4: $a_next = array_shift($key_array); danielebarchiesi@4: array_tree_update_autocomplete($a[$a_next], $key_array, $autocomplete); danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: danielebarchiesi@4: