Skip to content

Commit

Permalink
Split OAI server attachNonDeleted function (#4160)
Browse files Browse the repository at this point in the history
  • Loading branch information
LuomaJuha authored Dec 18, 2024
1 parent 1bff746 commit 45dff88
Showing 1 changed file with 28 additions and 15 deletions.
43 changes: 28 additions & 15 deletions module/VuFind/src/VuFind/OAI/Server.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
use VuFind\Db\Service\ChangeTrackerServiceInterface;
use VuFind\Db\Service\OaiResumptionServiceInterface;
use VuFind\Exception\RecordMissing as RecordMissingException;
use VuFind\RecordDriver\AbstractBase as AbstractRecordDriver;
use VuFind\SimpleXML;
use VuFindApi\Formatter\RecordFormatter;

Expand Down Expand Up @@ -378,7 +379,7 @@ protected function attachRecordHeader(
*
* @param object $record A record driver object
*
* @return string
* @return string|false String on success and false if an error occurred
*/
protected function getVuFindMetadata($record)
{
Expand Down Expand Up @@ -444,24 +445,20 @@ protected function attachNonDeleted(
$headerOnly = false,
$set = ''
) {
// Get the XML (and display an error if it is unsupported):
if ($format === false) {
$xml = ''; // no metadata if in header-only mode!
} elseif ('oai_vufind_json' === $format && $this->supportsVuFindMetadata()) {
$xml = $this->getVuFindMetadata($record); // special case
} else {
$xml = $record
->getXML($format, $this->baseHostURL, $this->recordLinkerHelper);
if ($xml === false) {
return false;
}
// If no format was requested, report success without doing anything:
return true;
}

$xml = $this->getRecordAsXML($record, $format);

// Headers should be returned only if the metadata format matching
// the supplied metadataPrefix is available.
// If RecordDriver returns nothing, skip this record.
if (empty($xml)) {
return true;
// If returned XML is empty, return true to simply skip this record.
// If returned XML is false, an error was encountered during the process
// of generating the XML file.
if (!$xml) {
return $xml !== false;
}

// Check for sets:
Expand Down Expand Up @@ -492,14 +489,30 @@ protected function attachNonDeleted(
);

// Inject metadata if necessary:
if (!$headerOnly && !empty($xml)) {
if (!$headerOnly) {
$metadata = $recXml->addChild('metadata');
SimpleXML::appendElement($metadata, $xml);
}

return true;
}

/**
* Get record as a metadata presentation
*
* @param AbstractRecordDriver $record A record driver object
* @param string $format Metadata format to obtain
*
* @return string|false String or false if an error occured
*/
protected function getRecordAsXML(AbstractRecordDriver $record, string $format): string|false
{
if ('oai_vufind_json' === $format && $this->supportsVuFindMetadata()) {
return $this->getVuFindMetadata($record);
}
return $record->getXML($format, $this->baseHostURL, $this->recordLinkerHelper);
}

/**
* Respond to a GetRecord request.
*
Expand Down

0 comments on commit 45dff88

Please sign in to comment.