Example #1
0
 /**
  * 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;
                 }
             }
         }
     }
 }