From d7831cff65b1eef2b030f556fc1a4eba90af392b Mon Sep 17 00:00:00 2001
From: dolf <rudolfbyker@gmail.com>
Date: Thu, 15 Apr 2021 09:32:30 +0200
Subject: [PATCH] Bug 21105: oai.pl returns invalid earliestDatestamp

For OAI-PMH, all date and time values must be in the format
"YYYY-MM-DDThh:mm:ssZ" and in UTC. Currently,
Identify.earliestDatestamp uses the SQL format "YYYY-MM-DD hh:mm:ss".
This patch fixes that.

To test:
1) Get a Koha instance with OAI-PMH enabled.
2) Visit /cgi-bin/koha/oai.pl?verb=Identify, view source for the page
   and observe that earliestDate is in the wrong format
   "YYYY-MM-DD hh:mm:ss"
3) Apply patch
4) Visit /cgi-bin/koha/oai.pl?verb=Identify, view the source for the page
   and observe that earliestDate is now in the correct format
   "YYYY-MM-DDThh:mm:ssZ"
5) Sign off

Sponsored-by: Reformational Study Centre

Signed-off-by: David Nind <david@davidnind.com>
---
 Koha/OAI/Server/Identify.pm | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/Koha/OAI/Server/Identify.pm b/Koha/OAI/Server/Identify.pm
index dc1a53086a..7afccef737 100644
--- a/Koha/OAI/Server/Identify.pm
+++ b/Koha/OAI/Server/Identify.pm
@@ -54,7 +54,13 @@ sub new {
 # will be returned and we will report the fallback 0001-01-01.
 sub _get_earliest_datestamp {
     my $dbh = C4::Context->dbh;
-    my ( $earliest ) = $dbh->selectrow_array("SELECT MIN(timestamp) AS earliest FROM biblio" );
+    # We do not need to perform timezone conversion here, because the time zone
+    # is set to UTC for the entire SQL session in Koha/OAI/Server/Repository.pm
+    my $query = q{
+        SELECT DATE_FORMAT(MIN(timestamp), '%Y-%m-%dT%H:%i:%SZ') AS earliest
+        FROM biblio
+    };
+    my ( $earliest ) = $dbh->selectrow_array($query);
     return $earliest
 }
 
-- 
2.20.1