4 require_once
'./Modules/TestQuestionPool/classes/class.assQuestion.php';
5 require_once
'./Modules/Test/classes/inc.AssessmentConstants.php';
6 require_once
'./Modules/TestQuestionPool/interfaces/interface.ilObjQuestionScoringAdjustable.php';
7 require_once
'./Modules/TestQuestionPool/interfaces/interface.iQuestionCondition.php';
8 require_once
'./Modules/TestQuestionPool/classes/class.ilUserQuestionResult.php';
41 require_once
'Modules/TestQuestionPool/classes/feedback/class.ilAssConfigurableMultiOptionQuestionFeedback.php';
43 $this->minAutoComplete = self::MIN_LENGTH_AUTOCOMPLETE;
45 $this->ilDB = $DIC->database();
46 $this->identical_scoring = 1;
151 return $this->minAutoComplete ? $this->minAutoComplete : self::MIN_LENGTH_AUTOCOMPLETE;
156 if (strlen($this->title)
158 && $this->long_menu_text
159 &&
sizeof($this->answers) > 0
160 &&
sizeof($this->correct_answers) > 0
195 if (!is_array($correct_answers_row[0]) ||
sizeof($correct_answers_row[0]) == 0) {
198 if ($correct_answers_row[1] > 0) {
199 array_push(
$points, $correct_answers_row[1]);
222 if (!in_array($answer, $answer_options)) {
251 $this->ilDB->manipulateF(
254 array( $this->
getId() )
256 $this->ilDB->manipulateF(
258 ) .
" (question_fi, long_menu_text, feedback_setting, min_auto_complete, identical_scoring) VALUES (%s, %s, %s, %s, %s)",
259 array(
"integer",
"text",
"integer",
"integer",
"integer"),
278 foreach ($gap[0] as $position => $answer) {
279 if ($type_array == null) {
282 $type = $type_array[$gap_number];
287 'question_fi' => array(
'integer', (
int) $this->
getId()),
288 'gap_number' => array(
'integer', (
int) $gap_number),
289 'position' => array(
'integer', (
int) $position)
292 'answer_text' => array(
'text', $answer),
293 'points' => array(
'float', $gap[1]),
294 'type' => array(
'integer', (
int)
$type)
307 foreach ($array as $gap =>
$values) {
311 $file_content .= $value .
"\n";
313 $file_content = rtrim($file_content,
"\n");
315 fwrite($file, $file_content);
331 foreach (
$files as $file) {
332 $gap = str_replace(
'.txt',
'', basename($file));
333 $answers[(int) $gap] = explode(
"\n", file_get_contents($file));
348 throw new ilException(
'Cannot create export directory');
352 !is_dir($folder_name) ||
353 !is_readable($folder_name) ||
354 !is_writable($folder_name)
356 throw new ilException(
'Cannot create export directory');
369 $this->
setId($question_id);
379 include_once(
"./Services/RTE/classes/class.ilRTE.php");
385 if (isset(
$data[
'feedback_setting'])) {
396 parent::loadFromDb($question_id);
401 $res = $this->db->queryF(
402 "SELECT * FROM {$this->getAnswerTableName()} WHERE question_fi = %s ORDER BY gap_number, position ASC",
408 while (
$data = $this->ilDB->fetchAssoc(
$res)) {
420 $res = $this->db->queryF(
421 'SELECT gap_number, answer_text FROM ' . $this->
getAnswerTableName() .
' WHERE question_fi = %s',
425 while (
$data = $this->ilDB->fetchAssoc(
$res)) {
439 $res = $this->db->queryF(
440 'SELECT answer_text FROM ' . $this->
getAnswerTableName() .
' WHERE question_fi = %s AND gap_number = %s',
441 array(
'integer',
'integer'),
442 array($question_id, $gap_id)
444 while (
$data = $this->ilDB->fetchAssoc(
$res)) {
453 $res = $this->db->queryF(
454 'SELECT points FROM ' . $this->
getAnswerTableName() .
' WHERE question_fi = %s AND gap_number = %s GROUP BY gap_number, points',
455 array(
'integer',
'integer'),
456 array($question_id, $gap_id)
458 while (
$data = $this->ilDB->fetchAssoc(
$res)) {
478 if ($this->
id <= 0) {
484 $this_id = $this->
getId();
488 include_once(
"./Modules/TestQuestionPool/classes/class.assQuestion.php");
492 if ((
int) $testObjId > 0) {
493 $clone->setObjId($testObjId);
513 $clone->copyPageOfQuestion($this_id);
514 $clone->copyXHTMLMediaObjectsOfQuestion($this_id);
515 $clone->onDuplicate($thisObjId, $this_id, $clone->getObjId(), $clone->getId());
522 if ($this->
id <= 0) {
528 include_once(
"./Modules/TestQuestionPool/classes/class.assQuestion.php");
531 $source_questionpool_id = $this->
getObjId();
532 $clone->setObjId($target_questionpool_id);
541 $clone->onCopy($source_questionpool_id,
$original_id, $clone->getObjId(), $clone->getId());
548 if ($this->
id <= 0) {
553 include_once(
"./Modules/TestQuestionPool/classes/class.assQuestion.php");
556 $sourceParentId = $this->
getObjId();
562 $clone->setObjId($targetParentId);
564 if ($targetQuestionTitle) {
565 $clone->setTitle($targetQuestionTitle);
569 $clone->copyPageOfQuestion($sourceQuestionId);
570 $clone->copyXHTMLMediaObjectsOfQuestion($sourceQuestionId);
572 $clone->onCopy($sourceParentId, $sourceQuestionId, $clone->getObjId(), $clone->getId());
591 if ($returndetails) {
592 throw new ilTestException(
'return details not implemented for ' . __METHOD__);
595 $found_values = array();
596 if (is_null(
$pass)) {
601 $found_values[(int)
$data[
'value1']] =
$data[
'value2'];
612 $solution_values_text = array();
613 foreach ($found_values as
$key => $answer) {
620 if ((in_array($answer, $solution_values_text)) && (
$points > 0)) {
625 array_push($solution_values_text, $answer);
642 if (is_null(
$pass)) {
643 include_once
"./Modules/Test/classes/class.ilObjTest.php";
649 $this->
getProcessLocker()->executeUserSolutionUpdateLockOperation(
function () use (&$entered_values, $active_id,
$pass, $authorized) {
654 if (strlen($value)) {
661 if ($entered_values) {
662 include_once(
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
667 include_once(
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
685 $ilDB = $DIC[
'ilDB'];
688 'authorized' =>
false,
689 'intermediate' =>
false 693 SELECT authorized, COUNT(*) cnt 695 WHERE active_fi = " .
$ilDB->quote($activeId,
'integer') .
" 696 AND question_fi = " .
$ilDB->quote($this->
getId(),
'integer') .
" 697 AND pass = " .
$ilDB->quote(
$pass,
'integer') .
" 701 if ($this->
getStep() !== null) {
712 if (
$row[
'authorized']) {
713 $return[
'authorized'] =
$row[
'cnt'] > 0;
715 $return[
'intermediate'] =
$row[
'cnt'] > 0;
725 $solutionSubmit = array();
728 foreach ($answer as
$key => $value) {
729 $solutionSubmit[
$key] = $value;
732 return $solutionSubmit;
737 if (array_key_exists(
'answer',
$_POST)) {
751 return "assLongMenu";
761 return 'qpl_qst_lome';
778 parent::setExportDetailsXLS($worksheet, $startrow, $active_id,
$pass);
784 $worksheet->setCell($startrow +
$i, 0, $this->lng->txt(
'assLongMenu') .
" $i");
785 $worksheet->setBold($worksheet->getColumnCoord(0) . ($startrow +
$i));
786 foreach ($solution as $solutionvalue) {
787 if ($gap_index == $solutionvalue[
"value1"]) {
789 case self::ANSWER_TYPE_SELECT_VAL:
790 $value = $solutionvalue[
"value2"];
794 $worksheet->setCell($startrow +
$i, 1, $value);
796 case self::ANSWER_TYPE_TEXT_VAL:
797 $worksheet->setCell($startrow +
$i, 1, $solutionvalue[
"value2"]);
805 return $startrow +
$i + 1;
848 $this->ilDB->manipulateF(
851 array( $question_id )
874 include_once(
"./Services/RTE/classes/class.ilRTE.php");
885 'onenotcorrect' => $this->
formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(),
false)),
886 'allcorrect' => $this->
formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(),
true))
898 return ($this->identical_scoring) ? 1 : 0;
906 $this->identical_scoring = ($a_identical_scoring) ? 1 : 0;
static makeDirParents($a_dir)
Create a new directory and all parent directories.
static logAction($logtext="", $active_id="", $question_id="")
Logs an action into the Test&Assessment log.
getId()
Gets the id of the assQuestion object.
static _getOriginalId($question_id)
Returns the original id of a question.
formatSAQuestion($a_q)
Format self assessment question.
static _getPass($active_id)
Retrieves the actual pass of a given user for a given test.
getPoints()
Returns the maximum available points for the question.
Abstract basic class which is to be extended by the concrete assessment question type classes...
getSolutionValues($active_id, $pass=null, $authorized=true)
Loads solutions of a given user from the database an returns it.
setId($id=-1)
Sets the id of the assQuestion object.
getSolutionMaxPass($active_id)
Returns the maximum pass a users question solution.
setEstimatedWorkingTime($hour=0, $min=0, $sec=0)
Sets the estimated working time of a question from given hour, minute and second. ...
migrateToLmContent($content)
setNrOfTries($a_nr_of_tries)
setAdditionalContentEditingMode($additinalContentEditingMode)
setter for additional content editing mode for this question
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...
getObjId()
Get the object id of the container object.
getShuffle()
Gets the shuffle flag.
Base Exception for all Exceptions relating to Modules/Test.
setParticipantsSolution($participantSolution)
static _getLogLanguage()
retrieve the log language for assessment logging
setAuthor($author="")
Sets the authors name of the assQuestion object.
static _enabledAssessmentLogging()
check wether assessment logging is enabled or not
foreach($_POST as $key=> $value) $res
if(isset($_POST['submit'])) $form
Class ilUserQuestionResult.
saveCurrentSolution($active_id, $pass, $value1, $value2, $authorized=true, $tstamp=null)
static stripSlashesRecursive($a_data, $a_strip_html=true, $a_allow="")
Strip slashes from array and sub-arrays.
getQuestion()
Gets the question string of the question object.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
setPoints($a_points)
Sets the maximum available points for the question.
saveQuestionDataToDb($original_id="")
static getDataDir()
get data directory (outside webspace)
setQuestion($question="")
Sets the question string of the question object.
const FEEDBACK_SETTING_ALL
Interface ilObjQuestionScoringAdjustable.
removeCurrentSolution($active_id, $pass, $authorized=true)
setOriginalId($original_id)
getCurrentSolutionResultSet($active_id, $pass, $authorized=true)
Get a restulset for the current user solution for a this question by active_id and pass...
getTitle()
Gets the title string of the assQuestion object.
setTitle($title="")
Sets the title string of the assQuestion object.
setObjId($obj_id=0)
Set the object id of the container object.
static delDir($a_dir, $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
setComment($comment="")
Sets the comment string of the assQuestion object.
setOwner($owner="")
Sets the creator/owner ID of the assQuestion object.