danielebarchiesi@4
|
1 <?php
|
danielebarchiesi@4
|
2
|
danielebarchiesi@4
|
3 /**
|
danielebarchiesi@4
|
4 * Implements hook_biblio_autocomplete_info().
|
danielebarchiesi@4
|
5 *
|
danielebarchiesi@4
|
6 * @return $fields
|
danielebarchiesi@4
|
7 * An array of Biblio fields with associated autocomplete data.
|
danielebarchiesi@4
|
8 * Format:
|
danielebarchiesi@4
|
9 * 'biblio_field_to_autocomplete' => array('function' => 'autocomplete_callback_function')
|
danielebarchiesi@4
|
10 */
|
danielebarchiesi@4
|
11 function biblio_ipni_biblio_autocomplete_info(){
|
danielebarchiesi@4
|
12 $fields = array(
|
danielebarchiesi@4
|
13 'biblio_secondary_title' => array('function' => 'biblio_ipni_autocomplete_publication'),
|
danielebarchiesi@4
|
14 'biblio_alternate_title' => array('function' => 'biblio_ipni_autocomplete_publication'),
|
danielebarchiesi@4
|
15 'biblio_original_publication' => array('function' => 'biblio_ipni_autocomplete_publication'),
|
danielebarchiesi@4
|
16 'biblio_short_title' => array('function' => 'biblio_ipni_autocomplete_short_publication'),
|
danielebarchiesi@4
|
17 'title' => array('function' => 'biblio_ipni_autocomplete_publication'),
|
danielebarchiesi@4
|
18 'biblio_authors' => array('function' => 'biblio_ipni_autocomplete_author_short'),
|
danielebarchiesi@4
|
19 );
|
danielebarchiesi@4
|
20 return $fields;
|
danielebarchiesi@4
|
21 }
|
danielebarchiesi@4
|
22
|
danielebarchiesi@4
|
23 /**
|
danielebarchiesi@4
|
24 *
|
danielebarchiesi@4
|
25 * Gets a list of potential publication matches for the autocomplete
|
danielebarchiesi@4
|
26 *
|
danielebarchiesi@4
|
27 * @param $string
|
danielebarchiesi@4
|
28 * Text string to try and match
|
danielebarchiesi@4
|
29 *
|
danielebarchiesi@4
|
30 * @return $return_matches
|
danielebarchiesi@4
|
31 * An array of autocomplete results for use in biblio_autocomple_json().
|
danielebarchiesi@4
|
32 * Format:
|
danielebarchiesi@4
|
33 * array(
|
danielebarchiesi@4
|
34 * 'key' => 'value to put in biblio field',
|
danielebarchiesi@4
|
35 * 'description' => 'can be the same as key or contain extra information to help use decide',
|
danielebarchiesi@4
|
36 * 'provider' => 'source of the autocmplete information',
|
danielebarchiesi@4
|
37 * )
|
danielebarchiesi@4
|
38 */
|
danielebarchiesi@4
|
39 function biblio_ipni_autocomplete_publication($string){
|
danielebarchiesi@4
|
40 $ipni_matches = biblio_ipni_get_publication_data($string);
|
danielebarchiesi@4
|
41 $return_matches = array();
|
danielebarchiesi@4
|
42 foreach($ipni_matches as $result){
|
danielebarchiesi@4
|
43 $return_matches[] = array(
|
danielebarchiesi@4
|
44 'key' => $result[3],
|
danielebarchiesi@4
|
45 'description' => $result[3],
|
danielebarchiesi@4
|
46 'provider' => 'IPNI',
|
danielebarchiesi@4
|
47 );
|
danielebarchiesi@4
|
48 }
|
danielebarchiesi@4
|
49 return $return_matches;
|
danielebarchiesi@4
|
50 }
|
danielebarchiesi@4
|
51
|
danielebarchiesi@4
|
52 /**
|
danielebarchiesi@4
|
53 *
|
danielebarchiesi@4
|
54 * Gets a list of potential short (abbreviated) publication matches for the autocomplete
|
danielebarchiesi@4
|
55 *
|
danielebarchiesi@4
|
56 * @param $string
|
danielebarchiesi@4
|
57 * Text string to try and match
|
danielebarchiesi@4
|
58 *
|
danielebarchiesi@4
|
59 * @return $return_matches
|
danielebarchiesi@4
|
60 * An array of autocomplete results for use in biblio_autocomple_json().
|
danielebarchiesi@4
|
61 * Format:
|
danielebarchiesi@4
|
62 * array(
|
danielebarchiesi@4
|
63 * 'key' => 'value to put in biblio field',
|
danielebarchiesi@4
|
64 * 'description' => 'can be the same as key or contain extra information to help use decide',
|
danielebarchiesi@4
|
65 * 'provider' => 'source of the autocmplete information',
|
danielebarchiesi@4
|
66 * )
|
danielebarchiesi@4
|
67 */
|
danielebarchiesi@4
|
68 function biblio_ipni_autocomplete_short_publication($string){
|
danielebarchiesi@4
|
69 $ipni_matches = biblio_ipni_get_publication_data_short($string);
|
danielebarchiesi@4
|
70 foreach($ipni_matches as $result){
|
danielebarchiesi@4
|
71 $return_matches[] = array(
|
danielebarchiesi@4
|
72 'key' => $result[2],
|
danielebarchiesi@4
|
73 'description' => $result[2] . ' | ' . $result[3],
|
danielebarchiesi@4
|
74 'provider' => 'IPNI',
|
danielebarchiesi@4
|
75 );
|
danielebarchiesi@4
|
76
|
danielebarchiesi@4
|
77
|
danielebarchiesi@4
|
78 }
|
danielebarchiesi@4
|
79 return $return_matches;
|
danielebarchiesi@4
|
80 }
|
danielebarchiesi@4
|
81
|
danielebarchiesi@4
|
82 /**
|
danielebarchiesi@4
|
83 *
|
danielebarchiesi@4
|
84 * Function to get publication data from IPNI
|
danielebarchiesi@4
|
85 *
|
danielebarchiesi@4
|
86 * @param $string
|
danielebarchiesi@4
|
87 * Text string to try and match
|
danielebarchiesi@4
|
88 *
|
danielebarchiesi@4
|
89 * @return $ipni_matches
|
danielebarchiesi@4
|
90 * An array of matched data from IPNI
|
danielebarchiesi@4
|
91 */
|
danielebarchiesi@4
|
92 function biblio_ipni_get_publication_data($string){
|
danielebarchiesi@4
|
93 $ipni_result = file_get_contents('http://www.ipni.org/ipni/advPublicationSearch.do?find_title=' . str_replace(' ', '+', $string) . '&output_format=delimited');
|
danielebarchiesi@4
|
94 $ipni_matches = biblio_ipni_process_file($ipni_result);
|
danielebarchiesi@4
|
95 return $ipni_matches;
|
danielebarchiesi@4
|
96 }
|
danielebarchiesi@4
|
97
|
danielebarchiesi@4
|
98 /**
|
danielebarchiesi@4
|
99 *
|
danielebarchiesi@4
|
100 * Function to get short publication data from IPNI
|
danielebarchiesi@4
|
101 *
|
danielebarchiesi@4
|
102 * @param $string
|
danielebarchiesi@4
|
103 * Text string to try and match
|
danielebarchiesi@4
|
104 *
|
danielebarchiesi@4
|
105 * @return $ipni_matches
|
danielebarchiesi@4
|
106 * An array of matched data from IPNI
|
danielebarchiesi@4
|
107 */
|
danielebarchiesi@4
|
108 function biblio_ipni_get_publication_data_short($string){
|
danielebarchiesi@4
|
109 $ipni_result = file_get_contents('http://www.ipni.org/ipni/advPublicationSearch.do?find_abbreviation=' . str_replace(' ', '+', $string) . '&output_format=delimited');
|
danielebarchiesi@4
|
110 $ipni_matches = biblio_ipni_process_file($ipni_result);
|
danielebarchiesi@4
|
111 return $ipni_matches;
|
danielebarchiesi@4
|
112 }
|
danielebarchiesi@4
|
113
|
danielebarchiesi@4
|
114 /**
|
danielebarchiesi@4
|
115 *
|
danielebarchiesi@4
|
116 * Gets a list of potential author matches for the autocomplete
|
danielebarchiesi@4
|
117 *
|
danielebarchiesi@4
|
118 * @param $string
|
danielebarchiesi@4
|
119 * Text string to try and match
|
danielebarchiesi@4
|
120 *
|
danielebarchiesi@4
|
121 * @return $return_matches
|
danielebarchiesi@4
|
122 * An array of autocomplete results for use in biblio_autocomple_json().
|
danielebarchiesi@4
|
123 * Format:
|
danielebarchiesi@4
|
124 * array(
|
danielebarchiesi@4
|
125 * 'key' => 'value to put in biblio field',
|
danielebarchiesi@4
|
126 * 'description' => 'can be the same as key or contain extra information to help use decide',
|
danielebarchiesi@4
|
127 * 'provider' => 'source of the autocmplete information',
|
danielebarchiesi@4
|
128 * )
|
danielebarchiesi@4
|
129 */
|
danielebarchiesi@4
|
130 function biblio_ipni_autocomplete_author_short($string){
|
danielebarchiesi@4
|
131 $ipni_matches = biblio_ipni_get_author_data($string);
|
danielebarchiesi@4
|
132 foreach($ipni_matches as $result){
|
danielebarchiesi@4
|
133 $return_matches[$result[5]] = $result[2];
|
danielebarchiesi@4
|
134 $return_matches[] = array(
|
danielebarchiesi@4
|
135 'key' => $result[5],
|
danielebarchiesi@4
|
136 'description' => $result[2],
|
danielebarchiesi@4
|
137 'provider' => 'IPNI',
|
danielebarchiesi@4
|
138 );
|
danielebarchiesi@4
|
139 }
|
danielebarchiesi@4
|
140 return $return_matches;
|
danielebarchiesi@4
|
141 }
|
danielebarchiesi@4
|
142
|
danielebarchiesi@4
|
143 /**
|
danielebarchiesi@4
|
144 *
|
danielebarchiesi@4
|
145 * Function to get author data from IPNI
|
danielebarchiesi@4
|
146 *
|
danielebarchiesi@4
|
147 * @param $string
|
danielebarchiesi@4
|
148 * Text string to try and match
|
danielebarchiesi@4
|
149 *
|
danielebarchiesi@4
|
150 * @return $ipni_matches
|
danielebarchiesi@4
|
151 * An array of matched data from IPNI
|
danielebarchiesi@4
|
152 */
|
danielebarchiesi@4
|
153 function biblio_ipni_get_author_data($string){
|
danielebarchiesi@4
|
154 $ipni_result = file_get_contents('http://www.ipni.org/ipni/advAuthorSearch.do?find_abbreviation=' . str_replace(' ', '+', $string) . '&output_format=delimited');
|
danielebarchiesi@4
|
155 $ipni_matches = biblio_ipni_process_file($ipni_result);
|
danielebarchiesi@4
|
156 return $ipni_matches;
|
danielebarchiesi@4
|
157 }
|
danielebarchiesi@4
|
158
|
danielebarchiesi@4
|
159 /**
|
danielebarchiesi@4
|
160 *
|
danielebarchiesi@4
|
161 * IPNI data is delimited by newlines and the % character, this function parses
|
danielebarchiesi@4
|
162 * this format into an array
|
danielebarchiesi@4
|
163 *
|
danielebarchiesi@4
|
164 * @param $file
|
danielebarchiesi@4
|
165 * Input file from IPNI
|
danielebarchiesi@4
|
166 *
|
danielebarchiesi@4
|
167 * @return $ipni_matches
|
danielebarchiesi@4
|
168 * An array of data parsed from $file
|
danielebarchiesi@4
|
169 */
|
danielebarchiesi@4
|
170 function biblio_ipni_process_file($file){
|
danielebarchiesi@4
|
171 $ipni_result = explode("\n", $file);
|
danielebarchiesi@4
|
172 $i = 0;
|
danielebarchiesi@4
|
173 $ipni_matches = array();
|
danielebarchiesi@4
|
174 foreach($ipni_result as $result){
|
danielebarchiesi@4
|
175 $i++;
|
danielebarchiesi@4
|
176 $ipni_matches[] = explode('%', $result);
|
danielebarchiesi@4
|
177 if($i > 10){
|
danielebarchiesi@4
|
178 break;
|
danielebarchiesi@4
|
179 }
|
danielebarchiesi@4
|
180 }
|
danielebarchiesi@4
|
181 array_shift($ipni_matches);
|
danielebarchiesi@4
|
182 array_walk($ipni_matches, 'biblio_ipni_clean');
|
danielebarchiesi@4
|
183 return $ipni_matches;
|
danielebarchiesi@4
|
184 }
|
danielebarchiesi@4
|
185
|
danielebarchiesi@4
|
186
|
danielebarchiesi@4
|
187 /**
|
danielebarchiesi@4
|
188 *
|
danielebarchiesi@4
|
189 * Function called by array_walk() in biblio_ipni_process_file() to remove
|
danielebarchiesi@4
|
190 * artefacts from the IPNI data
|
danielebarchiesi@4
|
191 *
|
danielebarchiesi@4
|
192 * @param $value
|
danielebarchiesi@4
|
193 */
|
danielebarchiesi@4
|
194 function biblio_ipni_clean(&$value){
|
danielebarchiesi@4
|
195 if(is_array($value)){
|
danielebarchiesi@4
|
196 array_walk($value, 'biblio_ipni_clean');
|
danielebarchiesi@4
|
197 }else{
|
danielebarchiesi@4
|
198 if(substr($value, 0, 1) == '>'){
|
danielebarchiesi@4
|
199 $value = substr($value, 1);
|
danielebarchiesi@4
|
200 }
|
danielebarchiesi@4
|
201 }
|
danielebarchiesi@4
|
202 } |