4 include_once
'./Modules/Course/classes/Objectives/class.ilLOSettings.php';
5 include_once
'./Modules/Course/classes/Objectives/class.ilLOTestAssignments.php';
35 $this->logger =
$GLOBALS[
'DIC']->logger()->crs();
37 $this->user_id = $a_user_id;
38 $this->container_id = $a_course_id;
66 include_once
'./Modules/Course/classes/Objectives/class.ilLOTestAssignments.php';
69 include_once
'./Modules/Course/classes/class.ilCourseObjective.php';
72 $relevant_objective_ids =
array();
73 if(!$this->
getSettings()->hasSeparateInitialTests())
75 if($a_tst_ref_id == $this->
getSettings()->getInitialTest())
77 $relevant_objective_ids = $objective_ids;
80 elseif(!$this->
getSettings()->hasSeparateQualifiedTests())
82 if($a_tst_ref_id == $this->
getSettings()->getQualifiedTest())
84 $relevant_objective_ids = $objective_ids;
88 foreach((
array) $objective_ids as $objective_id)
91 if($assigned_itest == $a_tst_ref_id)
93 $relevant_objective_ids[] = $objective_id;
96 if($assigned_qtest == $a_tst_ref_id)
98 $relevant_objective_ids[] = $objective_id;
102 $relevant_objective_ids = array_unique($relevant_objective_ids);
104 if(count($relevant_objective_ids) <= 1)
106 return $relevant_objective_ids;
110 $test_type =
$assignments->getTypeByTest($a_tst_ref_id);
112 $passed_objectives =
array();
113 include_once
'./Modules/Course/classes/Objectives/class.ilLOUserResults.php';
116 $passed =
$results->getCompletedObjectiveIds();
117 $this->logger->debug(
'Passed objectives are ' . print_r($passed,
true).
' for test type: ' . $test_type);
121 if(count($passed) >= count($relevant_objective_ids))
123 return $relevant_objective_ids;
127 foreach($relevant_objective_ids as $objective_id)
129 if(!in_array($objective_id, $passed))
131 $unpassed[] = $objective_id;
150 $this->logger->debug(
'Notify test start: '. print_r($relevant_objectives,
true));
153 include_once
'./Modules/Course/classes/Objectives/class.ilLOTestRun.php';
160 foreach((
array) $relevant_objectives as $oid)
162 $this->logger->debug(
'Adding new run for objective with id: ' . $oid);
183 $this->logger->debug(
'Prepare test pass called');
211 $testType = $this->assignments->getTypeByTest($this->
getTestRefId());
243 $definitionId = $a_test_sequence->getResponsibleSourcePoolDefinitionId($questionId);
251 if( count($objectiveIds) )
260 include_once
'./Modules/Course/classes/Objectives/class.ilLORandomTestQuestionPools.php';
266 include_once
'./Modules/Course/classes/class.ilCourseObjectiveQuestion.php';
276 return $assignment->getObjectiveId();
318 $is_qualified_run =
false;
321 $is_qualified_run =
true;
324 foreach($this->run as $run)
326 include_once
'./Modules/Course/classes/Objectives/class.ilLOUserResults.php';
327 include_once
'./Modules/Course/classes/Objectives/class.ilLOUtils.php';
332 $run->getObjectiveId(),
336 include_once
'./Modules/Course/classes/Objectives/class.ilLOUtils.php';
340 $run->getObjectiveId(),
345 $max_attempts = ilLOUtils::lookupMaxAttempts(
347 $run->getObjectiveId(),
351 $this->logger->debug(
'Max attempts = ' . $max_attempts);
357 $this->logger->debug(
'Checking for qualified test...');
358 if(!$is_qualified_run)
360 $this->logger->debug(
' and increasing attempts.');
361 ++$old_result[
'tries'];
363 $old_result[
'is_final'] = ($old_result[
'tries'] >= $max_attempts);
367 $ur->saveObjectiveResult(
368 $run->getObjectiveId(),
370 $old_result[
'status'],
371 $old_result[
'result_perc'],
373 $old_result[
'tries'],
374 $old_result[
'is_final']
388 $this->logger->debug(
'Initial test');
394 $this->logger->debug(
'No qualified test run');
397 include_once
'./Services/Container/classes/class.ilContainerStartObjects.php';
400 $this->logger->debug(
'No start object');
406 $container_ref_id = end($container_ref_ids);
414 $this->logger->debug(
'Is fullfilled');
417 $this->logger->debug(
'Is not fullfilled');
428 foreach($this->run as $run)
430 if($run->questionExists($qst->
getId()))
433 $run->setQuestionResult(
439 $res = $run->getResult();
441 include_once
'./Modules/Course/classes/Objectives/class.ilLOUserResults.php';
442 include_once
'./Modules/Course/classes/Objectives/class.ilLOUtils.php';
447 $run->getObjectiveId(),
452 $ur->saveObjectiveResult(
453 $run->getObjectiveId(),
458 $run->getObjectiveId(),
459 $res[
'max'],
$res[
'reached'],$old_result[
'limit_perc']) ?
462 (
int) $res[
'percentage'],
463 $old_result[
'limit_perc'],
464 $old_result[
'tries'],
465 $old_result[
'is_final']
467 $GLOBALS[
'ilLog']->write(__METHOD__.
': '.print_r($run->getResult(),
true));
468 $GLOBALS[
'ilLog']->write(__METHOD__.
'!!!!!!!!!!!!!!!!!!!!: '.print_r($comp,TRUE));
470 include_once(
"./Services/Tracking/classes/class.ilLPStatusWrapper.php");
513 include_once
'./Modules/Course/classes/Objectives/class.ilLOTestRun.php';
526 foreach ($this->run as $tst_run)
537 $GLOBALS[
'ilLog']->write(__METHOD__.
': separate run');
542 $GLOBALS[
'ilLog']->write(__METHOD__.
': fixed run');
547 $GLOBALS[
'ilLog']->write(__METHOD__.
': random run');
560 foreach($this->run as $tst_run)
562 $tst_run->clearQuestions();
566 $tst_run->addQuestion($qst_id);
567 include_once
'./Modules/Course/classes/class.ilCourseObjectiveQuestion.php';
570 $tst_run->setMaxPoints($points);
577 foreach ($this->run as $tst_run)
579 $tst_run->clearQuestions();
580 include_once
'./Modules/Course/classes/class.ilCourseObjectiveQuestion.php';
583 $tst_run->getObjectiveId()
588 $tst_run->addQuestion($id);
591 $tst_run->setMaxPoints($points);
597 include_once
'./Modules/Course/classes/Objectives/class.ilLORandomTestQuestionPools.php';
598 include_once
'./Modules/Course/classes/class.ilCourseObjectiveQuestion.php';
600 foreach($this->run as $tst_run)
603 $tst_run->clearQuestions();
606 $tst_run->getObjectiveId(),
611 $stored_sequence_id = $rnd->getQplSequence();
617 $tst_run->addQuestion($qst);
621 $tst_run->setMaxPoints($points);
627 foreach($this->run as $run)
629 if($run->questionExists($a_qid))
642 require_once
'Modules/TestQuestionPool/classes/class.ilAssQuestionList.php';
644 $questionList->setParentObjId($testObjId);
647 $questionList->setQuestionIdsFilter($questionIds);
649 $questionList->load();
651 return $questionList->getQuestionDataArray();
662 $adapter->initTestRun($a_test_session);
static isCompleted($a_cont_oid, $a_test_rid, $a_objective_id, $max_points, $reached, $limit_perc)
Check if objective is completed.
static getInstanceByObjId($a_obj_id)
get singleton instance
updateRandomQuestions(ilTestSession $session, ilTestSequenceRandomQuestionSet $seq)
getId()
Gets the id of the assQuestion object.
getResponsibleSourcePoolDefinitionId($questionId)
getRelatedObjectivesForSeparatedTest($testRefId)
static getInstance($a_container_id)
Get instance by container id.
notifyTestStart(ilTestSession $a_test_session, $a_test_obj_id)
Called from learning objective test on actual test start.
static _lookupMaximumPointsOfQuestion($a_question_id)
lookup maximimum point
storeTestRun()
Store test run in DB.
Abstract basic class which is to be extended by the concrete assessment question type classes...
static lookupResult($a_course_obj_id, $a_user_id, $a_objective_id, $a_tst_type)
Lookup user result.
static _updateStatus($a_obj_id, $a_usr_id, $a_obj=null, $a_percentage=false, $a_force_raise=false)
Update status.
getReachedPoints($active_id, $pass=NULL)
Returns the points, a learner has reached answering the question This is the fast way to get the poin...
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
static _getObjectiveIds($course_id, $a_activated_only=false)
getSettings()
Get loc settings.
const QUESTION_INSTANCE_TYPE_DUPLICATES
getObjectiveOrientedContainerId()
static getRun($a_container_id, $a_user_id, $a_test_id)
setQuestionsOptional(ilTestSequence $seq)
set questions optional
const HIDE_PASSED_OBJECTIVE_QST
hideQuestion($question_id)
static _getAllReferences($a_id)
get all reference ids of object
updateSeparateTestQuestions(ilTestSession $session, ilTestSequence $seq)
Update questions for separate tests.
hideQuestions(ilTestSequence $seq)
Hide questions.
saveToDb()
Saves the sequence data for a given pass to the database.
static getInstance(ilTestSession $a_test_session)
updateQuestions(ilTestSession $session, ilTestSequence $seq)
initTestRun(ilTestSession $session)
buildQuestionRelatedObjectiveListByQuestions(ilTestQuestionSequence $a_test_sequence, ilTestQuestionRelatedObjectivesList $a_objectives_list)
buildQuestionRelatedObjectiveList(ilTestQuestionSequence $a_test_sequence, ilTestQuestionRelatedObjectivesList $a_objectives_list)
updateFixedQuestions(ilTestSession $session, ilTestSequence $seq)
static _lookupObjId($a_id)
const MARK_PASSED_OBJECTIVE_QST
__construct($a_user_id, $a_course_id)
static lookupObjectiveRequiredPercentage($a_container_id, $a_objective_id, $a_test_ref_id, $a_max_points)
Create styles array
The data for the language used.
updateQuestionResult(ilTestSession $session, assQuestion $qst)
update question result of run
isQualifiedStartRun(ilTestSession $session)
Check if current run is a start object run.
static lookupObjectiveIdsBySequence($a_container_id, $a_seq_id)
Lookup objective id by sequence.
lookupObjectiveIdByFixedQuestionId($a_question_id)
setQuestionOptional($questionId)
buildQuestionRelatedObjectiveListByTest(ilTestQuestionSequence $a_test_sequence, ilTestQuestionRelatedObjectivesList $a_objectives_list)
lookupObjectiveIdByRandomQuestionSelectionDefinitionId($a_id)
static deleteRun($a_container_id, $a_user_id, $a_test_id)
const TYPE_TEST_QUALIFIED
static lookupObjectivesOfQuestion($a_qid)
Lookup objective for test question type $ilDB.
Stores current objective, questions and max points.
prepareTestPass(ilTestSession $a_test_session, ilTestSequence $a_test_sequence)
Called from learning objective test.
static lookupQuestionsByObjective($a_test_id, $a_objective)
static getQuestionData($testObjId, $questionIds)
lookupRelevantObjectiveIdsForTest($a_container_id, $a_tst_ref_id, $a_user_id)
Lookup all relevant objective ids for a specific test.
initUserResult(ilTestSession $session)
init user result
static isStartObject($a_container_id, $a_item_ref_id)
Check if object is start object type $ilDB.