validateFilters(); if ($error) { throw new BadRequestException($error); } $filters = $this->getContextFilters(); list($offset, $limit) = $this->getOffsetAndLimit(); $courses = \SimpleCollection::createFromArray( $node->getCourses( $filters['semester'], $filters['semclass'], $filters['q'], (bool) $filters['recursive'], $filters['ids'] ) ); return $this->getPaginatedContentResponse( $courses->limit($offset, $limit), count($courses) ); } private function validateFilters() { $filtering = $this->getQueryParameters()->getFilteringParameters() ?: []; // keyword aka q if (isset($filtering['q']) && mb_strlen($filtering['q']) < 3) { return 'Search term too short.'; } // semester if (isset($filtering['semester']) && $filtering['semester'] !== 'all') { $semester = \Semester::find($filtering['semester']); if (!$semester) { return 'Invalid "semester".'; } } // course category if (!empty($filtering['semclass'])) { $semclass = \SeminarCategories::Get($filtering['semclass']); if (!$semclass) { return 'Invalid "course category".'; } } } private function getContextFilters() { $defaults = [ 'q' => '', 'semester' => 'all', 'semclass' => 0, 'recursive' => false, 'ids' => [] ]; $filtering = $this->getQueryParameters()->getFilteringParameters() ?: []; return array_merge($defaults, $filtering); } }