diff --git a/module/fid/src/VuFind/Resolver/Driver/Ezb.php b/module/fid/src/VuFind/Resolver/Driver/Ezb.php index bb7fc95c75f767e1bb7e592b73405f3cebcd8f17..ba40814c6ab6cba3dfe86afbc8e3294c15565480 100644 --- a/module/fid/src/VuFind/Resolver/Driver/Ezb.php +++ b/module/fid/src/VuFind/Resolver/Driver/Ezb.php @@ -147,12 +147,13 @@ class Ezb extends BaseEzb $this->getElectronicResults('2', 'Licensed', $records, $xpath); $this->getElectronicResults('3', 'Partially licensed', $records, $xpath); $this->getElectronicResults('4', 'Not free', $records, $xpath); - $this->getElectronicResults('10', 'Not free', $records, $xpath); + $this->getElectronicResults('10', 'Unknown Electronic', $records, $xpath); $this->getElectronicResults('-1', 'Not free', $records, $xpath); // get results for print, only if available $this->getPrintResults('2', 'Print available', $records, $xpath); $this->getPrintResults('3', 'Print partially available', $records, $xpath); + $this->getPrintResults('10', 'Unknown Print', $records, $xpath); $records['messages'] = $this->messages ?? []; $records['stateOfResults'] = $this->stateOfResults ?? []; @@ -208,10 +209,12 @@ class Ezb extends BaseEzb $bibId = 'AAAAA'; $isil = ''; } - $openURL .= '&pid=' . - 'bibid%3D' . $bibId . - (!empty($isil) ? '%26isil%3D' . $isil : ''); - } elseif (isset($this->config->bibid)) { + if (!empty($isil)) { + $openURL .= '&pid=' . 'isil%3D' . $isil; + } else { + $openURL .= '&pid=' . 'bibid%3D' . $bibId; + } + } elseif (isset($this->config->bibid)) { // if library info fails use normal config? $openURL .= '&pid=' . 'bibid%3D' . $this->config->bibid; } elseif (isset($this->config->useClientIp) @@ -249,7 +252,7 @@ class Ezb extends BaseEzb "/OpenURLResponseXML/Full/ElectronicData/ResultList/Result[@state=" . $state . "]" ); - + $accessLevel_mapping = [ 'article' => 'article', 'issue' => 'issue', @@ -258,10 +261,11 @@ class Ezb extends BaseEzb 'homepage' => 'default', 'abstract' => 'abstract' ]; - + $i = 0; foreach ($results as $result) { $record = []; + // get title from XPath Element defined in $xpathTitleSelector $accessLevelXP = "/OpenURLResponseXML/Full/ElectronicData/ResultList/" . "Result[@state={$state}][".($i+1)."]/AccessLevel"; $accessLevel = $xpath->query($accessLevelXP, $result)->item(0); @@ -269,28 +273,58 @@ class Ezb extends BaseEzb $record['title'] = $accessLevel_mapping[strip_tags($accessLevel->nodeValue)]; } - + + // get additional coverage information + $additionalXP = "/OpenURLResponseXML/Full/ElectronicData/ResultList/" . + "Result[@state={$state}][" . ($i + 1) . "]/Additionals/Additional"; + $additionalType = ['nali', 'intervall', 'moving_wall']; + $additionals = []; + foreach ($additionalType as $type) { + $additional = $xpath + ->query($additionalXP . "[@type='" . $type . "']", $result)->item(0); + if (isset($additional->nodeValue)) { + $additionals[$type] = strip_tags($additional->nodeValue); + } + } + $record['coverage'] + = !empty($additionals) ? implode(";", $additionals) : $coverage; + + + // try to find direct access URL $accessUrlXP = "/OpenURLResponseXML/Full/ElectronicData/ResultList/" . "Result[@state={$state}][".($i+1)."]/AccessURL"; $accessUrl = $xpath->query($accessUrlXP, $result)->item(0); + + // try to find journal URL as fallback for direct access URL $journalUrlXP = "/OpenURLResponseXML/Full/ElectronicData/ResultList/" . "Result[@state={$state}][".($i+1)."]/JournalURL"; $journalUrl = $xpath->query($journalUrlXP, $result)->item(0); + + // return direct access URL if available + // otherwise journal URL as fallback if (isset($accessUrl->nodeValue)) { $record['href'] = $accessUrl->nodeValue; } elseif (isset($journalUrl)) { $record['href'] = $journalUrl->nodeValue; } - + $stateOfResultXP = "/OpenURLResponseXML/Full/ElectronicData/ResultList/" . "Result/@state"; $stateOfResult = $xpath->query($stateOfResultXP, $result)->item(0); if (isset($stateOfResult->nodeValue)) { $this->stateOfResults[] = $stateOfResult->nodeValue; } - + + $readmeXP = "/OpenURLResponseXML/Full/ElectronicData/ResultList/" . + "Result[@state={$state}][" . ($i + 1) . "]/ReadmeURL[@lang='" . + $this->getTranslatorLocale() . "']"; + $readme = $xpath->query($readmeXP, $result)->item(0); + if (isset($readme->nodeValue)) { + $record['coverageHref'] = $readme->nodeValue; + } + $record['access'] = $this->electronic_state_access_mapping[$state]; - + // Service type needs to be hard-coded for calling code to properly // categorize links. The commented code below picks a more appropriate // value but won't work for now -- retained for future reference. @@ -344,6 +378,12 @@ class Ezb extends BaseEzb /* messages depends on access state and will be build within templates */ $record['access'] = $this->print_state_access_mapping[$state]; + $urlXP = "/OpenURLResponseXML/Full/PrintData/References/Reference/URL"; + $url = $xpath->query($urlXP, $result)->item($i); + if (isset($url->nodeValue)) { + $record['href'] = $url->nodeValue; + } + // Service type needs to be hard-coded for calling code to properly // categorize links. The commented code below picks a more appropriate // value but won't work for now -- retained for future reference.