/** * Flesh out the request with database information from KB * * @throws \Exception */ protected function fillDatabaseInfo(Query $query) { // databases or subject chosen $databases = $query->getDatabases(); $subject = $query->getSubject(); $user = $query->getUser(); // make sure we have a scope, either databases or subject if (count($databases) == 0 && $subject == null) { throw new \Exception("No databases or subject supplied"); } $knowledgebase = new KnowledgeBase(); // metalib kb ### populate the database information from KB // databases specifically supplied if (count($databases) > 0) { $databases = $knowledgebase->getDatabases($databases); foreach ($databases as $database_object) { $this->addDatabase($database_object, $user); } } elseif ($subject != null) { $search_limit = $this->config()->getConfig("SEARCH_LIMIT", true); $subject_object = $knowledgebase->getSubject($subject); // did we find a subject that has subcategories? if ($subject_object != null && $subject_object->subcategories != null && count($subject_object->subcategories) > 0) { $subs = $subject_object->subcategories; $subcategory = $subs[0]; $index = 0; // get databases up to search limit from first subcategory foreach ($subcategory->databases as $database_object) { if ($database_object->searchable == 1) { $this->addDatabase($database_object, $user); $index++; } if ($index >= $search_limit) { break; } } } } }