4require_once 
'./Modules/TestQuestionPool/classes/class.assQuestion.php';
 
    5require_once 
'./Modules/Test/classes/inc.AssessmentConstants.php';
 
    6require_once 
'./Modules/TestQuestionPool/interfaces/interface.ilObjQuestionScoringAdjustable.php';
 
    7require_once 
'./Modules/TestQuestionPool/interfaces/interface.ilObjAnswerScoringAdjustable.php';
 
    8require_once 
'./Modules/TestQuestionPool/interfaces/interface.iQuestionCondition.php';
 
    9require_once 
'./Modules/TestQuestionPool/classes/class.ilUserQuestionResult.php';
 
   49        $this->errortext = 
'';
 
   50        $this->textsize = 100.0;
 
   51        $this->errordata = array();
 
   61        if (strlen($this->title)
 
   88            "DELETE FROM qpl_a_errortext WHERE question_fi = %s",
 
   90            array( $this->
getId() )
 
   94        foreach ($this->errordata as $object) {
 
   95            $next_id = 
$ilDB->nextId(
'qpl_a_errortext');
 
   97                "INSERT INTO qpl_a_errortext (answer_id, question_fi, text_wrong, text_correct, points, sequence) VALUES (%s, %s, %s, %s, %s, %s)",
 
   98                array( 
'integer', 
'integer', 
'text', 
'text', 
'float', 
'integer' ),
 
  103                                    $object->text_correct,
 
  124            array( $this->
getId() )
 
  128            "INSERT INTO " . $this->
getAdditionalTableName() . 
" (question_fi, errortext, textsize, points_wrong) VALUES (%s, %s, %s, %s)",
 
  129            array(
"integer", 
"text", 
"float", 
"float"),
 
  157            $this->
setId($question_id);
 
  166            include_once(
"./Services/RTE/classes/class.ilRTE.php");
 
  180            "SELECT * FROM qpl_a_errortext WHERE question_fi = %s ORDER BY sequence ASC",
 
  184        include_once 
"./Modules/TestQuestionPool/classes/class.assAnswerErrorText.php";
 
  191        parent::loadFromDb($question_id);
 
  199        if ($this->
id <= 0) {
 
  204        $this_id = $this->
getId();
 
  208        include_once(
"./Modules/TestQuestionPool/classes/class.assQuestion.php");
 
  212        if ((
int) $testObjId > 0) {
 
  213            $clone->setObjId($testObjId);
 
  233        $clone->copyPageOfQuestion($this_id);
 
  235        $clone->copyXHTMLMediaObjectsOfQuestion($this_id);
 
  237        $clone->onDuplicate($thisObjId, $this_id, $clone->getObjId(), $clone->getId());
 
  246        if ($this->
id <= 0) {
 
  252        $thisId = $this->
getId();
 
  256        include_once(
"./Modules/TestQuestionPool/classes/class.assQuestion.php");
 
  259        $clone->setObjId($target_questionpool_id);
 
  270        $clone->onCopy($thisObjId, $thisId, $clone->getObjId(), $clone->getId());
 
  277        if ($this->
id <= 0) {
 
  282        include_once(
"./Modules/TestQuestionPool/classes/class.assQuestion.php");
 
  285        $sourceParentId = $this->
getObjId();
 
  291        $clone->setObjId($targetParentId);
 
  293        if ($targetQuestionTitle) {
 
  294            $clone->setTitle($targetQuestionTitle);
 
  299        $clone->copyPageOfQuestion($sourceQuestionId);
 
  301        $clone->copyXHTMLMediaObjectsOfQuestion($sourceQuestionId);
 
  303        $clone->onCopy($sourceParentId, $sourceQuestionId, $clone->getObjId(), $clone->getId());
 
  316        foreach ($this->errordata as $object) {
 
  317            if ($object->points > 0) {
 
  318                $maxpoints += $object->points;
 
  336        if ($returndetails) {
 
  337            throw new ilTestException(
'return details not implemented for ' . __METHOD__);
 
  344        $positions = array();
 
  345        if (is_null(
$pass)) {
 
  351            array_push($positions, 
$row[
'value1']);
 
  378        if (is_null(
$pass)) {
 
  379            include_once 
"./Modules/Test/classes/class.ilObjTest.php";
 
  383        $entered_values = 
false;
 
  385        $this->
getProcessLocker()->executeUserSolutionUpdateLockOperation(
function () use (&$entered_values, $active_id, 
$pass, $authorized) {
 
  389                $selected = explode(
",", 
$_POST[
"qst_" . $this->
getId()]);
 
  390                foreach ($selected as $position) {
 
  393                $entered_values = 
true;
 
  397        if ($entered_values) {
 
  398            include_once(
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
 
  403            include_once(
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
 
  415            $selection = explode(
',', 
$_POST[
"qst_{$this->getId()}"]);
 
  417            $selection = array();
 
  430        return "assErrorText";
 
  440        return "qpl_qst_errortext";
 
  450        return "qpl_a_errortext";
 
  459        $text = parent::getRTETextWithMediaObjects();
 
  468        parent::setExportDetailsXLS($worksheet, $startrow, $active_id, 
$pass);
 
  471        $selections = array();
 
  473        if (is_array($solutions)) {
 
  474            foreach ($solutions as $solution) {
 
  475                array_push($selections, $solution[
'value1']);
 
  477            $errortext_value = join(
",", $selections);
 
  484        return $startrow + 
$i + 1;
 
  499    public function fromXML(&$item, &$questionpool_id, &$tst_id, &$tst_object, &$question_counter, &$import_mapping)
 
  501        include_once 
"./Modules/TestQuestionPool/classes/import/qti12/class.assErrorTextImport.php";
 
  503        $import->fromXML($item, $questionpool_id, $tst_id, $tst_object, $question_counter, $import_mapping);
 
  512    public function toXML($a_include_header = 
true, $a_include_binary = 
true, $a_shuffle = 
false, $test_output = 
false, $force_image_references = 
false)
 
  514        include_once 
"./Modules/TestQuestionPool/classes/export/qti12/class.assErrorTextExport.php";
 
  516        return $export->toXML($a_include_header, $a_include_binary, $a_shuffle, $test_output, $force_image_references);
 
  526        $user_solution = array();
 
  527        return $user_solution;
 
  532        if (strlen($a_text) == 0) {
 
  539        $a_text = str_replace(array(
"((", 
"))"), array(
"~", 
"~"), $a_text);
 
  543        $r_passage = 
"/(~([^~]+)~|#([^\s]+))/";
 
  545        preg_match_all($r_passage, $a_text, $matches);
 
  547        if (is_array($matches[0]) && !empty($matches[0])) {
 
  552            $matches = array_intersect_key($matches, array(2 => 
'', 3 => 
''));
 
  555            $matches[2] = array_diff($matches[2], array(
''));
 
  556            $matches[3] = array_diff($matches[3], array(
''));
 
  559                "passages" => $matches[2],
 
  560                "words" => $matches[3],);
 
  568        include_once 
"./Modules/TestQuestionPool/classes/class.assAnswerErrorText.php";
 
  570        $this->errordata = array();
 
  571        foreach ($a_data as $err_type => 
$errors) {
 
  574            foreach (
$errors as $idx => $error) {
 
  578                foreach ($temp as $object) {
 
  579                    if (strcmp($object->text_wrong, $error) == 0) {
 
  580                        $text_correct = $object->text_correct;
 
  588        ksort($this->errordata);
 
  591    public function createErrorTextOutput($selections = 
null, $graphicalOutput = 
false, $correct_solution = 
false, $use_link_tags = 
true)
 
  595        include_once 
"./Services/Utilities/classes/class.ilStr.php";
 
  596        if (!is_array($selections)) {
 
  597            $selections = array();
 
  599        $textarray = preg_split(
"/[\n\r]+/", $this->
getErrorText());
 
  601        foreach ($textarray as $textidx => 
$text) {
 
  603            $passage_end = 
false;
 
  604            $items = preg_split(
"/\s+/", 
$text);
 
  605            foreach ($items as $idx => $item) {
 
  609                    ($posHash = strpos($item, 
'#')) === 0 ||
 
  610                    ($posOpeningBrackets = strpos($item, 
'((')) === 0 ||
 
  611                    ($posClosingBrackets = strpos($item, 
'))')) !== 
false 
  615                    if ($posHash !== 
false) {
 
  616                        $item = ilStr::substr($item, 1, ilStr::strlen($item) - 1);
 
  617                        $passage_end = 
false;
 
  618                    } elseif ($posOpeningBrackets !== 
false) {
 
  620                        $passage_start_idx = $counter;
 
  621                        $items_in_passage = array();
 
  622                        $passage_end = 
false;
 
  623                        $item = ilStr::substr($item, 2, ilStr::strlen($item) - 2);
 
  627                        if (strpos($item, 
'))') !== 
false) {
 
  628                            $item = str_replace(
"))", 
"", $item);
 
  633                        $item = str_replace(
"))", 
"", $item);
 
  636                    if ($correct_solution && !$in_passage) {
 
  637                        $errorobject = $this->errordata[$errorcounter];
 
  638                        if (is_object($errorobject)) {
 
  639                            $item = strlen($errorobject->text_correct) ? $errorobject->text_correct : 
' ';
 
  645                if ($in_passage && !$passage_end) {
 
  646                    $items_in_passage[$idx] = $item;
 
  652                if ($in_passage && $passage_end) {
 
  654                    $passage_end = 
false;
 
  655                    if ($correct_solution) {
 
  658                            "ilc_qetitem_ErrorTextSelected" : 
"ilc_qetitem_ErrorTextItem" 
  661                        $errorobject = $this->errordata[$errorcounter];
 
  662                        if (is_object($errorobject)) {
 
  663                            $item = strlen($errorobject->text_correct) ? $errorobject->text_correct : 
' ';
 
  671                    $group_selected = 
true;
 
  672                    if ($graphicalOutput) {
 
  673                        $start_idx = $passage_start_idx;
 
  674                        foreach ($items_in_passage as $tmp_idx => $tmp_item) {
 
  676                                $group_selected = 
false;
 
  682                        if ($group_selected) {
 
  684                                $group_selected = 
false;
 
  689                    $item_stack = array();
 
  690                    $start_idx = $passage_start_idx;
 
  691                    foreach ($items_in_passage as $tmp_idx => $tmp_item) {
 
  694                            "ilc_qetitem_ErrorTextSelected" : 
"ilc_qetitem_ErrorTextItem" 
  701                        "ilc_qetitem_ErrorTextSelected" : 
"ilc_qetitem_ErrorTextItem" 
  703                    if ($graphicalOutput) {
 
  704                        if ($group_selected) {
 
  705                            $img = 
' <img src="' . 
ilUtil::getImagePath(
"icon_ok.svg") . 
'" alt="' . $this->lng->txt(
"answer_is_right") . 
'" title="' . $this->lng->txt(
"answer_is_right") . 
'" /> ';
 
  707                            $img = 
' <img src="' . 
ilUtil::getImagePath(
"icon_not_ok.svg") . 
'" alt="' . $this->lng->txt(
"answer_is_wrong") . 
'" title="' . $this->lng->txt(
"answer_is_wrong") . 
'" /> ';
 
  712                    $item_stack = trim(implode(
" ", $item_stack));
 
  713                    $item_stack = strlen($item_stack) ? $item_stack : 
' ';
 
  715                    if ($graphicalOutput) {
 
  716                        $items[$idx] = 
'<span class="selGroup">' . $item_stack . 
'</span>';
 
  718                        $items[$idx] = $item_stack;
 
  726                $class = 
'ilc_qetitem_ErrorTextItem';
 
  729                    $class = 
"ilc_qetitem_ErrorTextSelected";
 
  730                    if ($graphicalOutput) {
 
  732                            $img = 
' <img src="' . 
ilUtil::getImagePath(
"icon_ok.svg") . 
'" alt="' . $this->lng->txt(
"answer_is_right") . 
'" title="' . $this->lng->txt(
"answer_is_right") . 
'" /> ';
 
  734                            $img = 
' <img src="' . 
ilUtil::getImagePath(
"icon_not_ok.svg") . 
'" alt="' . $this->lng->txt(
"answer_is_wrong") . 
'" title="' . $this->lng->txt(
"answer_is_wrong") . 
'" /> ';
 
  742            $textarray[$textidx] = 
'<p>' . implode(
" ", $items) . 
'</p>';
 
  745        return implode(
"\n", $textarray);
 
  750        foreach ($selection as 
$data) {
 
  751            if (!is_array(
$data)) {
 
  752                if ($counter == 
$data) {
 
  755            } elseif (in_array($counter, 
$data)) {
 
  767        include_once 
"./Services/Utilities/classes/class.ilStr.php";
 
  768        if (!is_array($selections)) {
 
  769            $selections = array();
 
  771        $textarray = preg_split(
"/[\n\r]+/", $this->
getErrorText());
 
  772        foreach ($textarray as $textidx => 
$text) {
 
  773            $items = preg_split(
"/\s+/", 
$text);
 
  774            foreach ($items as $idx => $item) {
 
  775                if (($posHash = strpos($item, 
'#')) === 0
 
  776                    || ($posOpeningBrackets = strpos($item, 
'((')) === 0
 
  777                    || ($posClosingBrackets = strpos($item, 
'))')) !== 
false) {
 
  780                    if ($posHash !== 
false) {
 
  781                        $item = ilStr::substr($item, 1, ilStr::strlen($item) - 1);
 
  782                    } elseif ($posOpeningBrackets !== 
false) {
 
  783                        $item = ilStr::substr($item, 2, ilStr::strlen($item) - 2);
 
  787                        if (strpos($item, 
'))') !== 
false) {
 
  788                            $item = ilStr::substr($item, 0, ilStr::strlen($item) - 2);
 
  792                        if ($item[$posClosingBrackets + 2] == 
',') {
 
  796                        $item = ilStr::substr($item, 0, $posClosingBrackets) . $appendComma;
 
  801                if (in_array($counter, $selections)) {
 
  805                if (in_array($counter, $selections)) {
 
  808                $items[$idx] = $word;
 
  811            $textarray[$textidx] = join(
" ", $items);
 
  813        return join(
"\n", $textarray);
 
  822        $textarray = preg_split(
"/[\n\r]+/", $this->
getErrorText());
 
  823        foreach ($textarray as $textidx => 
$text) {
 
  824            $items = preg_split(
"/\s+/", 
$text);
 
  826            foreach ($items as $word) {
 
  828                $isErrorItem = 
false;
 
  829                if (strpos($word, 
'#') === 0) {
 
  831                    $errorobject = $this->errordata[$errorcounter];
 
  832                    if (is_object($errorobject)) {
 
  833                        $points = $errorobject->points;
 
  837                } elseif (($posOpeningBracket = strpos($word, 
'((')) === 0
 
  838                        || ($posClosingBracket = strpos($word, 
'))')) !== 
false 
  842                    if ($posOpeningBracket !== 
false) {
 
  843                        $passages[] = array(
'begin_pos' => $counter, 
'cnt_words' => 0);
 
  845                    } elseif ($posClosingBracket !== 
false) {
 
  847                        $cur_pidx = count($passages) - 1;
 
  848                        $passages[$cur_pidx][
'end_pos'] = $counter;
 
  850                        $errorobject = $this->errordata[$errorcounter];
 
  851                        if (is_object($errorobject)) {
 
  852                            $passages[$cur_pidx][
'score'] = $errorobject->points;
 
  853                            $passages[$cur_pidx][
'isError'] = 
true;
 
  859                    $cur_pidx = count($passages) - 1;
 
  860                    $passages[$cur_pidx][
'cnt_words']++;
 
  864                $words[$counter] = array(
"word" => $word, 
"points" => 
$points, 
"isError" => $isErrorItem);
 
  869        $selections = array();
 
  870        foreach ($passages as $cnt => $pdata) {
 
  871            if (!$withPositivePointsOnly && $pdata[
'isError'] || $withPositivePointsOnly && $pdata[
'score'] > 0) {
 
  872                $indexes = range($pdata[
'begin_pos'], $pdata[
'end_pos']);
 
  873                $selections[$pdata[
'begin_pos']] = $indexes;
 
  877        foreach ($words as $idx => $word) {
 
  878            if (!$withPositivePointsOnly && $word[
'isError'] || $withPositivePointsOnly && $word[
'points'] > 0) {
 
  879                $selections[$idx] = array($idx);
 
  885        $selections = array_values($selections);
 
  896        $textarray = preg_split(
"/[\n\r]+/", $this->
getErrorText());
 
  897        foreach ($textarray as $textidx => 
$text) {
 
  898            $items = preg_split(
"/\s+/", 
$text);
 
  900            foreach ($items as $word) {
 
  902                if (strpos($word, 
'#') === 0) {
 
  904                    $errorobject = $this->errordata[$errorcounter];
 
  905                    if (is_object($errorobject)) {
 
  906                        $points = $errorobject->points;
 
  909                } elseif (($posOpeningBracket = strpos($word, 
'((')) === 0
 
  910                        || ($posClosingBracket = strpos($word, 
'))')) !== 
false 
  914                    if ($posOpeningBracket !== 
false) {
 
  915                        $passages[] = array(
'begin_pos' => $counter, 
'cnt_words' => 0);
 
  917                    } elseif ($posClosingBracket !== 
false) {
 
  919                        $cur_pidx = count($passages) - 1;
 
  920                        $passages[$cur_pidx][
'end_pos'] = $counter;
 
  922                        $errorobject = $this->errordata[$errorcounter];
 
  923                        if (is_object($errorobject)) {
 
  924                            $passages[$cur_pidx][
'score'] = $errorobject->points;
 
  929                    $cur_pidx = count($passages) - 1;
 
  930                    $passages[$cur_pidx][
'cnt_words']++;
 
  934                $words[$counter] = array(
"word" => $word, 
"points" => 
$points);
 
  941        foreach ($positions as $position) {
 
  945            $total += $words[$position][
'points'];
 
  948        foreach ($passages as $cnt => $p_data) {
 
  953            $isSelected = in_array($p_data[
'begin_pos'], $positions);
 
  955            for (
$i = 0; 
$i < $p_data[
'cnt_words']; 
$i++) {
 
  956                $current_pos = $p_data[
'begin_pos'] + 
$i;
 
  957                $isSelected = $isSelected && in_array($current_pos, $positions);
 
  960            $total += $isSelected ? $p_data[
'score'] : 0;
 
  971        $this->errordata = array();
 
  976        include_once 
"./Modules/TestQuestionPool/classes/class.assAnswerErrorText.php";
 
 1007        $this->errortext = $a_value;
 
 1028        if ($a_value === 
null) {
 
 1031        $this->textsize = $a_value;
 
 1051        $this->points_wrong = $a_value;
 
 1066            case "points_wrong":
 
 1070                return parent::__get($value);
 
 1087            case "points_wrong":
 
 1091                parent::__set(
$key, $value);
 
 1102        include_once(
"./Services/RTE/classes/class.ilRTE.php");
 
 1112            'onenotcorrect' => $this->
formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), 
false)),
 
 1113            'allcorrect' => $this->formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(), 
true))
 
 1117        foreach ($this->
getErrorData() as $idx => $answer_obj) {
 
 1118            array_push($answers, array(
 
 1119                "answertext_wrong" => (
string) $answer_obj->text_wrong,
 
 1120                "answertext_correct" => (
string) $answer_obj->text_correct,
 
 1121                "points" => (
float) $answer_obj->points,
 
 1122                "order" => (
int) $idx + 1
 
 1125        $result[
'correct_answers'] = $answers;
 
 1128        $textarray = preg_split(
"/[\n\r]+/", $this->
getErrorText());
 
 1129        foreach ($textarray as $textidx => 
$text) {
 
 1130            $items = preg_split(
"/\s+/", trim(
$text));
 
 1131            foreach ($items as $idx => $item) {
 
 1132                if (substr($item, 0, 1) == 
"#") {
 
 1133                    $item = substr($item, 1);
 
 1136                    foreach (
$result[
"correct_answers"] as $aidx => $answer) {
 
 1137                        if ($answer[
"answertext_wrong"] == $item && !$answer[
"pos"]) {
 
 1138                            $result[
"correct_answers"][$aidx][
"pos"] = $this->
getId() . 
"_" . $textidx . 
"_" . ($idx + 1);
 
 1143                array_push($answers, array(
 
 1145                    "order" => $this->
getId() . 
"_" . $textidx . 
"_" . ($idx + 1)
 
 1148            if ($textidx != 
sizeof($textarray) - 1) {
 
 1149                array_push($answers, array(
 
 1150                        "answertext" => 
"###",
 
 1151                        "order" => $this->
getId() . 
"_" . $textidx . 
"_" . ($idx + 2)
 
 1155        $result[
'answers'] = $answers;
 
 1173        require_once 
"./Modules/TestQuestionPool/classes/class.ilOperatorsExpressionMapping.php";
 
 1207            "SELECT value1+1 as value1 FROM tst_solutions WHERE active_fi = %s AND pass = %s AND question_fi = %s AND step = ( 
 1208                                SELECT MAX(step) FROM tst_solutions WHERE active_fi = %s AND pass = %s AND question_fi = %s 
 1210            array(
"integer", 
"integer", 
"integer",
"integer", 
"integer", 
"integer"),
 
 1236        $error_text_array = explode(
' ', $this->errortext);
 
 1239            if (array_key_exists(
$index, $error_text_array)) {
 
 1240                return $error_text_array[
$index];
 
 1244            return $error_text_array;
 
An exception for terminatinating execution or to throw for unit testing.
Class for error text answers.
Class for error text question exports.
Class for error text question imports.
Class for error text questions.
getErrorData()
Get error data.
toXML($a_include_header=true, $a_include_binary=true, $a_shuffle=false, $test_output=false, $force_image_references=false)
Returns a QTI xml representation of the question and sets the internal domxml variable with the DOM X...
saveWorkingData($active_id, $pass=null, $authorized=true)
Saves the learners input of the question to the database.
flushErrorData()
Flush error data.
loadFromDb($question_id)
Loads the object from the database.
getTextSize()
Set text size in percent.
getOperators($expression)
Get all available operations for a specific question.
__construct( $title='', $comment='', $author='', $owner=-1, $question='')
assErorText constructor
getAvailableAnswerOptions($index=null)
If index is null, the function returns an array with all anwser options Else it returns the specific ...
getErrorsFromText($a_text="")
__get($value)
Object getter.
createErrorTextExport($selections=null)
duplicate($for_test=true, $title="", $author="", $owner="", $testObjId=null)
Duplicates the object.
savePreviewData(ilAssQuestionPreviewSession $previewSession)
__set($key, $value)
Object setter.
getErrorText()
Get error text.
toJSON()
Returns a JSON representation of the question.
createErrorTextOutput($selections=null, $graphicalOutput=false, $correct_solution=false, $use_link_tags=true)
setTextSize($a_value)
Set text size in percent.
setErrorText($a_value)
Set error text.
getAnswerTableName()
Returns the name of the answer table in the database.
saveToDb($original_id="")
Saves a the object to the database.
setExportDetailsXLS($worksheet, $startrow, $active_id, $pass)
{Creates an Excel worksheet for the detailed cumulated results of this question.object}
saveAnswerSpecificDataToDb()
Saves the answer specific records into a question types answer table.
copyObject($target_questionpool_id, $title="")
Copies an object.
setPointsWrong($a_value)
Set wrong points.
calculateReachedPoints($active_id, $pass=null, $authorizedSolution=true, $returndetails=false)
Returns the points, a learner has reached answering the question.
calculateReachedPointsFromPreviewSession(ilAssQuestionPreviewSession $previewSession)
getErrorTokenHtml($item, $class, $useLinkTags)
getBestSelection($withPositivePointsOnly=true)
getMaximumPoints()
Returns the maximum points, a learner can reach answering the question.
getRTETextWithMediaObjects()
Collects all text in the question which could contain media objects which were created with the Rich ...
getPointsForSelectedPositions($positions)
createNewOriginalFromThisDuplicate($targetParentId, $targetQuestionTitle="")
getAdditionalTableName()
Returns the name of the additional question data table in the database.
getPointsWrong()
Get wrong points.
isTokenSelected($counter, array $selection)
isComplete()
Returns true, if a single choice question is complete for use.
getBestSolution($active_id, $pass)
Returns the best solution for a given pass of a participant.
fromXML(&$item, &$questionpool_id, &$tst_id, &$tst_object, &$question_counter, &$import_mapping)
Creates a question from a QTI file.
saveAdditionalQuestionDataToDb()
Saves the data for the additional data table.
addErrorData($text_wrong, $text_correct, $points)
getExpressionTypes()
Get all available expression types for a specific question.
getQuestionType()
Returns the question type of the question.
Abstract basic class which is to be extended by the concrete assessment question type classes.
getCurrentSolutionResultSet($active_id, $pass, $authorized=true)
Get a restulset for the current user solution for a this question by active_id and pass.
getSolutionValues($active_id, $pass=null, $authorized=true)
Loads solutions of a given user from the database an returns it.
static _getOriginalId($question_id)
Returns the original id of a question.
formatSAQuestion($a_q)
Format self assessment question.
setId($id=-1)
Sets the id of the assQuestion object.
setOriginalId($original_id)
setObjId($obj_id=0)
Set the object id of the container object.
getSolutionMaxPass($active_id)
Returns the maximum pass a users question solution.
saveQuestionDataToDb($original_id="")
getId()
Gets the id of the assQuestion object.
saveCurrentSolution($active_id, $pass, $value1, $value2, $authorized=true, $tstamp=null)
getObjId()
Get the object id of the container object.
setTitle($title="")
Sets the title string of the assQuestion object.
setOwner($owner="")
Sets the creator/owner ID of the assQuestion object.
setEstimatedWorkingTime($hour=0, $min=0, $sec=0)
Sets the estimated working time of a question from given hour, minute and second.
deductHintPointsFromReachedPoints(ilAssQuestionPreviewSession $previewSession, $reachedPoints)
static logAction($logtext="", $active_id="", $question_id="")
Logs an action into the Test&Assessment log.
removeCurrentSolution($active_id, $pass, $authorized=true)
setAuthor($author="")
Sets the authors name of the assQuestion object.
getShuffle()
Gets the shuffle flag.
getTitle()
Gets the title string of the assQuestion object.
setPoints($a_points)
Sets the maximum available points for the question.
setComment($comment="")
Sets the comment string of the assQuestion object.
setNrOfTries($a_nr_of_tries)
getQuestion()
Gets the question string of the question object.
setAdditionalContentEditingMode($additinalContentEditingMode)
setter for additional content editing mode for this question
setQuestion($question="")
Sets the question string of the question object.
ensureNonNegativePoints($points)
getParticipantsSolution()
setParticipantsSolution($participantSolution)
static _getLogLanguage()
retrieve the log language for assessment logging
static _enabledAssessmentLogging()
check wether assessment logging is enabled or not
static _getPass($active_id)
Retrieves the actual pass of a given user for a given test.
static getOperatorsByExpression($expression)
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...
Base Exception for all Exceptions relating to Modules/Test.
Class ilUserQuestionResult.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms @access public
Class iQuestionCondition.
const PercentageResultExpression
getUserQuestionResult($active_id, $pass)
Get the user solution for a question by active_id and the test pass.
const EmptyAnswerExpression
const ExclusiveResultExpression
const NumberOfResultExpression
Interface ilObjAnswerScoringAdjustable.
Interface ilObjQuestionScoringAdjustable.