19 require_once
'./Modules/Test/classes/inc.AssessmentConstants.php';
111 $this->selectionLimit = null;
112 $this->feedback_setting = 0;
139 return $this->title !==
'' 140 && $this->author !==
'' 141 && $this->question !==
'' 161 $this->ensureNoInvalidObligation($this->
getId());
173 $ilDB = $DIC[
'ilDB'];
176 $result =
$ilDB->queryF(
181 if ($result->numRows() == 1) {
183 $this->
setId($question_id);
199 $this->lastChange =
$data[
'tstamp'];
201 $this->feedback_setting =
$data[
'feedback_setting'];
215 $result =
$ilDB->queryF(
216 "SELECT * FROM qpl_a_mc WHERE question_fi = %s ORDER BY aorder ASC",
220 if ($result->numRows() > 0) {
223 if (!file_exists($imagefilename)) {
224 $data[
"imagefile"] = null;
234 $answer->setPointsUnchecked(
$data[
"points_unchecked"]);
235 $answer->setImage(
$data[
"imagefile"] ?
$data[
"imagefile"] : null);
236 array_push($this->answers, $answer);
240 parent::loadFromDb($question_id);
248 if ($this->
id <= 0) {
253 $this_id = $this->
getId();
258 $original_id = $this->questioninfo->getOriginalId($this->
id);
261 if ((
int) $testObjId > 0) {
262 $clone->setObjId($testObjId);
283 $clone->copyPageOfQuestion($this_id);
285 $clone->copyXHTMLMediaObjectsOfQuestion($this_id);
287 $clone->duplicateImages($this_id, $thisObjId);
289 $clone->onDuplicate($thisObjId, $this_id, $clone->getObjId(), $clone->getId());
299 if ($this->
getId() <= 0) {
300 throw new RuntimeException(
'The question has not been saved. It cannot be duplicated');
305 $original_id = $this->questioninfo->getOriginalId($this->
id);
307 $source_questionpool_id = $this->
getObjId();
308 $clone->setObjId($target_questionpool_id);
318 $clone->copyImages(
$original_id, $source_questionpool_id);
320 $clone->onCopy($source_questionpool_id,
$original_id, $clone->getObjId(), $clone->getId());
327 if ($this->
getId() <= 0) {
328 throw new RuntimeException(
'The question has not been saved. It cannot be duplicated');
332 $sourceParentId = $this->
getObjId();
338 $clone->setObjId($targetParentId);
340 if ($targetQuestionTitle) {
341 $clone->setTitle($targetQuestionTitle);
346 $clone->copyPageOfQuestion($sourceQuestionId);
348 $clone->copyXHTMLMediaObjectsOfQuestion($sourceQuestionId);
350 $clone->copyImages($sourceQuestionId, $sourceParentId);
352 $clone->onCopy($sourceParentId, $sourceQuestionId, $clone->getObjId(), $clone->getId());
374 $points_unchecked = 0.0,
380 if (array_key_exists($order, $this->answers)) {
383 $answer->setPointsUnchecked($points_unchecked);
384 $answer->setImage($answerimage);
386 for ($i = 0; $i < $order; $i++) {
387 $newchoices[] = $this->answers[$i];
389 $newchoices[] = $answer;
390 for ($i = $order, $iMax = count($this->answers); $i < $iMax; $i++) {
391 $changed = $this->answers[$i];
392 $changed->setOrder($i + 1);
393 $newchoices[] = $changed;
395 $this->answers = $newchoices;
398 $answer->setPointsUnchecked($points_unchecked);
399 $answer->setImage($answerimage);
400 $this->answers[] = $answer;
412 return count($this->answers);
428 if (count($this->answers) < 1) {
431 if ($index >= count($this->answers)) {
435 return $this->answers[$index];
450 if (count($this->answers) < 1) {
453 if ($index >= count($this->answers)) {
456 $answer = $this->answers[$index];
457 if ($answer->hasImage()) {
460 unset($this->answers[$index]);
461 $this->answers = array_values($this->answers);
462 for ($i = 0, $iMax = count($this->answers); $i < $iMax; $i++) {
463 if ($this->answers[$i]->
getOrder() > $index) {
464 $this->answers[$i]->setOrder($i);
486 $total_max_points = 0.0;
488 $total_max_points += max($answer->getPointsChecked(), $answer->getPointsUnchecked());
490 return $total_max_points;
504 public function calculateReachedPoints($active_id, $pass = null, $authorizedSolution =
true, $returndetails =
false): float
506 if ($returndetails) {
507 throw new ilTestException(
'return details not implemented for ' . __METHOD__);
511 $ilDB = $DIC[
'ilDB'];
514 if (is_null($pass)) {
519 if (strcmp(
$data[
"value1"],
"") != 0) {
520 array_push($found_values,
$data[
"value1"]);
535 $failureMsg = sprintf(
536 $this->
lng->txt(
'ass_mc_sel_lim_exhausted_hint'),
541 $this->tpl->setOnScreenMessage(
'failure', $failureMsg,
true);
551 if (!count($solutionSubmit) && !empty($_POST[
'tst_force_form_diff_input'])) {
566 public function saveWorkingData($active_id, $pass = null, $authorized =
true):
bool 570 $ilDB = $DIC[
'ilDB'];
572 if (is_null($pass)) {
578 $this->
getProcessLocker()->executeUserSolutionUpdateLockOperation(
function () use (&$entered_values, $active_id, $pass, $authorized) {
583 foreach ($solutionSubmit as $value) {
584 if (strlen($value)) {
598 if ($entered_values) {
602 "log_user_entered_values",
604 ), $active_id, $this->
getId());
610 "log_user_not_entered_values",
612 ), $active_id, $this->
getId());
623 $ilDB = $DIC[
'ilDB'];
627 $result =
$ilDB->queryF(
632 if ($result->numRows() == 1) {
634 $oldthumbsize =
$data[
'thumb_size'];
647 'allow_images' => [
'text', $this->
isSingleline ? 0 : 1],
652 [
'question_fi' => [
'integer', $this->
getId()]]
665 $ilDB = $DIC[
'ilDB'];
668 $result =
$ilDB->queryF(
669 "SELECT * FROM qpl_fb_specific WHERE question_fi = %s",
673 $db_feedback =
$ilDB->fetchAll($result);
678 $result =
$ilDB->queryF(
679 "SELECT answer_id, aorder FROM qpl_a_mc WHERE question_fi = %s",
683 $db_answers =
$ilDB->fetchAll($result);
686 $post_answer_order_for_id = [];
687 foreach ($this->answers as $answer) {
689 if ($answer->getId() !== null && !in_array($answer->getId(), array_keys($post_answer_order_for_id))) {
691 if ($answer->getId() == -1) {
694 $post_answer_order_for_id[$answer->getId()] = $answer->getOrder();
700 if (
sizeof($post_answer_order_for_id) >= 1) {
701 $db_answer_order_for_id = [];
702 $db_answer_id_for_order = [];
703 foreach ($db_answers as $db_answer) {
704 $db_answer_order_for_id[intval($db_answer[
'answer_id'])] = intval($db_answer[
'aorder']);
705 $db_answer_id_for_order[intval($db_answer[
'aorder'])] = intval($db_answer[
'answer_id']);
711 $db_answer_ids = array_keys($db_answer_order_for_id);
712 $post_answer_ids = array_keys($post_answer_order_for_id);
713 $diff_db_post_answer_ids = array_diff($db_answer_ids, $post_answer_ids);
714 $unused_answer_ids = array_keys($diff_db_post_answer_ids);
717 $this->feedbackOBJ->deleteSpecificAnswerFeedbacks($this->
getId(),
false);
719 foreach ($db_feedback as $feedback_option) {
721 if (in_array(intval($feedback_option[
'answer']), $unused_answer_ids)) {
726 $feedback_order_db = intval($feedback_option[
'answer']);
727 $db_answer_id = $db_answer_id_for_order[$feedback_order_db] ?? null;
731 if (is_null($db_answer_id) || $db_answer_id < 0) {
734 $feedback_order_post = $post_answer_order_for_id[$db_answer_id];
735 $feedback_option[
'answer'] = $feedback_order_post;
738 $next_id =
$ilDB->nextId(
'qpl_fb_specific');
740 "INSERT INTO qpl_fb_specific (feedback_id, question_fi, answer, tstamp, feedback, question) 741 VALUES (%s, %s, %s, %s, %s, %s)",
742 [
'integer',
'integer',
'integer',
'integer',
'text',
'integer'],
745 $feedback_option[
'question_fi'],
746 $feedback_option[
'answer'],
748 $feedback_option[
'feedback'],
749 $feedback_option[
'question']
758 "DELETE FROM qpl_a_mc WHERE question_fi = %s",
764 foreach ($this->answers as
$key => $value) {
765 $answer_obj = $this->answers[
$key];
766 $next_id =
$ilDB->nextId(
'qpl_a_mc');
768 "INSERT INTO qpl_a_mc (answer_id, question_fi, answertext, points, points_unchecked, aorder, imagefile, tstamp) 769 VALUES (%s, %s, %s, %s, %s, %s, %s, %s)",
770 [
'integer',
'integer',
'text',
'float',
'float',
'integer',
'text',
'integer'],
775 $answer_obj->getPoints(),
776 $answer_obj->getPointsUnchecked(),
777 $answer_obj->getOrder(),
778 $answer_obj->getImage(),
787 if ($this->questioninfo->getOriginalId($this->getId())) {
789 parent::syncWithOriginal();
800 return "assMultipleChoice";
833 if (!empty($image_tempfilename)) {
834 $image_filename = str_replace(
" ",
"_", $image_filename);
836 if (!file_exists($imagepath)) {
843 if (!preg_match(
"/^image/", $mimetype)) {
844 unlink($imagepath . $image_filename);
849 $this->generateThumbForFile(
869 @unlink($imagepath . $image_filename);
870 $thumbpath = $imagepath . $this->getThumbPrefix() . $image_filename;
874 public function duplicateImages($question_id, $objectId = null):
void 881 $imagepath_original = str_replace(
"/$this->id/images",
"/$question_id/images", $imagepath);
883 if ((
int) $objectId > 0) {
884 $imagepath_original = str_replace(
"/$this->obj_id/",
"/$objectId/", $imagepath_original);
887 foreach ($this->answers as $answer) {
888 if ($answer->hasImage()) {
890 if (!file_exists($imagepath)) {
894 if (file_exists($imagepath_original .
$filename)) {
895 if (!copy($imagepath_original . $filename, $imagepath . $filename)) {
897 "Could not clone source image '%s' to '%s' (srcQuestionId: %s|tgtQuestionId: %s|srcParentObjId: %s|tgtParentObjId: %s)",
898 $imagepath_original . $filename,
899 $imagepath . $filename,
908 if (file_exists($imagepath_original . $this->getThumbPrefix() . $filename)) {
909 if (!copy($imagepath_original . $this->getThumbPrefix() . $filename, $imagepath . $this->getThumbPrefix() . $filename)) {
911 "Could not clone thumbnail source image '%s' to '%s' (srcQuestionId: %s|tgtQuestionId: %s|srcParentObjId: %s|tgtParentObjId: %s)",
912 $imagepath_original . $this->getThumbPrefix() . $filename,
913 $imagepath . $this->getThumbPrefix() . $filename,
925 public function copyImages($question_id, $source_questionpool): void
930 $imagepath_original = str_replace(
"/$this->id/images",
"/$question_id/images", $imagepath);
931 $imagepath_original = str_replace(
"/$this->obj_id/",
"/$source_questionpool/", $imagepath_original);
932 foreach ($this->answers as $answer) {
933 if ($answer->hasImage()) {
935 if (!file_exists($imagepath)) {
938 if (!@copy($imagepath_original .
$filename, $imagepath . $filename)) {
939 $ilLog->write(
"image could not be duplicated!!!!",
$ilLog->ERROR);
940 $ilLog->write(
"object: " . print_r($this,
true),
$ilLog->ERROR);
942 if (@file_exists($imagepath_original . $this->getThumbPrefix() . $filename)) {
943 if (!@copy($imagepath_original . $this->getThumbPrefix() . $filename, $imagepath . $this->getThumbPrefix() . $filename)) {
944 $ilLog->write(
"image thumbnail could not be duplicated!!!!",
$ilLog->ERROR);
945 $ilLog->write(
"object: " . print_r($this,
true),
$ilLog->ERROR);
960 $question_id = $this->questioninfo->getOriginalId($this->
getId());
961 $originalObjId = parent::lookupParentObjId($this->questioninfo->getOriginalId($this->getId()));
962 $imagepath_original = $this->
getImagePath($question_id, $originalObjId);
965 foreach ($this->answers as $answer) {
966 if ($answer->hasImage()) {
968 if (@file_exists($imagepath .
$filename)) {
969 if (!file_exists($imagepath)) {
972 if (!file_exists($imagepath_original)) {
975 if (!@copy($imagepath . $filename, $imagepath_original . $filename)) {
976 $ilLog->write(
"image could not be duplicated!!!!",
$ilLog->ERROR);
977 $ilLog->write(
"object: " . print_r($this,
true),
$ilLog->ERROR);
980 if (@file_exists($imagepath . $this->getThumbPrefix() . $filename)) {
981 if (!@copy($imagepath . $this->getThumbPrefix() . $filename, $imagepath_original . $this->getThumbPrefix() . $filename)) {
982 $ilLog->write(
"image thumbnail could not be duplicated!!!!",
$ilLog->ERROR);
983 $ilLog->write(
"object: " . print_r($this,
true),
$ilLog->ERROR);
995 $text = parent::getRTETextWithMediaObjects();
996 foreach ($this->answers as $index => $answer) {
997 $text .= $this->feedbackOBJ->getSpecificAnswerFeedbackContent($this->
getId(), 0, $index);
998 $answer_obj = $this->answers[$index];
999 $text .= $answer_obj->getAnswertext();
1022 parent::setExportDetailsXLSX($worksheet, $startrow, $col, $active_id, $pass);
1028 $worksheet->
setCell($startrow + $i, $col, $answer->getAnswertext());
1031 foreach ($solution as $solutionvalue) {
1032 if (
$id == $solutionvalue[
"value1"]) {
1037 $worksheet->
setCell($startrow + $i, $col + 2, 1);
1039 $worksheet->
setCell($startrow + $i, $col + 2, 0);
1044 return $startrow + $i + 1;
1064 $result[
'id'] = $this->
getId();
1071 $result[
'feedback'] = [
1072 'onenotcorrect' => $this->
formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(),
false)),
1073 'allcorrect' => $this->
formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(),
true))
1079 if ((
string) $answer_obj->getImage()) {
1084 "points_checked" => (
float) $answer_obj->getPointsChecked(),
1085 "points_unchecked" => (float) $answer_obj->getPointsUnchecked(),
1086 "order" => (
int) $answer_obj->getOrder(),
1087 "image" => (string) $answer_obj->getImage(),
1089 $this->feedbackOBJ->getSpecificAnswerFeedbackExportPresentation($this->getId(), 0,
$key)
1101 $result[
'mobs'] = $mobs;
1103 return json_encode($result);
1108 $answer = $this->answers[$index];
1109 if (is_object($answer)) {
1111 $answer->setImage(null);
1118 $ilUser = $DIC[
'ilUser'];
1120 $multilineAnswerSetting = $ilUser->getPref(
"tst_multiline_answers");
1121 if ($multilineAnswerSetting != 1) {
1122 $multilineAnswerSetting = 0;
1124 return $multilineAnswerSetting;
1130 $ilUser = $DIC[
'ilUser'];
1131 $ilUser->writePref(
"tst_multiline_answers", $a_setting);
1145 $this->feedback_setting = $a_feedback_setting;
1159 if ($this->feedback_setting) {
1168 return 'feedback_correct_sc_mc';
1186 $ilDB = $DIC[
'ilDB'];
1189 SELECT SUM(points) points_for_checked_answers 1191 WHERE question_fi = %s AND points > 0 1194 $res =
$ilDB->queryF($query, [
'integer'], [$questionId]);
1198 return $row[
'points_for_checked_answers'] > 0;
1209 public function ensureNoInvalidObligation($questionId):
void 1213 $ilDB = $DIC[
'ilDB'];
1216 SELECT SUM(qpl_a_mc.points) points_for_checked_answers, 1219 FROM tst_test_question 1222 ON qpl_a_mc.question_fi = tst_test_question.question_fi 1224 WHERE tst_test_question.question_fi = %s 1225 AND tst_test_question.obligatory = 1 1227 GROUP BY test_question_id 1230 $res =
$ilDB->queryF($query, [
'integer'], [$questionId]);
1232 $updateTestQuestionIds = [];
1234 while ($row =
$ilDB->fetchAssoc(
$res)) {
1235 if ($row[
'points_for_checked_answers'] <= 0) {
1236 $updateTestQuestionIds[] = $row[
'test_question_id'];
1240 if (count($updateTestQuestionIds)) {
1241 $test_question_id__IN__updateTestQuestionIds =
$ilDB->in(
1243 $updateTestQuestionIds,
1249 UPDATE tst_test_question 1251 WHERE $test_question_id__IN__updateTestQuestionIds 1254 $ilDB->manipulate($query);
1260 $solutionSubmit = [];
1261 $post = $this->dic->http()->wrapper()->post();
1264 if (
$post->has(
"multiple_choice_result_$index")) {
1265 $value =
$post->retrieve(
"multiple_choice_result_$index", $this->dic->refinery()->kindlyTo()->string());
1266 if (is_numeric($value)) {
1267 $solutionSubmit[] = $value;
1271 return $solutionSubmit;
1281 if ($found_values == null) {
1285 foreach ($this->answers as
$key => $answer) {
1286 if (in_array(
$key, $found_values)) {
1287 $points += $answer->getPoints();
1289 $points += $answer->getPointsUnchecked();
1293 if (count($found_values) == 0) {
1339 $ilDB = $DIC[
'ilDB'];
1346 "SELECT value1+1 as value1 FROM tst_solutions WHERE active_fi = %s AND pass = %s AND question_fi = %s AND step = %s",
1347 [
"integer",
"integer",
"integer",
"integer"],
1348 [$active_id, $pass, $this->
getId(), $maxStep]
1352 "SELECT value1+1 as value1 FROM tst_solutions WHERE active_fi = %s AND pass = %s AND question_fi = %s",
1353 [
"integer",
"integer",
"integer"],
1354 [$active_id, $pass, $this->
getId()]
1359 $result->addKeyValue($row[
"value1"], $row[
"value1"]);
1365 $result->setReachedPercentage((
$points / $max_points) * 100);
1378 if ($index !== null) {
1387 $config = parent::buildTestPresentationConfig();
1388 $config->setUseUnchangedAnswerLabel($this->
lng->txt(
'tst_mc_label_none_above'));
static _replaceMediaObjectImageSrc(string $a_text, int $a_direction=0, string $nic='')
Replaces image source from mob image urls with the mob id or replaces mob id with the correct image s...
flushAnswers()
Deletes all answers.
getSolutionValues($active_id, $pass=null, bool $authorized=true)
Loads solutions of a given user from the database an returns it.
calculateReachedPointsForSolution($found_values, $active_id=0)
setNrOfTries(int $a_nr_of_tries)
duplicate(bool $for_test=true, string $title="", string $author="", int $owner=-1, $testObjId=null)
Duplicates an assMultipleChoiceQuestion.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getInstance($identifier)
getRTETextWithMediaObjects()
Collects all text in the question which could contain media objects which were created with the Rich ...
const PercentageResultExpression
toJSON()
Returns a JSON representation of the question.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _getPass($active_id)
Retrieves the actual pass of a given user for a given test.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
isComplete()
Returns true, if a multiple choice question is complete for use.
copyObject($target_questionpool_id, $title="")
Copies an assMultipleChoice object.
const NumberOfResultExpression
createNewOriginalFromThisDuplicate($targetParentId, $targetQuestionTitle="")
saveAdditionalQuestionDataToDb()
Saves a record to the question types additional data table.
const ExclusiveResultExpression
calculateReachedPoints($active_id, $pass=null, $authorizedSolution=true, $returndetails=false)
Returns the points, a learner has reached answering the question.
Abstract basic class which is to be extended by the concrete assessment question type classes...
static isObligationPossible(int $questionId)
saveWorkingData(int $active_id, int $pass, bool $authorized=true)
Saves the learners input of the question to the database.
getColumnCoord(int $a_col)
Get column "name" from number.
bool $shuffle
Indicates whether the answers will be shuffled or not.
ASS_AnswerBinaryStateImage is a class for answers with a binary state indicator (checked/unchecked, set/unset) and an image file.
setSelectionLimit($selectionLimit)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getImagePathWeb()
Returns the web image path for web accessable images of a question.
setThumbSize(int $a_size)
migrateToLmContent($content)
getQuestionType()
Returns the question type of the question.
getAdditionalContentEditingMode()
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getUserQuestionResult($active_id, $pass)
Get the user solution for a question by active_id and the test pass.
loadFromDb($question_id)
Loads a assMultipleChoice object from a database.
static makeDirParents(string $a_dir)
Create a new directory and all parent directories.
setComment(string $comment="")
Class for multiple choice tests.
getSpecificFeedbackAllCorrectOptionLabel()
float $points
The maximum available points for the question.
lmMigrateQuestionTypeSpecificContent(ilAssSelfAssessmentMigrator $migrator)
Base Exception for all Exceptions relating to Modules/Test.
getMultilineAnswerSetting()
removeAnswerImage($index)
saveToDb($original_id="")
Saves a assMultipleChoice object to a database.
deleteAnswer($index=0)
Deletes an answer with a given index.
addAnswer( $answertext="", $points=0.0, $points_unchecked=0.0, $order=0, $answerimage=null, $answer_id=-1)
Adds a possible answer for a multiple choice question.
saveCurrentSolution(int $active_id, int $pass, $value1, $value2, bool $authorized=true, $tstamp=0)
setBold(string $a_coords)
Set cell(s) to bold.
setAnswers(array $answers)
static _enabledAssessmentLogging()
getImagePath($question_id=null, $object_id=null)
Returns the image path for web accessable images of a question.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getAnswerCount()
Returns the number of answers.
static logAction(string $logtext, int $active_id, int $question_id)
static delDir(string $a_dir, bool $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
getSpecificFeedbackSetting()
Gets the current feedback settings in effect for the question.
isForcedEmptySolution($solutionSubmit)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setExportDetailsXLSX(ilAssExcelFormatHelper $worksheet, int $startrow, int $col, int $active_id, int $pass)
{}
getAvailableAnswerOptions($index=null)
If index is null, the function returns an array with all anwser options Else it returns the specific ...
__construct( $title="", $comment="", $author="", $owner=-1, $question="", $output_type=OUTPUT_ORDER)
assMultipleChoice constructor
syncImages()
Sync images of a MC question on synchronisation with the original question.
getOperators($expression)
Get all available operations for a specific question.
setIsSingleline($isSingleline)
static moveUploadedFile(string $a_file, string $a_name, string $a_target, bool $a_raise_errors=true, string $a_mode="move_uploaded")
move uploaded file
getAnswer($index=0)
Returns an answer with a given index.
& getAnswers()
Returns a reference to the answers array.
string $question
The question text.
setSpecificFeedbackSetting($a_feedback_setting)
Sets the feedback settings in effect for the question.
buildTestPresentationConfig()
deleteImage($image_filename)
Deletes an image file.
getExpressionTypes()
Get all available expression types for a specific question.
static getOperatorsByExpression($expression)
saveAnswerSpecificDataToDb()
Saves the answer specific records into a question types answer table.
getMaximumPoints()
Returns the maximum points, a learner can reach answering the question.
saveQuestionDataToDb(int $original_id=-1)
setImageFile($image_filename, $image_tempfilename="")
Sets the image file and uploads the image to the object's image directory.
getSolutionMaxPass(int $active_id)
removeCurrentSolution(int $active_id, int $pass, bool $authorized=true)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getAdditionalTableName()
Returns the name of the additional question data table in the database.
setOriginalId(?int $original_id)
setTitle(string $title="")
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples
setLifecycle(ilAssQuestionLifecycle $lifecycle)
getAnswerTableName()
Returns the name of the answer table in the database.
getCurrentSolutionResultSet(int $active_id, int $pass, bool $authorized=true)
ILIAS DI LoggingServices $ilLog
getHtmlQuestionContentPurifier()
lookupMaxStep(int $active_id, int $pass)
setAuthor(string $author="")
setShuffle(?bool $shuffle=true)
setAdditionalContentEditingMode(?string $additionalContentEditingMode)
static getDraftInstance()
setMultilineAnswerSetting($a_setting=0)
copyImages($question_id, $source_questionpool)
setQuestion(string $question="")
const EmptyAnswerExpression