diff --git a/lib/classes/JsonApi/Routes/RangeTree/RangeTreeIndex.php b/lib/classes/JsonApi/Routes/RangeTree/RangeTreeIndex.php new file mode 100644 index 0000000000000000000000000000000000000000..c706c482204dc2e8ec58e354b5c3602e7d008e7a --- /dev/null +++ b/lib/classes/JsonApi/Routes/RangeTree/RangeTreeIndex.php @@ -0,0 +1,53 @@ +<?php + +namespace JsonApi\Routes\RangeTree; + +use Psr\Http\Message\ServerRequestInterface as Request; +use Psr\Http\Message\ResponseInterface as Response; +use JsonApi\Errors\AuthorizationFailedException; +use JsonApi\Errors\RecordNotFoundException; +use JsonApi\JsonApiController; + +/** + * Zeigt eine bestimmte Veranstaltung an. + */ +class RangeTreeIndex extends JsonApiController +{ + + protected $allowedIncludePaths = [ + 'children', + 'courses', + 'institute', + 'parent', + ]; + protected $allowedPagingParameters = ['offset', 'limit']; + + /** + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function __invoke(Request $request, Response $response, $args) + { + $tree = \TreeAbstract::getInstance('StudipSemTree', ['visible_only' => 1]); + $studyAreas = self::mapTree('root', $tree); + list($offset, $limit) = $this->getOffsetAndLimit(); + + return $this->getPaginatedContentResponse( + array_slice($studyAreas, $offset, $limit), + count($studyAreas) + ); + } + + private function mapTree($parentId, &$tree) + { + $level = []; + $kids = $tree->getKids($parentId); + if (is_array($kids) && count($kids) > 0) { + foreach ($kids as $kid) { + $level[] = \StudipStudyArea::find($kid); + $level = array_merge($level, self::mapTree($kid, $tree)); + } + } + + return $level; + } +}