56 $this->preserve_manual_scores =
false;
58 $this->recalculatedPasses = array();
95 $participants = $this->test->getCompleteEvaluationData(
false)->getParticipants();
96 if (is_array($participants)) {
97 require_once
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
98 foreach ($participants as $active_id => $userdata) {
99 if (is_object($userdata) && is_array($userdata->getPasses())) {
117 ->getCompleteEvaluationData(
false)
118 ->getParticipant($active_id)
131 $passes = $userdata->getPasses();
132 foreach ($passes as $pass => $passdata) {
133 if (is_object($passdata)) {
147 $questions = $passdata->getAnsweredQuestions();
148 if (is_array($questions)) {
149 foreach ($questions as $questiondata) {
154 $question_gui = $this->test->createQuestionGUI(
"", $questiondata[
'id']);
155 $this->recalculateQuestionScore($question_gui, $active_id, $pass, $questiondata);
166 public function recalculateQuestionScore($question_gui, $active_id, $pass, $questiondata)
169 if (is_object($question_gui)) {
170 $reached = $question_gui->object->calculateReachedPoints($active_id, $pass);
171 $actual_reached = $question_gui->object->adjustReachedPointsByScoringOptions($reached, $active_id, $pass);
173 if ($this->preserve_manual_scores ==
true && $questiondata[
'manual'] ==
'1') {
182 $question_gui->object->getMaximumPoints(),
196 public function calculateBestSolutionForTest():
string 199 foreach ($this->test->getAllQuestions() as $question) {
201 $question_gui = $this->test->createQuestionGUI(
"", $question[
'question_id']);
202 $solution .=
'<h1>' . $question_gui->object->getTitleForHTMLOutput() .
'</h1>';
203 $solution .= $question_gui->getSolutionOutput(0, null,
true,
true,
false,
false,
true,
false);
211 $this->recalculatedPasses = array();
221 if (!array_key_exists($activeId, $this->recalculatedPasses)
222 || !is_array($this->recalculatedPasses[$activeId])
224 $this->recalculatedPasses[$activeId] = array();
227 $this->recalculatedPasses[$activeId][] = $pass;
234 $query =
"DELETE FROM tst_test_result WHERE question_fi = %s";
242 foreach ($activeIds as $activeId) {
246 foreach ($passSelector->getExistingPasses() as $pass) {
247 assQuestion::_updateTestPassResults($activeId, $pass, $this->test->areObligationsEnabled());
262 SELECT COUNT(*) num_manual_scorings 263 FROM tst_test_result tres 265 INNER JOIN tst_active tact 266 ON tact.active_id = tres.active_fi 267 AND tact.test_fi = %s 269 WHERE tres.manual = 1 272 $types = array(
'integer');
273 $values = array($this->test->getTestId());
277 AND tres.question_fi = %s 280 $types[] =
'integer';
284 $res = $DIC->database()->queryF(
$query, $types, $values);
286 while ($row = $DIC->database()->fetchAssoc(
$res)) {
287 return (
int) $row[
'num_manual_scorings'];
static _updateTestResultCache(int $active_id, ilAssQuestionProcessLocker $processLocker=null)
Move this to a proper place.
recalculatePass($passdata, $active_id, $pass)
getRecalculatedPassesByActives()
addRecalculatedPassByActive($activeId, $pass)
static _setReachedPoints(int $active_id, int $question_id, float $points, float $maxpoints, int $pass, bool $manualscoring, bool $obligationsEnabled)
Sets the points, a learner has reached answering the question Additionally objective results are upda...
__construct(ilObjTest $test)
setPreserveManualScores($preserve_manual_scores)
updatePassAndTestResults($activeIds)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
resetRecalculatedPassesByActives()
removeAllQuestionResults($questionId)
getPreserveManualScores()
recalculatePasses($userdata, $active_id)
recalculateSolution($active_id, $pass)
Updates passed status of the Test.
setQuestionId(int $questionId)
static setForcePassResultUpdateEnabled(bool $forcePassResultsUpdateEnabled)