You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
234 lines
7.0 KiB
234 lines
7.0 KiB
<?php |
|
|
|
// $Id$ |
|
|
|
function ife_autocomplete_person($string) { |
|
$string=trim(strtolower($string)); |
|
|
|
module_load_include('inc', 'fedora_repository', 'api/fedora_item'); |
|
module_load_include('php', 'islandora_solr_search', 'Solr/Service'); |
|
$host = variable_get('islandora_solr_search_block_host','localhost'); |
|
$port = variable_get('islandora_solr_search_block_port','8080'); |
|
$appName = variable_get('islandora_solr_search_block_app_name','solr'); |
|
$requestHandler = variable_get("islandora_solr_search_block_request_handler",t("standard")); |
|
|
|
$solr = new Apache_Solr_Service($host, $port, '/'.$appName.'/'); |
|
|
|
$string=$solr->escape($string); |
|
$query = 'name_personal_t:'.$string.'* OR name_organization_t:'.$string.'* OR name_conference_t:'.$string.'*'; |
|
|
|
$additionalParams = array( |
|
'facet' => 'false', |
|
'qt' => $requestHandler, |
|
); |
|
|
|
try { |
|
$results = $solr->search($query, 0, 10,$additionalParams); |
|
}catch (Exception $e) { |
|
drupal_set_message(t('error searching ').$e->getMessage()); |
|
} |
|
if(empty($results)){ |
|
drupal_set_message(t('Error searching solr index. Is the solr search block configured properly?'),'error'); |
|
return ' '; |
|
} |
|
|
|
header('content-type: text/plain'); |
|
$matches = array(); |
|
|
|
foreach($results->response->docs as $doc) { |
|
|
|
$item = new fedora_item($doc->id); |
|
|
|
$mods = $item->get_datastream_dissemination('MODS'); |
|
if (trim($mods) != '') { |
|
$modsDom = new DomDocument(); |
|
$modsDom->loadXML($mods); |
|
|
|
$xpath = new DOMXPath($modsDom); |
|
$xpath->registerNamespace("php", "http://php.net/xpath"); |
|
$xpath->registerPHPFunctions(); |
|
// echo $mods; |
|
$nodeList = $xpath->evaluate('/mods:mods/mods:name'); |
|
foreach ($nodeList as $node) { |
|
|
|
$type=$node->getAttribute('type'); |
|
$title=null; |
|
$name =null; |
|
$given=null; |
|
$family=null; |
|
$date = null; |
|
$nameParts = $node->getElementsByTagName('namePart'); |
|
foreach ($nameParts as $part) { |
|
switch ($part->getAttribute('type')) { |
|
case 'given': $given = $part->nodeValue; break; |
|
case 'family': $family = $part->nodeValue; break; |
|
case 'termsOfAddress': $title= $part->nodeValue; break; |
|
case 'date': $date = $part->nodeValue; break; |
|
default: $name = $part->nodeValue; break; |
|
} |
|
} |
|
|
|
if ($name == null && isset($given) && isset($family)) { |
|
$name = (isset($title)?$title.' ':'').$family.', '.$given; |
|
} |
|
|
|
$role =null; |
|
$roleTerm = $node->getElementsByTagName('roleTerm'); |
|
if ($roleTerm->length > 0) { |
|
$role=$roleTerm->item(0)->nodeValue; |
|
} |
|
|
|
if (strpos(strtolower($name),$string)!==FALSE) { |
|
$display = $name; |
|
$matches[json_encode(array('type'=>trim($type),'name'=>trim($name),'role'=>trim($role),'date'=>trim($date)))]= $display.' - '.$role.' '.$date; |
|
} |
|
} |
|
} |
|
} |
|
drupal_json($matches); exit(); |
|
|
|
} |
|
|
|
function ife_autocomplete_marcrelator($collection, $string='') { |
|
$moduleRoot = drupal_get_path('module', 'islandora_form_elements'); |
|
|
|
if ($string == '') { |
|
$string = $collection; |
|
$collection = FALSE; |
|
} |
|
|
|
$string=ucfirst(trim($string)); |
|
|
|
$dom = DOMDocument::load ( $moduleRoot .'/xml/relators.rdf' ); |
|
$rootEl = $dom->getElementsByTagName('RDF'); |
|
if ($rootEl->length > 0) { |
|
$rootEl=$rootEl->item(0); |
|
|
|
$xpath = new DOMXPath($dom); |
|
$xpath->registerNamespace ( 'skos' , $rootEl->getAttribute('xmlns:skos') ); |
|
$xpath->registerNamespace ( 'rdf' , $rootEl->getAttribute('xmlns:rdf') ); |
|
|
|
|
|
$result = $xpath->query('/rdf:RDF/rdf:Description[starts-with(skos:prefLabel, "'. $string .'")]'); |
|
|
|
$terms = array(); |
|
foreach ($result as $term) { |
|
$termVal =$term->getElementsByTagName('prefLabel')->item(0)->nodeValue; |
|
$termVal = preg_replace('/\s+/', ' ', $termVal); |
|
$terms[$term->getElementsByTagName('notation')->item(0)->nodeValue]= $termVal; |
|
} |
|
echo drupal_json($terms); |
|
} |
|
|
|
|
|
} |
|
|
|
function ife_autocomplete_gacs($collection, $string='') { |
|
$moduleRoot = drupal_get_path('module', 'islandora_form_elements'); |
|
|
|
if ($string == '') { |
|
$string = $collection; |
|
$collection = FALSE; |
|
} |
|
|
|
$string=ucwords(trim($string)); |
|
|
|
$dom = DOMDocument::load ( $moduleRoot .'/xml/gacs.xml' ); |
|
$rootEl = $dom->getElementsByTagName('codelist'); |
|
if ($rootEl->length > 0) { |
|
$rootEl=$rootEl->item(0); |
|
|
|
$xpath = new DOMXPath($dom); |
|
$xpath->registerNamespace ( 'a' , $rootEl->getAttribute('xmlns') ); |
|
|
|
$result = $xpath->query('/a:codelist/a:gacs/a:gac[starts-with(a:name, "'. $string .'")]'); |
|
|
|
$gacs = array(); |
|
foreach ($result as $gac) { |
|
$gacs[$gac->getElementsByTagName('name')->item(0)->nodeValue]= $gac->getElementsByTagName('name')->item(0)->nodeValue; |
|
} |
|
echo drupal_json($gacs); |
|
} |
|
|
|
|
|
} |
|
|
|
function ife_autocomplete_language($collection, $string='') { |
|
$moduleRoot=drupal_get_path('module', 'islandora_form_elements'); |
|
|
|
if ($string == '') { |
|
$string = $collection; |
|
$collection = FALSE; |
|
} |
|
|
|
$string=ucwords(trim($string)); |
|
|
|
$dom = DOMDocument::load ( $moduleRoot .'/xml/languages.xml' ); |
|
$rootEl = $dom->getElementsByTagName('codelist'); |
|
if ($rootEl->length > 0) { |
|
$rootEl=$rootEl->item(0); |
|
|
|
$xpath = new DOMXPath($dom); |
|
$xpath->registerNamespace ( 'a' , $rootEl->getAttribute('xmlns') ); |
|
|
|
$result = $xpath->query('/a:codelist/a:languages/a:language[starts-with(a:name, "'. $string .'")]'); |
|
|
|
$languages = array(); |
|
foreach ($result as $lang) { |
|
$languages[$lang->getElementsByTagName('name')->item(0)->nodeValue]= $lang->getElementsByTagName('name')->item(0)->nodeValue; |
|
} |
|
echo drupal_json($languages); |
|
} |
|
|
|
|
|
} |
|
|
|
function ife_autocomplete($field, $collection, $string='') { |
|
|
|
if ($string == '') { |
|
$string=$collection; $collection=FALSE; |
|
} |
|
|
|
module_load_include('php', 'islandora_solr_search', 'Solr/Service'); |
|
$host = variable_get('islandora_solr_search_block_host', 'localhost'); |
|
$port = variable_get('islandora_solr_search_block_port', '8080'); |
|
$appName = variable_get('islandora_solr_search_block_app_name', 'solr'); |
|
$solr = new Apache_Solr_Service($host, $port, '/'. $appName .'/'); |
|
|
|
$additionalParams = array( |
|
'fl' => $field |
|
); |
|
|
|
$query = $field .':'. $solr->escape(strtolower(trim($string))) .'*'; |
|
|
|
if ($collection != FALSE) { |
|
$query .= ' AND related_item_identifier_t:'. $solr->escape($collection); |
|
} |
|
|
|
try { |
|
$results = $solr->search($query, 0, 10, $additionalParams); |
|
} |
|
catch (Exception $e) { |
|
drupal_set_message(t('error searching ') . $e->getMessage()); |
|
} |
|
|
|
$docs = $results->response->docs; |
|
$values = array(); |
|
if ($docs != NULL) { |
|
foreach ($docs as $doc) { |
|
$resfield=$doc->getField($field); |
|
|
|
if (is_array($resfield['value'])) { |
|
foreach ($resfield['value'] as $val) { |
|
if (preg_match('/^'.strtolower($string).'/i',$val)) { |
|
$values[$val]=$val; |
|
} |
|
} |
|
} else { |
|
$values[$resfield['value']]=$resfield['value']; |
|
} |
|
} |
|
} |
|
|
|
return drupal_json($values); |
|
}
|
|
|