4 require_once
'Services/Object/classes/class.ilObject.php';
5 require_once
'Modules/Test/classes/inc.AssessmentConstants.php';
6 require_once
'Modules/Test/interfaces/interface.ilMarkSchemaAware.php';
7 require_once
'Modules/Test/interfaces/interface.ilEctsGradesEnabled.php';
581 public function __construct($a_id = 0,$a_call_by_reference =
true)
586 $lng->loadLanguageModule(
"assessment");
588 include_once
"./Modules/Test/classes/class.assMarkSchema.php";
590 $this->mark_schema->createSimpleSchema(
591 $lng->txt(
"failed_short"),
592 $lng->txt(
"failed_official"),
595 $lng->txt(
"passed_short"),
596 $lng->txt(
"passed_official"),
602 $this->author = $ilUser->fullname;
603 $this->introductionEnabled =
false;
604 $this->introduction =
"";
605 $this->questions = array();
608 $this->instant_verification = 0;
609 $this->answer_feedback_points = 0;
610 $this->reporting_date =
"";
611 $this->nr_of_tries = 0;
613 $this->use_previous_answers = 1;
614 $this->title_output = 0;
615 $this->starting_time =
"";
616 $this->ending_time =
"";
617 $this->processing_time =
"";
618 $this->enable_processing_time =
"0";
619 $this->reset_processing_time = 0;
620 $this->ects_output = FALSE;
621 $this->ects_fx = NULL;
622 $this->shuffle_questions = FALSE;
623 $this->mailnottype = 0;
624 $this->exportsettings = 0;
625 $this->show_summary = 8;
630 $this->answer_feedback = 0;
631 $this->password =
"";
632 $this->certificate_visibility = 0;
633 $this->allowedUsers =
"";
634 $this->_showfinalstatement = FALSE;
635 $this->_finalstatement =
"";
636 $this->_showinfo = TRUE;
637 $this->_forcejs = TRUE;
638 $this->_customStyle =
"";
639 $this->allowedUsersTimeGap =
"";
640 $this->anonymity = 0;
641 $this->show_cancel = 0;
642 $this->show_marker = 0;
643 $this->fixed_participants = 0;
648 $this->testSession = FALSE;
649 $this->testSequence = FALSE;
650 $this->mailnotification = 0;
651 $this->poolUsage = 1;
653 $this->ects_grades = array(
661 $this->autosave = FALSE;
662 $this->autosave_ival = 30000;
664 $this->enable_examview =
false;
665 $this->show_examview_html =
false;
666 $this->show_examview_pdf =
false;
667 $this->enable_archiving =
false;
669 $this->express_mode =
false;
670 $this->template_id =
'';
671 $this->redirection_mode = 0;
672 $this->redirection_url = NULL;
673 $this->show_exam_id_in_test_pass_enabled =
false;
674 $this->show_exam_id_in_test_results_enabled =
false;
675 $this->sign_submission =
false;
676 $this->char_selector_availability = 0;
677 $this->char_selector_definition = null;
679 $this->showGradingStatusEnabled =
true;
680 $this->showGradingMarkEnabled =
true;
682 $this->instantFeedbackAnswerFixationEnabled =
false;
684 $this->testFinalBroken =
false;
686 $this->
ilObject($a_id, $a_call_by_reference);
712 if (!parent::update())
727 function read($a_force_db =
false)
729 parent::read($a_force_db);
743 if (!parent::delete())
764 global $tree,
$ilDB, $ilPluginAdmin;
770 $result = $ilDB->queryF(
"SELECT active_id FROM tst_active WHERE test_fi = %s",
774 $active_array = array();
777 array_push($active_array,
$row[
"active_id"]);
780 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_active WHERE test_fi = %s",
785 if (count($active_array))
787 foreach ($active_array as $active_id)
789 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_times WHERE active_fi = %s",
794 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_sequence WHERE active_fi = %s",
801 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_mark WHERE test_fi = %s",
806 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_tests WHERE test_id = %s",
811 require_once
'Modules/Test/classes/class.ilTestQuestionSetConfigFactory.php';
813 $testQuestionSetConfigFactory->getQuestionSetConfig()->removeQuestionSetRelatedData();
816 include_once
"./Services/Utilities/classes/class.ilUtil.php";
818 $directory = $tst_data_dir.
"/tst_".$this->
getId();
819 if (is_dir($directory))
821 include_once
"./Services/Utilities/classes/class.ilUtil.php";
824 include_once(
"./Services/MediaObjects/classes/class.ilObjMediaObject.php");
830 foreach(
$mobs as $mob)
855 function notify($a_event,$a_ref_id,$a_parent_non_rbac_id,$a_node_id,$a_params = 0)
895 if ($a_node_id==
$_GET[
"ref_id"])
897 $parent_obj =& $this->
ilias->obj_factory->getInstanceByRefId($a_node_id);
898 $parent_type = $parent_obj->getType();
899 if ($parent_type == $this->
getType())
901 $a_node_id = (int) $tree->getParentId($a_node_id);
905 parent::notify($a_event,$a_ref_id,$a_parent_non_rbac_id,$a_node_id,$a_params);
915 include_once
"./Services/Utilities/classes/class.ilUtil.php";
918 if (!is_writable($tst_data_dir))
920 $this->
ilias->raiseError(
"Test Data Directory (".$tst_data_dir
921 .
") not writeable.",$this->
ilias->error_obj->MESSAGE);
925 $tst_dir = $tst_data_dir.
"/tst_".$this->
getId();
927 if (!@is_dir($tst_dir))
929 $this->
ilias->raiseError(
"Creation of Test Directory failed.",$this->
ilias->error_obj->MESSAGE);
932 $export_dir = $tst_dir.
"/export";
934 if (!@is_dir($export_dir))
936 $this->
ilias->raiseError(
"Creation of Export Directory failed.",$this->
ilias->error_obj->MESSAGE);
947 include_once
"./Services/Utilities/classes/class.ilUtil.php";
958 function getExportFiles($dir)
961 if(!@is_dir($dir) || !is_writeable($dir))
977 $files[] = $file->getBasename();
990 if (strlen($a_import_dir))
992 $_SESSION[
"tst_import_dir"] = $a_import_dir;
1008 if (strlen(
$_SESSION[
"tst_import_dir"]))
1028 include_once
"./Services/Utilities/classes/class.ilUtil.php";
1032 if (!is_writable($tst_data_dir))
1034 $this->
ilias->raiseError(
"Test Data Directory (".$tst_data_dir
1035 .
") not writeable.",$this->
ilias->error_obj->FATAL);
1039 $tst_dir = $tst_data_dir.
"/tst_import";
1041 if (!@is_dir($tst_dir))
1043 $ilias->raiseError(
"Creation of test import directory failed.",$ilias->error_obj->FATAL);
1058 $result = $ilDB->queryF(
"SELECT DISTINCT(qpl_qst_type.type_tag) foundtypes FROM qpl_questions, tst_test_result, qpl_qst_type, tst_active WHERE tst_test_result.question_fi = qpl_questions.question_id AND qpl_questions.question_type_fi = qpl_qst_type.question_type_id AND tst_test_result.active_fi = tst_active.active_id AND tst_active.test_fi = %s",
1065 if (strcmp(
$row[
'foundtypes'],
'assSingleChoice') == 0)
1083 $result = $ilDB->queryF(
"SELECT DISTINCT(qpl_qst_type.type_tag) foundtypes FROM qpl_questions, tst_test_result, qpl_qst_type, tst_active WHERE tst_test_result.question_fi = qpl_questions.question_id AND qpl_questions.question_type_fi = qpl_qst_type.question_type_id AND tst_test_result.active_fi = tst_active.active_id AND tst_active.test_fi = %s",
1090 if (strcmp(
$row[
'foundtypes'],
'assSingleChoice') == 0)
1115 SELECT DISTINCT(qpl_qst_sc.shuffle) foundshuffles 1121 WHERE tst_test_result.question_fi = qpl_questions.question_id 1122 AND qpl_questions.question_type_fi = qpl_qst_type.question_type_id 1123 AND tst_test_result.active_fi = tst_active.active_id 1124 AND qpl_questions.question_id = qpl_qst_sc.question_fi 1125 AND tst_active.test_fi = %s 1126 AND qpl_qst_type.type_tag = %s 1128 array(
'integer',
'text'),
1129 array($this->
getTestId(),
'assSingleChoice')
1134 return (
$row[
'foundshuffles'] == 0);
1147 if( !count($this->mark_schema->mark_steps) )
1168 global $tree,
$ilDB, $ilPluginAdmin;
1171 $test->loadFromDb();
1173 require_once
'Modules/Test/classes/class.ilTestQuestionSetConfigFactory.php';
1176 return $test->isComplete( $testQuestionSetConfigFactory->getQuestionSetConfig() );
1192 if(!preg_match(
'/\d+/', $this->
getECTSFX()))
1200 SET ects_output = %s, ects_a = %s, ects_b = %s, ects_c = %s, ects_d = %s, ects_e = %s, ects_fx = %s 1201 WHERE test_id = %s",
1202 array(
'text',
'float',
'float',
'float',
'float',
'float',
'float',
'integer'),
1205 $grades[
'A'], $grades[
'B'], $grades[
'C'], $grades[
'D'], $grades[
'E'],
1222 if($this->
isComplete($testQuestionSetConfig))
1229 "UPDATE tst_tests SET complete = %s WHERE test_id = %s",
1230 array(
'text',
'integer'),
1231 array($complete, $this->test_id)
1256 include_once(
"./Services/RTE/classes/class.ilRTE.php");
1257 $completecontent =
"";
1260 $completecontent .= $content;
1273 global $tree,
$ilDB, $ilPluginAdmin;
1280 require_once
'Modules/Test/classes/class.ilTestQuestionSetConfigFactory.php';
1282 $testQuestionSetConfig = $testQuestionSetConfigFactory->getQuestionSetConfig();
1284 include_once (
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
1285 if ($this->test_id == -1)
1288 $next_id = $ilDB->nextId(
'tst_tests');
1290 $ilDB->insert(
'tst_tests', array(
1291 'test_id' => array(
'integer', $next_id),
1292 'obj_fi' => array(
'integer', $this->
getId()),
1293 'author' => array(
'text', $this->
getAuthor()),
1297 'showinfo' => array(
'integer', $this->
getShowInfo()),
1298 'forcejs' => array(
'integer', $this->
getForceJS()),
1310 'nr_of_tries' => array(
'integer', $this->
getNrOfTries()),
1311 'kiosk' => array(
'integer', $this->
getKiosk()),
1322 'complete' => array(
'text', $this->
isComplete($testQuestionSetConfig)),
1324 'ects_a' => array(
'float', strlen($this->ects_grades[
"A"]) ? $this->ects_grades[
"A"] : NULL),
1325 'ects_b' => array(
'float', strlen($this->ects_grades[
"B"]) ? $this->ects_grades[
"B"] : NULL),
1326 'ects_c' => array(
'float', strlen($this->ects_grades[
"C"]) ? $this->ects_grades[
"C"] : NULL),
1327 'ects_d' => array(
'float', strlen($this->ects_grades[
"D"]) ? $this->ects_grades[
"D"] : NULL),
1328 'ects_e' => array(
'float', strlen($this->ects_grades[
"E"]) ? $this->ects_grades[
"E"] : NULL),
1329 'ects_fx' => array(
'float', $this->
getECTSFX()),
1338 'password' => array(
'text', $this->
getPassword()),
1346 'created' => array(
'integer', time()),
1347 'tstamp' => array(
'integer', time()),
1349 'template_id' => array(
'integer', $this->
getTemplate()),
1350 'pool_usage' => array(
'integer', $this->
getPoolUsage()),
1364 'online_status' => array(
'integer', (
int)$this->
isOnline()),
1366 'autosave' => array(
'integer', (
int)$this->
getAutosave()),
1389 $this->test_id = $next_id;
1402 $result = $ilDB->queryF(
"SELECT * FROM tst_tests WHERE test_id = %s",
1404 array($this->test_id)
1408 $oldrow = $ilDB->fetchAssoc(
$result);
1412 $ilDB->update(
'tst_tests',
1414 'author' => array(
'text', $this->
getAuthor()),
1418 'showinfo' => array(
'integer', $this->
getShowInfo()),
1419 'forcejs' => array(
'integer', $this->
getForceJS()),
1431 'nr_of_tries' => array(
'integer', $this->
getNrOfTries()),
1432 'kiosk' => array(
'integer', $this->
getKiosk()),
1443 'complete' => array(
'text', $this->
isComplete($testQuestionSetConfig)),
1445 'ects_a' => array(
'float', strlen($this->ects_grades[
"A"]) ? $this->ects_grades[
"A"] : NULL),
1446 'ects_b' => array(
'float', strlen($this->ects_grades[
"B"]) ? $this->ects_grades[
"B"] : NULL),
1447 'ects_c' => array(
'float', strlen($this->ects_grades[
"C"]) ? $this->ects_grades[
"C"] : NULL),
1448 'ects_d' => array(
'float', strlen($this->ects_grades[
"D"]) ? $this->ects_grades[
"D"] : NULL),
1449 'ects_e' => array(
'float', strlen($this->ects_grades[
"E"]) ? $this->ects_grades[
"E"] : NULL),
1450 'ects_fx' => array(
'float', $this->
getECTSFX()),
1459 'password' => array(
'text', $this->
getPassword()),
1467 'tstamp' => array(
'integer', time()),
1469 'template_id' => array(
'integer', $this->
getTemplate()),
1470 'pool_usage' => array(
'integer', $this->
getPoolUsage()),
1484 'online_status' => array(
'integer', (
int)$this->
isOnline()),
1486 'autosave' => array(
'integer', (
int)$this->
getAutosave()),
1509 'test_id' => array(
'integer', (
int)$this->
getTestId())
1513 include_once (
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
1516 $logresult = $ilDB->queryF(
"SELECT * FROM tst_tests WHERE test_id = %s",
1521 if ($logresult->numRows() == 1)
1523 $newrow = $ilDB->fetchAssoc($logresult);
1525 $changed_fields = array();
1526 foreach ($oldrow as $key => $value)
1528 if (strcmp($oldrow[$key], $newrow[$key]) != 0)
1530 array_push($changed_fields,
"$key: " . $oldrow[$key] .
" => " . $newrow[$key]);
1533 $changes = join($changed_fields,
", ");
1534 if (count($changed_fields) > 0)
1545 $aresult = $ilDB->queryF(
"SELECT active_id FROM tst_active WHERE test_fi = %s AND tries >= %s AND submitted = %s",
1546 array(
'integer',
'integer',
'integer'),
1549 while (
$row = $ilDB->fetchAssoc($aresult))
1551 $ilDB->manipulateF(
"UPDATE tst_active SET submitted = %s, submittimestamp = %s WHERE active_id = %s",
1552 array(
'integer',
'timestamp',
'integer'),
1553 array(1, date(
'Y-m-d H:i:s'),
$row[
"active_id"])
1558 $aresult = $ilDB->queryF(
"SELECT active_id FROM tst_active WHERE test_fi = %s AND tries < %s AND submitted = %s",
1559 array(
'integer',
'integer',
'integer'),
1562 while (
$row = $ilDB->fetchAssoc($aresult))
1564 $ilDB->manipulateF(
"UPDATE tst_active SET submitted = %s, submittimestamp = %s WHERE active_id = %s",
1565 array(
'integer',
'timestamp',
'integer'),
1566 array(0, NULL,
$row[
"active_id"])
1573 $aresult = $ilDB->queryF(
"SELECT active_id FROM tst_active WHERE test_fi = %s AND submitted = %s",
1574 array(
'integer',
'integer'),
1577 while (
$row = $ilDB->fetchAssoc($aresult))
1579 $ilDB->manipulateF(
"UPDATE tst_active SET submitted = %s, submittimestamp = %s WHERE active_id = %s",
1580 array(
'integer',
'timestamp',
'integer'),
1581 array(0, NULL,
$row[
"active_id"])
1591 include_once
"./Services/Object/classes/class.ilObjectActivation.php";
1607 $item->update($this->ref_id);
1610 if (!$properties_only)
1615 $ilias->raiseError(
$result->getMessage());
1623 $this->mark_schema->saveToDb($this->test_id);
1638 $oldquestions = array();
1639 include_once
"./Modules/Test/classes/class.ilObjAssessmentFolder.php";
1642 $result = $ilDB->queryF(
"SELECT question_fi FROM tst_test_question WHERE test_fi = %s ORDER BY sequence",
1650 array_push($oldquestions,
$row[
"question_fi"]);
1656 $currentQuestionsObligationsQuery =
'SELECT question_fi, obligatory FROM tst_test_question WHERE test_fi = %s';
1657 $rset = $ilDB->queryF($currentQuestionsObligationsQuery, array(
'integer'), array($this->
getTestId()));
1658 while (
$row = $ilDB->fetchAssoc($rset)) {
1659 $obligatoryQuestionState[
$row[
'question_fi']] = $row[
'obligatory'];
1662 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_test_question WHERE test_fi = %s",
1667 foreach ($this->questions as $key => $value)
1670 if( !isset($obligatoryQuestionState[$value]) || is_null($obligatoryQuestionState[$value]) )
1672 $obligatoryQuestionState[$value] = 0;
1676 $next_id = $ilDB->nextId(
'tst_test_question');
1677 $ilDB->insert(
'tst_test_question', array(
1678 'test_question_id' => array(
'integer', $next_id),
1679 'test_fi' => array(
'integer', $this->
getTestId()),
1680 'question_fi' => array(
'integer', $value),
1681 'sequence' => array(
'integer', $key),
1682 'obligatory' => array(
'integer', $obligatoryQuestionState[$value]),
1683 'tstamp' => array(
'integer', time())
1686 include_once (
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
1689 $result = $ilDB->queryF(
"SELECT question_fi FROM tst_test_question WHERE test_fi = %s ORDER BY sequence",
1693 $newquestions = array();
1698 array_push($newquestions,
$row[
"question_fi"]);
1701 foreach ($oldquestions as $index => $question_id)
1703 if (strcmp($newquestions[$index], $question_id) != 0)
1705 $pos = array_search($question_id, $newquestions);
1716 foreach ($newquestions as $index => $question_id)
1718 if (array_search($question_id, $oldquestions) === FALSE)
1734 $result = $ilDB->queryF(
'SELECT copy_id FROM tst_rnd_cpy WHERE tst_fi = %s',
1738 return $result->numRows() > 0;
1762 $result = $ilDB->queryF(
"SELECT qpl_questions.original_id FROM qpl_questions, tst_test_question WHERE qpl_questions.question_id = tst_test_question.question_fi AND qpl_questions.tstamp > 0 AND tst_test_question.test_fi = %s",
1766 $original_ids = array();
1767 $paramtypes = array();
1768 $paramvalues = array();
1771 array_push($original_ids,
$row[
'original_id']);
1776 if (($questionpool == 0) && (!is_array($qpls)))
1778 include_once
"./Modules/TestQuestionPool/classes/class.ilObjQuestionPool.php";
1780 if (count($available_pools))
1782 $available =
" AND " . $ilDB->in(
'obj_fi', $available_pools,
false,
'integer');
1790 $constraint_qpls =
"";
1791 $result_array = array();
1792 if ($questionpool == 0)
1794 if (is_array($qpls))
1796 if (count($qpls) > 0)
1798 $constraint_qpls =
" AND " . $ilDB->in(
'obj_fi', $qpls,
false,
'integer');
1803 $original_clause =
"";
1804 if (count($original_ids))
1806 $original_clause =
" AND " . $ilDB->in(
'question_id', $original_ids,
true,
'integer');
1809 if ($questionpool == 0)
1811 $result = $ilDB->queryF(
"SELECT question_id FROM qpl_questions WHERE original_id IS NULL $available $constraint_qpls AND owner > %s AND complete = %s $original_clause",
1812 array(
'integer',
'text'),
1818 $result = $ilDB->queryF(
"SELECT question_id FROM qpl_questions WHERE original_id IS NULL AND obj_fi = %s AND owner > %s AND complete = %s $original_clause",
1819 array(
'integer',
'integer',
'text'),
1820 array($questionpool, 0,
"1")
1823 $found_ids = array();
1826 array_push($found_ids,
$row[
'question_id']);
1828 $nr_of_questions = ($nr_of_questions > count($found_ids)) ? count($found_ids) : $nr_of_questions;
1829 if ($nr_of_questions == 0)
return array();
1830 $rand_keys = array_rand($found_ids, $nr_of_questions);
1832 if (is_array($rand_keys))
1834 foreach ($rand_keys as $key)
1836 $result[$found_ids[$key]] = $found_ids[$key];
1841 $result[$found_ids[$rand_keys]] = $found_ids[$rand_keys];
1857 $result = $ilDB->queryF(
"SELECT test_result_id FROM tst_test_result WHERE active_fi = %s AND pass = %s",
1858 array(
'integer',
'integer'),
1859 array($active_id,
$pass)
1877 $result = $ilDB->queryF(
"SELECT test_random_question_id FROM tst_test_rnd_qst WHERE active_fi = %s AND pass = %s",
1878 array(
'integer',
'integer'),
1879 array($active_id,
$pass)
1881 return (
$result->numRows() > 0) ?
true :
false;
1891 $result = $ilDB->queryF(
"SELECT * FROM tst_tests WHERE obj_fi = %s",
1893 array($this->
getId())
1904 include_once(
"./Services/RTE/classes/class.ilRTE.php");
1941 "A" =>
$data->ects_a,
1942 "B" =>
$data->ects_b,
1943 "C" =>
$data->ects_c,
1944 "D" =>
$data->ects_d,
1945 "E" =>
$data->ects_e
1949 $this->mark_schema->flush();
1950 $this->mark_schema->loadFromDb($this->
getTestId());
2007 include_once
"./Services/Object/classes/class.ilObjectActivation.php";
2009 switch($activation[
"timing_type"])
2036 $this->questions = array();
2037 if (strcmp($active_id,
"") == 0)
2047 $result = $ilDB->queryF(
"SELECT tst_test_rnd_qst.* FROM tst_test_rnd_qst, qpl_questions WHERE tst_test_rnd_qst.active_fi = %s AND qpl_questions.question_id = tst_test_rnd_qst.question_fi AND tst_test_rnd_qst.pass = %s ORDER BY sequence",
2048 array(
'integer',
'integer'),
2049 array($active_id,
$pass)
2057 $result = $ilDB->queryF(
"SELECT tst_test_rnd_qst.* FROM tst_test_rnd_qst, qpl_questions WHERE tst_test_rnd_qst.active_fi = %s AND qpl_questions.question_id = tst_test_rnd_qst.question_fi AND tst_test_rnd_qst.pass = 0 ORDER BY sequence",
2065 $result = $ilDB->queryF(
"SELECT tst_test_question.* FROM tst_test_question, qpl_questions WHERE tst_test_question.test_fi = %s AND qpl_questions.question_id = tst_test_question.question_fi ORDER BY sequence",
2067 array($this->test_id)
2073 $this->questions[$index++] =
$data[
"question_fi"];
2101 return (strlen($this->introduction)) ? $this->introduction : NULL;
2126 $this->_finalstatement = $a_statement;
2138 $this->_showinfo = ($a_info) ? 1 : 0;
2150 $this->_forcejs = ($a_js) ? 1 : 0;
2162 $this->_customStyle = $a_customStyle;
2174 return (strlen($this->_customStyle)) ? $this->_customStyle : NULL;
2187 $css_path = str_replace(
"ta.css",
"customstyles", $css_path) .
"/";
2188 $customstyles = array();
2189 if (is_dir($css_path))
2192 include_once
"./Services/Utilities/classes/class.ilFileUtils.php";
2198 if (strpos($filename,
".css"))
2200 array_push($customstyles, $filename);
2205 return $customstyles;
2220 $custom = str_replace(
"ta.css",
"customstyles/" . $this->
getCustomStyle(), $default);
2221 if (file_exists($custom))
2224 $custom = str_replace(
"ta.css",
"customstyles/" . $this->
getCustomStyle(), $custom);
2247 $this->_showfinalstatement = ($show) ? 1 : 0;
2258 return (strlen($this->_finalstatement)) ? $this->_finalstatement : NULL;
2270 return ($this->_showinfo) ? 1 : 0;
2282 return ($this->_forcejs) ? 1 : 0;
2294 return ($this->_showfinalstatement) ? 1 : 0;
2314 return ($this->ects_output) ? 1 : 0;
2322 $this->ects_output = $a_ects_output ? 1 : 0;
2330 return (strlen($this->ects_fx)) ? $this->ects_fx : NULL;
2338 $this->ects_fx = $a_ects_fx;
2354 $this->ects_grades = $a_ects_grades;
2364 return ($this->sequence_settings) ? $this->sequence_settings : 0;
2414 switch ($instant_feedback)
2417 $this->instant_verification = 1;
2420 $this->instant_verification = 0;
2434 switch ($answer_feedback)
2437 $this->answer_feedback = 1;
2440 $this->answer_feedback = 0;
2453 switch ($generic_answer_feedback)
2456 $this->answer_feedback = 1;
2459 $this->answer_feedback = 0;
2473 switch ($answer_feedback_points)
2476 $this->answer_feedback_points = 1;
2479 $this->answer_feedback_points = 0;
2490 if(!$reporting_date)
2492 $this->reporting_date =
'';
2515 return ($this->score_reporting) ? $this->score_reporting : 0;
2532 return ($this->instant_verification) ? $this->instant_verification : 0;
2545 return ($this->answer_feedback) ? $this->answer_feedback : 0;
2558 return ($this->answer_feedback) ? $this->answer_feedback : 0;
2570 return ($this->answer_feedback_points) ? $this->answer_feedback_points : 0;
2582 return ($this->count_system) ? $this->count_system : 0;
2595 $result = $ilDB->queryF(
"SELECT tst_tests.count_system FROM tst_tests, tst_active WHERE tst_active.active_id = %s AND tst_active.test_fi = tst_tests.test_id",
2602 return $row[
"count_system"];
2616 return ($this->mc_scoring) ? $this->mc_scoring : 0;
2628 return ($this->score_cutting) ? $this->score_cutting : 0;
2640 return ($this->pass_scoring) ? $this->pass_scoring : 0;
2653 $result = $ilDB->queryF(
"SELECT tst_tests.pass_scoring FROM tst_tests, tst_active WHERE tst_tests.test_id = tst_active.test_fi AND tst_active.active_id = %s",
2660 return $row[
"pass_scoring"];
2675 $result = $ilDB->queryF(
"SELECT tst_tests.mc_scoring FROM tst_tests, tst_active WHERE tst_active.active_id = %s AND tst_active.test_fi = tst_tests.test_id",
2682 return $row[
"mc_scoring"];
2697 $result = $ilDB->queryF(
"SELECT tst_tests.score_cutting FROM tst_tests, tst_active WHERE tst_active.active_id = %s AND tst_tests.test_id = tst_active.test_fi",
2704 return $row[
"score_cutting"];
2718 return (strlen($this->reporting_date)) ? $this->reporting_date : NULL;
2730 return ($this->nr_of_tries) ? $this->nr_of_tries : 0;
2742 return ($this->_kiosk) ? $this->_kiosk : 0;
2755 $this->_kiosk = $kiosk;
2767 if (($this->_kiosk & 1) > 0)
2788 $this->_kiosk = $this->_kiosk | 1;
2794 $this->_kiosk = $this->_kiosk ^ 1;
2808 if (($this->_kiosk & 2) > 0)
2828 $this->_kiosk = $this->_kiosk | 2;
2834 $this->_kiosk = $this->_kiosk ^ 2;
2848 if (($this->_kiosk & 4) > 0)
2868 $this->_kiosk = $this->_kiosk | 4;
2874 $this->_kiosk = $this->_kiosk ^ 4;
2888 return ($this->use_previous_answers) ? $this->use_previous_answers : 0;
2900 return ($this->title_output) ? $this->title_output : 0;
2915 $result = $ilDB->queryF(
"SELECT tst_tests.title_output FROM tst_tests, tst_active WHERE tst_tests.test_id = tst_active.test_fi AND tst_active.active_id = %s",
2922 return $row[
"title_output"];
2941 $use_previous_answers = 1;
2943 $result = $ilDB->queryF(
"SELECT tst_tests.use_previous_answers FROM tst_tests, tst_active WHERE tst_tests.test_id = tst_active.test_fi AND tst_active.active_id = %s",
2950 $use_previous_answers =
$row[
"use_previous_answers"];
2953 if ($use_previous_answers == 1)
2955 if ($user_active_user_setting)
2957 $res = $ilUser->getPref(
"tst_use_previous_answers");
2960 $use_previous_answers =
$res;
2976 return (strlen($this->processing_time)) ? $this->processing_time : NULL;
2987 if (strlen($this->processing_time))
2989 if (preg_match(
"/(\d{2}):(\d{2}):(\d{2})/is", $this->processing_time, $matches))
2991 if ((
int)$matches[1]+(
int)$matches[2]+(
int)$matches[3] == 0)
2998 'hh' => $matches[1],
2999 'mm' => $matches[2],
3000 'ss' => $matches[3],
3010 if (strlen($this->processing_time))
3012 if (preg_match(
"/(\d{2}):(\d{2}):(\d{2})/is", $this->processing_time, $matches))
3014 return ($matches[1] * 60) + $matches[2];
3018 return self::DEFAULT_PROCESSING_TIME_MINUTES;
3030 if (preg_match(
"/(\d{2}):(\d{2}):(\d{2})/", $this->
getProcessingTime(), $matches))
3033 return ($matches[1] * 3600) + ($matches[2] * 60) + $matches[3] + $extratime;
3050 if (preg_match(
"/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/", $this->
getEndingTime(), $matches))
3052 $ending = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
3054 return $ending - $now;
3071 return ($this->enable_processing_time) ? $this->enable_processing_time : 0;
3083 return ($this->reset_processing_time) ? $this->reset_processing_time : 0;
3111 return (strlen($this->starting_time)) ? $this->starting_time : NULL;
3151 return (strlen($this->ending_time)) ? $this->ending_time : NULL;
3187 if ($use_previous_answers)
3189 $this->use_previous_answers = 1;
3193 $this->use_previous_answers = 0;
3223 switch ($title_output)
3226 $this->title_output = 1;
3229 $this->title_output = 2;
3232 $this->title_output = 0;
3251 $this->processing_time = sprintf(
"%02d:%02d:00", floor($minutes/60), $minutes%60);
3264 $this->enable_processing_time =
"1";
3266 $this->enable_processing_time =
"0";
3281 $this->reset_processing_time = 1;
3285 $this->reset_processing_time = 0;
3298 $this->count_system = $a_count_system;
3326 return (strlen($this->password)) ? $this->password : NULL;
3338 $this->password = $a_password;
3350 $this->score_cutting = $a_score_cutting;
3362 $this->mc_scoring = $a_mc_scoring;
3374 switch ($a_pass_scoring)
3395 include_once (
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
3400 $question->delete($question_id);
3420 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_solutions WHERE tst_solutions.active_fi IN (SELECT active_id FROM tst_active WHERE test_fi = %s) AND tst_solutions.question_fi = %s",
3421 array(
'integer',
'integer'),
3424 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_qst_solved WHERE tst_qst_solved.active_fi IN (SELECT active_id FROM tst_active WHERE test_fi = %s) AND tst_qst_solved.question_fi = %s",
3425 array(
'integer',
'integer'),
3428 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_test_result WHERE tst_test_result.active_fi IN (SELECT active_id FROM tst_active WHERE test_fi = %s) AND tst_test_result.question_fi = %s",
3429 array(
'integer',
'integer'),
3432 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_pass_result WHERE tst_pass_result.active_fi IN (SELECT active_id FROM tst_active WHERE test_fi = %s)",
3437 require_once
'Modules/TestQuestionPool/classes/class.ilAssQuestionHintTracking.php';
3442 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_solutions WHERE tst_solutions.active_fi IN (SELECT active_id FROM tst_active WHERE test_fi = %s)",
3446 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_qst_solved WHERE tst_qst_solved.active_fi IN (SELECT active_id FROM tst_active WHERE test_fi = %s)",
3450 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_test_result WHERE tst_test_result.active_fi IN (SELECT active_id FROM tst_active WHERE test_fi = %s)",
3454 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_pass_result WHERE tst_pass_result.active_fi IN (SELECT active_id FROM tst_active WHERE test_fi = %s)",
3459 $query =
"SELECT active_id FROM tst_active WHERE test_fi = %s";
3461 $activeIds = array();
3462 while(
$row = $ilDB->fetchAssoc(
$res) )
3464 $activeIds[] =
$row[
'active_id'];
3467 require_once
'Modules/TestQuestionPool/classes/class.ilAssQuestionHintTracking.php';
3470 include_once (
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
3477 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_sequence WHERE tst_sequence.active_fi IN (SELECT active_id FROM tst_active WHERE test_fi = %s)",
3484 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_test_rnd_qst WHERE tst_test_rnd_qst.active_fi IN (SELECT active_id FROM tst_active WHERE test_fi = %s)",
3491 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_active WHERE test_fi = %s",
3497 $affectedRows = $ilDB->manipulateF(
"DELETE FROM usr_pref WHERE keyword = %s",
3499 array(
"tst_password_".$this->
getTestId())
3504 if (@is_dir(CLIENT_WEB_DIR .
"/assessment/tst_" . $this->
getTestId()))
3520 require_once
'Services/Object/classes/class.ilObjectLP.php';
3522 $testLP->resetLPDataForUserIds($participantData->
getUserIds(),
false);
3535 require_once
'Modules/Test/classes/class.ilTestParticipantData.php';
3537 $participantData->setUserIds($userIds);
3538 $participantData->load($this->
getTestId());
3540 $IN_userIds = $ilDB->in(
'usr_id', $participantData->getUserIds(),
false,
'integer');
3541 $ilDB->manipulateF(
"DELETE FROM usr_pref WHERE $IN_userIds AND keyword = %s",
3542 array(
'text'), array(
"tst_password_".$this->
getTestId())
3545 if( count($participantData->getActiveIds()) )
3555 $IN_activeIds = $ilDB->in(
'active_fi', $activeIds,
false,
'integer');
3557 $ilDB->manipulate(
"DELETE FROM tst_solutions WHERE $IN_activeIds");
3558 $ilDB->manipulate(
"DELETE FROM tst_qst_solved WHERE $IN_activeIds");
3559 $ilDB->manipulate(
"DELETE FROM tst_test_result WHERE $IN_activeIds");
3560 $ilDB->manipulate(
"DELETE FROM tst_pass_result WHERE $IN_activeIds");
3561 $ilDB->manipulate(
"DELETE FROM tst_result_cache WHERE $IN_activeIds");
3562 $ilDB->manipulate(
"DELETE FROM tst_sequence WHERE $IN_activeIds");
3566 $ilDB->manipulate(
"DELETE FROM tst_test_rnd_qst WHERE $IN_activeIds");
3570 $ilDB->manipulate(
"DELETE FROM tst_seq_qst_tracking WHERE $IN_activeIds");
3571 $ilDB->manipulate(
"DELETE FROM tst_seq_qst_answstatus WHERE $IN_activeIds");
3572 $ilDB->manipulate(
"DELETE FROM tst_seq_qst_postponed WHERE $IN_activeIds");
3573 $ilDB->manipulate(
"DELETE FROM tst_seq_qst_checked WHERE $IN_activeIds");
3576 include_once (
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
3578 foreach ($activeIds as $active_id)
3582 if (@is_dir(CLIENT_WEB_DIR .
"/assessment/tst_" . $this->
getTestId() .
"/$active_id"))
3593 require_once
'Modules/TestQuestionPool/classes/class.ilAssQuestionHintTracking.php';
3601 $IN_activeIds = $ilDB->in(
'active_id', $activeIds,
false,
'integer');
3602 $ilDB->manipulate(
"DELETE FROM tst_active WHERE $IN_activeIds");
3612 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_solutions WHERE active_fi = %s",
3616 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_qst_solved WHERE active_fi = %s",
3620 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_test_result WHERE active_fi = %s",
3624 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_pass_result WHERE active_fi = %s",
3631 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_test_rnd_qst WHERE active_fi = %s",
3637 include_once (
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
3643 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_sequence WHERE active_fi = %s",
3649 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_active WHERE active_id = %s",
3657 $affectedRows = $ilDB->manipulateF(
"DELETE FROM usr_pref WHERE usr_id = %s AND keyword = %s",
3658 array(
'integer',
'text'),
3659 array($user_id,
"tst_password_".$this->
getTestId())
3665 if (@is_dir(CLIENT_WEB_DIR .
"/assessment/tst_" . $this->
getTestId() .
"/$active_id"))
3670 require_once
'Modules/TestQuestionPool/classes/class.ilAssQuestionHintTracking.php';
3686 $result = $ilDB->queryF(
"SELECT * FROM tst_test_question WHERE test_fi=%s AND question_fi=%s",
3687 array(
'integer',
'integer'),
3691 if (
$data->sequence > 1)
3694 $result = $ilDB->queryF(
"SELECT * FROM tst_test_question WHERE test_fi=%s AND sequence=%s",
3695 array(
'integer',
'integer'),
3698 $data_previous = $ilDB->fetchObject(
$result);
3700 $affectedRows = $ilDB->manipulateF(
"UPDATE tst_test_question SET sequence=%s WHERE test_question_id=%s",
3701 array(
'integer',
'integer'),
3702 array(
$data->sequence, $data_previous->test_question_id)
3705 $affectedRows = $ilDB->manipulateF(
"UPDATE tst_test_question SET sequence=%s WHERE test_question_id=%s",
3706 array(
'integer',
'integer'),
3707 array(
$data->sequence - 1,
$data->test_question_id)
3709 include_once (
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
3730 $result = $ilDB->queryF(
"SELECT * FROM tst_test_question WHERE test_fi=%s AND question_fi=%s",
3731 array(
'integer',
'integer'),
3735 $result = $ilDB->queryF(
"SELECT * FROM tst_test_question WHERE test_fi=%s AND sequence=%s",
3736 array(
'integer',
'integer'),
3742 $data_next = $ilDB->fetchObject(
$result);
3744 $affectedRows = $ilDB->manipulateF(
"UPDATE tst_test_question SET sequence=%s WHERE test_question_id=%s",
3745 array(
'integer',
'integer'),
3746 array(
$data->sequence, $data_next->test_question_id)
3749 $affectedRows = $ilDB->manipulateF(
"UPDATE tst_test_question SET sequence=%s WHERE test_question_id=%s",
3750 array(
'integer',
'integer'),
3751 array(
$data->sequence + 1,
$data->test_question_id)
3753 include_once (
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
3773 $duplicate_id = $question->duplicate(
true, null, null, null, $this->
getId());
3775 return $duplicate_id;
3789 #var_dump($question_id); 3792 $duplicate_id = $question_id;
3800 $result = $ilDB->queryF(
"SELECT MAX(sequence) seq FROM tst_test_question WHERE test_fi=%s",
3809 $sequence =
$data->seq + 1;
3812 $next_id = $ilDB->nextId(
'tst_test_question');
3813 $affectedRows = $ilDB->manipulateF(
"INSERT INTO tst_test_question (test_question_id, test_fi, question_fi, sequence, tstamp) VALUES (%s, %s, %s, %s, %s)",
3814 array(
'integer',
'integer',
'integer',
'integer',
'integer'),
3815 array($next_id, $this->
getTestId(), $duplicate_id, $sequence, time())
3817 if ($affectedRows == 1)
3819 include_once (
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
3826 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_active WHERE test_fi = %s",
3832 return $duplicate_id;
3848 $result = $ilDB->queryF(
"SELECT qpl_questions.title FROM tst_test_question, qpl_questions WHERE tst_test_question.test_fi = %s AND tst_test_question.question_fi = qpl_questions.question_id ORDER BY tst_test_question.sequence",
3854 array_push($titles,
$row[
"title"]);
3873 $result = $ilDB->queryF(
"SELECT qpl_questions.title, qpl_questions.question_id FROM tst_test_question, qpl_questions WHERE tst_test_question.test_fi = %s AND tst_test_question.question_fi = qpl_questions.question_id ORDER BY tst_test_question.sequence",
3879 $titles[
$row[
'question_id']] = $row[
"title"];
3897 return $this->lng->txt(
"ass_question");
3917 $result = $ilDB->queryF(
"SELECT qpl_questions.*, qpl_qst_type.type_tag FROM qpl_questions, qpl_qst_type WHERE qpl_questions.question_id = %s AND qpl_questions.question_type_fi = qpl_qst_type.question_type_id",
3936 $existing_questions = array();
3941 $result = $ilDB->queryF(
"SELECT qpl_questions.original_id FROM qpl_questions, tst_test_rnd_qst WHERE tst_test_rnd_qst.active_fi = %s AND tst_test_rnd_qst.question_fi = qpl_questions.question_id AND tst_test_rnd_qst.pass = %s",
3942 array(
'integer',
'integer'),
3943 array($active_id,
$pass)
3948 $result = $ilDB->queryF(
"SELECT qpl_questions.original_id FROM qpl_questions, tst_test_question WHERE tst_test_question.test_fi = %s AND tst_test_question.question_fi = qpl_questions.question_id",
3955 if(
$data->original_id === null )
3960 array_push($existing_questions,
$data->original_id);
3962 return $existing_questions;
3976 if ($question_id < 1)
return -1;
3977 $result = $ilDB->queryF(
"SELECT type_tag FROM qpl_questions, qpl_qst_type WHERE qpl_questions.question_id = %s AND qpl_questions.question_type_fi = qpl_qst_type.question_type_id",
3984 return $data->type_tag;
4002 $next_id = $ilDB->nextId(
'tst_times');
4003 $affectedRows = $ilDB->manipulateF(
"INSERT INTO tst_times (times_id, active_fi, started, finished, pass, tstamp) VALUES (%s, %s, %s, %s, %s, %s)",
4004 array(
'integer',
'integer',
'timestamp',
'timestamp',
'integer',
'integer'),
4005 array($next_id, $active_id, strftime(
"%Y-%m-%d %H:%M:%S"), strftime(
"%Y-%m-%d %H:%M:%S"),
$pass, time())
4020 $affectedRows = $ilDB->manipulateF(
"UPDATE tst_times SET finished = %s, tstamp = %s WHERE times_id = %s",
4021 array(
'timestamp',
'integer',
'integer'),
4022 array(strftime(
"%Y-%m-%d %H:%M:%S"), time(), $times_id)
4039 $result = $ilDB->queryF(
"SELECT question_fi FROM tst_solutions WHERE active_fi = %s AND pass = %s GROUP BY question_fi",
4040 array(
'integer',
'integer'),
4041 array($active_id, 0)
4046 $result = $ilDB->queryF(
"SELECT question_fi FROM tst_solutions WHERE active_fi = %s AND pass = %s GROUP BY question_fi",
4047 array(
'integer',
'integer'),
4048 array($active_id,
$pass)
4051 $result_array = array();
4054 array_push($result_array,
$row[
"question_fi"]);
4056 return $result_array;
4070 return ((($currentpass > 0) && ($num == 0)) || $this->
isTestFinished($active_id)) ? true :
false;
4084 $result_array = array();
4089 if (count($this->questions) == 0)
return $result_array;
4094 $result = $ilDB->queryF(
"SELECT qpl_questions.* FROM qpl_questions, tst_test_rnd_qst WHERE tst_test_rnd_qst.question_fi = qpl_questions.question_id AND tst_test_rnd_qst.active_fi = %s AND tst_test_rnd_qst.pass = %s AND " . $ilDB->in(
'qpl_questions.question_id', $this->questions,
false,
'integer'),
4095 array(
'integer',
'integer'),
4096 array($active_id,
$pass)
4101 if (count($this->questions) == 0)
return $result_array;
4102 $result = $ilDB->query(
"SELECT qpl_questions.* FROM qpl_questions, tst_test_question WHERE tst_test_question.question_fi = qpl_questions.question_id AND " . $ilDB->in(
'qpl_questions.question_id', $this->questions,
false,
'integer'));
4106 $result_array[
$row[
"question_id"]] =
$row;
4108 return $result_array;
4124 if (!$user_id) $user_id = $ilUser->getId();
4127 $result = $ilDB->queryF(
"SELECT active_id FROM tst_active WHERE user_fi = %s AND test_fi = %s AND anonymous_id = %s",
4128 array(
'integer',
'integer',
'text'),
4132 else if (strlen($anonymous_id))
4134 $result = $ilDB->queryF(
"SELECT active_id FROM tst_active WHERE user_fi = %s AND test_fi = %s AND anonymous_id = %s",
4135 array(
'integer',
'integer',
'text'),
4136 array($user_id, $this->test_id, $anonymous_id)
4141 if (
$_SESSION[
"AccountId"] == ANONYMOUS_USER_ID)
4145 $result = $ilDB->queryF(
"SELECT active_id FROM tst_active WHERE user_fi = %s AND test_fi = %s",
4146 array(
'integer',
'integer'),
4147 array($user_id, $this->test_id)
4153 return $row[
"active_id"];
4175 $user_id = $ilUser->id;
4181 $result = $ilDB->queryF(
"SELECT tst_active.active_id FROM tst_active WHERE user_fi = %s AND test_fi = %s",
4182 array(
'integer',
'integer'),
4183 array($user_id, $test_id)
4188 return $row[
"active_id"];
4204 $keys = array_keys($array);
4207 foreach ($keys as $key)
4223 global $tree,
$ilDB,
$lng, $ilPluginAdmin;
4227 if( is_null(
$pass) )
4232 require_once
'Modules/Test/classes/class.ilTestSessionFactory.php';
4234 $testSession = $testSessionFactory->getSession($active_id);
4236 require_once
'Modules/Test/classes/class.ilTestSequenceFactory.php';
4238 $testSequence = $testSequenceFactory->getSequenceByPass($testSession,
$pass);
4242 require_once
'Modules/Test/classes/class.ilObjTestDynamicQuestionSetConfig.php';
4244 $dynamicQuestionSetConfig->loadFromDb();
4246 $testSequence->loadFromDb($dynamicQuestionSetConfig);
4249 $sequence = $testSequence->getUserSequenceQuestions();
4253 $testSequence->loadFromDb();
4254 $testSequence->loadQuestions();
4256 if( $ordered_sequence )
4258 $sequence = $testSequence->getOrderedSequenceQuestions();
4262 $sequence = $testSequence->getUserSequenceQuestions();
4266 $arrResults = array();
4269 SELECT tst_test_result.question_fi, 4270 tst_test_result.points reached, 4271 tst_test_result.hint_count requested_hints, 4272 tst_test_result.hint_points hint_points, 4273 tst_test_result.answered answered 4275 FROM tst_test_result 4277 LEFT JOIN tst_solutions 4278 ON tst_solutions.active_fi = tst_test_result.active_fi 4279 AND tst_solutions.question_fi = tst_test_result.question_fi 4281 WHERE tst_test_result.active_fi = %s 4282 AND tst_test_result.pass = %s 4285 $solutionresult = $ilDB->queryF(
4286 $query, array(
'integer',
'integer'), array($active_id,
$pass)
4289 while(
$row = $ilDB->fetchAssoc($solutionresult) )
4291 $arrResults[
$row[
'question_fi'] ] =
$row;
4294 $numWorkedThrough = count($arrResults);
4296 require_once
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
4298 $IN_question_ids = $ilDB->in(
'qpl_questions.question_id', $sequence,
false,
'integer');
4301 SELECT qpl_questions.*, 4302 qpl_qst_type.type_tag, 4303 qpl_sol_sug.question_fi has_sug_sol 4308 LEFT JOIN qpl_sol_sug 4309 ON qpl_sol_sug.question_fi = qpl_questions.question_id 4311 WHERE qpl_qst_type.question_type_id = qpl_questions.question_type_fi 4312 AND $IN_question_ids 4317 $unordered = array();
4321 $obligationsAnswered =
true;
4326 $row[
'points'] ? $arrResults[
$row[
'question_id'] ][
'reached'] /
$row[
'points'] : 0
4329 if( $percentvalue < 0 ) $percentvalue = 0.0;
4334 "max" => round(
$row[
'points'], 2),
4335 "reached" => round($arrResults[
$row[
'question_id']][
'reached'],2),
4336 'requested_hints' => $arrResults[$row[
'question_id']][
'requested_hints'],
4337 'hint_points' => $arrResults[$row[
'question_id']][
'hint_points'],
4338 "percent" => sprintf(
"%2.2f ", ($percentvalue) * 100) .
"%",
4340 "type" => $row[
"type_tag"],
4341 "qid" => $row[
'question_id'],
4342 "original_id" => $row[
"original_id"],
4343 "workedthrough" => isset($arrResults[$row[
'question_id']]) ? 1 : 0,
4344 'answered' => $arrResults[$row[
'question_id']][
'answered']
4347 if( !$arrResults[ $row[
'question_id'] ][
'answered'] )
4349 $obligationsAnswered =
false;
4352 $unordered[ $row[
'question_id'] ] =
$data;
4359 $pass_requested_hints = 0;
4360 $pass_hint_points = 0;
4365 foreach( $sequence as $qid )
4369 $pass_max += round($unordered[$qid][
'max'], 2);
4370 $pass_reached += round($unordered[$qid][
'reached'], 2);
4371 $pass_requested_hints += $unordered[$qid][
'requested_hints'];
4372 $pass_hint_points += $unordered[$qid][
'hint_points'];
4376 $unordered[$qid][
'nr'] = $key;
4377 array_push($found, $unordered[$qid]);
4387 if(
$results[
'reached_points'] < 0 )
4392 if( $pass_reached < 0 ) $pass_reached = 0;
4395 $found[
'pass'][
'total_max_points'] = $pass_max;
4396 $found[
'pass'][
'total_reached_points'] = $pass_reached;
4397 $found[
'pass'][
'total_requested_hints'] = $pass_requested_hints;
4398 $found[
'pass'][
'total_hint_points'] = $pass_hint_points;
4399 $found[
'pass'][
'percent'] = ($pass_max > 0) ? $pass_reached / $pass_max : 0;
4400 $found[
'pass'][
'obligationsAnswered'] = $obligationsAnswered;
4401 $found[
'pass'][
'num_workedthrough'] = $numWorkedThrough;
4403 $found[
"test"][
"total_max_points"] =
$results[
'max_points'];
4404 $found[
"test"][
"total_reached_points"] =
$results[
'reached_points'];
4405 $found[
"test"][
"total_requested_hints"] =
$results[
'hint_count'];
4406 $found[
"test"][
"total_hint_points"] =
$results[
'hint_points'];
4407 $found[
"test"][
"result_pass"] =
$results[
'pass'];
4408 $found[
'test'][
'obligations_answered'] =
$results[
'obligations_answered'];
4410 if( (!$total_reached_points) or (!$total_max_points) )
4416 $percentage = ($total_reached_points / $total_max_points) * 100.0;
4418 if( $percentage < 0 ) $percentage = 0.0;
4421 $found[
"test"][
"passed"] =
$results[
'passed'];
4436 $result = $ilDB->queryF(
"SELECT COUNT(active_id) total FROM tst_active WHERE test_fi = %s",
4441 return $row[
"total"];
4454 $result = $ilDB->queryF(
"SELECT tst_times.* FROM tst_active, tst_times WHERE tst_active.test_fi = %s AND tst_active.active_id = tst_times.active_fi AND tst_active.user_fi = %s",
4455 array(
'integer',
'integer'),
4461 preg_match(
"/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/",
$row[
"started"], $matches);
4462 $epoch_1 = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
4463 preg_match(
"/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/",
$row[
"finished"], $matches);
4464 $epoch_2 = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
4465 $time += ($epoch_2 - $epoch_1);
4492 $result = $ilDB->queryF(
"SELECT tst_times.* FROM tst_active, tst_times WHERE tst_active.test_fi = %s AND tst_active.active_id = tst_times.active_fi ORDER BY tst_times.active_fi, tst_times.started",
4500 if (!array_key_exists(
$row[
"active_fi"], $times))
4502 $times[
$row[
"active_fi"]] = 0;
4504 preg_match(
"/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/",
$row[
"started"], $matches);
4505 $epoch_1 = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
4506 preg_match(
"/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/",
$row[
"finished"], $matches);
4507 $epoch_2 = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
4508 $times[
$row[
"active_fi"]] += ($epoch_2 - $epoch_1);
4523 $result = $ilDB->queryF(
"SELECT tst_times.* FROM tst_active, tst_times WHERE tst_active.test_fi = %s AND tst_active.active_id = tst_times.active_fi AND tst_active.active_id = %s ORDER BY tst_times.active_fi, tst_times.started",
4524 array(
'integer',
'integer'),
4530 preg_match(
"/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/",
$row[
"started"], $matches);
4531 $epoch_1 = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
4532 preg_match(
"/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/",
$row[
"finished"], $matches);
4533 $epoch_2 = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
4534 $time += ($epoch_2 - $epoch_1);
4549 $result = $ilDB->queryF(
"SELECT * FROM tst_times WHERE active_fi = %s AND pass = %s ORDER BY started",
4550 array(
'integer',
'integer'),
4551 array($active_id,
$pass)
4556 preg_match(
"/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/",
$row[
"started"], $matches);
4557 $epoch_1 = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
4558 preg_match(
"/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/",
$row[
"finished"], $matches);
4559 $epoch_2 = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
4560 $time += ($epoch_2 - $epoch_1);
4589 $result = $ilDB->queryF(
"SELECT tst_times.* FROM tst_active, tst_times WHERE tst_active.test_fi = %s AND tst_active.active_id = tst_times.active_fi AND tst_active.active_id = %s ORDER BY tst_times.started",
4590 array(
'integer',
'integer'),
4591 array($test_id, $active_id)
4597 preg_match(
"/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/",
$row[
"started"], $matches);
4598 $epoch_1 = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
4599 if ($firstvisit == 0 || $epoch_1 < $firstvisit) $firstvisit = $epoch_1;
4600 preg_match(
"/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/",
$row[
"finished"], $matches);
4601 $epoch_2 = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
4602 if ($epoch_2 > $lastvisit) $lastvisit = $epoch_2;
4604 return array(
"firstvisit" => $firstvisit,
"lastvisit" => $lastvisit);
4619 $result = $ilDB->queryF(
"SELECT tst_times.* FROM tst_active, tst_times WHERE tst_active.active_id = %s AND tst_active.active_id = tst_times.active_fi",
4628 preg_match(
"/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/",
$row->started, $matches);
4629 $epoch_1 = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
4630 if (!$first_visit) {
4631 $first_visit = $epoch_1;
4633 if ($epoch_1 < $first_visit) {
4634 $first_visit = $epoch_1;
4636 preg_match(
"/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/",
$row->finished, $matches);
4637 $epoch_2 = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
4639 $last_visit = $epoch_2;
4641 if ($epoch_2 > $last_visit) {
4642 $last_visit = $epoch_2;
4644 $times[
$row->active_fi] += ($epoch_2 - $epoch_1);
4647 foreach ($times as $key => $value) {
4648 $max_time += $value;
4650 if ((!$test_result[
"test"][
"total_reached_points"]) or (!$test_result[
"test"][
"total_max_points"]))
4656 $percentage = ($test_result[
"test"][
"total_reached_points"] / $test_result[
"test"][
"total_max_points"]) * 100.0;
4657 if ($percentage < 0) $percentage = 0.0;
4659 $mark_obj = $this->mark_schema->getMatchingMark($percentage);
4660 $first_date = getdate($first_visit);
4661 $last_date = getdate($last_visit);
4662 $qworkedthrough = 0;
4663 foreach ($test_result as $key => $value)
4665 if (preg_match(
"/\d+/", $key))
4667 $qworkedthrough += $value[
"workedthrough"];
4670 if (!$qworkedthrough)
4676 $atimeofwork = $max_time / $qworkedthrough;
4679 $obligationsAnswered = $test_result[
"test"][
"obligations_answered"];
4686 $result_mark = $mark_obj->getShortName();
4688 if( $mark_obj->getPassed() && $obligationsAnswered )
4697 $percent_worked_through = 0;
4698 if (count($this->questions))
4700 $percent_worked_through = $qworkedthrough / count($this->questions);
4702 $result_array = array(
4703 "qworkedthrough" => $qworkedthrough,
4704 "qmax" => count($this->questions),
4705 "pworkedthrough" => $percent_worked_through,
4706 "timeofwork" => $max_time,
4707 "atimeofwork" => $atimeofwork,
4708 "firstvisit" => $first_date,
4709 "lastvisit" => $last_date,
4710 "resultspoints" => $test_result[
"test"][
"total_reached_points"],
4711 "maxpoints" => $test_result[
"test"][
"total_max_points"],
4712 "resultsmarks" => $result_mark,
4713 "passed" => $passed,
4714 "distancemedian" =>
"0" 4716 foreach ($test_result as $key => $value)
4718 if (preg_match(
"/\d+/", $key))
4720 $result_array[$key] = $value;
4723 return $result_array;
4735 $totalpoints_array = array();
4737 foreach ($all_users as $active_id => $user_name)
4740 $reached = $test_result[
"test"][
"total_reached_points"];
4741 $total = $test_result[
"test"][
"total_max_points"];
4743 $mark = $this->mark_schema->getMatchingMark($percentage*100.0);
4745 $obligationsAnswered = $test_result[
"test"][
"obligations_answered"];
4749 if( $mark->getPassed() && $obligationsAnswered )
4751 array_push($totalpoints_array, $test_result[
"test"][
"total_reached_points"]);
4755 return $totalpoints_array;
4766 $result = $ilDB->queryF(
"SELECT tst_active.active_id, usr_data.usr_id, usr_data.firstname, usr_data.lastname, usr_data.title, usr_data.login FROM tst_active LEFT JOIN usr_data ON tst_active.user_fi = usr_data.usr_id WHERE tst_active.test_fi = %s ORDER BY usr_data.lastname ASC",
4770 $persons_array = array();
4773 $name = $this->lng->txt(
"anonymous");
4774 $fullname = $this->lng->txt(
"anonymous");
4778 if (strlen(
$row[
"firstname"].
$row[
"lastname"].
$row[
"title"]) == 0)
4780 $name = $this->lng->txt(
"deleted_user");
4781 $fullname = $this->lng->txt(
"deleted_user");
4782 $login = $this->lng->txt(
"unknown");
4786 $login = $row[
"login"];
4787 if ($row[
"user_fi"] == ANONYMOUS_USER_ID)
4789 $name = $this->lng->txt(
"anonymous");
4790 $fullname = $this->lng->txt(
"anonymous");
4794 $name = trim($row[
"lastname"] .
", " . $row[
"firstname"] .
" " . $row[
"title"]);
4795 $fullname = trim($row[
"title"] .
" " . $row[
"firstname"] .
" " . $row[
"lastname"]);
4799 $persons_array[
$row[
"active_id"]] = array(
4801 "fullname" => $fullname,
4805 return $persons_array;
4817 $result = $ilDB->queryF(
"SELECT tst_active.active_id, usr_data.firstname, usr_data.lastname, usr_data.title FROM tst_active LEFT JOIN usr_data ON tst_active.user_fi = usr_data.usr_id WHERE tst_active.test_fi = %s ORDER BY usr_data.lastname " . strtoupper($name_sort_order),
4821 $persons_array = array();
4826 $persons_array[
$row[
"active_id"]] = $this->lng->txt(
"anonymous");
4830 if (strlen(
$row[
"firstname"].
$row[
"lastname"].
$row[
"title"]) == 0)
4832 $persons_array[$row[
"active_id"]] = $this->lng->txt(
"deleted_user");
4836 if ($row[
"user_fi"] == ANONYMOUS_USER_ID)
4838 $persons_array[$row[
"active_id"]] = $row[
"lastname"];
4842 $persons_array[$row[
"active_id"]] = trim($row[
"lastname"] .
", " . $row[
"firstname"] .
" " . $row[
"title"]);
4847 return $persons_array;
4859 $result = $ilDB->queryF(
"SELECT tst_active.active_id, usr_data.login, usr_data.firstname, usr_data.lastname, usr_data.title FROM tst_active LEFT JOIN usr_data ON tst_active.user_fi = usr_data.usr_id WHERE tst_active.test_fi = %s ORDER BY usr_data.lastname " . strtoupper($name_sort_order),
4863 $persons_array = array();
4868 $persons_array[
$row[
"active_id"]] = array(
"name" => $this->lng->txt(
"anonymous"));
4872 if (strlen(
$row[
"firstname"].
$row[
"lastname"].
$row[
"title"]) == 0)
4874 $persons_array[$row[
"active_id"]] = array(
"name" => $this->lng->txt(
"deleted_user"));
4878 if ($row[
"user_fi"] == ANONYMOUS_USER_ID)
4880 $persons_array[$row[
"active_id"]] = array(
"name" => $row[
"lastname"]);
4884 $persons_array[$row[
"active_id"]] = array(
"name" => trim($row[
"lastname"] .
", " . $row[
"firstname"] .
" " . $row[
"title"]),
"login" => $row[
"login"]);
4889 return $persons_array;
4902 $result = $ilDB->queryF(
"SELECT COUNT(active_id) total FROM tst_active WHERE test_fi = %s AND submitted = %s",
4903 array(
'integer',
'integer'),
4907 return $row[
"total"];
4922 $result = $ilDB->queryF(
"SELECT tst_test_rnd_qst.sequence, tst_test_rnd_qst.question_fi, " .
4923 "tst_test_rnd_qst.pass, qpl_questions.points " .
4924 "FROM tst_test_rnd_qst, qpl_questions " .
4925 "WHERE tst_test_rnd_qst.question_fi = qpl_questions.question_id " .
4926 "AND tst_test_rnd_qst.active_fi = %s ORDER BY tst_test_rnd_qst.sequence",
4933 $result = $ilDB->queryF(
"SELECT tst_test_question.sequence, tst_test_question.question_fi, " .
4934 "qpl_questions.points " .
4935 "FROM tst_test_question, tst_active, qpl_questions " .
4936 "WHERE tst_test_question.question_fi = qpl_questions.question_id " .
4937 "AND tst_active.active_id = %s AND tst_active.test_fi = tst_test_question.test_fi",
4947 array_push($qtest,
$row);
4965 $result = $ilDB->queryF(
"SELECT tst_test_rnd_qst.sequence, tst_test_rnd_qst.question_fi, " .
4966 "qpl_questions.points " .
4967 "FROM tst_test_rnd_qst, qpl_questions " .
4968 "WHERE tst_test_rnd_qst.question_fi = qpl_questions.question_id " .
4969 "AND tst_test_rnd_qst.active_fi = %s AND tst_test_rnd_qst.pass = %s " .
4970 "ORDER BY tst_test_rnd_qst.sequence",
4971 array(
'integer',
'integer'),
4972 array($active_id,
$pass)
4977 $result = $ilDB->queryF(
"SELECT tst_test_question.sequence, tst_test_question.question_fi, " .
4978 "qpl_questions.points " .
4979 "FROM tst_test_question, tst_active, qpl_questions " .
4980 "WHERE tst_test_question.question_fi = qpl_questions.question_id " .
4981 "AND tst_active.active_id = %s AND tst_active.test_fi = tst_test_question.test_fi",
4991 array_push($qpass,
$row);
4997 function getUnfilteredEvaluationData()
5002 $ilDB = $DIC->database();
5004 include_once
"./Modules/Test/classes/class.ilTestEvaluationPassData.php";
5005 include_once
"./Modules/Test/classes/class.ilTestEvaluationUserData.php";
5006 include_once
"./Modules/Test/classes/class.ilTestEvaluationData.php";
5011 SELECT tst_test_result.*, 5012 qpl_questions.original_id, 5013 qpl_questions.title questiontitle, 5014 qpl_questions.points maxpoints 5016 FROM tst_test_result, qpl_questions, tst_active 5018 WHERE tst_active.active_id = tst_test_result.active_fi 5019 AND qpl_questions.question_id = tst_test_result.question_fi 5020 AND tst_active.test_fi = %s 5022 ORDER BY tst_active.active_id ASC, tst_test_result.pass ASC, tst_test_result.tstamp DESC 5036 $participantObject =
$data->getParticipant(
$row[
"active_fi"]);
5043 $passObject = $participantObject->getPass(
$row[
"pass"]);
5050 $passObject->addAnsweredQuestion(
5055 foreach( array_keys(
$data->getParticipants()) as $active_id )
5059 for( $testpass = 0; $testpass <=
$data->getParticipant($active_id)->getLastPass(); $testpass++ )
5062 $result =
$ilDB->queryF(
"SELECT tst_test_rnd_qst.sequence, tst_test_rnd_qst.question_fi, qpl_questions.original_id, " .
5063 "tst_test_rnd_qst.pass, qpl_questions.points, qpl_questions.title " .
5064 "FROM tst_test_rnd_qst, qpl_questions " .
5065 "WHERE tst_test_rnd_qst.question_fi = qpl_questions.question_id " .
5066 "AND tst_test_rnd_qst.pass = %s " .
5067 "AND tst_test_rnd_qst.active_fi = %s ORDER BY tst_test_rnd_qst.sequence",
5068 array(
'integer',
'integer'),
5069 array($testpass, $active_id)
5075 $tpass = array_key_exists(
"pass",
$row) ?
$row[
"pass"] : 0;
5076 $data->getParticipant($active_id)->addQuestion(
$row[
"original_id"],
$row[
"question_fi"],
$row[
"points"],
$row[
"sequence"], $tpass);
5077 $data->addQuestionTitle(
$row[
"question_fi"],
$row[
"title"]);
5084 require_once
'Modules/Test/classes/class.ilTestSequenceFactory.php';
5085 require_once
'Modules/Test/classes/class.ilObjTestDynamicQuestionSetConfig.php';
5086 require_once
'Modules/Test/classes/class.ilTestDynamicQuestionSetFilterSelection.php';
5088 $lastPass =
$data->getParticipant($active_id)->getLastPass();
5089 for($testpass = 0; $testpass <= $lastPass; $testpass++)
5091 require_once
'Modules/Test/classes/class.ilObjTestDynamicQuestionSetConfig.php';
5093 $DIC->repositoryTree(), $DIC->database(), $DIC[
'ilPluginAdmin'], $this
5097 require_once
'Modules/Test/classes/class.ilTestSequenceFactory.php';
5098 $testSequenceFactory =
new ilTestSequenceFactory($DIC->database(), $DIC->language(), $DIC[
'ilPluginAdmin'], $this);
5099 $testSequence = $testSequenceFactory->getSequenceByActiveIdAndPass($active_id, $testpass);
5101 $testSequence->loadFromDb($dynamicQuestionSetConfig);
5104 $sequence = (array)$testSequence->getUserSequenceQuestions();
5106 $questionsIdsToRequest = array_diff(array_values($sequence), array_values($questionData));
5107 if(count($questionsIdsToRequest) > 0)
5109 $questionIdsCondition =
' ' . $DIC->database()->in(
'question_id', array_values($questionsIdsToRequest),
false,
'integer') .
' ';
5111 $res = $DIC->database()->queryF(
" 5114 WHERE {$questionIdsCondition}",
5118 while(
$row = $DIC->database()->fetchAssoc(
$res))
5120 $questionData[
$row[
'question_id']] =
$row;
5121 $data->addQuestionTitle($row[
'question_id'], $row[
'title']);
5125 foreach($sequence as $questionId)
5127 if(!isset($questionData[$questionId]))
5132 $row = $questionData[$questionId];
5134 $data->getParticipant(
5135 $active_id)->addQuestion(
$row[
'original_id'],
$row[
'question_id'],
$row[
'points'],
5143 $result =
$ilDB->queryF(
"SELECT tst_test_question.sequence, tst_test_question.question_fi, " .
5144 "qpl_questions.points, qpl_questions.title, qpl_questions.original_id " .
5145 "FROM tst_test_question, tst_active, qpl_questions " .
5146 "WHERE tst_test_question.question_fi = qpl_questions.question_id " .
5147 "AND tst_active.active_id = %s AND tst_active.test_fi = tst_test_question.test_fi ORDER BY tst_test_question.sequence",
5153 $questionsbysequence = array();
5157 $questionsbysequence[
$row[
"sequence"]] =
$row;
5160 $seqresult =
$ilDB->queryF(
"SELECT * FROM tst_sequence WHERE active_fi = %s",
5165 while ($seqrow =
$ilDB->fetchAssoc($seqresult))
5167 $questionsequence = unserialize($seqrow[
"sequence"]);
5168 foreach ($questionsequence as $sidx => $seq)
5170 $data->getParticipant($active_id)->addQuestion($questionsbysequence[$seq][
"original_id"], $questionsbysequence[$seq][
"question_fi"], $questionsbysequence[$seq][
"points"], $sidx + 1, $seqrow[
"pass"]);
5171 $data->addQuestionTitle($questionsbysequence[$seq][
"question_fi"], $questionsbysequence[$seq][
"title"]);
5183 foreach( array_keys(
$data->getParticipants()) as $active_id )
5185 $tstUserData =
$data->getParticipant($active_id);
5187 $percentage = $tstUserData->getReachedPointsInPercent();
5189 $obligationsAnswered = $tstUserData->areObligationsAnswered();
5191 $mark = $this->mark_schema->getMatchingMark($percentage);
5193 if (is_object($mark))
5195 $tstUserData->setMark($mark->getShortName());
5196 $tstUserData->setMarkOfficial($mark->getOfficialName());
5198 $tstUserData->setPassed(
5199 $mark->getPassed() && $tstUserData->areObligationsAnswered()
5206 $passed_array, $tstUserData->getReached(), $tstUserData->getMaxPoints()
5209 $tstUserData->setECTSMark($ects_mark);
5214 $tstUserData->setFirstVisit($visitingTime[
"firstvisit"]);
5215 $tstUserData->setLastVisit($visitingTime[
"lastvisit"]);
5231 $res = $ilDB->queryF(
" 5232 SELECT COUNT(qpl_questions.question_id) qcount, 5233 SUM(qpl_questions.points) qsum 5235 INNER JOIN tst_tests 5236 ON tst_tests.test_id = tst_active.test_fi 5237 INNER JOIN tst_dyn_quest_set_cfg 5238 ON tst_dyn_quest_set_cfg.test_fi = tst_tests.test_id 5239 INNER JOIN qpl_questions 5240 ON qpl_questions.obj_fi = tst_dyn_quest_set_cfg.source_qpl_fi 5241 AND qpl_questions.original_id IS NULL 5242 AND qpl_questions.complete = %s 5243 WHERE tst_active.active_id = %s 5245 array(
'integer',
'integer'),
5246 array(1, $active_id)
5253 $res = $ilDB->queryF(
" 5254 SELECT tst_test_rnd_qst.pass, 5255 COUNT(tst_test_rnd_qst.question_fi) qcount, 5256 SUM(qpl_questions.points) qsum 5258 FROM tst_test_rnd_qst, 5261 WHERE tst_test_rnd_qst.question_fi = qpl_questions.question_id 5262 AND tst_test_rnd_qst.active_fi = %s 5265 GROUP BY tst_test_rnd_qst.active_fi, 5266 tst_test_rnd_qst.pass 5268 array(
'integer',
'integer'),
5269 array($active_id,
$pass)
5276 $res = $ilDB->queryF(
" 5277 SELECT COUNT(tst_test_question.question_fi) qcount, 5278 SUM(qpl_questions.points) qsum 5280 FROM tst_test_question, 5284 WHERE tst_test_question.question_fi = qpl_questions.question_id 5285 AND tst_test_question.test_fi = tst_active.test_fi 5286 AND tst_active.active_id = %s 5288 GROUP BY tst_test_question.test_fi 5298 throw new ilTestException(
"not supported question set type: $questionSetType");
5303 if( is_array(
$row) )
5305 return array(
"count" =>
$row[
"qcount"],
"points" =>
$row[
"qsum"]);
5308 return array(
"count" => 0,
"points" => 0);
5313 include_once
"./Modules/Test/classes/class.ilTestEvaluationData.php";
5314 include_once
"./Modules/Test/classes/class.ilTestEvaluationPassData.php";
5315 include_once
"./Modules/Test/classes/class.ilTestEvaluationUserData.php";
5316 $data = $this->getUnfilteredEvaluationData();
5317 if ($withStatistics)
5319 $data->calculateStatistics();
5321 $data->setFilter($filterby, $filtertext);
5346 $result = $ilDB->queryF(
"SELECT usr_data.usr_id, usr_data.firstname, usr_data.lastname, usr_data.title, usr_data.login, " .
5347 "tst_test_result.*, qpl_questions.original_id, qpl_questions.title questiontitle, " .
5348 "qpl_questions.points maxpoints " .
5349 "FROM tst_test_result, qpl_questions, tst_active " .
5350 "LEFT JOIN usr_data ON tst_active.user_fi = usr_data.usr_id " .
5351 "WHERE tst_active.active_id = tst_test_result.active_fi " .
5352 "AND qpl_questions.question_id = tst_test_result.question_fi " .
5353 "AND tst_active.test_fi = %s " .
5354 "ORDER BY tst_active.active_id, tst_test_result.pass, tst_test_result.tstamp",
5358 $overview = array();
5361 if (!array_key_exists(
$row[
"active_fi"], $overview))
5363 $overview[
$row[
"active_fi"]] = array();
5364 $overview[$row[
"active_fi"]][
"firstname"] = $row[
"firstname"];
5365 $overview[$row[
"active_fi"]][
"lastname"] = $row[
"lastname"];
5366 $overview[$row[
"active_fi"]][
"title"] = $row[
"title"];
5367 $overview[$row[
"active_fi"]][
"login"] = $row[
"login"];
5368 $overview[$row[
"active_fi"]][
"usr_id"] = $row[
"usr_id"];
5369 $overview[$row[
"active_fi"]][
"started"] = $row[
"started"];
5370 $overview[$row[
"active_fi"]][
"finished"] = $row[
"finished"];
5372 if (!array_key_exists(
$row[
"pass"], $overview[
$row[
"active_fi"]]))
5374 $overview[$row[
"active_fi"]][$row[
"pass"]] = array();
5375 $overview[$row[
"active_fi"]][$row[
"pass"]][
"reached"] = 0;
5376 $overview[$row[
"active_fi"]][$row[
"pass"]][
"maxpoints"] = $row[
"maxpoints"];
5378 array_push($overview[$row[
"active_fi"]][$row[
"pass"]], $row);
5379 $overview[$row[
"active_fi"]][$row[
"pass"]][
"reached"] += $row[
"points"];
5395 $result = $ilDB->queryF(
"SELECT usr_data.usr_id, usr_data.firstname, usr_data.lastname, usr_data.title, usr_data.login, " .
5396 "tst_test_result.*, qpl_questions.original_id, qpl_questions.title questiontitle, " .
5397 "qpl_questions.points maxpoints " .
5398 "FROM tst_test_result, qpl_questions, tst_active " .
5399 "LEFT JOIN usr_data ON tst_active.user_fi = usr_data.usr_id " .
5400 "WHERE tst_active.active_id = tst_test_result.active_fi " .
5401 "AND qpl_questions.question_id = tst_test_result.question_fi " .
5402 "AND tst_active.test_fi = %s AND tst_active.active_id = %s" .
5403 "ORDER BY tst_active.active_id, tst_test_result.pass, tst_test_result.tstamp",
5404 array(
'integer',
'integer'),
5407 $overview = array();
5410 if (!array_key_exists(
$row[
"active_fi"], $overview))
5412 $overview[
$row[
"active_fi"]] = array();
5413 $overview[$row[
"active_fi"]][
"firstname"] = $row[
"firstname"];
5414 $overview[$row[
"active_fi"]][
"lastname"] = $row[
"lastname"];
5415 $overview[$row[
"active_fi"]][
"title"] = $row[
"title"];
5416 $overview[$row[
"active_fi"]][
"login"] = $row[
"login"];
5417 $overview[$row[
"active_fi"]][
"usr_id"] = $row[
"usr_id"];
5418 $overview[$row[
"active_fi"]][
"started"] = $row[
"started"];
5419 $overview[$row[
"active_fi"]][
"finished"] = $row[
"finished"];
5421 if (!array_key_exists(
$row[
"pass"], $overview[
$row[
"active_fi"]]))
5423 $overview[$row[
"active_fi"]][$row[
"pass"]] = array();
5424 $overview[$row[
"active_fi"]][$row[
"pass"]][
"reached"] = 0;
5425 $overview[$row[
"active_fi"]][$row[
"pass"]][
"maxpoints"] = $row[
"maxpoints"];
5427 array_push($overview[$row[
"active_fi"]][$row[
"pass"]], $row);
5428 $overview[$row[
"active_fi"]][$row[
"pass"]][
"reached"] += $row[
"points"];
5447 if (strlen($firstname.$lastname.$title) == 0)
5449 $name = $this->lng->txt(
"deleted_user");
5453 if ($user_id == ANONYMOUS_USER_ID)
5459 $name = trim($lastname .
", " . $firstname .
" " .
$title);
5463 $name = $this->lng->txt(
"anonymous");
5485 if (strlen($firstname.$lastname.$title) == 0)
5487 $name = $lng->txt(
"deleted_user");
5491 if ($user_id == ANONYMOUS_USER_ID)
5497 $name = trim($lastname .
", " . $firstname .
" " .
$title);
5501 $name = $lng->txt(
"anonymous");
5517 $result = $ilDB->queryF(
"SELECT tst_times.* FROM tst_active, tst_times WHERE tst_active.test_fi = %s AND tst_active.active_id = tst_times.active_fi",
5524 preg_match(
"/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/",
$row->started, $matches);
5525 $epoch_1 = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
5526 preg_match(
"/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/",
$row->finished, $matches);
5527 $epoch_2 = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
5528 $times[
$row->active_fi] += ($epoch_2 - $epoch_1);
5532 foreach ($times as $key => $value)
5534 $max_time += $value;
5539 $average_time = round($max_time / $counter);
5545 return $average_time;
5554 function &
getAvailableQuestionpools($use_object_id =
false, $equal_points =
false, $could_be_offline =
false, $show_path = FALSE, $with_questioncount = FALSE, $permission =
"read")
5556 include_once
"./Modules/TestQuestionPool/classes/class.ilObjQuestionPool.php";
5568 $time_in_seconds = 0;
5569 foreach ($this->questions as $question_id)
5572 $est_time = $question->getEstimatedWorkingTime();
5573 $time_in_seconds += $est_time[
"h"] * 3600 + $est_time[
"m"] * 60 + $est_time[
"s"];
5575 $hours = (int)($time_in_seconds / 3600) ;
5576 $time_in_seconds = $time_in_seconds - ($hours * 3600);
5577 $minutes = (int)($time_in_seconds / 60);
5578 $time_in_seconds = $time_in_seconds - ($minutes * 60);
5579 $result = array(
"hh" => $hours,
"mm" => $minutes,
"ss" => $time_in_seconds);
5591 return CLIENT_WEB_DIR .
"/assessment/" . $this->
getId() .
"/images/";
5602 include_once
"./Services/Utilities/classes/class.ilUtil.php";
5617 if ((!$question_type) and ($question_id > 0))
5622 if (!strlen($question_type))
return null;
5624 include_once
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
5628 $question =
new $question_type_gui();
5632 if ($question_id > 0)
5634 $question->object->loadFromDb($question_id);
5639 $question->object->feedbackOBJ =
new $feedbackObjectClassname($question->object, $ilCtrl, $ilDB, $lng);
5641 $assSettings =
new ilSetting(
'assessment');
5642 require_once
'Modules/TestQuestionPool/classes/class.ilAssQuestionProcessLockerFactory.php';
5644 $processLockerFactory->setQuestionId($question->object->getId());
5645 $processLockerFactory->setUserId($ilUser->getId());
5646 include_once (
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
5648 $question->object->setProcessLocker($processLockerFactory->getLocker());
5665 if (strcmp($question_id,
"") != 0)
5667 include_once
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
5682 $this->questions = array_values($this->questions);
5683 $array_pos = array_search($target_index, $this->questions);
5684 if ($insert_mode == 0)
5686 $part1 = array_slice($this->questions, 0, $array_pos);
5687 $part2 = array_slice($this->questions, $array_pos);
5689 else if ($insert_mode == 1)
5691 $part1 = array_slice($this->questions, 0, $array_pos + 1);
5692 $part2 = array_slice($this->questions, $array_pos + 1);
5694 foreach ($move_questions as $question_id)
5696 if (!(array_search($question_id, $part1) === FALSE))
5698 unset($part1[array_search($question_id, $part1)]);
5700 if (!(array_search($question_id, $part2) === FALSE))
5702 unset($part2[array_search($question_id, $part2)]);
5705 $part1 = array_values($part1);
5706 $part2 = array_values($part2);
5707 $new_array = array_values(array_merge($part1, $move_questions, $part2));
5708 $this->questions = array();
5710 foreach ($new_array as $question_id)
5712 $this->questions[$counter] = $question_id;
5730 if (preg_match(
"/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/", $this->
getStartingTime(), $matches))
5732 $epoch_time = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
5734 if ($now < $epoch_time)
5755 if (preg_match(
"/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/", $this->
getEndingTime(), $matches))
5757 $epoch_time = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
5759 if ($now > $epoch_time)
5779 include_once
"./Modules/TestQuestionPool/classes/class.ilObjQuestionPool.php";
5782 if (count($available_pools))
5784 $available =
" AND " . $ilDB->in(
'qpl_questions.obj_fi', $available_pools,
false,
'integer');
5792 $available .=
" AND qpl_questions.complete = " . $ilDB->quote(
"1",
'text');
5796 if (is_array($arrFilter))
5798 if (array_key_exists(
'title', $arrFilter) && strlen($arrFilter[
'title']))
5800 $where .=
" AND " . $ilDB->like(
'qpl_questions.title',
'text',
"%%" . $arrFilter[
'title'] .
"%%");
5802 if (array_key_exists(
'description', $arrFilter) && strlen($arrFilter[
'description']))
5804 $where .=
" AND " . $ilDB->like(
'qpl_questions.description',
'text',
"%%" . $arrFilter[
'description'] .
"%%");
5806 if (array_key_exists(
'author', $arrFilter) && strlen($arrFilter[
'author']))
5808 $where .=
" AND " . $ilDB->like(
'qpl_questions.author',
'text',
"%%" . $arrFilter[
'author'] .
"%%");
5810 if (array_key_exists(
'type', $arrFilter) && strlen($arrFilter[
'type']))
5812 $where .=
" AND qpl_qst_type.type_tag = " . $ilDB->quote($arrFilter[
'type'],
'text');
5814 if (array_key_exists(
'qpl', $arrFilter) && strlen($arrFilter[
'qpl']))
5816 $where .=
" AND " . $ilDB->like(
'object_data.title',
'text',
"%%" . $arrFilter[
'qpl'] .
"%%");
5821 $original_clause =
" qpl_questions.original_id IS NULL";
5822 if (count($original_ids))
5824 $original_clause =
" qpl_questions.original_id IS NULL AND " . $ilDB->in(
'qpl_questions.question_id', $original_ids,
true,
'integer');
5827 $query_result = $ilDB->query(
5828 "SELECT qpl_questions.*, qpl_questions.tstamp, qpl_qst_type.type_tag, qpl_qst_type.plugin, object_data.title qpl " .
5829 "FROM qpl_questions, qpl_qst_type, object_data WHERE $original_clause $available AND " .
5830 "object_data.obj_id = qpl_questions.obj_fi AND qpl_questions.tstamp > 0 AND " .
5831 "qpl_questions.question_type_fi = qpl_qst_type.question_type_id$where");
5834 if ($query_result->numRows())
5836 while (
$row = $ilDB->fetchAssoc($query_result))
5838 $row[
'ttype'] = $types[
$row[
'type_tag']];
5843 array_push($rows, $row);
5848 array_push($rows, $row);
5860 global $ilPluginAdmin;
5862 $lng->loadLanguageModule(
"assessment");
5863 $result = $ilDB->query(
"SELECT * FROM qpl_qst_type");
5867 if (
$row[
"plugin"] == 0)
5869 $types[
$row[
'type_tag']] = $lng->txt($row[
"type_tag"]);
5873 $pl_names = $ilPluginAdmin->getActivePluginsForSlot(
IL_COMP_MODULE,
"TestQuestionPool",
"qst");
5874 foreach ($pl_names as $pl_name)
5877 if (strcmp($pl->getQuestionType(),
$row[
"type_tag"]) == 0)
5879 $types[
$row[
'type_tag']] = $pl->getQuestionTypeTranslation();
5900 foreach ($assessment->objectives as $objectives)
5902 foreach ($objectives->materials as $material)
5919 foreach ($assessment->assessmentcontrol as $assessmentcontrol)
5921 switch ($assessmentcontrol->getSolutionswitch())
5937 foreach ($assessment->qtimetadata as $metadata)
5939 switch ($metadata[
"label"])
5943 $type = $metadata[
"entry"];
5964 case "sequence_settings":
5967 case "solution_details":
5970 case "print_bs_with_res":
5980 $this->
setKiosk($metadata[
"entry"]);
5982 case "showfinalstatement":
5995 case "highscore_enabled":
5999 case "highscore_anon":
6003 case "highscore_achieved_ts":
6007 case "highscore_score":
6011 case "highscore_percentage":
6015 case "highscore_hints":
6019 case "highscore_wtime":
6023 case "highscore_own_table":
6027 case "highscore_top_table":
6031 case "highscore_top_num":
6035 case "hide_previous_results":
6036 if ($metadata[
"entry"] == 0)
6045 case "use_previous_answers":
6048 case "answer_feedback":
6051 case "hide_title_points":
6054 case "title_output":
6057 case "question_set_type":
6061 if( $metadata[
"entry"] )
6070 case "results_presentation":
6073 case "reset_processing_time":
6076 case "instant_verification":
6079 case "answer_feedback_points":
6091 case "fixed_participants":
6094 case "score_reporting":
6097 case "shuffle_questions":
6100 case "count_system":
6106 case "mailnotification":
6112 case "exportsettings":
6115 case "score_cutting":
6122 case "allowedUsers":
6126 case "allowedUsersTimeGap":
6129 case "pass_scoring":
6132 case "show_summary":
6135 case "reporting_date":
6136 $iso8601period = $metadata[
"entry"];
6137 if (preg_match(
"/P(\d+)Y(\d+)M(\d+)DT(\d+)H(\d+)M(\d+)S/", $iso8601period, $matches))
6139 $this->
setReportingDate(sprintf(
"%02d%02d%02d%02d%02d%02d", $matches[1], $matches[2], $matches[3], $matches[4], $matches[5], $matches[6]));
6142 case 'enable_processing_time':
6145 case "processing_time":
6148 case "starting_time":
6149 $iso8601period = $metadata[
"entry"];
6150 if (preg_match(
"/P(\d+)Y(\d+)M(\d+)DT(\d+)H(\d+)M(\d+)S/", $iso8601period, $matches))
6152 $this->
setStartingTime(sprintf(
"%02d%02d%02d%02d%02d%02d", $matches[1], $matches[2], $matches[3], $matches[4], $matches[5], $matches[6]));
6157 $iso8601period = $metadata[
"entry"];
6158 if (preg_match(
"/P(\d+)Y(\d+)M(\d+)DT(\d+)H(\d+)M(\d+)S/", $iso8601period, $matches))
6160 $this->
setEndingTime(sprintf(
"%02d%02d%02d%02d%02d%02d", $matches[1], $matches[2], $matches[3], $matches[4], $matches[5], $matches[6]));
6164 case "enable_examview":
6167 case 'show_examview_html':
6170 case 'show_examview_pdf':
6173 case 'redirection_mode':
6176 case 'redirection_url':
6179 case 'examid_in_kiosk':
6180 case 'examid_in_test_pass':
6183 case 'show_exam_id':
6184 case 'examid_in_test_res':
6187 case 'enable_archiving':
6190 case 'sign_submission':
6193 case 'char_selector_availability':
6196 case 'char_selector_definition':
6199 case 'skill_service':
6202 case 'result_tax_filters':
6203 $this->
setResultFilterTaxIds(strlen($metadata[
'entry']) ? unserialize($metadata[
'entry']) : array());
6205 case 'show_grading_status':
6208 case 'show_grading_mark':
6211 case 'activation_limited':
6214 case 'activation_start_time':
6217 case 'activation_end_time':
6220 case 'activation_visibility':
6226 case 'autosave_ival':
6229 case 'offer_question_hints':
6232 case 'instant_feedback_specific':
6235 case 'instant_feedback_answer_fixation':
6238 case 'obligations_enabled':
6242 if (preg_match(
"/mark_step_\d+/", $metadata[
"label"]))
6244 $xmlmark = $metadata[
"entry"];
6245 preg_match(
"/<short>(.*?)<\/short>/", $xmlmark, $matches);
6246 $mark_short = $matches[1];
6247 preg_match(
"/<official>(.*?)<\/official>/", $xmlmark, $matches);
6248 $mark_official = $matches[1];
6249 preg_match(
"/<percentage>(.*?)<\/percentage>/", $xmlmark, $matches);
6250 $mark_percentage = $matches[1];
6251 preg_match(
"/<passed>(.*?)<\/passed>/", $xmlmark, $matches);
6252 $mark_passed = $matches[1];
6253 $this->mark_schema->addMarkStep($mark_short, $mark_official, $mark_percentage, $mark_passed);
6257 if (is_array(
$_SESSION[
"import_mob_xhtml"]))
6259 include_once
"./Services/MediaObjects/classes/class.ilObjMediaObject.php";
6260 include_once
"./Services/RTE/classes/class.ilRTE.php";
6261 include_once
"./Modules/TestQuestionPool/classes/class.ilObjQuestionPool.php";
6262 foreach (
$_SESSION[
"import_mob_xhtml"] as $mob)
6265 if (file_exists($importfile))
6275 $ilLog->write(
"Error: Could not open XHTML mob file for test introduction during test import. File $importfile does not exist!");
6289 include_once(
"./Services/Xml/classes/class.ilXmlWriter.php");
6293 $a_xml_writer->xmlSetDtdDef(
"<!DOCTYPE questestinterop SYSTEM \"ims_qtiasiv1p2p1.dtd\">");
6294 $a_xml_writer->xmlStartTag(
"questestinterop");
6297 "ident" =>
"il_".IL_INST_ID.
"_tst_".$this->getTestId(),
6300 $a_xml_writer->xmlStartTag(
"assessment", $attrs);
6302 $a_xml_writer->xmlElement(
"qticomment", NULL, $this->
getDescription());
6305 if ($this->enable_processing_time)
6307 preg_match(
"/(\d+):(\d+):(\d+)/", $this->processing_time, $matches);
6308 $a_xml_writer->xmlElement(
"duration", NULL, sprintf(
"P0Y0M0DT%dH%dM%dS", $matches[1], $matches[2], $matches[3]));
6312 $a_xml_writer->xmlStartTag(
"qtimetadata");
6313 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6314 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"ILIAS_VERSION");
6315 $a_xml_writer->xmlElement(
"fieldentry", NULL, $this->
ilias->getSetting(
"ilias_version"));
6316 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6319 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6320 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"anonymity");
6321 $a_xml_writer->xmlElement(
"fieldentry", NULL, sprintf(
"%d", $this->
getAnonymity()));
6322 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6325 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6326 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"question_set_type");
6328 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6331 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6332 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"sequence_settings");
6334 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6337 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6338 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"author");
6339 $a_xml_writer->xmlElement(
"fieldentry", NULL, $this->
getAuthor());
6340 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6343 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6344 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"reset_processing_time");
6346 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6349 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6350 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"count_system");
6351 $a_xml_writer->xmlElement(
"fieldentry", NULL, $this->
getCountSystem());
6352 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6355 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6356 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"mc_scoring");
6357 $a_xml_writer->xmlElement(
"fieldentry", NULL, $this->
getMCScoring());
6358 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6361 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6362 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"score_cutting");
6363 $a_xml_writer->xmlElement(
"fieldentry", NULL, $this->
getScoreCutting());
6364 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6367 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6368 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"password");
6369 $a_xml_writer->xmlElement(
"fieldentry", NULL, $this->
getPassword());
6370 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6373 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6374 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"allowedUsers");
6375 $a_xml_writer->xmlElement(
"fieldentry", NULL, $this->
getAllowedUsers());
6376 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6379 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6380 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"allowedUsersTimeGap");
6382 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6385 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6386 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"pass_scoring");
6387 $a_xml_writer->xmlElement(
"fieldentry", NULL, $this->
getPassScoring());
6388 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6393 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6394 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"reporting_date");
6395 preg_match(
"/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/", $this->reporting_date, $matches);
6396 $a_xml_writer->xmlElement(
"fieldentry", NULL, sprintf(
"P%dY%dM%dDT%dH%dM%dS", $matches[1], $matches[2], $matches[3], $matches[4], $matches[5], $matches[6]));
6397 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6400 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6401 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"nr_of_tries");
6402 $a_xml_writer->xmlElement(
"fieldentry", NULL, sprintf(
"%d", $this->
getNrOfTries()));
6403 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6406 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6407 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"kiosk");
6408 $a_xml_writer->xmlElement(
"fieldentry", NULL, sprintf(
"%d", $this->
getKiosk()));
6409 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6413 $a_xml_writer->xmlStartTag(
'qtimetadatafield');
6414 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"redirection_mode");
6416 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6419 $a_xml_writer->xmlStartTag(
'qtimetadatafield');
6420 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"redirection_url");
6422 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6425 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6426 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"use_previous_answers");
6428 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6431 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6432 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"title_output");
6433 $a_xml_writer->xmlElement(
"fieldentry", NULL, sprintf(
"%d", $this->
getTitleOutput()));
6434 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6437 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6438 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"results_presentation");
6440 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6443 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6444 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"examid_in_test_pass");
6446 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6449 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6450 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"examid_in_test_res");
6452 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6455 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6456 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"show_summary");
6458 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6461 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6462 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"score_reporting");
6463 $a_xml_writer->xmlElement(
"fieldentry", NULL, sprintf(
"%d", $this->
getScoreReporting()));
6464 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6466 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6467 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"solution_details");
6469 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6470 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6471 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"print_bs_with_res");
6473 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6476 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6477 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"instant_verification");
6479 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6482 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6483 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"answer_feedback");
6484 $a_xml_writer->xmlElement(
"fieldentry", NULL, sprintf(
"%d", $this->
getAnswerFeedback()));
6485 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6488 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6489 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"answer_feedback_points");
6491 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6494 $highscore_metadata = array(
6506 foreach($highscore_metadata as $label =>
$data)
6508 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6509 $a_xml_writer->xmlElement(
"fieldlabel", NULL, $label);
6510 $a_xml_writer->xmlElement(
"fieldentry", NULL, sprintf(
"%d",
$data[
'value']));
6511 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6515 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6516 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"show_cancel");
6517 $a_xml_writer->xmlElement(
"fieldentry", NULL, sprintf(
"%d", $this->
getShowCancel()));
6518 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6521 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6522 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"show_marker");
6523 $a_xml_writer->xmlElement(
"fieldentry", NULL, sprintf(
"%d", $this->
getShowMarker()));
6524 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6527 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6528 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"fixed_participants");
6530 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6533 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6534 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"showfinalstatement");
6535 $a_xml_writer->xmlElement(
"fieldentry", NULL, sprintf(
"%d", (($this->
getShowFinalStatement()) ?
"1" :
"0")));
6536 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6539 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6540 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"showinfo");
6541 $a_xml_writer->xmlElement(
"fieldentry", NULL, sprintf(
"%d", (($this->
getShowInfo()) ?
"1" :
"0")));
6542 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6545 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6546 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"mailnotification");
6548 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6551 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6552 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"mailnottype");
6554 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6557 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6558 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"exportsettings");
6560 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6563 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6564 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"forcejs");
6565 $a_xml_writer->xmlElement(
"fieldentry", NULL, sprintf(
"%d", (($this->
getForceJS()) ?
"1" :
"0")));
6566 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6569 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6570 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"customstyle");
6571 $a_xml_writer->xmlElement(
"fieldentry", NULL, $this->
getCustomStyle());
6572 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6575 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6576 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"shuffle_questions");
6577 $a_xml_writer->xmlElement(
"fieldentry", NULL, sprintf(
"%d", $this->
getShuffleQuestions()));
6578 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6581 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6582 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"processing_time");
6584 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6587 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6588 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"enable_examview");
6590 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6593 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6594 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"show_examview_html");
6596 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6599 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6600 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"show_examview_pdf");
6602 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6605 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6606 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"enable_archiving");
6608 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6611 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6612 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"sign_submission");
6614 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6617 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6618 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"char_selector_availability");
6620 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6623 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6624 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"char_selector_definition");
6626 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6629 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6630 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"skill_service");
6632 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6635 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6636 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"result_tax_filters");
6638 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6641 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6642 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"show_grading_status");
6644 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6647 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6648 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"show_grading_mark");
6650 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6656 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6657 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"starting_time");
6658 preg_match(
"/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/", $this->starting_time, $matches);
6659 $a_xml_writer->xmlElement(
"fieldentry", NULL, sprintf(
"P%dY%dM%dDT%dH%dM%dS", $matches[1], $matches[2], $matches[3], $matches[4], $matches[5], $matches[6]));
6660 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6665 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6666 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"ending_time");
6667 preg_match(
"/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/", $this->ending_time, $matches);
6668 $a_xml_writer->xmlElement(
"fieldentry", NULL, sprintf(
"P%dY%dM%dDT%dH%dM%dS", $matches[1], $matches[2], $matches[3], $matches[4], $matches[5], $matches[6]));
6669 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6674 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6675 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"activation_limited");
6677 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6680 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6681 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"activation_start_time");
6683 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6686 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6687 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"activation_end_time");
6689 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6692 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6693 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"activation_visibility");
6695 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6698 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6699 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"autosave");
6700 $a_xml_writer->xmlElement(
"fieldentry", NULL, (
int)$this->
getAutosave());
6701 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6704 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6705 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"autosave_ival");
6706 $a_xml_writer->xmlElement(
"fieldentry", NULL, (
int)$this->
getAutosaveIval());
6707 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6710 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6711 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"offer_question_hints");
6713 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6716 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6717 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"instant_feedback_specific");
6719 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6722 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6723 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"instant_feedback_answer_fixation");
6725 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6728 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6729 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"obligations_enabled");
6731 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6734 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6735 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"enable_processing_time");
6737 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6739 foreach ($this->mark_schema->mark_steps as $index => $mark)
6742 $a_xml_writer->xmlStartTag(
"qtimetadatafield");
6743 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"mark_step_$index");
6744 $a_xml_writer->xmlElement(
"fieldentry", NULL, sprintf(
6745 "<short>%s</short><official>%s</official><percentage>%.2f</percentage><passed>%d</passed>",
6746 $mark->getShortName(), $mark->getOfficialName(), $mark->getMinimumLevel(), $mark->getPassed()
6748 $a_xml_writer->xmlEndTag(
"qtimetadatafield");
6750 $a_xml_writer->xmlEndTag(
"qtimetadata");
6753 $a_xml_writer->xmlStartTag(
"objectives");
6755 $a_xml_writer->xmlEndTag(
"objectives");
6761 "solutionswitch" =>
"Yes" 6768 $a_xml_writer->xmlElement(
"assessmentcontrol", $attrs, NULL);
6773 $a_xml_writer->xmlStartTag(
"presentation_material");
6774 $a_xml_writer->xmlStartTag(
"flow_mat");
6776 $a_xml_writer->xmlEndTag(
"flow_mat");
6777 $a_xml_writer->xmlEndTag(
"presentation_material");
6783 $a_xml_writer->xmlElement(
"section", $attrs, NULL);
6784 $a_xml_writer->xmlEndTag(
"assessment");
6785 $a_xml_writer->xmlEndTag(
"questestinterop");
6787 $xml = $a_xml_writer->xmlDumpMem(FALSE);
6789 foreach ($this->questions as $question_id)
6792 $qti_question = $question->toXML(
false);
6793 $qti_question = preg_replace(
"/<questestinterop>/",
"", $qti_question);
6794 $qti_question = preg_replace(
"/<\/questestinterop>/",
"", $qti_question);
6795 if (strpos($xml,
"</section>") !==
false)
6797 $xml = str_replace(
"</section>",
"$qti_question</section>", $xml);
6801 $xml = str_replace(
"<section ident=\"1\"/>",
"<section ident=\"1\">\n$qti_question</section>", $xml);
6817 $this->mob_ids = array();
6818 $this->file_ids = array();
6821 $attrs[
"Type"] =
"Test";
6822 $a_xml_writer->xmlStartTag(
"ContentObject", $attrs);
6828 $expLog->write(date(
"[y-m-d H:i:s] ").
"Start Export Page Objects");
6829 $ilBench->start(
"ContentObjectExport",
"exportPageObjects");
6831 $ilBench->stop(
"ContentObjectExport",
"exportPageObjects");
6832 $expLog->write(date(
"[y-m-d H:i:s] ").
"Finished Export Page Objects");
6835 $expLog->write(date(
"[y-m-d H:i:s] ").
"Start Export Media Objects");
6836 $ilBench->start(
"ContentObjectExport",
"exportMediaObjects");
6838 $ilBench->stop(
"ContentObjectExport",
"exportMediaObjects");
6839 $expLog->write(date(
"[y-m-d H:i:s] ").
"Finished Export Media Objects");
6842 $expLog->write(date(
"[y-m-d H:i:s] ").
"Start Export File Items");
6843 $ilBench->start(
"ContentObjectExport",
"exportFileItems");
6845 $ilBench->stop(
"ContentObjectExport",
"exportFileItems");
6846 $expLog->write(date(
"[y-m-d H:i:s] ").
"Finished Export File Items");
6848 $a_xml_writer->xmlEndTag(
"ContentObject");
6859 include_once
"./Services/MetaData/classes/class.ilMD2XML.php";
6861 $md2xml->setExportMode(
true);
6862 $md2xml->startExport();
6863 $a_xml_writer->appendXML($md2xml->getXML());
6873 if ($a_tag ==
"Identifier" && $a_param ==
"Entry")
6875 include_once
"./Services/Utilities/classes/class.ilUtil.php";
6893 include_once
"./Modules/LearningModule/classes/class.ilLMPageObject.php";
6895 foreach ($this->questions as $question_id)
6897 $ilBench->start(
"ContentObjectExport",
"exportPageObject");
6898 $expLog->write(date(
"[y-m-d H:i:s] ").
"Page Object ".$question_id);
6901 $a_xml_writer->xmlStartTag(
"PageObject", $attrs);
6905 $ilBench->start(
"ContentObjectExport",
"exportPageObject_XML");
6906 include_once
"./Modules/TestQuestionPool/classes/class.ilAssQuestionPage.php";
6908 $page_object->buildDom();
6909 $page_object->insertInstIntoIDs($a_inst);
6910 $mob_ids = $page_object->collectMediaObjects(
false);
6911 require_once
'Services/COPage/classes/class.ilPCFileList.php';
6913 $xml = $page_object->getXMLFromDom(
false,
false,
false,
"",
true);
6914 $xml = str_replace(
"&",
"&", $xml);
6915 $a_xml_writer->appendXML($xml);
6916 $page_object->freeDom();
6917 unset ($page_object);
6919 $ilBench->stop(
"ContentObjectExport",
"exportPageObject_XML");
6922 $ilBench->start(
"ContentObjectExport",
"exportPageObject_CollectMedia");
6924 foreach($mob_ids as $mob_id)
6926 $this->mob_ids[$mob_id] = $mob_id;
6928 $ilBench->stop(
"ContentObjectExport",
"exportPageObject_CollectMedia");
6931 $ilBench->start(
"ContentObjectExport",
"exportPageObject_CollectFileItems");
6933 foreach($file_ids as $file_id)
6935 $this->file_ids[$file_id] = $file_id;
6937 $ilBench->stop(
"ContentObjectExport",
"exportPageObject_CollectFileItems");
6939 $a_xml_writer->xmlEndTag(
"PageObject");
6942 $ilBench->stop(
"ContentObjectExport",
"exportPageObject");
6956 include_once
"./Services/MediaObjects/classes/class.ilObjMediaObject.php";
6958 foreach ($this->mob_ids as $mob_id)
6960 $expLog->write(date(
"[y-m-d H:i:s] ").
"Media Object ".$mob_id);
6964 $media_obj->exportXML($a_xml_writer, $a_inst);
6965 $media_obj->exportFiles($a_target_dir);
6977 include_once
"./Modules/File/classes/class.ilObjFile.php";
6979 foreach ($this->file_ids as $file_id)
6981 $expLog->write(date(
"[y-m-d H:i:s] ").
"File Item ".$file_id);
6982 $file_obj =
new ilObjFile($file_id,
false);
6983 $file_obj->export($a_target_dir);
6994 if (!is_array($this->import_mapping))
7000 return $this->import_mapping;
7017 return self::_getECTSGrade($passed_array, $reached_points, $max_points, $this->ects_grades[
"A"], $this->ects_grades[
"B"], $this->ects_grades[
"C"], $this->ects_grades[
"D"], $this->ects_grades[
"E"], $this->ects_fx);
7023 public static function _getECTSGrade($points_passed, $reached_points, $max_points, $a, $b, $c,
$d, $e, $fx)
7025 include_once
"./Modules/Test/classes/class.ilStatistics.php";
7028 $passed_statistics->setData($points_passed);
7029 $ects_percentiles = array
7031 "A" => $passed_statistics->quantile($a),
7032 "B" => $passed_statistics->quantile($b),
7033 "C" => $passed_statistics->quantile($c),
7034 "D" => $passed_statistics->quantile(
$d),
7035 "E" => $passed_statistics->quantile($e)
7037 if (count($points_passed) && ($reached_points >= $ects_percentiles[
"A"]))
7041 else if (count($points_passed) && ($reached_points >= $ects_percentiles[
"B"]))
7045 else if (count($points_passed) && ($reached_points >= $ects_percentiles[
"C"]))
7049 else if (count($points_passed) && ($reached_points >= $ects_percentiles[
"D"]))
7053 else if (count($points_passed) && ($reached_points >= $ects_percentiles[
"E"]))
7057 else if (strcmp($fx,
"") != 0)
7059 if ($max_points > 0)
7061 $percentage = ($reached_points / $max_points) * 100.0;
7062 if ($percentage < 0) $percentage = 0.0;
7068 if ($percentage >= $fx)
7088 return $this->mark_schema->checkMarks();
7116 global
$ilDB, $ilPluginAdmin, $tree;
7118 require_once
'Modules/Test/classes/class.ilTestQuestionSetConfigFactory.php';
7138 if(preg_match(
"/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/", $this->
getReportingDate(), $matches))
7140 $epoch_time = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
7142 if($now < $epoch_time)
7180 $md_life =& $md->getLifecycle();
7183 if (strlen($a_author) == 0)
7186 $a_author = $ilUser->getFullname();
7189 $md_life =& $md->addLifecycle();
7191 $con =& $md_life->addContribute();
7192 $con->setRole(
"Author");
7194 $ent =& $con->addEntity();
7195 $ent->setEntity($a_author);
7207 parent::createMetaData();
7221 include_once
"./Services/MetaData/classes/class.ilMD.php";
7223 $md_life =& $md->getLifecycle();
7226 $ids =& $md_life->getContributeIds();
7227 foreach ($ids as
$id)
7229 $md_cont =& $md_life->getContribute($id);
7230 if (strcmp($md_cont->getRole(),
"Author") == 0)
7232 $entids =& $md_cont->getEntityIds();
7233 foreach ($entids as $entid)
7235 $md_ent =& $md_cont->getEntity($entid);
7236 array_push($author, $md_ent->getEntity());
7241 return join($author,
",");
7254 include_once
"./Services/MetaData/classes/class.ilMD.php";
7255 $md =&
new ilMD($obj_id, 0,
"tst");
7256 $md_life =& $md->getLifecycle();
7259 $ids =& $md_life->getContributeIds();
7260 foreach ($ids as
$id)
7262 $md_cont =& $md_life->getContribute($id);
7263 if (strcmp($md_cont->getRole(),
"Author") == 0)
7265 $entids =& $md_cont->getEntityIds();
7266 foreach ($entids as $entid)
7268 $md_ent =& $md_cont->getEntity($entid);
7269 array_push($author, $md_ent->getEntity());
7274 return join($author,
",");
7288 $result_array = array();
7298 $result_array[$obj_id] = $titles[
$ref_id];
7306 return $result_array;
7317 public function cloneObject($a_target_id,$a_copy_id = 0)
7325 $newObj = parent::cloneObject($a_target_id,$a_copy_id);
7331 if(!$cp_options->isRootNode($this->getRefId()))
7333 $newObj->setOnline($this->
isOnline());
7358 $newObj->setKiosk($this->
getKiosk());
7403 $newObj->saveToDb();
7406 include_once
"./Services/Certificate/classes/class.ilCertificate.php";
7407 include_once
"./Modules/Test/classes/class.ilTestCertificateAdapter.php";
7410 $cert->cloneCertificate($newcert);
7412 require_once
'Modules/Test/classes/class.ilTestQuestionSetConfigFactory.php';
7414 $testQuestionSetConfigFactory->getQuestionSetConfig()->cloneQuestionSetRelatedData($newObj);
7416 $newObj->saveToDb();
7417 $newObj->updateMetaData();
7419 include_once(
'./Services/Tracking/classes/class.ilLPObjSettings.php');
7421 $obj_settings->cloneSettings($newObj->getId());
7438 global $tree,
$ilDB, $ilPluginAdmin;
7441 $tree, $ilDB, $ilPluginAdmin, $this
7444 $questionSetConfig->loadFromDb();
7446 if( $questionSetConfig->isQuestionAmountConfigurationModePerPool() )
7448 require_once
'Modules/Test/classes/class.ilTestRandomQuestionSetSourcePoolDefinitionList.php';
7449 require_once
'Modules/Test/classes/class.ilTestRandomQuestionSetBuilderWithAmountPerPool.php';
7450 require_once
'Modules/Test/classes/class.ilTestRandomQuestionSetSourcePoolDefinitionFactory.php';
7456 $sourcePoolDefinitionList->loadDefinitions();
7458 $num = $sourcePoolDefinitionList->getQuestionAmount();
7462 $num = $questionSetConfig->getQuestionAmountPerTest();
7467 $num = count($this->questions);
7485 if (strcmp($question_id,
"") != 0)
7487 include_once
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
7490 include_once
"./Modules/Test/classes/class.ilObjAssessmentFolder.php";
7505 $result = $ilDB->queryF(
"SELECT obj_fi FROM tst_tests WHERE test_id = %s",
7512 $object_id =
$row[
"obj_fi"];
7528 $result = $ilDB->queryF(
"SELECT tst_tests.obj_fi FROM tst_tests, tst_active WHERE tst_tests.test_id = tst_active.test_fi AND tst_active.active_id = %s",
7535 $object_id =
$row[
"obj_fi"];
7551 $result = $ilDB->queryF(
"SELECT test_id FROM tst_tests WHERE obj_fi = %s",
7558 $test_id =
$row[
"test_id"];
7576 if (($active_id) && ($question_id))
7580 include_once
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
7583 $result = $ilDB->queryF(
"SELECT value1 FROM tst_solutions WHERE active_fi = %s AND question_fi = %s AND pass = %s",
7584 array(
'integer',
'integer',
'integer'),
7585 array($active_id, $question_id,
$pass)
7610 $result = $ilDB->queryF(
"SELECT question_text FROM qpl_questions WHERE question_id = %s",
7633 $result_array = array();
7637 if (is_numeric($user_id))
7639 $result = $ilDB->queryF(
"SELECT tst_active.active_id, tst_active.tries, usr_id, %s login, %s lastname, %s firstname, tst_invited_user.clientip, " .
7640 "tst_active.submitted test_finished, matriculation FROM usr_data, tst_invited_user " .
7641 "LEFT JOIN tst_active ON tst_active.user_fi = tst_invited_user.user_fi AND tst_active.test_fi = tst_invited_user.test_fi " .
7642 "WHERE tst_invited_user.test_fi = %s and tst_invited_user.user_fi=usr_data.usr_id AND usr_data.usr_id=%s " .
7644 array(
'text',
'text',
'text',
'integer',
'integer'),
7645 array(
"", $this->lng->txt(
"anonymous"),
"", $this->
getTestId(), $user_id)
7650 $result = $ilDB->queryF(
"SELECT tst_active.active_id, usr_id, %s login, %s lastname, %s firstname, tst_invited_user.clientip, " .
7651 "tst_active.submitted test_finished, matriculation FROM usr_data, tst_invited_user " .
7652 "LEFT JOIN tst_active ON tst_active.user_fi = tst_invited_user.user_fi AND tst_active.test_fi = tst_invited_user.test_fi " .
7653 "WHERE tst_invited_user.test_fi = %s and tst_invited_user.user_fi=usr_data.usr_id " .
7655 array(
'text',
'text',
'text',
'integer'),
7656 array(
"", $this->lng->txt(
"anonymous"),
"", $this->
getTestId())
7662 if (is_numeric($user_id))
7664 $result = $ilDB->queryF(
"SELECT tst_active.active_id, tst_active.tries, usr_id, login, lastname, firstname, tst_invited_user.clientip, " .
7665 "tst_active.submitted test_finished, matriculation FROM usr_data, tst_invited_user " .
7666 "LEFT JOIN tst_active ON tst_active.user_fi = tst_invited_user.user_fi AND tst_active.test_fi = tst_invited_user.test_fi " .
7667 "WHERE tst_invited_user.test_fi = %s and tst_invited_user.user_fi=usr_data.usr_id AND usr_data.usr_id=%s " .
7669 array(
'integer',
'integer'),
7675 $result = $ilDB->queryF(
"SELECT tst_active.active_id, tst_active.tries, usr_id, login, lastname, firstname, tst_invited_user.clientip, " .
7676 "tst_active.submitted test_finished, matriculation FROM usr_data, tst_invited_user " .
7677 "LEFT JOIN tst_active ON tst_active.user_fi = tst_invited_user.user_fi AND tst_active.test_fi = tst_invited_user.test_fi " .
7678 "WHERE tst_invited_user.test_fi = %s and tst_invited_user.user_fi=usr_data.usr_id " .
7685 $result_array = array();
7688 $result_array[
$row[
'usr_id']]=
$row;
7690 return $result_array;
7705 $result = $ilDB->queryF(
"SELECT tst_active.active_id, tst_active.tries, tst_active.user_fi usr_id, %s login, %s lastname, %s firstname, tst_active.submitted test_finished, usr_data.matriculation, usr_data.active ".
7706 "FROM tst_active LEFT JOIN usr_data ON tst_active.user_fi = usr_data.usr_id WHERE tst_active.test_fi = %s ORDER BY usr_data.lastname " . strtoupper($name_sort_order),
7707 array(
'text',
'text',
'text',
'integer'),
7708 array(
"", $this->lng->txt(
"anonymous"),
"", $this->
getTestId())
7713 $result = $ilDB->queryF(
"SELECT tst_active.active_id, tst_active.tries, tst_active.user_fi usr_id, usr_data.login, usr_data.lastname, usr_data.firstname, tst_active.submitted test_finished, usr_data.matriculation, usr_data.active ".
7714 "FROM tst_active LEFT JOIN usr_data ON tst_active.user_fi = usr_data.usr_id WHERE tst_active.test_fi = %s ORDER BY usr_data.lastname " . strtoupper($name_sort_order),
7724 foreach (
$data as $index => $participant)
7726 if (strlen(trim($participant[
"firstname"].$participant[
"lastname"])) == 0)
7728 $data[$index][
"lastname"] = $this->lng->txt(
"deleted_user");
7738 include_once
"./Modules/Test/classes/class.ilObjAssessmentFolder.php";
7740 if (count($scoring) == 0)
return array();
7743 $filtered_participants = array();
7744 foreach ($participants as $active_id => $participant)
7746 $qstType_IN_manScoreableQstTypes = $ilDB->in(
'qpl_questions.question_type_fi', $scoring,
false,
'integer');
7749 SELECT tst_test_result.manual 7751 FROM tst_test_result 7753 INNER JOIN qpl_questions 7754 ON tst_test_result.question_fi = qpl_questions.question_id 7756 WHERE tst_test_result.active_fi = %s 7757 AND $qstType_IN_manScoreableQstTypes 7761 $queryString, array(
"integer"), array($active_id)
7771 if ($participant->active) $filtered_participants[$active_id] = $participant;
7774 if (!$participant->active) $filtered_participants[$active_id] = $participant;
7777 $filtered_participants[$active_id] = $participant;
7792 $assessmentSetting =
new ilSetting(
"assessment");
7793 $manscoring_done = $assessmentSetting->get(
"manscoring_done_" . $active_id);
7794 if ($manscoring_done) $filtered_participants[$active_id] = $participant;
7806 $assessmentSetting =
new ilSetting(
"assessment");
7807 $manscoring_done = $assessmentSetting->get(
"manscoring_done_" . $active_id);
7808 if (!$manscoring_done) $filtered_participants[$active_id] = $participant;
7816 if (
$row[
"manual"]) $found++;
7818 if (($found > 0) && ($found < $count)) $filtered_participants[$active_id] = $participant;
7821 $filtered_participants[$active_id] = $participant;
7826 return $filtered_participants;
7840 if (!is_array($ids) || count($ids) ==0)
return array();
7844 $result = $ilDB->queryF(
"SELECT usr_id, %s login, %s lastname, %s firstname, client_ip clientip FROM usr_data WHERE " . $ilDB->in(
'usr_id', $ids,
false,
'integer') .
" ORDER BY login",
7845 array(
'text',
'text',
'text'),
7846 array(
"", $this->lng->txt(
"anonymous"),
"")
7851 $result = $ilDB->query(
"SELECT usr_id, login, lastname, firstname, client_ip clientip FROM usr_data WHERE " . $ilDB->in(
'usr_id', $ids,
false,
'integer') .
" ORDER BY login");
7854 $result_array = array();
7857 $result_array[
$row[
"usr_id"]]=
$row;
7859 return $result_array;
7864 if (!is_array($ids) || count($ids) ==0)
return array();
7876 if (!is_array($ids) || count($ids) ==0)
return array();
7878 foreach ($ids as $obj_id)
7894 include_once
"./Modules/Group/classes/class.ilObjGroup.php";
7896 $members = $group->getGroupMemberIds();
7897 include_once
'./Services/User/classes/class.ilObjUser.php';
7898 foreach ($members as $user_id)
7913 $members = $rbacreview->assignedUsers($role_id,
"usr_id");
7914 include_once
'./Services/User/classes/class.ilObjUser.php';
7915 foreach ($members as $user_id)
7933 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_invited_user WHERE test_fi = %s AND user_fi = %s",
7934 array(
'integer',
'integer'),
7949 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_invited_user WHERE test_fi = %s AND user_fi = %s",
7950 array(
'integer',
'integer'),
7953 $affectedRows = $ilDB->manipulateF(
"INSERT INTO tst_invited_user (test_fi, user_fi, clientip, tstamp) VALUES (%s, %s, %s, %s)",
7954 array(
'integer',
'integer',
'text',
'integer'),
7955 array($this->
getTestId(), $user_id, (strlen($client_ip)) ? $client_ip : NULL, time())
7964 $affectedRows = $ilDB->manipulateF(
"UPDATE tst_invited_user SET clientip = %s, tstamp = %s WHERE test_fi=%s and user_fi=%s",
7965 array(
'text',
'integer',
'integer',
'integer'),
7966 array((strlen($client_ip)) ? $client_ip : NULL, time(), $this->
getTestId(), $user_id)
7978 if (is_numeric($question_fi))
7980 $result = $ilDB->queryF(
"SELECT question_fi, solved FROM tst_qst_solved WHERE active_fi = %s AND question_fi=%s",
7981 array(
'integer',
'integer'),
7982 array($active_id, $question_fi)
7987 $result = $ilDB->queryF(
"SELECT question_fi, solved FROM tst_qst_solved WHERE active_fi = %s",
7992 $result_array = array();
7995 $result_array[
$row[
"question_fi"]]=
$row;
7997 return $result_array;
8009 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_qst_solved WHERE active_fi = %s AND question_fi = %s",
8010 array(
'integer',
'integer'),
8011 array($active_id, $question_id)
8013 $affectedRows = $ilDB->manipulateF(
"INSERT INTO tst_qst_solved (solved, question_fi, active_fi) VALUES (%s, %s, %s)",
8014 array(
'integer',
'integer',
'integer'),
8015 array($value, $question_id, $active_id)
8026 $result = $ilDB->queryF(
"SELECT submitted FROM tst_active WHERE active_id=%s AND submitted=%s",
8027 array(
'integer',
'integer'),
8028 array($active_id, 1)
8030 return $result->numRows() == 1;
8041 if (!is_numeric($user_id))
8042 $user_id = $ilUser->getId();
8044 $result = $ilDB->queryF(
"SELECT submitted FROM tst_active WHERE test_fi=%s AND user_fi=%s AND submitted=%s",
8045 array(
'integer',
'integer',
'integer'),
8048 return $result->numRows() == 1;
8083 "user_id" => $this->lng->txt(
"user_id"),
8084 "matriculation" => $this->lng->txt(
"matriculation"),
8085 "lastname" => $this->lng->txt(
"lastname"),
8086 "firstname" => $this->lng->txt(
"firstname"),
8087 "login" =>$this->lng->txt(
"login"),
8088 "reached_points" => $this->lng->txt(
"tst_reached_points"),
8089 "max_points" => $this->lng->txt(
"tst_maximum_points"),
8090 "percent_value" => $this->lng->txt(
"tst_percent_solved"),
8091 "mark" => $this->lng->txt(
"tst_mark"),
8092 "ects" => $this->lng->txt(
"ects_grade")
8095 if (count($participants))
8101 foreach ($participants as $active_id => $user_rec)
8104 $reached_points = 0;
8106 foreach ($this->questions as $value)
8109 if (is_object($question))
8111 $max_points += $question->getMaximumPoints();
8112 $reached_points += $question->getReachedPoints($active_id);
8115 if ($max_points > 0)
8117 $percentvalue = $reached_points / $max_points;
8118 if ($percentvalue < 0) $percentvalue = 0.0;
8124 $mark_obj = $this->mark_schema->getMatchingMark($percentvalue * 100);
8128 $mark = $mark_obj->getOfficialName();
8129 $ects_mark = $this->
getECTSGrade($passed_array, $reached_points, $max_points);
8133 $user_rec[
'firstname'] =
"";
8134 $user_rec[
'lastname'] = $this->lng->txt(
"anonymous");
8137 "user_id"=>$user_rec[
'usr_id'],
8138 "matriculation" => $user_rec[
'matriculation'],
8139 "lastname" => $user_rec[
'lastname'],
8140 "firstname" => $user_rec[
'firstname'],
8141 "login"=>$user_rec[
'login'],
8142 "reached_points" => $reached_points,
8143 "max_points" => $max_points,
8144 "percent_value" => $percentvalue,
8146 "ects" => $ects_mark
8166 $resultarray = array();
8167 foreach (
$row as $rowindex => $entry)
8174 if (strpos($entry,
"\"") !== FALSE)
8176 $entry = str_replace(
"\"",
"\"\"", $entry);
8184 $entry = str_replace(chr(13).chr(10), chr(10), $entry);
8188 $entry =
"\"" . $entry .
"\"";
8191 $resultarray[$rowindex] = $entry;
8193 return $resultarray;
8207 $result = $ilDB->queryF(
"SELECT tries FROM tst_active WHERE active_id = %s",
8214 return $row[
"tries"];
8234 $result = $ilDB->queryF(
"SELECT MAX(pass) maxpass FROM tst_pass_result WHERE active_fi = %s",
8241 $max =
$row[
"maxpass"];
8264 $result = $ilDB->queryF(
"SELECT * FROM tst_pass_result WHERE active_fi = %s",
8274 if(
$row[
"maxpoints"] > 0)
8276 $factor =
$row[
"points"] /
$row[
"maxpoints"];
8283 if($factor > $bestfactor)
8286 $bestfactor = $factor;
8289 if (is_array($bestrow))
8291 return $bestrow[
"pass"];
8314 $counted_pass = NULL;
8323 return $counted_pass;
8339 global $tree,
$ilDB,
$lng, $ilPluginAdmin;
8341 require_once
'Modules/Test/classes/class.ilTestSessionFactory.php';
8343 $testSession = $testSessionFactory->getSession($active_id);
8345 require_once
'Modules/Test/classes/class.ilTestSequenceFactory.php';
8347 $testSequence = $testSequenceFactory->getSequence($testSession);
8349 require_once
'Modules/Test/classes/class.ilObjTestDynamicQuestionSetConfig.php';
8351 $dynamicQuestionSetConfig->loadFromDb();
8353 $testSequence->loadFromDb($dynamicQuestionSetConfig);
8356 return $testSequence->getTrackedQuestionCount();
8363 include_once
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
8365 foreach ($this->questions as $value)
8369 $workedthrough += 1;
8372 return $workedthrough;
8394 SELECT tst_pass_result.tstamp pass_res_tstamp, 8395 tst_test_result.tstamp quest_res_tstamp 8397 FROM tst_pass_result 8399 LEFT JOIN tst_test_result 8400 ON tst_test_result.active_fi = tst_pass_result.active_fi 8401 AND tst_test_result.pass = tst_pass_result.pass 8403 WHERE tst_pass_result.active_fi = %s 8404 AND tst_pass_result.pass = %s 8406 ORDER BY tst_test_result.tstamp DESC 8410 array(
'integer',
'integer'),
8411 array($active_id,
$pass)
8416 if(
$row[
'qres_tstamp'] )
8418 return $row[
'quest_res_tstamp'];
8421 return $row[
'pass_res_tstamp'];
8438 "executable" =>
true,
8439 "errormessage" =>
"" 8443 $result[
"executable"] =
false;
8449 $result[
"executable"] =
false;
8472 $testSession->increasePass();
8473 $testSession->setLastSequence(0);
8474 $testSession->saveToDb();
8478 $result[
"executable"] =
false;
8479 $result[
"errormessage"] = $this->lng->txt(
"detail_max_processing_time_reached");
8489 require_once
'Modules/Test/classes/class.ilTestPassesSelector.php';
8491 $testPassesSelector->setActiveId($active_id);
8492 $testPassesSelector->setLastFinishedPass($testSession->getLastFinishedPass());
8494 $closedPasses = $testPassesSelector->getClosedPasses();
8498 $result[
"executable"] =
false;
8499 $result[
"errormessage"] = $this->lng->txt(
"maximum_nr_of_tries_reached");
8519 if (preg_match(
"/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/", $this->
getReportingDate(), $matches))
8521 $epoch_time = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
8523 if ($now < $epoch_time)
8539 $notimeleft = FALSE;
8568 if ($active_id < 1)
return FALSE;
8573 $result = $ilDB->queryF(
"SELECT tst_times.started FROM tst_times WHERE tst_times.active_fi = %s AND tst_times.pass = %s ORDER BY tst_times.started",
8574 array(
'integer',
'integer'),
8575 array($active_id,
$pass)
8580 if (preg_match(
"/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/",
$row[
"started"], $matches))
8582 return mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
8630 questtypes.type_tag, 8632 tstquest.obligatory, 8633 origquest.obj_fi orig_obj_fi 8635 FROM qpl_questions questions 8637 INNER JOIN qpl_qst_type questtypes 8638 ON questtypes.question_type_id = questions.question_type_fi 8640 INNER JOIN tst_test_question tstquest 8641 ON tstquest.question_fi = questions.question_id 8643 LEFT JOIN qpl_questions origquest 8644 ON origquest.question_id = questions.original_id 8646 WHERE tstquest.test_fi = %s 8648 ORDER BY tstquest.sequence 8651 $query_result = $ilDB->queryF(
8655 $questions = array();
8657 while (
$row = $ilDB->fetchAssoc($query_result))
8661 $question[
'obligationPossible'] = self::isQuestionObligationPossible(
$row[
'question_id']);
8663 $questions[] = $question;
8672 public function getPotentialRandomTestQuestions()
8681 questtypes.type_tag, 8682 origquest.obj_fi orig_obj_fi 8684 FROM qpl_questions questions 8686 INNER JOIN qpl_qst_type questtypes 8687 ON questtypes.question_type_id = questions.question_type_fi 8689 INNER JOIN tst_rnd_cpy tstquest 8690 ON tstquest.qst_fi = questions.question_id 8692 LEFT JOIN qpl_questions origquest 8693 ON origquest.question_id = questions.original_id 8695 WHERE tstquest.tst_fi = %s 8698 $query_result = $ilDB->queryF(
8702 $questions = array();
8704 while (
$row = $ilDB->fetchAssoc($query_result))
8708 $question[
'obligationPossible'] = self::isQuestionObligationPossible(
$row[
'question_id']);
8710 $questions[] = $question;
8724 return ($this->shuffle_questions) ? 1 : 0;
8735 $this->shuffle_questions = ($a_shuffle) ? 1 : 0;
8752 return ($this->show_summary) ? $this->show_summary : 0;
8769 $this->show_summary = $a_value;
8780 if (($this->show_summary & 1) > 0)
8800 $this->show_summary = 1;
8804 $this->show_summary = 0;
8816 if (($this->show_summary & 2) > 0)
8836 $this->show_summary = $this->show_summary | 2;
8842 $this->show_summary = $this->show_summary ^ 2;
8855 if (($this->show_summary & 4) > 0)
8875 $this->show_summary = $this->show_summary | 4;
8881 $this->show_summary = $this->show_summary ^ 4;
8894 if (($this->show_summary & 8) > 0)
8914 $this->show_summary = $this->show_summary | 8;
8920 $this->show_summary = $this->show_summary ^ 8;
8933 return ($this->results_presentation) ? $this->results_presentation : 0;
8944 if (($this->results_presentation & 1) > 0)
8962 if (($this->results_presentation & 2) > 0)
8980 if (($this->results_presentation & 4) > 0)
8998 if (($this->results_presentation & 8) > 0)
9016 if (($this->results_presentation & 16) > 0)
9034 if (($this->results_presentation & 32) > 0)
9050 if (($this->results_presentation & 64) > 0)
9066 if(($this->results_presentation & 128) > 0)
9084 $this->results_presentation = $a_results_presentation;
9099 $this->results_presentation = $this->results_presentation | 1;
9105 $this->results_presentation = $this->results_presentation ^ 1;
9120 $this->results_presentation = $this->results_presentation | 2;
9126 $this->results_presentation = $this->results_presentation ^ 2;
9152 $this->results_presentation = $this->results_presentation | 4;
9158 $this->results_presentation = $this->results_presentation ^ 4;
9173 $this->results_presentation = $this->results_presentation | 8;
9179 $this->results_presentation = $this->results_presentation ^ 8;
9194 $this->results_presentation = $this->results_presentation | 16;
9200 $this->results_presentation = $this->results_presentation ^ 16;
9215 $this->results_presentation = $this->results_presentation | 32;
9221 $this->results_presentation = $this->results_presentation ^ 32;
9236 $this->results_presentation = $this->results_presentation | 64;
9242 $this->results_presentation = $this->results_presentation ^ 64;
9256 $this->results_presentation = $this->results_presentation | 128;
9262 $this->results_presentation = $this->results_presentation ^ 128;
9273 $result = $ilDB->queryF(
"SELECT user_fi FROM tst_active WHERE active_id = %s",
9280 return $row[
"user_fi"];
9306 return ($this->allowedUsers) ? $this->allowedUsers : 0;
9311 $this->allowedUsers = $a_allowed_users;
9316 return ($this->allowedUsersTimeGap) ? $this->allowedUsersTimeGap : 0;
9321 $this->allowedUsersTimeGap = $a_allowed_users_time_gap;
9330 if (($nr_of_users > 0) && ($time_gap > 0))
9333 $time_border = $now - $time_gap;
9334 $str_time_border = strftime(
"%Y%m%d%H%M%S", $time_border);
9336 SELECT DISTINCT tst_times.active_fi 9338 INNER JOIN tst_active 9339 ON tst_times.active_fi = tst_active.active_id 9341 tst_times.pass > tst_active.last_finished_pass OR tst_active.last_finished_pass IS NULL 9343 WHERE tst_times.tstamp > %s 9344 AND tst_active.test_fi = %s 9347 if (
$result->numRows() >= $nr_of_users)
9349 include_once
"./Modules/Test/classes/class.ilObjAssessmentFolder.php";
9368 $result = $ilDB->queryF(
"SELECT finished FROM tst_times WHERE active_fi = %s ORDER BY finished DESC",
9375 return $row[
"finished"];
9389 if (preg_match(
"/<[^>]*?>/", $a_text))
9409 for ($i = 0; $i < $a_material->getMaterialCount(); $i++)
9411 $material = $a_material->getMaterial($i);
9412 if (strcmp($material[
"type"],
"mattext") == 0)
9414 $result .= $material[
"material"]->getContent();
9416 if (strcmp($material[
"type"],
"matimage") == 0)
9418 $matimage = $material[
"material"];
9419 if (preg_match(
"/(il_([0-9]+)_mob_([0-9]+))/", $matimage->getLabel(), $matches))
9422 if (!is_array(
$_SESSION[
"import_mob_xhtml"]))
$_SESSION[
"import_mob_xhtml"] = array();
9423 array_push(
$_SESSION[
"import_mob_xhtml"], array(
"mob" => $matimage->getLabel(),
"uri" => $matimage->getUri()));
9428 $ilLog->write(print_r(
$_SESSION[
"import_mob_xhtml"],
true));
9442 include_once
"./Services/RTE/classes/class.ilRTE.php";
9443 include_once(
"./Services/MediaObjects/classes/class.ilObjMediaObject.php");
9445 $a_xml_writer->xmlStartTag(
"material");
9447 "texttype" =>
"text/plain" 9449 if ($this->
isHTML($a_material))
9451 $attrs[
"texttype"] =
"text/xhtml";
9456 foreach (
$mobs as $mob)
9458 $moblabel =
"il_" . IL_INST_ID .
"_mob_" . $mob;
9459 if (strpos($a_material,
"mm_$mob") !== FALSE)
9465 "label" => $moblabel,
9466 "uri" =>
"objects/" .
"il_" . IL_INST_ID .
"_mob_" . $mob .
"/" . $mob_obj->getTitle()
9469 $a_xml_writer->xmlElement(
"matimage", $imgattrs, NULL);
9472 $a_xml_writer->xmlEndTag(
"material");
9483 include_once
"./Services/Utilities/classes/class.ilUtil.php";
9497 $affectedRows = $ilDB->manipulateF(
"UPDATE tst_tests SET certificate_visibility = %s, tstamp = %s WHERE test_id = %s",
9498 array(
'text',
'integer',
'integer'),
9499 array($a_value, time(), $this->
getTestId())
9511 return (strlen($this->certificate_visibility)) ? $this->certificate_visibility : 0;
9522 $this->certificate_visibility = $a_value;
9533 return ($this->anonymity) ? 1 : 0;
9547 $this->anonymity = 1;
9550 $this->anonymity = 0;
9563 return ($this->show_cancel) ? 1 : 0;
9577 $this->show_cancel = 1;
9580 $this->show_cancel = 0;
9593 return ($this->show_marker) ? 1 : 0;
9607 $this->show_marker = 1;
9610 $this->show_marker = 0;
9623 return ($this->fixed_participants) ? 1 : 0;
9637 $this->fixed_participants = 1;
9640 $this->fixed_participants = 0;
9656 $result = $ilDB->queryF(
"SELECT anonymity FROM tst_tests WHERE obj_fi = %s",
9662 return $row[
'anonymity'];
9678 SELECT tst_tests.question_set_type 9680 INNER JOIN tst_tests 9681 ON tst_active.test_fi = tst_tests.test_id 9682 WHERE tst_active.active_id = %s 9685 $res = $ilDB->queryF(
$query, array(
'integer'), array($active_id) );
9687 while(
$row = $ilDB->fetchAssoc(
$res))
9689 return $row[
'question_set_type'];
9705 throw new Exception(__METHOD__.
' is deprecated ... use ilObjTest::lookupQuestionSetTypeByActiveId() instead!');
9709 $result = $ilDB->queryF(
"SELECT tst_tests.random_test FROM tst_tests, tst_active WHERE tst_active.active_id = %s AND tst_active.test_fi = tst_tests.test_id",
9715 return $row[
'random_test'];
9734 return $this->lng->txt(
"anonymous") . $suffix;
9738 include_once
'./Services/User/classes/class.ilObjUser.php';
9740 if (strlen($uname[
"firstname"].$uname[
"lastname"]) == 0) $uname[
"firstname"] = $this->lng->txt(
"deleted_user");
9743 return trim($uname[
"lastname"] .
", " . $uname[
"firstname"]) . $suffix;
9747 return trim($uname[
"firstname"] .
" " . $uname[
"lastname"]) . $suffix;
9763 return $this->lng->txt(
"tst_start_test");
9765 $active_pass = $this->
_getPass($active_id);
9769 if ($active_pass == 0)
9771 return $this->lng->txt(
"tst_start_test");
9775 return $this->lng->txt(
"tst_start_new_test_pass");
9780 return $this->lng->txt(
"tst_resume_test");
9789 public function getAvailableDefaults()
9798 "SELECT * FROM tst_test_defaults WHERE user_fi = %s ORDER BY name ASC",
9800 array($ilUser->getId())
9802 $defaults = array();
9805 $defaults[
$row[
"test_defaults_id"]] =
$row;
9819 return self::_getTestDefaults($test_defaults_id);
9826 $result = $ilDB->queryF(
"SELECT * FROM tst_test_defaults WHERE test_defaults_id = %s",
9828 array($test_defaults_id)
9850 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_test_defaults WHERE test_defaults_id = %s",
9852 array($test_default_id)
9866 $testsettings = array(
9957 $next_id = $ilDB->nextId(
'tst_test_defaults');
9959 'tst_test_defaults',
9961 'test_defaults_id' => array(
'integer', $next_id),
9962 'name' => array(
'text', $a_name),
9963 'user_fi' => array(
'integer', $ilUser->getId()),
9964 'defaults' => array(
'clob', serialize($testsettings)),
9965 'marks' => array(
'clob', serialize($this->mark_schema)),
9966 'tstamp' => array(
'integer', time())
9980 $testsettings = unserialize($test_defaults[
"defaults"]);
9981 include_once
"./Modules/Test/classes/class.assMarkSchema.php";
9982 $this->mark_schema = unserialize($test_defaults[
"marks"]);
10016 $this->
setKiosk($testsettings[
"Kiosk"]);
10020 $this->
setECTSFX($testsettings[
"ECTSFX"]);
10022 if( isset($testsettings[
"isRandomTest"]) )
10024 if( $testsettings[
"isRandomTest"] )
10033 elseif( isset($testsettings[
"questionSetType"]) )
10056 if( isset($testsettings[
'examid_in_kiosk']) )
10064 if( isset($testsettings[
'show_exam_id']) )
10118 if (extension_loaded(
"tidy"))
10122 "output-xml" =>
true,
10123 "numeric-entities" =>
true 10125 $tidy =
new tidy();
10126 $tidy->parseString($print_output, $config,
'utf8');
10127 $tidy->cleanRepair();
10128 $print_output = tidy_get_output($tidy);
10129 $print_output = preg_replace(
"/^.*?(<html)/",
"\\1", $print_output);
10133 $print_output = str_replace(
" ",
" ", $print_output);
10134 $print_output = str_replace(
"⊗",
"X", $print_output);
10136 $xsl = file_get_contents(
"./Modules/Test/xml/question2fo.xsl");
10139 $xsl = str_replace(
10140 'font-family="Helvetica, unifont"',
10141 'font-family="'.
$GLOBALS[
'ilSetting']->
get(
'rpc_pdf_font',
'Helvetica, unifont').
'"',
10145 $args = array(
'/_xml' => $print_output,
'/_xsl' => $xsl );
10148 $output = xslt_process($xh,
"arg:/_xml",
"arg:/_xsl", NULL, $args, $params);
10162 $content = preg_replace(
"/href=\".*?\"/",
"", $content);
10163 $printbody =
new ilTemplate(
"tpl.il_as_tst_print_body.html", TRUE, TRUE,
"Modules/Test");
10165 $printbody->setVariable(
"ADM_CONTENT", $content);
10166 $printbody->setCurrentBlock(
"css_file");
10168 $printbody->parseCurrentBlock();
10169 $printbody->setCurrentBlock(
"css_file");
10171 $printbody->parseCurrentBlock();
10172 $printoutput = $printbody->get();
10173 $html = str_replace(
"href=\"./",
"href=\"" . ILIAS_HTTP_PATH .
"/", $printoutput);
10174 $html = preg_replace(
"/<div id=\"dontprint\">.*?<\\/div>/ims",
"", $html);
10175 if (extension_loaded(
"tidy"))
10179 "output-xml" =>
true,
10180 "numeric-entities" =>
true 10182 $tidy =
new tidy();
10183 $tidy->parseString($html, $config,
'utf8');
10184 $tidy->cleanRepair();
10185 $html = tidy_get_output($tidy);
10186 $html = preg_replace(
"/^.*?(<html)/",
"\\1", $html);
10190 $html = str_replace(
" ",
" ", $html);
10191 $html = str_replace(
"⊗",
"X", $html);
10193 $html = preg_replace(
"/src=\".\\//ims",
"src=\"" . ILIAS_HTTP_PATH .
"/", $html);
10207 include_once
"./Services/Utilities/classes/class.ilUtil.php";
10209 $fp = fopen($fo_file,
"w"); fwrite($fp, $fo); fclose($fp);
10211 include_once
'./Services/WebServices/RPC/classes/class.ilRpcClientFactory.php';
10221 $ilLog->write(__METHOD__.
': '.$e->getMessage());
10226 $ilLog->write(__METHOD__.
': '.$e->getMessage());
10253 $result = $ilDB->queryF(
"SELECT feedback FROM tst_manual_fb WHERE active_fi = %s AND question_fi = %s AND pass = %s",
10254 array(
'integer',
'integer',
'integer'),
10255 array($active_id, $question_id,
$pass)
10260 include_once(
"./Services/RTE/classes/class.ilRTE.php");
10276 function saveManualFeedback($active_id, $question_id,
$pass, $feedback)
10280 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_manual_fb WHERE active_fi = %s AND question_fi = %s AND pass = %s",
10281 array(
'integer',
'integer',
'integer'),
10282 array($active_id, $question_id,
$pass)
10285 if (strlen($feedback))
10287 $next_id = $ilDB->nextId(
'tst_manual_fb');
10289 $result = $ilDB->insert(
'tst_manual_fb', array(
10290 'manual_feedback_id' => array(
'integer', $next_id ),
10291 'active_fi' => array(
'integer', $active_id ),
10292 'question_fi' => array(
'integer', $question_id ),
10293 'pass' => array(
'integer',
$pass),
10295 'tstamp' => array(
'integer', time() ),
10298 include_once (
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
10302 include_once
"./Modules/Test/classes/class.ilObjTestAccess.php";
10304 include_once
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
10311 $ilias->raiseError(
$result->getMessage());
10339 include_once
"./Modules/Test/classes/class.ilTestSequence.php";
10350 $this->test_id = $a_id;
10364 if (count($participants))
10366 foreach ($participants as $active_id => $user_rec)
10369 $reached_points = 0;
10371 foreach ($this->questions as $value)
10374 if (is_object($question))
10376 $max_points += $question->getMaximumPoints();
10377 $reached_points += $question->getReachedPoints($active_id);
10378 if ($max_points > 0)
10380 $percentvalue = $reached_points / $max_points;
10381 if ($percentvalue < 0) $percentvalue = 0.0;
10389 $user_rec[
'firstname'] =
"";
10390 $user_rec[
'lastname'] = $this->lng->txt(
"anonymous");
10393 "user_id"=>$user_rec[
'usr_id'],
10394 "matriculation" => $user_rec[
'matriculation'],
10395 "lastname" => $user_rec[
'lastname'],
10396 "firstname" => $user_rec[
'firstname'],
10397 "login"=>$user_rec[
'login'],
10398 "question_id" => $question->getId(),
10399 "question_title" => $question->getTitle(),
10400 "reached_points" => $reached_points,
10401 "max_points" => $max_points
10418 $result = $ilDB->queryF(
"SELECT t.obj_fi obj_id FROM tst_test_question q, tst_tests t WHERE q.test_fi = t.test_id AND q.question_fi = %s",
10422 $rec = $ilDB->fetchAssoc(
$result);
10423 return $rec[
"obj_id"];
10434 global $ilPluginAdmin;
10435 if ($ilPluginAdmin->isActive(
IL_COMP_MODULE,
"TestQuestionPool",
"qst", $a_pname))
10449 $result = $ilDB->queryF(
"SELECT passed FROM tst_result_cache WHERE active_fi = %s",
10456 return $row[
'passed'];
10461 $result_array =& $this->
getTestResult($active_id, $counted_pass);
10462 return $result_array[
"test"][
"passed"];
10475 include_once
"./Services/Certificate/classes/class.ilCertificate.php";
10476 include_once
"./Modules/Test/classes/class.ilTestCertificateAdapter.php";
10478 if ($cert->isComplete())
10520 public function getParticipantsForTestAndQuestion($test_id, $question_id)
10526 SELECT tst_test_result.active_fi, tst_test_result.question_fi, tst_test_result.pass 10527 FROM tst_test_result, tst_active, qpl_questions 10528 WHERE tst_active.active_id = tst_test_result.active_fi 10529 AND tst_active.test_fi = %s 10530 AND tst_test_result.question_fi = qpl_questions.question_id 10531 AND tst_test_result.question_fi = %s";
10534 array(
'integer',
'integer'),
10535 array($test_id, $question_id)
10537 $foundusers = array();
10541 if (!array_key_exists(
$row[
"active_fi"], $foundusers))
10543 $foundusers[
$row[
"active_fi"]] = array();
10545 array_push($foundusers[
$row[
"active_fi"]], array(
"pass" => $row[
"pass"],
"qid" => $row[
"question_fi"]));
10547 return $foundusers;
10558 $foundParticipants =&
$data->getParticipants();
10559 $results = array(
"overview" => array(),
"questions" => array());
10560 if (count($foundParticipants))
10562 $results[
"overview"][$this->lng->txt(
"tst_eval_total_persons")] = count($foundParticipants);
10564 $results[
"overview"][$this->lng->txt(
"tst_eval_total_finished")] = $total_finished;
10566 $diff_seconds = $average_time;
10567 $diff_hours = floor($diff_seconds/3600);
10568 $diff_seconds -= $diff_hours * 3600;
10569 $diff_minutes = floor($diff_seconds/60);
10570 $diff_seconds -= $diff_minutes * 60;
10571 $results[
"overview"][$this->lng->txt(
"tst_eval_total_finished_average_time")] = sprintf(
"%02d:%02d:%02d", $diff_hours, $diff_minutes, $diff_seconds);
10573 $total_passed_reached = 0;
10574 $total_passed_max = 0;
10575 $total_passed_time = 0;
10576 foreach ($foundParticipants as $userdata)
10578 if ($userdata->getPassed())
10581 $total_passed_reached += $userdata->getReached();
10582 $total_passed_max += $userdata->getMaxpoints();
10583 $total_passed_time += $userdata->getTimeOfWork();
10586 $average_passed_reached = $total_passed ? $total_passed_reached / $total_passed : 0;
10587 $average_passed_max = $total_passed ? $total_passed_max / $total_passed : 0;
10588 $average_passed_time = $total_passed ? $total_passed_time / $total_passed : 0;
10589 $results[
"overview"][$this->lng->txt(
"tst_eval_total_passed")] = $total_passed;
10590 $results[
"overview"][$this->lng->txt(
"tst_eval_total_passed_average_points")] = sprintf(
"%2.2f", $average_passed_reached) .
" " . strtolower($this->lng->txt(
"of")) .
" " . sprintf(
"%2.2f", $average_passed_max);
10591 $average_time = $average_passed_time;
10592 $diff_seconds = $average_time;
10593 $diff_hours = floor($diff_seconds/3600);
10594 $diff_seconds -= $diff_hours * 3600;
10595 $diff_minutes = floor($diff_seconds/60);
10596 $diff_seconds -= $diff_minutes * 60;
10597 $results[
"overview"][$this->lng->txt(
"tst_eval_total_passed_average_time")] = sprintf(
"%02d:%02d:%02d", $diff_hours, $diff_minutes, $diff_seconds);
10600 foreach (
$data->getQuestionTitles() as $question_id => $question_title)
10605 foreach ($foundParticipants as $userdata)
10607 for ($i = 0; $i <= $userdata->getLastPass(); $i++)
10609 if (is_object($userdata->getPass($i)))
10611 $question =& $userdata->getPass($i)->getAnsweredQuestionByQuestionId($question_id);
10612 if (is_array($question))
10615 $reached += $question[
"reached"];
10616 $max += $question[
"points"];
10621 $percent = $max ? $reached/$max * 100.0 : 0;
10623 $results[
"questions"][$question_id] = array(
10625 sprintf(
"%.2f", $answered ? $reached / $answered : 0) .
" " . strtolower($this->lng->txt(
"of")) .
" " . sprintf(
"%.2f", $answered ? $max / $answered : 0),
10626 sprintf(
"%.2f", $percent) .
"%",
10628 sprintf(
"%.2f", $answered ? $reached / $answered : 0),
10629 sprintf(
"%.2f", $answered ? $max / $answered : 0),
10641 include_once(
"./Modules/Test/classes/class.ilTestExport.php");
10643 return $test_exp->buildExportFile();
10661 $this->mailnotification = $a_notification;
10666 include_once
"./Modules/Test/classes/class.ilTestMailNotification.php";
10671 $mail->sendSimpleNotification($owner_id, $this->
getTitle(), $usr_data);
10681 include_once
"./Modules/Test/classes/class.ilObjTestGUI.php";
10682 include_once
"./Modules/Test/classes/tables/class.ilEvaluationAllTableGUI.php";
10684 return $table_gui->getSelectedColumns();
10689 include_once
"./Modules/Test/classes/class.ilTestMailNotification.php";
10695 include_once
"./Modules/Test/classes/class.ilTestExport.php";
10697 $file = $exportObj->exportToExcel($deliver = FALSE,
'active_id', $active_id, $passedonly = FALSE);
10698 include_once
"./Services/Mail/classes/class.ilFileDataMail.php";
10700 $fd->copyAttachmentFile(
$file,
"result_" . $active_id .
".xls");
10701 $file_names[] =
"result_" . $active_id .
".xls";
10703 $mail->sendAdvancedNotification($owner_id, $this->
getTitle(), $usr_data, $file_names);
10705 if(count($file_names))
10707 $fd->unlinkFiles($file_names);
10718 $query =
"SELECT usr_id FROM usr_data";
10722 $activequery = sprintf(
"SELECT user_fi FROM tst_active WHERE test_fi = %s AND user_fi = %s",
10723 $ilDB->quote($this->getTestId()),
10724 $ilDB->quote(
$data[
'usr_id'])
10726 $activeresult = $ilDB->query($activequery);
10727 if ($activeresult->numRows() == 0)
10729 $user_id =
$data[
'usr_id'];
10730 if ($user_id != 13)
10732 include_once
"./Modules/Test/classes/class.ilTestSession.php";
10733 $testSession = FALSE;
10735 $testSession->setRefId($this->
getRefId());
10736 $testSession->setTestId($this->
getTestId());
10737 $testSession->setUserId($user_id);
10738 $testSession->saveToDb();
10740 $nr_of_passes = rand(1, $passes);
10741 $active_id = $testSession->getActiveId();
10744 include_once
"./Modules/Test/classes/class.ilTestSequence.php";
10746 if (!$testSequence->hasSequence())
10749 $testSequence->saveToDb();
10751 for ($seq = 1; $seq <= count($this->questions); $seq++)
10753 $question_id = $testSequence->getQuestionForSequence($seq);
10755 $objQuestion->createRandomSolution($testSession->getActiveId(),
$pass);
10757 if (
$pass < $nr_of_passes - 1)
10759 $testSession->increasePass();
10760 $testSession->setLastSequence(0);
10761 $testSession->saveToDb();
10765 $testSession->setSubmitted(1);
10766 $testSession->setSubmittedTimestamp(date(
'Y-m-d H:i:s'));
10767 $testSession->saveToDb();
10771 if ($number == 0)
return;
10783 FROM tst_result_cache 10784 WHERE active_fi = %s 10788 $query, array(
'integer'), array($active_id)
10793 include_once
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
10799 FROM tst_result_cache 10800 WHERE active_fi = %s 10804 $query, array(
'integer'), array($active_id)
10816 if ($this->mailnottype == 1)
10830 $this->mailnottype = 1;
10834 $this->mailnottype = 0;
10840 if ($this->exportsettings)
10854 $this->exportsettings = $a_settings;
10858 $this->exportsettings = 0;
10864 if (($this->exportsettings & 1) > 0)
10878 $this->exportsettings = $this->exportsettings | 1;
10884 $this->exportsettings = $this->exportsettings ^ 1;
10890 return $this->enabled_view_mode;
10894 $this->enabled_view_mode = $mode;
10906 $new_array = array();
10909 $query =
'SELECT question_fi FROM tst_test_question WHERE test_fi = %s';
10910 $types = array(
'integer');
10913 $new_question_id += 1;
10917 $res = $ilDB->queryF(
$query, $types, $values);
10918 while(
$row = $ilDB->fetchAssoc(
$res)) {
10920 $qid =
$row[
'question_fi'];
10922 if ($qid == $new_question_id) {
10925 else if ($qid == $previous_question_id) {
10926 $new_array[$position++] = $qid;
10927 $new_array[$position++] = $new_question_id;
10931 $new_array[$position++] = $qid;
10935 $update_query =
'UPDATE tst_test_question SET sequence = %s WHERE test_fi = %s AND question_fi = %s';
10936 $update_types = array(
'integer',
'integer',
'integer');
10938 foreach($new_array as $position => $qid) {
10939 $ilDB->manipulateF(
10973 'pass_details' =>
'setShowPassDetails',
10974 'solution_details' =>
'setShowSolutionDetails',
10975 'solution_printview' =>
'setShowSolutionPrintview',
10976 'solution_feedback' =>
'setShowSolutionFeedback',
10977 'solution_answers_only' =>
'setShowSolutionAnswersOnly',
10978 'solution_signature' =>
'setShowSolutionSignature',
10979 'solution_suggested' =>
'setShowSolutionSuggested',
10981 foreach($setter as $key => $setter) {
10996 $this->poolUsage = (boolean)$usage;
11007 foreach($orders as
$id => $position)
11012 isset($obligations[
$id]) && $obligations[
$id] ? 1 : 0
11016 UPDATE tst_test_question 11019 WHERE question_fi = %s 11022 $ilDB->manipulateF(
11023 $query, array(
'integer',
'integer',
'integer'), array($i, $obligatory, $id)
11033 if ($question_before) {
11034 $query =
'SELECT sequence, test_fi FROM tst_test_question WHERE question_fi = %s';
11035 $types = array(
'integer');
11036 $values = array($question_before);
11037 $rset = $ilDB->queryF(
$query, $types, $values);
11040 if (!$question_before || ($rset && !(
$row = $ilDB->fetchAssoc($rset)))) {
11047 $update =
'UPDATE tst_test_question SET sequence = sequence + 1 WHERE sequence > %s AND test_fi = %s';
11048 $types = array(
'integer',
'integer');
11049 $values = array(
$row[
'sequence'],
$row[
'test_fi']);
11050 $ilDB->manipulateF($update, $types, $values);
11052 $update =
'UPDATE tst_test_question SET sequence = %s WHERE question_fi = %s';
11053 $types = array(
'integer',
'integer');
11054 $values = array(
$row[
'sequence'] + 1, $question_to_move);
11055 $ilDB->manipulateF($update, $types, $values);
11065 $IN_questions = $ilDB->in(
'q1.question_id', array_keys($questions),
false,
'integer');
11068 SELECT count(q1.question_id) cnt 11070 FROM qpl_questions q1 11072 INNER JOIN qpl_questions q2 11073 ON q2.question_id = q1.original_id 11075 WHERE $IN_questions 11076 AND q1.obj_fi = q2.obj_fi 11079 $rset = $ilDB->query(
$query);
11081 $row = $ilDB->fetchAssoc($rset);
11083 return $row[
'cnt'] > 0;
11096 $result = $ilDB->queryF(
"SELECT test_fi,MAX(pass) AS pass FROM tst_active".
11097 " JOIN tst_pass_result ON (tst_pass_result.active_fi = tst_active.active_id)".
11098 " WHERE user_fi=%s".
11099 " GROUP BY test_fi",
11100 array(
'integer',
'integer'),
11101 array($a_user_id, 1)
11106 $obj_id = self::_getObjectIDFromTestID(
$row[
"test_fi"]);
11107 $all[$obj_id] = (bool)
$row[
"pass"];
11123 $this->online = (bool)$a_online;
11128 $this->print_best_solution_with_result = (bool) $status;
11158 $this->activation_visibility = (bool) $a_value;
11168 return (
bool)$this->activation_limited;
11173 $this->activation_limited = (bool)$a_value;
11185 $this->_highscore_enabled = (bool)$a_enabled;
11195 return (
bool) $this->_highscore_enabled;
11207 $this->_highscore_anon = (bool)$a_anon;
11221 return (
bool) $this->_highscore_anon;
11251 $this->_highscore_achieved_ts = (bool)$a_achieved_ts;
11261 return (
bool) $this->_highscore_achieved_ts;
11271 $this->_highscore_score = (bool)$a_score;
11281 return (
bool) $this->_highscore_score;
11291 $this->_highscore_percentage = (bool)$a_percentage;
11301 return (
bool) $this->_highscore_percentage;
11311 $this->_highscore_hints = (bool)$a_hints;
11321 return (
bool) $this->_highscore_hints;
11331 $this->_highscore_wtime = (bool)$a_wtime;
11341 return (
bool) $this->_highscore_wtime;
11351 $this->_highscore_own_table = (bool)$a_own_table;
11361 return (
bool) $this->_highscore_own_table;
11371 $this->_highscore_top_table = (bool)$a_top_table;
11381 return (
bool) $this->_highscore_top_table;
11392 $this->_highscore_top_num = (int)$a_top_num;
11405 $retval = $a_retval;
11406 if ( (
int) $this->_highscore_top_num != 0)
11408 $retval = $this->_highscore_top_num;
11422 return self::HIGHSCORE_SHOW_ALL_TABLES;
11426 return self::HIGHSCORE_SHOW_TOP_TABLE;
11431 return self::HIGHSCORE_SHOW_OWN_TABLE;
11443 case self::HIGHSCORE_SHOW_ALL_TABLES:
11448 case self::HIGHSCORE_SHOW_TOP_TABLE:
11453 case self::HIGHSCORE_SHOW_OWN_TABLE:
11464 switch ($specific_answer_feedback)
11467 $this->specific_answer_feedback = 1;
11470 $this->specific_answer_feedback = 0;
11477 switch ($this->specific_answer_feedback)
11514 require_once(
'Modules/TestQuestionPool/classes/class.assQuestion.php');
11522 $obligationPossible = call_user_func(array($classConcreteQuestion,
'isObligationPossible'), $questionId);
11524 return $obligationPossible;
11537 $rset = $ilDB->queryF(
'SELECT obligatory FROM tst_test_question WHERE question_fi = %s', array(
'integer'), array($question_id));
11539 if(
$row = $ilDB->fetchAssoc($rset) )
11541 return (
bool)
$row[
'obligatory'];
11563 $rset = $ilDB->queryF(
11564 'SELECT obligations_answered FROM tst_pass_result WHERE active_fi = %s AND pass = %s',
11565 array(
'integer',
'integer'),
11566 array($active_id,
$pass)
11569 if(
$row = $ilDB->fetchAssoc($rset) )
11571 return (
bool)
$row[
'obligations_answered'];
11574 return !self::hasObligations($test_id);
11589 $rset = $ilDB->queryF(
11590 'SELECT count(*) cnt FROM tst_test_question WHERE test_fi = %s AND obligatory = 1',
11591 array(
'integer'), array($test_id)
11594 $row = $ilDB->fetchAssoc($rset);
11596 return (
bool)
$row[
'cnt'] > 0;
11639 #region Examview / PDF Examview 11702 return (strlen($this->activation_starting_time)) ? $this->activation_starting_time : NULL;
11707 return (strlen($this->activation_ending_time)) ? $this->activation_ending_time : NULL;
11715 $result = $ilDB->query(
"SELECT tst_times.active_fi, tst_times.started FROM tst_times, tst_active WHERE tst_times.active_fi = tst_active.active_id ORDER BY tst_times.tstamp DESC");
11718 $times[
$row[
'active_fi']] = $row[
'started'];
11728 $result = $ilDB->queryF(
"SELECT tst_addtime.active_fi, tst_addtime.additionaltime FROM tst_addtime, tst_active WHERE tst_addtime.active_fi = tst_active.active_id AND tst_active.test_fi = %s",
11734 $times[
$row[
'active_fi']] = $row[
'additionaltime'];
11743 $result = $ilDB->queryF(
"SELECT additionaltime FROM tst_addtime WHERE active_fi = %s",
11750 return $row[
'additionaltime'];
11759 $participants = array();
11760 if ($active_id == 0)
11762 $result = $ilDB->queryF(
"SELECT active_id FROM tst_active WHERE test_fi = %s",
11768 array_push($participants,
$row[
'active_id']);
11773 array_push($participants, $active_id);
11775 foreach ($participants as $active_id)
11777 $result = $ilDB->queryF(
"SELECT active_fi FROM tst_addtime WHERE active_fi = %s",
11783 $ilDB->manipulateF(
"DELETE FROM tst_addtime WHERE active_fi = %s",
11789 $ilDB->manipulateF(
"UPDATE tst_active SET tries = %s, submitted = %s, submittimestamp = %s WHERE active_id = %s",
11790 array(
'integer',
'integer',
'timestamp',
'integer'),
11791 array(0, 0, NULL, $active_id)
11794 $ilDB->manipulateF(
"INSERT INTO tst_addtime (active_fi, additionaltime, tstamp) VALUES (%s, %s, %s)",
11795 array(
'integer',
'integer',
'integer'),
11796 array($active_id, $minutes, time())
11799 require_once
'Modules/Test/classes/class.ilObjAssessmentFolder.php';
11826 public function getMaxPassOfTest()
11834 SELECT MAX(tst_pass_result.pass) + 1 max_res 11835 FROM tst_pass_result 11836 INNER JOIN tst_active ON tst_active.active_id = tst_pass_result.active_fi 11837 WHERE test_fi = '.$ilDB->quote($this->
getTestId(),
'integer').
' 11841 return (
int)
$data[
'max_res'];
11854 $exam_id_query =
'SELECT exam_id FROM tst_pass_result WHERE active_fi = %s AND pass = %s';
11855 $exam_id_result = $ilDB->queryF( $exam_id_query, array(
'integer',
'integer' ), array( $active_id,
$pass ) );
11856 if ($ilDB->numRows( $exam_id_result ) == 1)
11858 $exam_id_row = $ilDB->fetchAssoc( $exam_id_result );
11860 if ($exam_id_row[
'exam_id'] != null)
11862 return $exam_id_row[
'exam_id'];
11880 $inst_id = $ilSetting->get(
'inst_id', null );
11882 if($test_obj_id === null)
11884 $obj_id = self::_getObjectIDFromActiveID($active_id);
11888 $obj_id = $test_obj_id;
11891 $examId =
'I' . $inst_id .
'_T' . $obj_id .
'_A' . $active_id .
'_P' .
$pass;
11943 $this->char_selector_availability = (int) $availability;
11959 $this->char_selector_definition = $definition;
12002 $query =
"SELECT question_set_type FROM tst_tests WHERE obj_fi = %s";
12004 $res = $ilDB->queryF(
$query, array(
'integer'), array($objId));
12008 while(
$row = $ilDB->fetchAssoc(
$res) )
12055 return self::lookupQuestionSetType($a_obj_id) == self::QUESTION_SET_TYPE_RANDOM;
12063 return $lng->
txt(
'tst_question_set_type_fixed');
12066 return $lng->
txt(
'tst_question_set_type_random');
12069 return $lng->
txt(
'tst_question_set_type_dynamic');
12102 require_once
'class.ilTestScoring.php';
12104 $scoring->setPreserveManualScores($preserve_manscoring);
12105 $scoring->recalculateSolutions();
12110 require_once
'Modules/Test/classes/class.ilObjTestDynamicQuestionSetConfig.php';
12112 $questionChangeListeners = array(
12116 return $questionChangeListeners;
12126 INNER JOIN tst_tests 12127 ON test_id = test_fi 12131 $res = $ilDB->queryF(
$query, array(
'integer'), array($userId));
12135 while(
$row = $ilDB->fetchAssoc(
$res) )
12137 $objIds[] = (int)
$row[
'obj_fi'];
12170 if( !self::isSkillManagementGloballyActivated() )
12182 if( self::$isSkillManagementGloballyActivated === null )
12184 include_once
'Services/Skill/classes/class.ilSkillManagementSettings.php';
12187 self::$isSkillManagementGloballyActivated = $skmgSet->isActivated();
12190 return self::$isSkillManagementGloballyActivated;
12232 $activeId = $testOBJ->getActiveIdOfUser($userId);
12234 require_once
'Modules/Test/classes/class.ilTestSessionFactory.php';
12237 require_once
'Modules/Test/classes/class.ilTestSequenceFactory.php';
12240 $testSession = $testSessionFactory->getSession($activeId);
12241 $testSequence = $testSequenceFactory->getSequenceByPass($testSession, $testSession->getPass());
12242 $testSequence->loadFromDb();
12245 if($a_force_new_run)
12247 if( $testSequence->hasSequence() )
12249 $testSession->increasePass();
12251 $testSession->setLastSequence(0);
12252 $testSession->saveToDb();
12266 $activeId = $testOBJ->getActiveIdOfUser($userId);
12268 require_once
'Modules/Test/classes/class.ilTestSessionFactory.php';
12271 $testSessionFactory->reset();
12273 require_once
'Modules/Test/classes/class.ilTestSequenceFactory.php';
12276 $testSession = $testSessionFactory->getSession($activeId);
12277 $testSequence = $testSequenceFactory->getSequenceByPass($testSession, $testSession->getPass());
12278 $testSequence->loadFromDb();
12280 return $testSequence->hasSequence();
setStartingTime($starting_time=NULL)
Sets the starting time in database timestamp format for the test.
setAllowedUsers($a_allowed_users)
static _getUserIdFromActiveId($active_id)
isShowGradingMarkEnabled()
setAnswerFeedback($answer_feedback=0)
Sets the generic feedback for the test Use setGenericAnswerFeedback instead.
saveCertificateVisibility($a_value)
Saves the visibility settings of the certificate.
static _lookupName($a_user_id)
lookup user name
getExportDirectory()
Get the location of the export directory for the test.
setHighscoreTopTable($a_top_table)
Sets if the top-rankings table should be shown.
setPassScoring($a_pass_scoring=SCORE_LAST_PASS)
Sets the pass scoring.
static getPluginObject($a_ctype, $a_cname, $a_slot_id, $a_pname)
Get plugin object.
setSkillServiceEnabled($skillServiceEnabled)
getListOfQuestionsDescription()
Returns TRUE if the list of questions should be presented with the question descriptions.
getScoreReporting()
Gets the score reporting of the ilObjTest object.
getCharSelectorDefinition()
getTimeExtensionsOfParticipants()
_getCountSystem($active_id)
Gets the count system for the calculation of points.
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms public
isHTML($a_text)
Checks if a given string contains HTML or not.
const SCORE_REPORTING_DISABLED
inviteRole($role_id)
Invites all users of a role to a test.
setRedirectionUrl($redirection_url=NULL)
setMailNotification($a_notification)
Set mail notification settings.
saveToDb($properties_only=FALSE)
Saves a ilObjTest object to a database.
isDynamicTest()
Returns the fact wether this test is a dynamic question set test or not.
static deliverData($a_data, $a_filename, $mime="application/octet-stream", $charset="")
deliver data for download via browser.
setEnableExamview($enable_examview)
isTestFinished($active_id)
returns if the active for user_id has been submitted
static getPoolQuestionChangeListener(ilDB $db, $poolObjId)
static _instanciateQuestion($question_id)
Creates an instance of a question with a given question id.
static _getOriginalId($question_id)
Returns the original id of a question.
createMetaData()
Create meta data entry.
getActivationVisibility()
getHighscoreOwnTable()
Gets if the own rankings table should be shown.
setPassDeletionAllowed($passDeletionAllowed)
setter for the test setting passDeletionAllowed
getECTSOutput()
{int|bool}
_getTitleOutput($active_id)
Returns the value of the title_output status.
setOnline($a_online=true)
getFixedParticipants()
Returns the fixed participants status.
setShowExamIdInTestPassEnabled($show_exam_id_in_test_pass_enabled)
deliverPDFfromFO($fo, $title=null)
Delivers a PDF file from a XSL-FO string.
getReportingDate()
Gets the reporting date of the ilObjTest object.
_lookupAnonymity($a_obj_id)
Returns the anonymity status of a test with a given object id.
static _includeClass($question_type, $gui=0)
Include the php class file for a given question type.
getCustomStyle()
Get the custom style.
getResultsPresentation()
Returns the combined results presentation value.
const DEFAULT_PROCESSING_TIME_MINUTES
static allObligationsAnswered($test_id, $active_id, $pass)
checks wether all questions marked as obligatory were answered within the test pass with given testId...
_lookupAuthor($obj_id)
Gets the authors name of the ilObjTest object.
logAction($logtext="", $question_id="")
Logs an action into the Test&Assessment log.
_lookupOwner($a_id)
lookup object owner
getProcessingTimeAsMinutes()
isPassDeletionAllowed()
getter for the test setting passDeletionAllowed
_buildName($is_anonymous, $user_id, $firstname, $lastname, $title)
Builds a user name for the output depending on test type and existence of the user.
removeTestResultsByUserIds($userIds)
setShowExamviewPdf($show_examview_pdf)
setShowPassDetails($a_details=1)
Sets if the pass details should be shown when a test is not finished.
& createQuestionGUI($question_type, $question_id=-1)
Creates a question GUI instance of a given question type.
isShowExamIdInTestPassEnabled()
static prepareTextareaOutput($txt_output, $prepare_for_latex_output=FALSE, $omitNl2BrWhenTextArea=false)
Prepares a string for a text area output where latex code may be in it If the text is HTML-free...
setQuestionOrderAndObligations($orders, $obligations)
setRedirectionMode($redirection_mode=0)
processPrintoutput2FO($print_output)
Convert a print output to XSL-FO.
setQuestionSetType($questionSetType)
setter for question set type
getInstanceByRefId($a_ref_id, $stop_on_error=true)
get an instance of an Ilias object by reference id
setECTSOutput($a_ects_output)
{}
_getPassScoring($active_id)
Gets the pass scoring type.
getTestStyleLocation($mode="output")
get full style sheet file name (path inclusive) of current user
static _prepareCloneSelection($a_ref_ids, $new_type, $show_path=true)
Prepare copy wizard object selection.
_getTestIDFromObjectID($object_id)
Returns the ILIAS test id for a given object id.
cloneObject($a_target_id, $a_copy_id=0, $a_omit_tree=false)
Clone object permissions, put in tree ...
saveCompleteStatus(ilTestQuestionSetConfig $testQuestionSetConfig)
Checks if the test is complete and saves the status in the database.
_getImportDirectory()
Get the import directory location of the test.
$online
the object's online status
setReportingDate($reporting_date)
Sets the reporting date of the ilObjTest object.
setShowSolutionDetails($a_details=1)
Sets if the the solution details should be presented to the user or not.
canShowCertificate($testSession, $user_id, $active_id)
Checks whether the certificate button could be shown on the info page or not.
getMailNotification()
Get mail notification settings.
removeAllTestEditings($question_id="")
Removes all references to the question in executed tests in case the question has been changed...
& evalStatistical($active_id)
Returns the statistical evaluation of the test for a specified user.
& getInvitedUsers($user_id="", $order="login, lastname, firstname")
Returns a list of all invited users in a test.
setCertificateVisibility($a_value)
Sets the visibility settings of the certificate.
getEnableProcessingTime()
Returns the state of the processing time (enabled/disabled)
getProcessingTimeAsArray()
Returns the processing time for the test.
const QUESTION_SET_TYPE_RANDOM
type setting value for random question set
setListOfQuestionsDescription($a_value=TRUE)
Sets the show_summary attribute to TRUE if the list of questions should be presented with the questio...
getListOfQuestionsStart()
Returns if the list of questions should be presented as the first page of the test.
static _lookupRandomTest($a_obj_id)
Returns the fact wether the test with passed obj id is a random questions test or not...
getTestParticipantsForManualScoring($filter=NULL)
& getParticipants()
Returns all persons who started the test.
Skill management settings.
getCompleteWorkingTimeOfParticipant($active_id)
Returns the complete working time in seconds for a test participant.
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
This class handles all operations on files (attachments) in directory ilias_data/mail.
loadFromDb()
loads the question set config for current test from the database
setResultFilterTaxIds($resultFilterTaxIds)
getCertificateVisibility()
Returns the visibility settings of the certificate.
loadFromDb()
Loads a ilObjTest object from a database.
setShuffleQuestions($a_shuffle)
Sets the status of the shuffle_questions variable.
setListOfQuestionsStart($a_value=TRUE)
Sets if the the list of questions as the start page of the test.
setFixedParticipants($a_value=1)
Sets the fixed participants status.
_getPass($active_id)
Retrieves the actual pass of a given user for a given test.
fromXML(ilQTIAssessment $assessment)
Receives parameters from a QTI parser and creates a valid ILIAS test object.
getPresentationMaterial()
{ilQTIPresentationMaterial|null}
getShowSolutionFeedback()
Returns if the feedback should be presented to the solution or not.
setListOfQuestions($a_value=TRUE)
Sets if the the list of questions should be presented to the user or not.
setCharSelectorDefinition($definition='')
Class ilObject Basic functions for all objects.
getShowKioskModeParticipant()
Returns the status of the kiosk mode participant.
static $isSkillManagementGloballyActivated
setHighscoreScore($a_score)
Sets if the actual score should be displayed.
insertQuestion(ilTestQuestionSetConfig $testQuestionSetConfig, $question_id, $linkOnly=false)
Insert a question in the list of questions.
getQuestionSetTypeTranslation(ilLanguage $lng, $questionSetType)
getHighscoreAchievedTS()
Returns if date and time of the scores achievement should be displayed.
getTestId()
Gets the database id of the additional test data.
setHighscoreWTime($a_wtime)
Sets if the workingtime of the scores should be shown.
& evalTotalPersonsArray($name_sort_order="asc")
Returns all persons who started the test.
_isComplete($obj_id)
Returns true, if a test is complete for use.
Class ilTestMailNotification.
static getItem($a_ref_id)
Get item data.
static _getObjectsByOperations($a_obj_type, $a_operation, $a_usr_id=0, $limit=0)
Get all objects of a specific type and check access This function is not recursive, instead it parses the serialized rbac_pa entries.
getListOfQuestionsSettings()
Returns the settings for the list of questions options in the test properties This could contain one ...
getShowInfo()
Gets whether the complete information page is shown or the required data only.
_getResultPass($active_id)
Retrieves the pass number that should be counted for a given user.
& getQuestionTitlesAndIndexes()
Returns the titles of the test questions in question sequence.
getMailNotificationType()
isNewRandomTest()
Checks wheather the test is a new random test (using tst_rnd_cpy) or an old one.
setShowSolutionAnswersOnly($a_full=TRUE)
Set to true, if the full solution (including the ILIAS content pages) should be shown in the solution...
setKioskMode($a_kiosk=FALSE)
Sets the kiosk mode for the test.
& _instanciateQuestion($question_id)
Creates an instance of a question with a given question id.
getJavaScriptOutput()
Returns if Javascript should be chosen for drag & drop actions for the active user.
const TIMINGS_DEACTIVATED
getECTSGrade($passed_array, $reached_points, $max_points)
{Returns the ECTS grade for a number of reached points.An array with the points of all users who pass...
_getMCScoring($active_id)
Gets the scoring type for multiple choice questions.
getShowSolutionAnswersOnly()
Returns if the full solution (including ILIAS content) should be presented to the solution or not...
setShowSolutionSignature($a_signature=FALSE)
Set to TRUE, if the signature field should be shown in the solution.
& createTestSequence($active_id, $pass, $shuffle)
setFinalStatement($a_statement="")
Sets the final statement text of the ilObjTest object.
& _evalResultsOverview($test_id)
Creates an associated array with the results of all participants of a test.
& getQuestionsOfTest($active_id)
Retrieves all the assigned questions for all test passes of a test participant.
setScoreCutting($a_score_cutting=SCORE_CUT_QUESTION)
Sets the type of score cutting.
sendAdvancedNotification($active_id)
setEndingTime($ending_time=NULL)
Sets the ending time in database timestamp format for the test.
getXMLZip()
Get zipped xml file for test.
_getWorkingTimeOfParticipantForPass($active_id, $pass)
Returns the complete working time in seconds for a test participant.
setResetProcessingTime($reset=0)
Sets wheather the processing time should be reset or not.
setCharSelectorAvailability($availability)
setShowMarker($a_value=1)
Sets the marker button status.
inviteUser($user_id, $client_ip="")
Invites a user to a test.
static _lookupTitle($a_id)
lookup object title
getAnonymity()
Returns the anonymity status of the test.
toXML()
Returns a QTI xml representation of the test.
isScoreReportingAvailable()
getQuestionCount()
Returns the number of questions in the test.
setEndingTimeEnabled($ending_time_enabled)
_getQuestionTitle($question_id)
Returns the question title of a question with a given id.
setActivationLimited($a_value)
$showGradingStatusEnabled
TableGUI class for evaluation of all users.
_lookupTestObjIdForQuestionId($a_q_id)
Get test Object ID for question ID.
setSpecificAnswerFeedback($specific_answer_feedback)
getShuffleQuestions()
Returns the status of the shuffle_questions variable.
prepareTextareaOutput($txt_output, $prepare_for_latex_output=FALSE, $omitNl2BrWhenTextArea=false)
Prepares a string for a text area output in tests.
$offeringQuestionHintsEnabled
setTestId($a_id)
Sets the test ID.
_getQuestionCountAndPointsForPassOfParticipant($active_id, $pass)
isShowExamIdInTestResultsEnabled()
_getSolvedQuestions($active_id, $question_fi=null)
get solved questions
_getVisitTimeOfParticipant($test_id, $active_id)
Returns the first and last visit of a participant.
& getTestParticipants()
Returns a list of all participants in a test.
getCompleteWorkingTime($user_id)
Returns the complete working time in seconds a user worked on the test.
getShowSolutionDetails()
Returns if the solution details should be presented to the user or not.
getImagePathWeb()
Returns the web image path for web accessable images of a test The image path is under the web access...
_enabledAssessmentLogging()
check wether assessment logging is enabled or not
_getBestPass($active_id)
Retrieves the best pass of a given user for a given test.
canShowTestResults($testSession, $user_id)
startingTimeReached()
Returns true if the starting time of a test is reached A starting time is not available for self asse...
_cleanupMediaObjectUsage($a_text, $a_usage_type, $a_usage_id)
synchronises appearances of media objects in $a_text with media object usage table ...
questionMoveDown($question_id)
Moves a question down in order.
getOwner()
get object owner
getHighscoreWTime()
Gets if the column with the workingtime should be shown.
isSingleChoiceTest()
Returns TRUE if the test contains single choice results only.
getActiveIdOfUser($user_id="", $anonymous_id="")
Gets the active id of a given user.
setShowGradingStatusEnabled($showGradingStatusEnabled)
$participantDataExist
holds the fact wether participant data exists or not DO NOT USE TIS PROPERTY DRIRECTLY ALWAYS USE ilO...
static getASCIIFilename($a_filename)
convert utf8 to ascii filename
static _replaceMediaObjectImageSrc($a_text, $a_direction=0, $nic=IL_INST_ID)
replaces image source from mob image urls with the mob id or replaces mob id with the correct image s...
setShowKioskModeParticipant($a_participant=FALSE)
Set to true, if the participant's name should be shown in kiosk mode.
ilObject($a_id=0, $a_reference=true)
Constructor public.
& getAllQuestions($pass=NULL)
Returns all questions of a test in test order.
getShowSolutionListComparison()
setQuestionSetSolved($value, $question_id, $user_id)
sets question solved state to value for given user_id
Base Exception for all Exceptions relating to Modules/Test.
getHighscoreTopTable()
Gets, if the top-rankings table should be shown.
setMailNotificationType($a_type)
setTitle($a_title)
set object title
startWorkingTime($active_id, $pass)
Write the initial entry for the tests working time to the database.
setObligationsEnabled($obligationsEnabled=true)
sets obligations enabled/disabled
setHighscoreOwnTable($a_own_table)
Sets if the table with the own ranking should be shown.
setTitleOutput($title_output=0)
Sets the status of the title output.
disinviteUser($user_id)
Disinvites a user from a test.
deleteRequestsByActiveIds($activeIds)
Deletes all hint requests relating to a testactive included in given active ids.
_getQuestionType($question_id)
Returns the question type of a question with a given id.
setShowSolutionPrintview($a_printview=1)
Sets if the the solution printview should be presented to the user or not.
areObligationsEnabled()
returns the fact wether obligations are enabled or not
& getQuestionTitles()
Returns the titles of the test questions in question sequence.
& evalResultsOverview()
Creates an associated array with the results of all participants of a test.
getSequenceSettings()
SEQUENCE SETTING = POSTPONING ENABLED !!
& getCompleteEvaluationData($withStatistics=TRUE, $filterby="", $filtertext="")
isMaxProcessingTimeReached($starting_time, $active_id)
Returns whether the maximum processing time for a test is reached or not.
& _getCompleteWorkingTimeOfParticipants($test_id)
Returns the complete working time in seconds for all test participants.
isRandomTest()
Returns the fact wether this test is a random questions test or not.
canViewResults()
Returns true, if the test results can be viewed.
setTestFinalBroken($testFinalBroken)
getHighscorePercentage()
Gets if the percentage column should be shown.
isFixedTest()
Returns the fact wether this test is a fixed question set test or not.
checkMarks()
{boolean|string True or an error string which can be used for display purposes}
static isQuestionObligatory($question_id)
checks wether the question with given id is marked as obligatory or not
updateWorkingTime($times_id)
Update the working time of a test when a question is answered.
notify($a_event, $a_ref_id, $a_parent_non_rbac_id, $a_node_id, $a_params=0)
notifys an object about an event occured Based on the event happend, each object may decide how it re...
$instantFeedbackAnswerFixationEnabled
exportFileItems($a_target_dir, &$expLog)
export files of file itmes
setCustomStyle($a_customStyle=NULL)
Set the custom style.
setSignSubmission($sign_submission)
$char_selector_definition
getSpecificAnswerFeedback()
getImportMapping()
get array of (two) new created questions for import id
getAnsweredQuestionCount($active_id, $pass=NULL)
Retrieves the number of answered questions for a given user in a given test.
setProcessingTimeByMinutes($minutes)
addDefaults($a_name)
Adds the defaults of this test to the test defaults.
getCountSystem()
Gets the count system for the calculation of points.
const SCORE_REPORTING_IMMIDIATLY
getIntroduction()
Gets the introduction text of the ilObjTest object.
_getObjectIDFromActiveID($active_id)
Returns the ILIAS test object id for a given active id.
getMarkSchemaForeignId()
{int}
setNrOfTries($nr_of_tries=0)
Sets the nr of tries for the test.
setScoreReporting($score_reporting=0)
Sets the score reporting of the ilObjTest object.
__construct($a_id=0, $a_call_by_reference=true)
Constructor.
removeTestResults(ilTestParticipantData $participantData)
setAnswerFeedbackPoints($answer_feedback_points=0)
Sets the answer specific feedback of reached points for the test.
getHighscoreHints()
Gets, if the column with the number of requested hints should be shown.
setShowCancel($a_value=1)
Sets the cancel test button status.
getQuestiontext($question_id)
Returns the question text for a given question.
static _getInstance($a_copy_id)
Get instance of copy wizard options.
getShowKioskModeTitle()
Returns the status of the kiosk mode title.
buildName($user_id, $firstname, $lastname, $title)
Builds a user name for the output depending on test type and existence of the user.
& getTestDefaults($test_defaults_id)
Returns the test defaults for a given id.
setLimitUsersEnabled($limitUsersEnabled)
setAutosaveIval($autosave_ival)
setExportSettingsSingleChoiceShort($a_settings)
getVisitTimeOfParticipant($active_id)
Returns the first and last visit of a participant.
getListOfQuestions()
Returns if the list of questions should be presented to the user or not.
QTIMaterialToString($a_material)
Reads an QTI material tag an creates a text string.
isExecutable($testSession, $user_id, $allowPassIncrease=FALSE)
Checks if the test is executable by the given user.
setProcessingTime($processing_time="00:00:00")
Sets the processing time for the test.
_getSolutionMaxPass($question_id, $active_id)
Returns the maximum pass a users question solution.
setCountSystem($a_count_system=COUNT_PARTIAL_SOLUTIONS)
Sets the count system for the calculation of points.
createRandomSolutions($number)
getAllTestResults($participants, $prepareForCSV=true)
returns all test results for all participants
getResetProcessingTime()
Returns wheather the processing time should be reset or not.
setScoringFeedbackOptionsByArray($options)
if(!is_array($argv)) $options
getHighscoreAnon()
Gets if the highscores should be anonymized per setting.
setExportSettings($a_settings)
removeQuestion($question_id)
Removes a question from the test object.
getId()
get object id public
setHighscoreTopNum($a_top_num)
Sets the number of entries which are to be shown in the top-rankings table.
setActivationVisibility($a_value)
hasQuestionsWithoutQuestionpool()
evalTotalPersons()
Returns the number of persons who started the test.
hasSingleChoiceQuestions()
Returns TRUE if the test contains single choice results.
const ILIAS_ABSOLUTE_PATH
getStartingTimeOfUser($active_id, $pass=null)
Returns the unix timestamp of the time a user started a test.
getShowMarker()
Returns wheather the marker button is shown or not.
sendSimpleNotification($active_id)
getShowSolutionPrintview()
Returns if the solution printview should be presented to the user or not.
const SCORE_ZERO_POINTS_WHEN_UNANSWERED
getAnswerFeedback()
Returns 1 if generic answer feedback is activated.
deliverPDFfromHTML($content, $title=NULL)
Delivers a PDF file from XHTML.
_createImportDirectory()
creates data directory for import files (data_dir/tst_data/tst_<id>/import, depending on data directo...
hasNrOfTriesRestriction()
returns if the numbers of tries have to be checked
getTitleOutput()
Returns the value of the title_output status.
addExtraTime($active_id, $minutes)
const COUNT_PARTIAL_SOLUTIONS
getAuthor()
Gets the authors name of the ilObjTest object.
static _lookupDescription($a_id)
lookup object description
_addLog($user_id, $object_id, $logtext, $question_id="", $original_id="", $test_only=FALSE, $test_ref_id=NULL)
Add an assessment log entry.
getUsePreviousAnswers()
Returns if the previous answers should be shown for a learner.
getShowPassDetails()
Returns if the pass details should be shown when a test is not finished.
static getManualFeedback($active_id, $question_id, $pass)
Retrieves the manual feedback for a question in a test.
evalTotalFinished()
Returns the number of total finished tests.
isTestFinishedToViewResults($active_id, $currentpass)
Returns true if an active user completed a test pass and did not start a new pass.
getShowFinalStatement()
Returns whether the final statement should be shown or not.
addQTIMaterial(&$a_xml_writer, $a_material)
Creates a QTI material tag from a plain text or xhtml text.
setTemplate($template_id)
questionMoveUp($question_id)
Moves a question up in order.
& processCSVRow($row, $quoteAll=FALSE, $separator=";")
Processes an array as a CSV row and converts the array values to correct CSV values.
static _lookupObjId($a_id)
special template class to simplify handling of ITX/PEAR
setShowInfo($a_info=1)
Set whether the complete information page is shown or the required data only.
static collectFileItems($a_page, $a_domdoc)
Get all file items that are used within the page.
getEvaluationAdditionalFields()
Gets additional user fields that should be shown in the user evaluation.
& _getAvailableTests($use_object_id=FALSE)
Returns the available tests for the active user.
getShowSolutionSuggested()
isSkillServiceToBeConsidered()
_setImportDirectory($a_import_dir=null)
set import directory
exportXMLMetaData(&$a_xml_writer)
export content objects meta data to xml (see ilias_co.dtd)
setInstantFeedbackSolution($instant_feedback=0)
Sets the instant feedback for the solution.
canShowSolutionPrintview($user_id=NULL)
Calculates if a user may see the solution printview of his/her test results.
static formatDate(ilDateTime $date)
Format a date public.
setAllowedUsersTimeGap($a_allowed_users_time_gap)
getTitle()
get object title public
applyDefaults($test_defaults)
Applies given test defaults to this test.
randomSelectQuestions($nr_of_questions, $questionpool, $use_obj_id=0, $qpls="", $pass=NULL)
Returns a random selection of questions.
lookupExamId($active_id, $pass)
getDescription()
get object description
getProcessingTime()
Returns the processing time for the test.
isOfferingQuestionHintsEnabled()
returns the fact wether offering hints is enabled or not
removeTestActives($activeIds)
exportXMLMediaObjects(&$a_xml_writer, $a_inst, $a_target_dir, &$expLog)
export media objects to xml (see ilias_co.dtd)
hasRandomQuestionsForPass($active_id, $pass)
Checkes wheather a random test has already created questions for a given pass or not.
redirection script todo: (a better solution should control the processing via a xml file) ...
cloneMetaData($target_obj)
Copy meta data.
xmlHeader()
Writes xml header public.
loadQuestions($active_id="", $pass=NULL)
Load the test question id's from the database.
isBestSolutionPrintedWithResult()
& getExistingQuestions($pass=NULL)
Get the id's of the questions which are already part of the test.
$activation_starting_time
static isSkillManagementGloballyActivated()
getAnswerFeedbackPoints()
Returns 1 if answer specific feedback as reached points is activated.
createExportDirectory()
creates data directory for export files (data_dir/tst_data/tst_<id>/export, depending on data directo...
getStartTestLabel($active_id)
Returns the "Start the Test" label for the Info page.
static ensureParticipantsLastActivePassFinished($testObjId, $userId, $a_force_new_run=FALSE)
setECTSGrades(array $a_ects_grades)
{}
userLookupFullName($user_id, $overwrite_anonymity=FALSE, $sorted_order=FALSE, $suffix="")
Returns the full name of a test user according to the anonymity status.
getMarkSchema()
{ASS_MarkSchema}
getAggregatedResultsData()
Returns the aggregated test results.
getQuestionTitle($title)
Returns the title of a test question and checks if the title output is allowed.
& getAvailableQuestionpools($use_object_id=false, $equal_points=false, $could_be_offline=false, $show_path=FALSE, $with_questioncount=FALSE, $permission="read")
Returns the available question pools for the active user.
getStartingTime()
Returns the starting time of the test.
getStartingTimeOfParticipants()
setAnonymity($a_value=0)
Sets the anonymity status of the test.
static getPoolQuestionChangeListeners(ilDB $db, $poolObjId)
_getMaxPass($active_id)
Retrieves the maximum pass of a given user for a given test in which the user answered at least one q...
getShowSolutionSignature()
Returns if the signature field should be shown in the test results.
getAllRTEContent()
Returns the content of all RTE enabled text areas in the test.
static removeTrailingPathSeparators($path)
_getParticipantData($active_id)
Retrieves a participant name from active id.
static isQuestionObligationPossible($questionId)
checks wether the obligation for question with given id is possible or not
static _lookupFinishedUserTests($a_user_id)
Gather all finished tests for user.
pcArrayShuffle($array)
Shuffles the values of a given array.
removeTestResultsForUser($user_id)
getType()
get object type public
_getUsePreviousAnswers($active_id, $user_active_user_setting=false)
Returns if the previous results should be hidden for a learner.
getInstantFeedbackSolution()
Returns 1 if the correct solution will be shown after answering a question.
& getQuestionTypeTranslations()
static isParticipantsLastPassActive($testObjId, $userId)
deleteRequestsByQuestionIds($questionIds)
Deletes all hint requests relating to a question included in given question ids.
_getLogLanguage()
retrieve the log language for assessment logging
getFinalStatement()
Gets the final statement.
setKiosk($kiosk=0)
Sets the kiosk mode for the test.
isHighscoreAnon()
Gets if the highscores should be displayed anonymized.
inviteGroup($group_id)
Invites all users of a group to a test.
setUsePreviousAnswers($use_previous_answers=1)
Sets the status of the visibility of previous learner answers.
setTimingType($a_type)
Set timing type.
_getScoreCutting($active_id)
Determines if the score of a question should be cut at 0 points or the score of the whole test...
static makeDir($a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
setResultsPresentation($a_results_presentation=3)
Sets the combined results presentation value.
const SCORE_REPORTING_FINISHED
setShowSolutionFeedback($a_feedback=TRUE)
Sets if the the feedback should be presented to the user in the solution or not.
isInstantFeedbackAnswerFixationEnabled()
$char_selector_availability
static _getECTSGrade($points_passed, $reached_points, $max_points, $a, $b, $c, $d, $e, $fx)
{Returns the ECTS grade for a number of reached points.The points reached in the test The maximum num...
const TEST_FIXED_SEQUENCE
Test constants.
getPassword()
Returns the password for test access.
getNrOfTries()
Returns the nr of tries for the test.
duplicateQuestionForTest($question_id)
Takes a question and creates a copy of the question for use in the test.
setForceJS($a_js=1)
Set whether JavaScript should be forced for tests.
setPostponingEnabled($postponingEnabled)
isScoreReportingEnabled()
static factory($a_package)
Create an XML_RPC2 client instance.
static hasObligations($test_id)
returns the fact wether the test with given test id contains questions markes as obligatory or not ...
setHighscoreHints($a_hints)
Sets if the number of requested hints should be shown.
setEnableProcessingTime($enable=0)
Sets the processing time enabled or disabled.
_getObjectIDFromTestID($test_id)
Returns the ILIAS test object id for a given test id.
& getTotalPointsPassedArray()
Returns an array with the total points of all users who passed the test This array could be used for ...
static _getSuggestedSolutionOutput($question_id)
Returns the output of the suggested solution.
getQuestionDataset($question_id)
Returns the dataset for a given question id.
_getLastAccess($active_id)
evalTotalStartedAverageTime()
Returns the average processing time for all started tests.
getResultsForActiveId($active_id)
setResultsPresentationOptionsByArray($options)
setEnabledViewMode($mode)
getQuestionSetType()
getter for question set type
const SCORE_REPORTING_DATE
setHighscoreAchievedTS($a_achieved_ts)
Sets if the date and time of the scores achievement should be displayed.
getGenericAnswerFeedback()
Returns 1 if generic answer feedback is to be shown.
setEnableArchiving($enable_archiving)
getEstimatedWorkingTime()
Returns the estimated working time for the test calculated from the working time of the contained que...
isSingleChoiceTestWithoutShuffle()
Returns TRUE if the test contains single choice results and no shuffle only.
isQuestionSetConfigured()
$show_exam_id_in_test_pass_enabled
getEndingTime()
Returns the ending time of the test.
setListOfQuestionsEnd($a_value=TRUE)
Sets if the the list of questions as the end page of the test.
setPasswordEnabled($passwordEnabled)
setShowExamviewHtml($show_examview_html)
getActivationStartingTime()
getAvailableQuestions($arrFilter, $completeonly=0)
Calculates the available questions for a test.
& getUserData($ids)
Returns a data of all users specified by id list.
static getDataDir()
get data directory (outside webspace)
getScoreCutting()
Determines if the score of a question should be cut at 0 points or the score of the whole test...
setShowSolutionSuggested($a_solution=FALSE)
Set to TRUE, if the suggested solution should be shown in the solution.
static ilTempnam()
Create a temporary file in an ILIAS writable directory.
getCharSelectorAvailability()
getCustomStyles()
Return the available custom styles.
const HIGHSCORE_SHOW_TOP_TABLE
cleanupMediaobjectUsage()
Cleans up the media objects for all text fields in a test which are using an RTE field.
_lookupRandomTestFromActiveId($active_id)
Returns the random status of a test with a given object id.
deleteTest()
Deletes the test and all related objects, files and database entries.
setShowSolutionListComparison($a_comparison=FALSE)
Set to TRUE, if the list of answers should be shown prior to finish the test.
setOfferingQuestionHintsEnabled($offeringQuestionHintsEnabled)
sets offering question hints enabled/disabled
checkMaximumAllowedUsers()
moveQuestions($move_questions, $target_index, $insert_mode)
Move questions to another position.
exportPagesXML(&$a_xml_writer, $a_inst, $a_target_dir, &$expLog)
export pages of test to xml (see ilias_co.dtd)
recalculateScores($preserve_manscoring=false)
recursive_dirscan($dir, &$arr)
Recursively scans a given directory and writes path and filename into referenced array.
& evalTotalParticipantsArray($name_sort_order="asc")
Returns all participants who started the test.
$print_best_solution_with_result
setPrintBestSolutionWithResult($status)
getKioskMode()
Returns the kiosk mode.
const HIGHSCORE_SHOW_OWN_TABLE
setMCScoring($a_mc_scoring=SCORE_ZERO_POINTS_WHEN_UNANSWERED)
Sets the multiple choice scoring.
getExportSettingsSingleChoiceShort()
deleteDefaults($test_default_id)
Deletes the defaults for a test.
update()
update object data
endingTimeReached()
Returns true if the ending time of a test is reached An ending time is not available for self assessm...
getActivationEndingTime()
const QUESTION_SET_TYPE_FIXED
type setting value for fixed question set
isActiveTestSubmitted($user_id=null)
returns if the active for user_id has been submitted
setHighscoreAnon($a_anon)
Sets if the highscores should be anonymized.
modifyExportIdentifier($a_tag, $a_param, $a_value)
Returns the installation id for a given identifier.
setShowKioskModeTitle($a_title=FALSE)
Set to true, if the full test title should be shown in kiosk mode.
saveAuthorToMetadata($a_author="")
Saves an authors name into the lifecycle metadata if no lifecycle metadata exists This will only be c...
setActivationStartingTime($starting_time=NULL)
getRefId()
get reference id public
getQuestionType($question_id)
Returns the question type of a question with a given id.
static buildExamId($active_id, $pass, $test_obj_id=null)
static insertInstIntoID($a_value)
inserts installation id into ILIAS id
& getTestResult($active_id, $pass=NULL, $ordered_sequence=FALSE)
Calculates the results of a test for a given user and returns an array with all test results...
setGenericAnswerFeedback($generic_answer_feedback=0)
Sets if the generic feedback is to be shown in the test.
removeTestResultsByActiveIds($activeIds)
setShowExamIdInTestResultsEnabled($show_exam_id_in_test_results_enabled)
getSecondsUntilEndingTime()
Returns the seconds left from the actual time until the ending time.
deleteMetaData()
delete meta data entry
& getCompleteWorkingTimeOfParticipants()
Returns the complete working time in seconds for all test participants.
& _getAvailableQuestionpools($use_object_id=FALSE, $equal_points=FALSE, $could_be_offline=FALSE, $showPath=FALSE, $with_questioncount=FALSE, $permission="read", $usr_id="")
Returns the available question pools for the active user.
static getGuiClassNameByQuestionType($questionType)
canEditEctsGrades()
{boolean}
getProcessingTimeInSeconds($active_id="")
Returns the processing time for the test in seconds.
setDescription($a_desc)
set object description
getShowCancel()
Returns wheather the cancel test button is shown or not.
setIntroduction($introduction="")
Sets the introduction text of the ilObjTest object.
getNrOfResultsForPass($active_id, $pass)
Calculates the number of user results for a specific test pass.
setClientIP($user_id, $client_ip)
getTextAnswer($active_id, $question_id, $pass=NULL)
Returns the text answer of a given user for a given question.
isShowGradingStatusEnabled()
A class defining mark schemas for assessment test objects.
getHighscoreScore()
Gets if the score column should be shown.
static getTestObjIdsWithActiveForUserId($userId)
getListOfQuestionsEnd()
Returns if the list of questions should be presented as the last page of the test.
isPluginActive($a_pname)
Checks wheather or not a question plugin with a given name is active.
txt($a_topic, $a_default_lang_fallback_mod="")
gets the text for a given topic if the topic is not in the list, the topic itself with "-" will be re...
setHighscoreEnabled($a_enabled)
Sets if the highscore feature should be enabled.
create($a_upload=false)
create test object
& getWorkedQuestions($active_id, $pass=NULL)
Gets the id's of all questions a user already worked through.
& evalResultsOverviewOfParticipant($active_id)
Creates an associated array with the results for a given participant of a test.
saveQuestionsToDb()
Saves the test questions to the database.
getMCScoring()
Gets the scoring type for multiple choice questions.
setShowGradingMarkEnabled($showGradingMarkEnabled)
getHighscoreEnabled()
Gets the setting which determines if the highscore feature is enabled.
setAuthor($author="")
Sets the authors name of the ilObjTest object.
getKiosk()
Returns the kiosk mode.
moveQuestionAfterOLD($previous_question_id, $new_question_id)
setInstantFeedbackAnswerFixationEnabled($instantFeedbackAnswerFixationEnabled)
moveQuestionAfter($question_to_move, $question_before)
getPassFinishDate($active_id, $pass)
Retrieves the number of answered questions for a given user in a given test.
setHighscorePercentage($a_percentage)
Sets if the percentages of the scores pass should be shown.
setIntroductionEnabled($introductionEnabled)
static lookupQuestionSetType($objId)
lookup-er for question set type
static lookupQuestionSetTypeByActiveId($active_id)
returns the question set type of test relating to passed active id
_updateTestResultCache($active_id, ilAssQuestionProcessLocker $processLocker=null)
Move this to a proper place.
const QUESTION_SET_TYPE_DYNAMIC
type setting value for dynamic question set (continues testing mode)
static _isWorkedThrough($active_id, $question_id, $pass=NULL)
Returns true if the question was worked through in the given pass Worked through means that the user ...
_getActiveIdOfUser($user_id="", $test_id="")
Gets the active id of the tst_active table for the active user.
static getInstance($a_obj_id)
getDetailedTestResults($participants)
returns all test results for all participants
const HIGHSCORE_SHOW_ALL_TABLES
static delDir($a_dir, $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
isNrOfTriesReached($tries)
returns if number of tries are reached
exportXMLPageObjects(&$a_xml_writer, $a_inst, &$expLog)
export page objects to xml (see ilias_co.dtd)
& getQuestionsOfPass($active_id, $pass)
Retrieves all the assigned questions for a test participant in a given test pass. ...
getForceJS()
Gets whether JavaScript should be forced for tests.
Class ilObjectActivation.
isComplete(ilTestQuestionSetConfig $testQuestionSetConfig)
Returns true, if a test is complete for use and can be set online.
setActivationEndingTime($ending_time=NULL)
static getFeedbackClassNameByQuestionType($questionType)
setShowFinalStatement($show=0)
Sets whether the final statement should be shown or not.
read($a_force_db=false)
read object data from db into object
Test certificate adapter.
setSequenceSettings($sequence_settings=0)
SEQUENCE SETTING = POSTPONING ENABLED !!
setPassword($a_password=NULL)
Sets the password for test access.
setListOfQuestionsSettings($a_value=0)
Sets the settings for the list of questions options in the test properties This could contain one of ...
_getManualScoring()
Retrieve the manual scoring settings.
static _getTestDefaults($test_defaults_id)
setStartingTimeEnabled($starting_time_enabled)
getHighscoreTopNum($a_retval=10)
Gets the number of entries which are to be shown in the top-rankings table.
_lookupClientIP($a_user_id)
Lookup client ip.
isError($data, $code=null)
Tell whether a value is a PEAR error.
$show_exam_id_in_test_results_enabled
getImagePath()
Returns the image path for web accessable images of a test The image path is under the CLIENT_WEB_DIR...
getPassScoring()
Gets the pass scoring type.