41 $this->preserve_manual_scores =
false;
43 $this->recalculatedPasses = array();
80 $participants = $this->test->getCompleteEvaluationData(
false)->getParticipants();
81 if (is_array($participants)) {
82 require_once
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
83 foreach ($participants as $active_id => $userdata) {
84 if (is_object($userdata) && is_array($userdata->getPasses())) {
102 ->getCompleteEvaluationData(
false)
103 ->getParticipant($active_id)
116 $passes = $userdata->getPasses();
117 foreach ($passes as
$pass => $passdata) {
118 if (is_object($passdata)) {
132 $questions = $passdata->getAnsweredQuestions();
133 if (is_array($questions)) {
134 foreach ($questions as $questiondata) {
139 $question_gui = $this->test->createQuestionGUI(
"", $questiondata[
'id']);
140 $this->recalculateQuestionScore($question_gui, $active_id,
$pass, $questiondata);
151 public function recalculateQuestionScore($question_gui, $active_id,
$pass, $questiondata)
154 if (is_object($question_gui)) {
155 $reached = $question_gui->object->calculateReachedPoints($active_id,
$pass);
156 $actual_reached = $question_gui->object->adjustReachedPointsByScoringOptions($reached, $active_id,
$pass);
158 if ($this->preserve_manual_scores ==
true && $questiondata[
'manual'] ==
'1') {
167 $question_gui->object->getMaximumPoints(),
181 public function calculateBestSolutionForTest()
184 foreach ($this->test->getAllQuestions() as $question) {
186 $question_gui = $this->test->createQuestionGUI(
"", $question[
'question_id']);
187 $solution .= $question_gui->getSolutionOutput(0, null,
true,
true,
false,
false,
true,
false);
195 $this->recalculatedPasses = array();
205 if (!is_array($this->recalculatedPasses[$activeId])) {
206 $this->recalculatedPasses[$activeId] = array();
209 $this->recalculatedPasses[$activeId][] =
$pass;
216 $query =
"DELETE FROM tst_test_result WHERE question_fi = %s";
224 foreach ($activeIds as $activeId) {
228 foreach ($passSelector->getExistingPasses() as
$pass) {
229 assQuestion::_updateTestPassResults($activeId,
$pass, $this->test->areObligationsEnabled());
244 SELECT COUNT(*) num_manual_scorings 245 FROM tst_test_result tres 247 INNER JOIN tst_active tact 248 ON tact.active_id = tres.active_fi 249 AND tact.test_fi = %s 251 WHERE tres.manual = 1 254 $types = array(
'integer');
255 $values = array($this->test->getTestId());
259 AND tres.question_fi = %s 262 $types[] =
'integer';
266 $res = $DIC->database()->queryF(
$query, $types, $values);
268 while ($row = $DIC->database()->fetchAssoc(
$res)) {
269 return (
int) $row[
'num_manual_scorings'];
static _updateTestResultCache($active_id, ilAssQuestionProcessLocker $processLocker=null)
Move this to a proper place.
recalculatePass($passdata, $active_id, $pass)
getRecalculatedPassesByActives()
foreach($_POST as $key=> $value) $res
static setForcePassResultUpdateEnabled($forcePassResultsUpdateEnabled)
addRecalculatedPassByActive($activeId, $pass)
__construct(ilObjTest $test)
setPreserveManualScores($preserve_manual_scores)
updatePassAndTestResults($activeIds)
resetRecalculatedPassesByActives()
removeAllQuestionResults($questionId)
getPreserveManualScores()
static _setReachedPoints($active_id, $question_id, $points, $maxpoints, $pass, $manualscoring, $obligationsEnabled)
Sets the points, a learner has reached answering the question Additionally objective results are upda...
recalculatePasses($userdata, $active_id)
recalculateSolution($active_id, $pass)
Updates passed status of the Test.
setQuestionId(int $questionId)