danielebarchiesi@4: array('function' => 'autocomplete_callback_function') danielebarchiesi@4: */ danielebarchiesi@4: function biblio_ipni_biblio_autocomplete_info(){ danielebarchiesi@4: $fields = array( danielebarchiesi@4: 'biblio_secondary_title' => array('function' => 'biblio_ipni_autocomplete_publication'), danielebarchiesi@4: 'biblio_alternate_title' => array('function' => 'biblio_ipni_autocomplete_publication'), danielebarchiesi@4: 'biblio_original_publication' => array('function' => 'biblio_ipni_autocomplete_publication'), danielebarchiesi@4: 'biblio_short_title' => array('function' => 'biblio_ipni_autocomplete_short_publication'), danielebarchiesi@4: 'title' => array('function' => 'biblio_ipni_autocomplete_publication'), danielebarchiesi@4: 'biblio_authors' => array('function' => 'biblio_ipni_autocomplete_author_short'), danielebarchiesi@4: ); danielebarchiesi@4: return $fields; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * danielebarchiesi@4: * Gets a list of potential publication matches for the autocomplete danielebarchiesi@4: * danielebarchiesi@4: * @param $string danielebarchiesi@4: * Text string to try and match danielebarchiesi@4: * danielebarchiesi@4: * @return $return_matches danielebarchiesi@4: * An array of autocomplete results for use in biblio_autocomple_json(). danielebarchiesi@4: * Format: danielebarchiesi@4: * array( danielebarchiesi@4: * 'key' => 'value to put in biblio field', danielebarchiesi@4: * 'description' => 'can be the same as key or contain extra information to help use decide', danielebarchiesi@4: * 'provider' => 'source of the autocmplete information', danielebarchiesi@4: * ) danielebarchiesi@4: */ danielebarchiesi@4: function biblio_ipni_autocomplete_publication($string){ danielebarchiesi@4: $ipni_matches = biblio_ipni_get_publication_data($string); danielebarchiesi@4: $return_matches = array(); danielebarchiesi@4: foreach($ipni_matches as $result){ danielebarchiesi@4: $return_matches[] = array( danielebarchiesi@4: 'key' => $result[3], danielebarchiesi@4: 'description' => $result[3], danielebarchiesi@4: 'provider' => 'IPNI', danielebarchiesi@4: ); danielebarchiesi@4: } danielebarchiesi@4: return $return_matches; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * danielebarchiesi@4: * Gets a list of potential short (abbreviated) publication matches for the autocomplete danielebarchiesi@4: * danielebarchiesi@4: * @param $string danielebarchiesi@4: * Text string to try and match danielebarchiesi@4: * danielebarchiesi@4: * @return $return_matches danielebarchiesi@4: * An array of autocomplete results for use in biblio_autocomple_json(). danielebarchiesi@4: * Format: danielebarchiesi@4: * array( danielebarchiesi@4: * 'key' => 'value to put in biblio field', danielebarchiesi@4: * 'description' => 'can be the same as key or contain extra information to help use decide', danielebarchiesi@4: * 'provider' => 'source of the autocmplete information', danielebarchiesi@4: * ) danielebarchiesi@4: */ danielebarchiesi@4: function biblio_ipni_autocomplete_short_publication($string){ danielebarchiesi@4: $ipni_matches = biblio_ipni_get_publication_data_short($string); danielebarchiesi@4: foreach($ipni_matches as $result){ danielebarchiesi@4: $return_matches[] = array( danielebarchiesi@4: 'key' => $result[2], danielebarchiesi@4: 'description' => $result[2] . ' | ' . $result[3], danielebarchiesi@4: 'provider' => 'IPNI', danielebarchiesi@4: ); danielebarchiesi@4: danielebarchiesi@4: danielebarchiesi@4: } danielebarchiesi@4: return $return_matches; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * danielebarchiesi@4: * Function to get publication data from IPNI danielebarchiesi@4: * danielebarchiesi@4: * @param $string danielebarchiesi@4: * Text string to try and match danielebarchiesi@4: * danielebarchiesi@4: * @return $ipni_matches danielebarchiesi@4: * An array of matched data from IPNI danielebarchiesi@4: */ danielebarchiesi@4: function biblio_ipni_get_publication_data($string){ danielebarchiesi@4: $ipni_result = file_get_contents('http://www.ipni.org/ipni/advPublicationSearch.do?find_title=' . str_replace(' ', '+', $string) . '&output_format=delimited'); danielebarchiesi@4: $ipni_matches = biblio_ipni_process_file($ipni_result); danielebarchiesi@4: return $ipni_matches; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * danielebarchiesi@4: * Function to get short publication data from IPNI danielebarchiesi@4: * danielebarchiesi@4: * @param $string danielebarchiesi@4: * Text string to try and match danielebarchiesi@4: * danielebarchiesi@4: * @return $ipni_matches danielebarchiesi@4: * An array of matched data from IPNI danielebarchiesi@4: */ danielebarchiesi@4: function biblio_ipni_get_publication_data_short($string){ danielebarchiesi@4: $ipni_result = file_get_contents('http://www.ipni.org/ipni/advPublicationSearch.do?find_abbreviation=' . str_replace(' ', '+', $string) . '&output_format=delimited'); danielebarchiesi@4: $ipni_matches = biblio_ipni_process_file($ipni_result); danielebarchiesi@4: return $ipni_matches; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * danielebarchiesi@4: * Gets a list of potential author matches for the autocomplete danielebarchiesi@4: * danielebarchiesi@4: * @param $string danielebarchiesi@4: * Text string to try and match danielebarchiesi@4: * danielebarchiesi@4: * @return $return_matches danielebarchiesi@4: * An array of autocomplete results for use in biblio_autocomple_json(). danielebarchiesi@4: * Format: danielebarchiesi@4: * array( danielebarchiesi@4: * 'key' => 'value to put in biblio field', danielebarchiesi@4: * 'description' => 'can be the same as key or contain extra information to help use decide', danielebarchiesi@4: * 'provider' => 'source of the autocmplete information', danielebarchiesi@4: * ) danielebarchiesi@4: */ danielebarchiesi@4: function biblio_ipni_autocomplete_author_short($string){ danielebarchiesi@4: $ipni_matches = biblio_ipni_get_author_data($string); danielebarchiesi@4: foreach($ipni_matches as $result){ danielebarchiesi@4: $return_matches[$result[5]] = $result[2]; danielebarchiesi@4: $return_matches[] = array( danielebarchiesi@4: 'key' => $result[5], danielebarchiesi@4: 'description' => $result[2], danielebarchiesi@4: 'provider' => 'IPNI', danielebarchiesi@4: ); danielebarchiesi@4: } danielebarchiesi@4: return $return_matches; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * danielebarchiesi@4: * Function to get author data from IPNI danielebarchiesi@4: * danielebarchiesi@4: * @param $string danielebarchiesi@4: * Text string to try and match danielebarchiesi@4: * danielebarchiesi@4: * @return $ipni_matches danielebarchiesi@4: * An array of matched data from IPNI danielebarchiesi@4: */ danielebarchiesi@4: function biblio_ipni_get_author_data($string){ danielebarchiesi@4: $ipni_result = file_get_contents('http://www.ipni.org/ipni/advAuthorSearch.do?find_abbreviation=' . str_replace(' ', '+', $string) . '&output_format=delimited'); danielebarchiesi@4: $ipni_matches = biblio_ipni_process_file($ipni_result); danielebarchiesi@4: return $ipni_matches; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * danielebarchiesi@4: * IPNI data is delimited by newlines and the % character, this function parses danielebarchiesi@4: * this format into an array danielebarchiesi@4: * danielebarchiesi@4: * @param $file danielebarchiesi@4: * Input file from IPNI danielebarchiesi@4: * danielebarchiesi@4: * @return $ipni_matches danielebarchiesi@4: * An array of data parsed from $file danielebarchiesi@4: */ danielebarchiesi@4: function biblio_ipni_process_file($file){ danielebarchiesi@4: $ipni_result = explode("\n", $file); danielebarchiesi@4: $i = 0; danielebarchiesi@4: $ipni_matches = array(); danielebarchiesi@4: foreach($ipni_result as $result){ danielebarchiesi@4: $i++; danielebarchiesi@4: $ipni_matches[] = explode('%', $result); danielebarchiesi@4: if($i > 10){ danielebarchiesi@4: break; danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: array_shift($ipni_matches); danielebarchiesi@4: array_walk($ipni_matches, 'biblio_ipni_clean'); danielebarchiesi@4: return $ipni_matches; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * danielebarchiesi@4: * Function called by array_walk() in biblio_ipni_process_file() to remove danielebarchiesi@4: * artefacts from the IPNI data danielebarchiesi@4: * danielebarchiesi@4: * @param $value danielebarchiesi@4: */ danielebarchiesi@4: function biblio_ipni_clean(&$value){ danielebarchiesi@4: if(is_array($value)){ danielebarchiesi@4: array_walk($value, 'biblio_ipni_clean'); danielebarchiesi@4: }else{ danielebarchiesi@4: if(substr($value, 0, 1) == '>'){ danielebarchiesi@4: $value = substr($value, 1); danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: }