validateFilters($request); if ($error) { throw new BadRequestException($error); } $filters = $this->getContextFilters($request); $info = [ 'courses' => (int) $node->countCourses($filters['semester'], $filters['semclass'], true) ]; $response->getBody()->write(json_encode($info)); return $response->withHeader('Content-type', 'application/json'); } private function validateFilters($request) { $filtering = $request->getQueryParams()['filter'] ?? []; // 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($request) { $defaults = [ 'q' => '', 'semester' => 'all', 'semclass' => 0, 'recursive' => false ]; $filtering = $request->getQueryParams()['filter'] ?? []; return array_merge($defaults, $filtering); } }