/** * Получение категорий вопросов для указанной дисциплины */ public function actionGetCategories() { $speciality = $_GET['speciality']; $course = $_GET['course']; $year = $_GET['year']; $discipline = $_GET['discipline']; $res = array(); foreach (CExamManager::getAllQuestions()->getItems() as $q) { if ($q->speciality_id == $speciality) { if ($q->course == $course) { if ($q->year_id == $year) { if ($q->discipline_id == $discipline) { $res[$q->category_id] = $q->category->getValue(); } } } } } echo json_encode($res); }
/** * Сгенерировать указанное количество вопросов по указанным параметрам * * @param $speciality_id * @param $course * @param $year_id * @param $discipline_id * @param $category_id * @param $count * @return CArrayList */ private function getQuestionsByParams($speciality_id, $course, $year_id, $discipline_id, $category_id, $count) { $res = new CArrayList(); // получим все вопросы по указанной дисциплине $questions = new CArrayList(); foreach (CExamManager::getAllQuestions()->getItems() as $q) { if ($q->speciality_id == $speciality_id) { if ($q->course == $course) { if ($q->year_id == $year_id) { if ($q->discipline_id == $discipline_id) { if ($q->category_id == $category_id) { $questions->add($q->getId(), $q); } } } } } } // если ничего не нашлось, то выходим if ($questions->getCount() == 0) { return $res; } // если полученное количество вопросов больше требуемого, то берем // случайные значения, если меньше, то тоже берем случайные значения // до тех пор, пока не наберем столько, сколько надо if ($questions->getCount() >= $count) { for ($i = 0; $i < $count; $i++) { $q = $questions->getShuffled()->getFirstItem(); $res->add($res->getCount(), $q); $questions->removeItem($q->getId()); } } else { $backup = $questions->getCopy(); $i = 0; while ($i < $count) { $q = $questions->getShuffled()->getFirstItem(); $res->add($res->getCount(), $q); $questions->removeItem($q->getId()); if ($questions->getCount() == 0) { $questions = $backup->getCopy(); } $i++; } } return $res; }