protected function wasAnsweredInThisPass(ilTestSequence $testSequence, $questionId) { if ($testSequence->isHiddenQuestion($questionId)) { return false; } if (!$testSequence->isQuestionOptional($questionId)) { return true; } if ($testSequence->isAnsweringOptionalQuestionsConfirmed()) { return true; } return false; }
function createRandomSolutions($number) { global $ilDB; // 1. get a user $query = "SELECT usr_id FROM usr_data"; $result = $ilDB->query($query); while ($data = $ilDB->fetchAssoc($result)) { $activequery = sprintf("SELECT user_fi FROM tst_active WHERE test_fi = %s AND user_fi = %s", $ilDB->quote($this->getTestId()), $ilDB->quote($data['usr_id'])); $activeresult = $ilDB->query($activequery); if ($activeresult->numRows() == 0) { $user_id = $data['usr_id']; if ($user_id != 13) { include_once "./Modules/Test/classes/class.ilTestSession.php"; $testSession = FALSE; $testSession = new ilTestSession(); $testSession->setRefId($this->getRefId()); $testSession->setTestId($this->getTestId()); $testSession->setUserId($user_id); $testSession->saveToDb(); $passes = $this->getNrOfTries() ? $this->getNrOfTries() : 10; $nr_of_passes = rand(1, $passes); $active_id = $testSession->getActiveId(); for ($pass = 0; $pass < $nr_of_passes; $pass++) { include_once "./Modules/Test/classes/class.ilTestSequence.php"; $testSequence = new ilTestSequence($active_id, $pass, $this->isRandomTest()); if (!$testSequence->hasSequence()) { $testSequence->createNewSequence($this->getQuestionCount(), $shuffle); $testSequence->saveToDb(); } for ($seq = 1; $seq <= count($this->questions); $seq++) { $question_id = $testSequence->getQuestionForSequence($seq); $objQuestion = ilObjTest::_instanciateQuestion($question_id); $objQuestion->createRandomSolution($testSession->getActiveId(), $pass); } if ($pass < $nr_of_passes - 1) { $testSession->increasePass(); $testSession->setLastSequence(0); $testSession->saveToDb(); } else { $testSession->setSubmitted(1); $testSession->setSubmittedTimestamp(date('Y-m-d H:i:s')); $testSession->saveToDb(); } } $number--; if ($number == 0) { return; } } } } }
/** * Get the number of questions in a given pass for a given user * * @param string $sid Session ID * @param long $active_id Active user ID * @param integer $pass Test pass * * @return integer Question position in the given test pass */ function getNrOfQuestionsInPass($sid, $active_id, $pass) { $this->initAuth($sid); $this->initIlias(); if (!$this->__checkSession($sid)) { return $this->__raiseError($this->__getMessage(), $this->__getMessageCode()); } if (!$this->isAllowedCall($sid, $active_id, false)) { return $this->__raiseError("The required user information is only available for active users.", ""); } global $lng, $ilDB; $result = $ilDB->queryF("SELECT tst_tests.random_test FROM tst_active, tst_tests WHERE tst_active.active_id = %s AND tst_tests.test_id = tst_active.test_fi", array('integer'), array($active_id)); if ($result->numRows() != 1) { return 0; } $row = $ilDB->fetchAssoc($result); $is_random = $row["random_test"]; include_once "./Modules/Test/classes/class.ilTestSequence.php"; $sequence = new ilTestSequence($active_id, $pass, $is_random); return $sequence->getUserQuestionCount(); }
/** * Hide questions * @param ilTestSequence $seq */ protected function hideQuestions(ilTestSequence $seq) { // first unhide all questions $seq->clearHiddenQuestions(); foreach ($seq->getQuestionIds() as $qid) { if (!$this->isInRun($qid)) { $seq->hideQuestion($qid); } } }
/** * Update questions for separate tests * @param ilTestSession $session * @param ilTestSequence $seq */ protected function updateSeparateTestQuestions(ilTestSession $session, ilTestSequence $seq) { foreach ($this->run as $tst_run) { $tst_run->clearQuestions(); $points = 0; foreach ($seq->getQuestionIds() as $idx => $qst_id) { $tst_run->addQuestion($qst_id); include_once './Modules/Course/classes/class.ilCourseObjectiveQuestion.php'; $points += ilCourseObjectiveQuestion::_lookupMaximumPointsOfQuestion($qst_id); } $tst_run->setMaxPoints($points); } }