From e906bc8fd3a21f09c336b719d1365c2ba49a1e98 Mon Sep 17 00:00:00 2001 From: Gerben Date: Tue, 4 Sep 2018 12:24:27 +0200 Subject: [PATCH] Factor out datetimeConversion, tweak doc --- lib/Controller/TimeGateController.php | 6 ++---- lib/Controller/TimeMapController.php | 16 +++++----------- lib/Controller/datetimeConversion.php | 18 ++++++++++++++++++ lib/Controller/findMementos.php | 7 ++++++- 4 files changed, 31 insertions(+), 16 deletions(-) create mode 100644 lib/Controller/datetimeConversion.php diff --git a/lib/Controller/TimeGateController.php b/lib/Controller/TimeGateController.php index 0853466..ad53fd9 100644 --- a/lib/Controller/TimeGateController.php +++ b/lib/Controller/TimeGateController.php @@ -2,8 +2,7 @@ namespace OCA\Memento\Controller; require_once __DIR__ . '/findMementos.php'; - -use DateTime; +require_once __DIR__ . '/datetimeConversion.php'; use OCP\IRequest; use OCP\IServerContainer; @@ -46,8 +45,7 @@ class TimeGateController extends Controller { $acceptDatetimeHeader = $this->request->getHeader('Accept-Datetime'); if ($acceptDatetimeHeader) { try { - $requestedDatetime = DateTime::createFromFormat(DateTime::RFC1123, $acceptDatetimeHeader) - ->getTimestamp(); + $requestedDatetime = datetimeStringToTimestamp($acceptDatetimeHeader); } catch (Exception $e) { return new DataDisplayResponse("Invalid Accept-Datetime header.", 400); } diff --git a/lib/Controller/TimeMapController.php b/lib/Controller/TimeMapController.php index a64f11b..4ad210e 100644 --- a/lib/Controller/TimeMapController.php +++ b/lib/Controller/TimeMapController.php @@ -2,8 +2,7 @@ namespace OCA\Memento\Controller; require_once __DIR__ . '/findMementos.php'; - -use DateTime; +require_once __DIR__ . '/datetimeConversion.php'; use OCP\IRequest; use OCP\IServerContainer; @@ -43,8 +42,9 @@ class TimeMapController extends Controller { $timeMapUrl = $this->URLGenerator->getAbsoluteUrl("/apps/memento/timemap/$url"); $timeGateUrl = $this->URLGenerator->getAbsoluteUrl("/apps/memento/timegate/$url"); if (count($matchingMementos) > 0) { - $firstDatetime = formatDatetime($matchingMementos[0]['datetime']); - $lastDatetime = formatDatetime($matchingMementos[count($matchingMementos)-1]['datetime']); + $firstDatetime = datetimeTimestampToString($matchingMementos[0]['datetime']); + $lastMemento = $matchingMementos[count($matchingMementos)-1]; + $lastDatetime = datetimeTimestampToString($lastMemento['datetime']); } $links = [ // FIXME Our $url param has its duplicate slashes removed, so it looks like 'http:/abc'. @@ -54,7 +54,7 @@ class TimeMapController extends Controller { ($firstDatetime && $lastDatetime ? ";from=\"$firstDatetime\";until=\"$lastDatetime\"" : "") ]; foreach ($matchingMementos as $index => $memento) { - $datetime = formatDatetime($memento['datetime']); + $datetime = datetimeTimestampToString($memento['datetime']); $maybeFirst = $index === 0 ? 'first ' : ''; $maybeLast = $index === count($matchingMementos)-1 ? 'last ' : ''; // Make absolute, as the spec says URLs are to be interpreted relative to the *original* url! @@ -73,9 +73,3 @@ class TimeMapController extends Controller { return $response; } } - -function formatDatetime($datetime) { - $datetime = new DateTime("@$datetime"); - $s = $datetime->format("D, d M Y H:i:s") . " GMT"; - return $s; -} diff --git a/lib/Controller/datetimeConversion.php b/lib/Controller/datetimeConversion.php new file mode 100644 index 0000000..516697e --- /dev/null +++ b/lib/Controller/datetimeConversion.php @@ -0,0 +1,18 @@ +format("D, d M Y H:i:s") . " GMT"; + return $datetimeString; +} + +function datetimeStringToTimestamp($datetimeString) { + // Be tolerant and allow any RFC1123 formatted datetime string. + $datetimeObject = DateTime::createFromFormat(DateTime::RFC1123, $datetimeString); + $timestamp = $datetimeObject->getTimestamp(); + return $timestamp; +} diff --git a/lib/Controller/findMementos.php b/lib/Controller/findMementos.php index b330aed..6630014 100644 --- a/lib/Controller/findMementos.php +++ b/lib/Controller/findMementos.php @@ -5,7 +5,12 @@ use DOMDocument; use DateTime; // Finds HTML files that claim to be a snapshot of the given URL; -// Returns an array of each file's url + original url + snapshot datetime, sorted by datetime. +// Returns an array of mementos, sorted by datetime, with each memento represented by an array: +// [ +// 'mementoUrl' => URL of the file, relative to the nextcloud instance +// 'originalUrl' => original URL, presumably equal to the given $url, except we normalise a bit +// 'datetime' => snapshot datetime as a unix timestamp +// ] function findMementos($folder, $url) { // Get all HTML files the user owns. $files = $folder->searchByMime('text/html');