annotate sites/all/modules/biblio_autocomplete/plugins/biblio_ipni/biblio_ipni.module @ 13:134d4b2e75f6

updated quicktabs and google analytics modules
author danieleb <danielebarchiesi@me.com>
date Tue, 29 Oct 2013 13:48:59 +0000
parents ce11bbd8f642
children
rev   line source
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 }