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.ilObjAnswerScoringAdjustable.php';
8 require_once
'./Modules/TestQuestionPool/interfaces/interface.iQuestionCondition.php';
9 require_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,
119 $ilDB = $DIC[
'ilDB'];
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"),
148 $ilDB = $DIC[
'ilDB'];
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__);
341 $ilDB = $DIC[
'ilDB'];
344 $positions = array();
345 if (is_null(
$pass)) {
351 array_push($positions,
$row[
'value1']);
375 $ilDB = $DIC[
'ilDB'];
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";
1203 $ilDB = $DIC[
'ilDB'];
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;
getErrorText()
Get error text.
static logAction($logtext="", $active_id="", $question_id="")
Logs an action into the Test&Assessment log.
getId()
Gets the id of the assQuestion object.
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms public
getErrorData()
Get error data.
static _getOriginalId($question_id)
Returns the original id of a question.
formatSAQuestion($a_q)
Format self assessment question.
const PercentageResultExpression
Class iQuestionCondition.
setTextSize($a_value)
Set text size in percent.
toJSON()
Returns a JSON representation of the question.
static _getPass($active_id)
Retrieves the actual pass of a given user for a given test.
const NumberOfResultExpression
const ExclusiveResultExpression
getTextSize()
Set text size in percent.
createErrorTextExport($selections=null)
Abstract basic class which is to be extended by the concrete assessment question type classes...
loadFromDb($question_id)
Loads the object from the database.
getRTETextWithMediaObjects()
Collects all text in the question which could contain media objects which were created with the Rich ...
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...
__get($value)
Object getter.
createErrorTextOutput($selections=null, $graphicalOutput=false, $correct_solution=false, $use_link_tags=true)
saveWorkingData($active_id, $pass=null, $authorized=true)
Saves the learners input of the question to the database.
ensureNonNegativePoints($points)
saveToDb($original_id="")
Saves a the object to the database.
isTokenSelected($counter, array $selection)
getErrorsFromText($a_text="")
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.
setErrorText($a_value)
Set error text.
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. ...
copyObject($target_questionpool_id, $title="")
Copies an object.
getQuestionType()
Returns the question type of the question.
Class for error text answers.
getParticipantsSolution()
getUserQuestionResult($active_id, $pass)
Get the user solution for a question by active_id and the test pass.
setNrOfTries($a_nr_of_tries)
fromXML(&$item, &$questionpool_id, &$tst_id, &$tst_object, &$question_counter, &$import_mapping)
Creates a question from a QTI file.
setAdditionalContentEditingMode($additinalContentEditingMode)
setter for additional content editing mode for this question
Class for error text question exports.
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...
__construct( $title='', $comment='', $author='', $owner=-1, $question='')
assErorText constructor
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)
getPointsWrong()
Get wrong points.
isComplete()
Returns true, if a single choice question is complete for use.
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
getPointsForSelectedPositions($positions)
Class ilUserQuestionResult.
saveCurrentSolution($active_id, $pass, $value1, $value2, $authorized=true, $tstamp=null)
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
getBestSolution($active_id, $pass)
Returns the best solution for a given pass of a participant.
setPointsWrong($a_value)
Set wrong points.
getOperators($expression)
Get all available operations for a specific question.
calculateReachedPointsFromPreviewSession(ilAssQuestionPreviewSession $previewSession)
Class for error text questions.
Interface ilObjAnswerScoringAdjustable.
duplicate($for_test=true, $title="", $author="", $owner="", $testObjId=null)
Duplicates the object.
saveAnswerSpecificDataToDb()
Saves the answer specific records into a question types answer table.
getQuestion()
Gets the question string of the question object.
getExpressionTypes()
Get all available expression types for a specific question.
savePreviewData(ilAssQuestionPreviewSession $previewSession)
getAdditionalTableName()
Returns the name of the additional question data table in the database.
static getOperatorsByExpression($expression)
getMaximumPoints()
Returns the maximum points, a learner can reach answering the question.
deductHintPointsFromReachedPoints(ilAssQuestionPreviewSession $previewSession, $reachedPoints)
setPoints($a_points)
Sets the maximum available points for the question.
saveQuestionDataToDb($original_id="")
setExportDetailsXLS($worksheet, $startrow, $active_id, $pass)
{}
calculateReachedPoints($active_id, $pass=null, $authorizedSolution=true, $returndetails=false)
Returns the points, a learner has reached answering the question.
createNewOriginalFromThisDuplicate($targetParentId, $targetQuestionTitle="")
setQuestion($question="")
Sets the question string of the question object.
Interface ilObjQuestionScoringAdjustable.
removeCurrentSolution($active_id, $pass, $authorized=true)
getBestSelection($withPositivePointsOnly=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...
__set($key, $value)
Object setter.
getTitle()
Gets the title string of the assQuestion object.
saveAdditionalQuestionDataToDb()
Saves the data for the additional data table.
addErrorData($text_wrong, $text_correct, $points)
getAvailableAnswerOptions($index=null)
If index is null, the function returns an array with all anwser options Else it returns the specific ...
setTitle($title="")
Sets the title string of the assQuestion object.
setObjId($obj_id=0)
Set the object id of the container object.
flushErrorData()
Flush error data.
setComment($comment="")
Sets the comment string of the assQuestion object.
getAnswerTableName()
Returns the name of the answer table in the database.
getErrorTokenHtml($item, $class, $useLinkTags)
Class for error text question imports.
setOwner($owner="")
Sets the creator/owner ID of the assQuestion object.
const EmptyAnswerExpression