danielebarchiesi@4
|
1 <?php
|
danielebarchiesi@4
|
2
|
danielebarchiesi@4
|
3 function biblio_autocomplete_menu(){
|
danielebarchiesi@4
|
4 $items=array();
|
danielebarchiesi@4
|
5 $autocompletes = module_invoke_all('biblio_autocomplete_info');
|
danielebarchiesi@4
|
6 foreach ($autocompletes as $field => $data){
|
danielebarchiesi@4
|
7 $items['biblio_autocomplete/'.$field] = array(
|
danielebarchiesi@4
|
8 'title' => t('Biblio autocomplete for ').$field,
|
danielebarchiesi@4
|
9 'page callback' => 'biblio_autocomplete_json',
|
danielebarchiesi@4
|
10 'page arguments' => array($field, 2),
|
danielebarchiesi@4
|
11 'access callback' => TRUE,
|
danielebarchiesi@4
|
12 'type' => MENU_CALLBACK,
|
danielebarchiesi@4
|
13 );
|
danielebarchiesi@4
|
14 }
|
danielebarchiesi@4
|
15 return $items;
|
danielebarchiesi@4
|
16 }
|
danielebarchiesi@4
|
17
|
danielebarchiesi@4
|
18 function biblio_autocomplete_json($biblio_field, $string){
|
danielebarchiesi@4
|
19 $autocompletes = module_invoke_all('biblio_autocomplete_info');
|
danielebarchiesi@4
|
20 $matches = array();
|
danielebarchiesi@4
|
21 foreach ($autocompletes as $field => $data){
|
danielebarchiesi@4
|
22 if ($field == $biblio_field){
|
danielebarchiesi@4
|
23 if (!is_array($data['function'])){
|
danielebarchiesi@4
|
24 $data['function'] = array($data['function']);
|
danielebarchiesi@4
|
25 }
|
danielebarchiesi@4
|
26 foreach($data['function'] as $function){
|
danielebarchiesi@4
|
27 $matches = array_merge($matches, $function($string) );
|
danielebarchiesi@4
|
28 }
|
danielebarchiesi@4
|
29 }
|
danielebarchiesi@4
|
30 }
|
danielebarchiesi@4
|
31 asort($matches);
|
danielebarchiesi@4
|
32
|
danielebarchiesi@4
|
33 $return_matches = array();
|
danielebarchiesi@4
|
34 $i = 0;
|
danielebarchiesi@4
|
35 foreach ($matches as $key => $data){
|
danielebarchiesi@4
|
36 if ($data['key'] != '' && $data['description'] != ''){
|
danielebarchiesi@4
|
37 $i++;
|
danielebarchiesi@4
|
38 $return_matches[$data['key']] = $data['provider'].': '.$data['description'];
|
danielebarchiesi@4
|
39 if ($i >= 10){
|
danielebarchiesi@4
|
40 break;
|
danielebarchiesi@4
|
41 }
|
danielebarchiesi@4
|
42 }
|
danielebarchiesi@4
|
43 }
|
danielebarchiesi@4
|
44
|
danielebarchiesi@4
|
45 print drupal_json_output($return_matches);
|
danielebarchiesi@4
|
46 }
|
danielebarchiesi@4
|
47
|
danielebarchiesi@4
|
48 /**
|
danielebarchiesi@4
|
49 * Implemets hook_form_alter().
|
danielebarchiesi@4
|
50 *
|
danielebarchiesi@4
|
51 * @param unknown_type $form
|
danielebarchiesi@4
|
52 * @param unknown_type $form_state
|
danielebarchiesi@4
|
53 * @param unknown_type $form_id
|
danielebarchiesi@4
|
54 */
|
danielebarchiesi@4
|
55 function biblio_autocomplete_form_alter(&$form, &$form_state, $form_id){
|
danielebarchiesi@4
|
56 if ($form_id == 'biblio_node_form'){
|
danielebarchiesi@4
|
57 $autocompletes = module_invoke_all('biblio_autocomplete_info');
|
danielebarchiesi@4
|
58 foreach ($autocompletes as $field => $values){
|
danielebarchiesi@4
|
59 if (in_array($field, $form)){
|
danielebarchiesi@4
|
60 $key = array_tree_search_key($form, $field);
|
danielebarchiesi@4
|
61 if (!is_null($key)){
|
danielebarchiesi@4
|
62 array_tree_update_autocomplete($form, $key, 'biblio_autocomplete/'.$field);
|
danielebarchiesi@4
|
63 }
|
danielebarchiesi@4
|
64 }
|
danielebarchiesi@4
|
65 }
|
danielebarchiesi@4
|
66 }
|
danielebarchiesi@4
|
67 }
|
danielebarchiesi@4
|
68
|
danielebarchiesi@4
|
69 function array_tree_search_key($a, $subkey) {
|
danielebarchiesi@4
|
70 if (is_array($a)){
|
danielebarchiesi@4
|
71 foreach (array_keys($a) as $i=>$k) {
|
danielebarchiesi@4
|
72 if ($k === $subkey) {
|
danielebarchiesi@4
|
73 return array($k);
|
danielebarchiesi@4
|
74 }
|
danielebarchiesi@4
|
75 elseif ($pos = array_tree_search_key($a[$k], $subkey)) {
|
danielebarchiesi@4
|
76 return array_merge(array($k), $pos);
|
danielebarchiesi@4
|
77 }
|
danielebarchiesi@4
|
78 }
|
danielebarchiesi@4
|
79 }
|
danielebarchiesi@4
|
80 }
|
danielebarchiesi@4
|
81
|
danielebarchiesi@4
|
82 function array_tree_update_autocomplete(&$a, $key_array, $autocomplete){
|
danielebarchiesi@4
|
83 if (count($key_array) == 0){
|
danielebarchiesi@4
|
84 $a['#autocomplete_path'] = $autocomplete;
|
danielebarchiesi@4
|
85 } else {
|
danielebarchiesi@4
|
86 $a_next = array_shift($key_array);
|
danielebarchiesi@4
|
87 array_tree_update_autocomplete($a[$a_next], $key_array, $autocomplete);
|
danielebarchiesi@4
|
88 }
|
danielebarchiesi@4
|
89 }
|
danielebarchiesi@4
|
90
|
danielebarchiesi@4
|
91
|
danielebarchiesi@4
|
92
|