From a13affea565858760f848e7b82106f8c47fc5fcd Mon Sep 17 00:00:00 2001 From: Demian Katz <demian.katz@villanova.edu> Date: Fri, 22 Nov 2019 12:39:28 -0500 Subject: [PATCH] Add setting to suppress older deletes from OAI responses. (#1496) --- config/vufind/config.ini | 6 ++++++ module/VuFind/src/VuFind/OAI/Server.php | 23 +++++++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/config/vufind/config.ini b/config/vufind/config.ini index 8f154b41f38..cee79fca883 100644 --- a/config/vufind/config.ini +++ b/config/vufind/config.ini @@ -1270,6 +1270,11 @@ url = https://www.myendnoteweb.com/EndNoteWeb.html ; filters. They can be used e.g. to limit results to records that can be returned in ; the requested format. ; +; delete_lifetime controls how many days' worth of deleted records to include in +; responses. Records deleted before the cut-off will not be included in responses. +; Omit this setting to return all deleted records. This can be useful for long-lived +; systems with many deleted records, to prevent full harvests from becoming unwieldy. +; ;[OAI] ;identifier = myuniversity.edu ;repository_name = "MyUniversity Catalog" @@ -1281,6 +1286,7 @@ url = https://www.myendnoteweb.com/EndNoteWeb.html ;default_query = "institution:kfu" ;vufind_api_format_fields = "id,authors,cleanIsbn,cleanIssn,formats,title" ;record_format_filters[marc21] = "record_format:marc" +;delete_lifetime = 365 ; Proxy Server is Optional. [Proxy] diff --git a/module/VuFind/src/VuFind/OAI/Server.php b/module/VuFind/src/VuFind/OAI/Server.php index c4b823a8be2..fc74c13b098 100644 --- a/module/VuFind/src/VuFind/OAI/Server.php +++ b/module/VuFind/src/VuFind/OAI/Server.php @@ -203,6 +203,14 @@ class Server */ protected $recordFormatFilters = []; + /** + * Limit on display of deleted records (in days); older deleted records will not + * be returned by the server. Set to null for no limit. + * + * @var int + */ + protected $deleteLifetime = null; + /** * Constructor * @@ -677,6 +685,11 @@ class Server $this->recordFormatFilters = $config->OAI->record_format_filters->toArray(); } + + // Initialize delete lifetime, if set: + if (isset($config->OAI->delete_lifetime)) { + $this->deleteLifetime = intval($config->OAI->delete_lifetime); + } } /** @@ -763,10 +776,16 @@ class Server // The verb determines whether we're returning headers only or full records: $headersOnly = ($verb != 'ListRecords'); + // Apply the delete lifetime limit to the from date if necessary: + $deleteCutoff = $this->deleteLifetime + ? strtotime('-' . $this->deleteLifetime . ' days') : 0; + $deleteFrom = ($deleteCutoff < $from) ? $from : $deleteCutoff; + // Get deleted records in the requested range (if applicable): - $deletedCount = $this->listRecordsGetDeletedCount($from, $until); + $deletedCount = $this->listRecordsGetDeletedCount($deleteFrom, $until); if ($deletedCount > 0 && $currentCursor < $deletedCount) { - $deleted = $this->listRecordsGetDeleted($from, $until, $currentCursor); + $deleted = $this + ->listRecordsGetDeleted($deleteFrom, $until, $currentCursor); foreach ($deleted as $current) { $this->attachDeleted($xml, $current, $headersOnly); $currentCursor++; -- GitLab