From bb47c5f3c39f882ee92e21f3dc9d1115553a6b03 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms Date: Mon, 18 Nov 2024 14:26:09 +0100 Subject: add jsonapi route /institutes/{id}/hierarchy to fetch the upwards hierarchy of an instutute, fixes #4885 --- lib/classes/JsonApi/RouteMap.php | 1 + .../Routes/Institutes/InstituteHierarchy.php | 42 ++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 lib/classes/JsonApi/Routes/Institutes/InstituteHierarchy.php diff --git a/lib/classes/JsonApi/RouteMap.php b/lib/classes/JsonApi/RouteMap.php index 8c6037a..75895a8 100644 --- a/lib/classes/JsonApi/RouteMap.php +++ b/lib/classes/JsonApi/RouteMap.php @@ -276,6 +276,7 @@ class RouteMap private function addAuthenticatedInstitutesRoutes(RouteCollectorProxy $group): void { $group->get('/institute-memberships/{id}', Routes\InstituteMemberships\InstituteMembershipsShow::class); + $group->get('/institutes/{id}/hierarchy', Routes\Institutes\InstituteHierarchy::class); $group->get('/institutes/{id}', Routes\Institutes\InstitutesShow::class); $group->get('/institutes', Routes\Institutes\InstitutesIndex::class); diff --git a/lib/classes/JsonApi/Routes/Institutes/InstituteHierarchy.php b/lib/classes/JsonApi/Routes/Institutes/InstituteHierarchy.php new file mode 100644 index 0000000..a6a3fc3 --- /dev/null +++ b/lib/classes/JsonApi/Routes/Institutes/InstituteHierarchy.php @@ -0,0 +1,42 @@ +getHierarchyUp($institute); + + return $this->getContentResponse($hierarchy); + } + + private function getHierarchyUp(Institute $institute): array + { + $hierarchy = []; + do { + $hierarchy[] = $institute; + + $range_tree = \RangeTreeNode::findOneBySQL( + "studip_object_id = ?", + [$institute->id] + ); + + $institute = $range_tree?->parent->institute; + } while ($institute); + + return array_reverse($hierarchy); + } +} -- cgit v1.0