From de30751ff63951d50668f99a1c91f786ea6c209d Mon Sep 17 00:00:00 2001 From: "lina.wolf" Date: Sat, 2 Mar 2024 07:56:36 +0100 Subject: [PATCH] [FEATURE] Return Versions as JSON This enables the documentation Team to generate the HTML ourselves if changes are desired --- legacy_hook/src/DocumentationVersions.php | 27 +++++++++++++++++++++-- legacy_hook/versionsJson.php | 18 +++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 legacy_hook/versionsJson.php diff --git a/legacy_hook/src/DocumentationVersions.php b/legacy_hook/src/DocumentationVersions.php index 4b208c27..afe309a4 100644 --- a/legacy_hook/src/DocumentationVersions.php +++ b/legacy_hook/src/DocumentationVersions.php @@ -29,7 +29,7 @@ public function __construct(private ServerRequestInterface $request) * * @return Response */ - public function getVersions(): Response + public function getVersions(string $format = 'HTML'): Response { $pathSegments = $this->resolvePathSegments(); if (count($pathSegments) < 5) { @@ -67,7 +67,10 @@ public function getVersions(): Response // final version entries $validatedVersions = $this->resolvePathInformation($validatedVersions, $pathAfterEntryPoint, $absolutePathToDocsEntryPoint, $entryPoint, $currentVersion, $currentLanguage); - return $this->getHTMLResponse($validatedVersions); + if ($format === 'HTML') { + return $this->getHTMLResponse($validatedVersions); + } + return $this->getJsonResponse($validatedVersions); } protected function resolvePathSegments(): array @@ -181,6 +184,26 @@ protected function getHTMLResponse(array $entries): Response return new Response(200, [], implode(chr(10), array_merge($firstEntries, $secondEntries))); } + + protected function getJsonResponse(array $entries): Response + { + $data = []; + $versions = array_column($entries, 'version'); + array_multisort($versions, SORT_ASC, $entries); + foreach ($entries as $entry) { + $url = str_replace($GLOBALS['_SERVER']['DOCUMENT_ROOT'], '', $entry['path'] ?? ''); + $singleUrl = str_replace($GLOBALS['_SERVER']['DOCUMENT_ROOT'], '', $entry['single_path'] ?? ''); + $data[] = [ + 'url' => $url, + 'singleUrl' => $singleUrl, + 'version' => $entry['version'], + 'language' => $entry['language'], + ]; + } + + return new Response(200, [], json_encode($data)); + } + protected function getEmptyResponse(): Response { return new Response(200, [], ''); diff --git a/legacy_hook/versionsJson.php b/legacy_hook/versionsJson.php new file mode 100644 index 00000000..d14f0bc6 --- /dev/null +++ b/legacy_hook/versionsJson.php @@ -0,0 +1,18 @@ +getVersions('JSON'); +new ResponseEmitter($response);