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';
94 $this->matchingpairs = array();
96 $this->terms = array();
97 $this->definitions = array();
107 if (strlen($this->title)
110 && count($this->matchingpairs)
143 "DELETE FROM qpl_a_mterm WHERE question_fi = %s",
145 array( $this->
getId() )
150 "DELETE FROM qpl_a_mdef WHERE question_fi = %s",
152 array( $this->
getId() )
157 foreach ($this->terms as $key => $term) {
158 $next_id =
$ilDB->nextId(
'qpl_a_mterm');
159 $ilDB->insert(
'qpl_a_mterm', array(
160 'term_id' => array(
'integer', $next_id),
161 'question_fi' => array(
'integer', $this->
getId()),
162 'picture' => array(
'text', $term->picture),
163 'term' => array(
'text', $term->text),
164 'ident' => array(
'integer', $term->identifier)
166 $termids[$term->identifier] = $next_id;
169 $definitionids = array();
171 foreach ($this->definitions as $key => $definition) {
172 $next_id =
$ilDB->nextId(
'qpl_a_mdef');
173 $ilDB->insert(
'qpl_a_mdef', array(
174 'def_id' => array(
'integer', $next_id),
175 'question_fi' => array(
'integer', $this->
getId()),
176 'picture' => array(
'text', $definition->picture),
177 'definition' => array(
'text', $definition->text),
178 'ident' => array(
'integer', $definition->identifier)
180 $definitionids[$definition->identifier] = $next_id;
184 "DELETE FROM qpl_a_matching WHERE question_fi = %s",
186 array( $this->
getId() )
190 $next_id =
$ilDB->nextId(
'qpl_a_matching');
192 "INSERT INTO qpl_a_matching (answer_id, question_fi, points, term_fi, definition_fi) VALUES (%s, %s, %s, %s, %s)",
193 array(
'integer',
'integer',
'float',
'integer',
'integer' ),
198 $termids[$pair->term->identifier],
199 $definitionids[$pair->definition->identifier]
217 array( $this->
getId() )
221 'question_fi' => array(
'integer', $this->
getId()),
222 'shuffle' => array(
'text', $this->shuffle),
223 'matching_type' => array(
'text', $this->matching_type),
241 SELECT qpl_questions.*,
242 {$this->getAdditionalTableName()}.*
244 LEFT JOIN {$this->getAdditionalTableName()}
245 ON {$this->getAdditionalTableName()}.question_fi = qpl_questions.question_id
246 WHERE qpl_questions.question_id = %s
257 $this->
setId($question_id);
266 include_once(
"./Services/RTE/classes/class.ilRTE.php");
287 "SELECT * FROM qpl_a_mterm WHERE question_fi = %s ORDER BY term_id ASC",
291 include_once
"./Modules/TestQuestionPool/classes/class.assAnswerMatchingTerm.php";
292 $this->terms = array();
296 array_push($this->terms, $term);
297 $termids[
$data[
'term_id']] = $term;
301 $definitionids = array();
303 "SELECT * FROM qpl_a_mdef WHERE question_fi = %s ORDER BY def_id ASC",
307 include_once
"./Modules/TestQuestionPool/classes/class.assAnswerMatchingDefinition.php";
308 $this->definitions = array();
312 array_push($this->definitions, $definition);
313 $definitionids[
$data[
'def_id']] = $definition;
317 $this->matchingpairs = array();
319 "SELECT * FROM qpl_a_matching WHERE question_fi = %s ORDER BY answer_id",
323 include_once
"./Modules/TestQuestionPool/classes/class.assAnswerMatchingPair.php";
329 parent::loadFromDb($question_id);
338 if ($this->
id <= 0) {
343 $this_id = $this->
getId();
347 include_once(
"./Modules/TestQuestionPool/classes/class.assQuestion.php");
351 if ((
int) $testObjId > 0) {
352 $clone->setObjId($testObjId);
371 $clone->copyPageOfQuestion($this_id);
373 $clone->copyXHTMLMediaObjectsOfQuestion($this_id);
375 $clone->duplicateImages($this_id, $thisObjId, $clone->getId(), $testObjId);
377 $clone->onDuplicate($thisObjId, $this_id, $clone->getObjId(), $clone->getId());
387 if ($this->
id <= 0) {
393 include_once(
"./Modules/TestQuestionPool/classes/class.assQuestion.php");
396 $source_questionpool_id = $this->
getObjId();
397 $clone->setObjId($target_questionpool_id);
407 $clone->copyImages(
$original_id, $source_questionpool_id);
409 $clone->onCopy($source_questionpool_id,
$original_id, $clone->getObjId(), $clone->getId());
416 if ($this->
id <= 0) {
421 include_once(
"./Modules/TestQuestionPool/classes/class.assQuestion.php");
424 $sourceParentId = $this->
getObjId();
430 $clone->setObjId($targetParentId);
432 if ($targetQuestionTitle) {
433 $clone->setTitle($targetQuestionTitle);
438 $clone->copyPageOfQuestion($sourceQuestionId);
440 $clone->copyXHTMLMediaObjectsOfQuestion($sourceQuestionId);
442 $clone->copyImages($sourceQuestionId, $sourceParentId);
444 $clone->onCopy($sourceParentId, $sourceQuestionId, $clone->getObjId(), $clone->getId());
454 $imagepath_original = str_replace(
"/$this->id/images",
"/$question_id/images", $imagepath);
456 if ((
int) $objectId > 0) {
457 $imagepath_original = str_replace(
"/$this->obj_id/",
"/$objectId/", $imagepath_original);
460 foreach ($this->terms as $term) {
461 if (strlen($term->picture)) {
463 if (!file_exists($imagepath)) {
467 $ilLog->write(
"matching question image could not be duplicated: $imagepath_original$filename");
469 if (@file_exists($imagepath_original . $this->
getThumbPrefix() . $filename)) {
471 $ilLog->write(
"matching question image thumbnail could not be duplicated: $imagepath_original" . $this->
getThumbPrefix() . $filename);
476 foreach ($this->definitions as $definition) {
477 if (strlen($definition->picture)) {
479 if (!file_exists($imagepath)) {
483 $ilLog->write(
"matching question image could not be duplicated: $imagepath_original$filename");
485 if (@file_exists($imagepath_original . $this->
getThumbPrefix() . $filename)) {
487 $ilLog->write(
"matching question image thumbnail could not be duplicated: $imagepath_original" . $this->
getThumbPrefix() . $filename);
494 public function copyImages($question_id, $source_questionpool)
500 $imagepath_original = str_replace(
"/$this->id/images",
"/$question_id/images", $imagepath);
501 $imagepath_original = str_replace(
"/$this->obj_id/",
"/$source_questionpool/", $imagepath_original);
502 foreach ($this->terms as $term) {
503 if (strlen($term->picture)) {
504 if (!file_exists($imagepath)) {
509 $ilLog->write(
"matching question image could not be copied: $imagepath_original$filename");
512 $ilLog->write(
"matching question image thumbnail could not be copied: $imagepath_original" . $this->
getThumbPrefix() . $filename);
516 foreach ($this->definitions as $definition) {
517 if (strlen($definition->picture)) {
519 if (!file_exists($imagepath)) {
526 $ilLog->write(
"matching question image could not be copied: $imagepath_original$filename");
532 $ilLog->write(
"matching question image thumbnail could not be copied: $imagepath_original" . $this->
getThumbPrefix() . $filename);
550 include_once
"./Modules/TestQuestionPool/classes/class.assAnswerMatchingPair.php";
551 include_once
"./Modules/TestQuestionPool/classes/class.assAnswerMatchingTerm.php";
552 include_once
"./Modules/TestQuestionPool/classes/class.assAnswerMatchingDefinition.php";
553 if (is_null($term)) {
556 if (is_null($definition)) {
560 if ($position < count($this->matchingpairs)) {
561 $part1 = array_slice($this->matchingpairs, 0, $position);
562 $part2 = array_slice($this->matchingpairs, $position);
563 $this->matchingpairs = array_merge($part1, array($pair), $part2);
565 array_push($this->matchingpairs, $pair);
582 require_once
'./Modules/TestQuestionPool/classes/class.assAnswerMatchingPair.php';
583 require_once
'./Modules/TestQuestionPool/classes/class.assAnswerMatchingTerm.php';
584 require_once
'./Modules/TestQuestionPool/classes/class.assAnswerMatchingDefinition.php';
585 if (is_null($term)) {
588 if (is_null($definition)) {
592 array_push($this->matchingpairs, $pair);
600 foreach ($this->terms as $term) {
601 if ($term->identifier == $a_identifier) {
613 foreach ($this->definitions as $definition) {
614 if ($definition->identifier == $a_identifier) {
634 if (count($this->matchingpairs) < 1) {
637 if (
$index >= count($this->matchingpairs)) {
640 return $this->matchingpairs[
$index];
655 if (count($this->matchingpairs) < 1) {
658 if (
$index >= count($this->matchingpairs)) {
661 unset($this->matchingpairs[
$index]);
662 $this->matchingpairs = array_values($this->matchingpairs);
671 $this->matchingpairs = array();
682 return count($this->matchingpairs);
715 return count($this->terms);
726 return count($this->definitions);
737 array_push($this->terms, $term);
748 array_push($this->definitions, $definition);
759 if (is_null($term)) {
760 include_once
"./Modules/TestQuestionPool/classes/class.assAnswerMatchingTerm.php";
763 if ($position < count($this->terms)) {
764 $part1 = array_slice($this->terms, 0, $position);
765 $part2 = array_slice($this->terms, $position);
766 $this->terms = array_merge($part1, array($term), $part2);
768 array_push($this->terms, $term);
780 if (is_null($definition)) {
781 include_once
"./Modules/TestQuestionPool/classes/class.assAnswerMatchingDefinition.php";
784 if ($position < count($this->definitions)) {
785 $part1 = array_slice($this->definitions, 0, $position);
786 $part2 = array_slice($this->definitions, $position);
787 $this->definitions = array_merge($part1, array($definition), $part2);
789 array_push($this->definitions, $definition);
799 $this->terms = array();
808 $this->definitions = array();
819 unset($this->terms[$position]);
820 $this->terms = array_values($this->terms);
831 unset($this->definitions[$position]);
832 $this->definitions = array_values($this->definitions);
844 $this->terms[
$index] = $term;
859 if ($returndetails) {
860 throw new ilTestException(
'return details not implemented for ' . __METHOD__);
866 $found_values = array();
867 if (is_null(
$pass)) {
872 if (strcmp(
$data[
"value1"],
"") != 0) {
873 if (!isset($found_values[
$data[
'value2']])) {
874 $found_values[
$data[
'value2']] = array();
877 $found_values[
$data[
'value2']][] =
$data[
'value1'];
913 $matchingPairs = array();
915 foreach ($this->matchingpairs as $pair) {
916 if ($pair->points <= 0) {
920 $matchingPairs[] = $pair;
923 return $matchingPairs;
928 $matchingPairsByDefinition = array();
930 foreach ($this->matchingpairs as $pair) {
931 if ($pair->points <= 0) {
935 $defId = $pair->definition->identifier;
937 if (!isset($matchingPairsByDefinition[$defId])) {
938 $matchingPairsByDefinition[$defId] = $pair;
939 } elseif ($pair->points > $matchingPairsByDefinition[$defId]->points) {
940 $matchingPairsByDefinition[$defId] = $pair;
944 return $matchingPairsByDefinition;
953 $indexedValues = array();
955 foreach ($valuePairs as $valuePair) {
956 if (!isset($indexedValues[$valuePair[
'value2']])) {
957 $indexedValues[$valuePair[
'value2']] = array();
960 $indexedValues[$valuePair[
'value2']][] = $valuePair[
'value1'];
963 return $indexedValues;
977 if (preg_match(
"/.*\\.(\\w+)$/",
$filename, $matches)) {
978 $extension = $matches[1];
980 return md5(
$filename) .
"." . $extension;
985 $term = $this->terms[
$index];
986 if (is_object($term)) {
988 $term->picture =
null;
994 $definition = $this->definitions[
$index];
995 if (is_object($definition)) {
997 $definition->picture =
null;
1024 public function setImageFile($image_tempfilename, $image_filename, $previous_filename =
'')
1027 if (strlen($image_tempfilename)) {
1028 $image_filename = str_replace(
" ",
"_", $image_filename);
1030 if (!file_exists($imagepath)) {
1033 $savename = $image_filename;
1041 if (
$result && (strcmp($image_filename, $previous_filename) != 0) && (strlen($previous_filename))) {
1052 $matchings = array();
1055 if (isset($postData[$definition->identifier])) {
1056 foreach ($this->
getTerms() as $term) {
1057 if (isset($postData[$definition->identifier][$term->identifier])) {
1058 if (!is_array($postData[$definition->identifier])) {
1059 $postData[$definition->identifier] = array();
1062 $matchings[$definition->identifier][] = $term->identifier;
1077 $handledTerms = array();
1079 foreach ($submittedMatchings as $definition =>
$terms) {
1086 if (isset($handledTerms[$term])) {
1091 $handledTerms[$term] = $term;
1114 $matchingsExist =
false;
1116 if ($submittedMatchingsValid) {
1117 if (is_null(
$pass)) {
1118 include_once
"./Modules/Test/classes/class.ilObjTest.php";
1122 $this->
getProcessLocker()->executeUserSolutionUpdateLockOperation(
function () use (&$matchingsExist, $submittedMatchings, $active_id,
$pass, $authorized) {
1125 foreach ($submittedMatchings as $definition =>
$terms) {
1128 $matchingsExist =
true;
1133 $saveWorkingDataResult =
true;
1135 $saveWorkingDataResult =
false;
1138 include_once(
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
1140 if ($matchingsExist) {
1147 return $saveWorkingDataResult;
1161 mt_srand((
double) microtime() * 1000000);
1162 $random_number = mt_rand(1, 100000);
1166 foreach ($this->matchingpairs as $key => $pair) {
1167 if (($pair->term->identifier == $random_number) || ($pair->definition->identifier == $random_number)) {
1173 return $random_number;
1204 return "assMatchingQuestion";
1214 return "qpl_qst_matching";
1224 return array(
"qpl_a_matching",
"qpl_a_mterm");
1233 return parent::getRTETextWithMediaObjects();
1249 parent::setExportDetailsXLS($worksheet, $startrow, $active_id,
$pass);
1255 foreach ($solutions as $solution) {
1256 $matches_written =
false;
1258 if (!$matches_written) {
1259 $worksheet->setCell($startrow +
$i, 1, $this->lng->txt(
"matches"));
1261 $matches_written =
true;
1262 if ($pair->definition->identifier == $solution[
"value2"]) {
1263 if (strlen($pair->definition->text)) {
1264 $worksheet->setCell($startrow +
$i, 0, $pair->definition->text);
1266 $worksheet->setCell($startrow +
$i, 0, $pair->definition->picture);
1269 if ($pair->term->identifier == $solution[
"value1"]) {
1270 if (strlen($pair->term->text)) {
1271 $worksheet->setCell($startrow +
$i, 2, $pair->term->text);
1273 $worksheet->setCell($startrow +
$i, 2, $pair->term->picture);
1280 return $startrow +
$i + 1;
1310 $this->thumb_geometry = ($a_geometry < 1) ? 100 : $a_geometry;
1318 foreach ($this->terms as $term) {
1319 if (strlen($term->picture)) {
1323 foreach ($this->definitions as $definition) {
1324 if (strlen($definition->picture)) {
1342 switch (strtoupper($path_info[
'extension'])) {
1373 'onenotcorrect' => $this->
formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(),
false)),
1374 'allcorrect' => $this->formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(),
true))
1377 require_once
'Services/Randomization/classes/class.ilArrayElementShuffler.php';
1386 "id" => (
int) $this->getId() . $term->identifier
1403 "id" => (
int) $this->getId() . $def->identifier
1409 $matchings = array();
1412 if ($pair->points <= 0) {
1417 $pid = $pair->definition->identifier;
1419 $pid .=
'::' . $pair->term->identifier;
1422 if (!isset($matchings[$pid]) || $matchings[$pid][
"points"] < $pair->points) {
1423 $matchings[$pid] = array(
1424 "term_id" => (
int) $this->
getId() . $pair->term->identifier,
1425 "def_id" => (
int) $this->getId() . $pair->definition->identifier,
1426 "points" => (
int) $pair->points
1431 $result[
'matchingPairs'] = array_values($matchings);
1438 $lng->loadLanguageModule(
'assessment');
1439 $result[
'reset_button_label'] =
$lng->txt(
"reset_terms");
1471 foreach ($found_values as $definition =>
$terms) {
1472 foreach (
$terms as $term) {
1473 foreach ($this->matchingpairs as $pair) {
1474 if ($pair->definition->identifier == $definition && $pair->term->identifier == $term) {
1493 require_once
"./Modules/TestQuestionPool/classes/class.ilOperatorsExpressionMapping.php";
1526 "SELECT ident FROM qpl_a_mdef WHERE question_fi = %s ORDER BY def_id",
1528 array($this->
getId())
1538 "SELECT ident FROM qpl_a_mterm WHERE question_fi = %s ORDER BY term_id",
1540 array($this->
getId())
1549 $maxStep = $this->lookupMaxStep($active_id,
$pass);
1551 if ($maxStep !==
null) {
1553 "SELECT value1, value2 FROM tst_solutions WHERE active_fi = %s AND pass = %s AND question_fi = %s AND step = %s",
1554 array(
"integer",
"integer",
"integer",
"integer"),
1555 array($active_id,
$pass, $this->
getId(), $maxStep)
1559 "SELECT value1, value2 FROM tst_solutions WHERE active_fi = %s AND pass = %s AND question_fi = %s",
1560 array(
"integer",
"integer",
"integer"),
1566 if ($row[
"value1"] > 0) {
1601 parent::afterSyncWithOriginal($origQuestionId, $dupQuestionId, $origParentObjId, $dupParentObjId);
1603 $origImagePath = $this->
buildImagePath($origQuestionId, $origParentObjId);
1604 $dupImagePath = $this->
buildImagePath($dupQuestionId, $dupParentObjId);
1607 if (is_dir($dupImagePath)) {
An exception for terminatinating execution or to throw for unit testing.
Class for matching question definitions.
Class for matching question pairs.
Class for matching question terms.
Class for matching questions.
supportsJavascriptOutput()
Returns true if the question type supports JavaScript output.
setThumbGeometry($a_geometry)
Set the thumbnail geometry.
deleteDefinition($position)
Deletes a definition.
getEncryptedFilename($filename)
Returns the encrypted save filename of a matching picture Images are saved with an encrypted filename...
__construct( $title="", $comment="", $author="", $owner=-1, $question="", $matching_type=MT_TERMS_DEFINITIONS)
assMatchingQuestion constructor
removeDefinitionImage($index)
getMatchingPairCount()
Returns the number of matching pairs.
calculateReachedPointsForSolution($found_values)
addDefinition($definition)
Adds a definition.
getMaximumPoints()
Calculates and Returns the maximum points, a learner can reach answering the question.
savePreviewData(ilAssQuestionPreviewSession $previewSession)
copyObject($target_questionpool_id, $title="")
Copies an assMatchingQuestion.
getMostPositiveScoredUniqueTermMatchingPairs()
toJSON()
Returns a JSON representation of the question TODO.
getOperators($expression)
Get all available operations for a specific question.
setExportDetailsXLS($worksheet, $startrow, $active_id, $pass)
{Creates an Excel worksheet for the detailed cumulated results of this question.object}
getDefinitionCount()
Returns the number of definitions.
getDefinitions()
Returns the definitions of the matching question.
getMatchingPair($index=0)
Returns a matching pair with a given index.
createNewOriginalFromThisDuplicate($targetParentId, $targetQuestionTitle="")
duplicate($for_test=true, $title="", $author="", $owner="", $testObjId=null)
Duplicates an assMatchingQuestion.
getQuestionType()
Returns the question type of the question.
isComplete()
Returns true, if a matching question is complete for use.
calculateReachedPoints($active_id, $pass=null, $authorizedSolution=true, $returndetails=false)
Returns the points, a learner has reached answering the question.
insertDefinition($position, $definition=null)
Inserts a definition.
& getMatchingPairs()
Returns the matchingpairs array.
saveWorkingData($active_id, $pass=null, $authorized=true)
Saves the learners input of the question to the database.
rebuildThumbnails()
Rebuild the thumbnail images with a new thumbnail size.
getPositiveScoredMatchingPairs()
duplicateImages($question_id, $objectId=null)
getTermCount()
Returns the number of terms.
getThumbGeometry()
Get the thumbnail geometry.
deleteTerm($position)
Deletes a term.
checkSubmittedMatchings($submittedMatchings)
getTerms()
Returns the terms of the matching question.
addMatchingPair($term=null, $definition=null, $points=0.0)
Adds an matching pair for an matching choice question.
flushDefinitions()
Deletes all definitions.
fetchIndexedValuesFromValuePairs(array $valuePairs)
loadFromDb($question_id)
Loads a assMatchingQuestion object from a database.
getAnswerTableName()
Returns the name of the answer table in the database.
getDefinitionWithIdentifier($a_identifier)
Returns a definition with a given identifier.
getAdditionalTableName()
Returns the name of the additional question data table in the database.
flushTerms()
Deletes all terms.
copyImages($question_id, $source_questionpool)
flushMatchingPairs()
Deletes all matching pairs.
saveToDb($original_id="")
Saves a assMatchingQuestion object to a database.
setMatchingMode($matchingMode)
getAvailableAnswerOptions($index=null)
If index is null, the function returns an array with all anwser options Else it returns the specific ...
setImageFile($image_tempfilename, $image_filename, $previous_filename='')
Sets the image file and uploads the image to the object's image directory.
setShuffle($shuffle=true)
Sets the shuffle flag.
getThumbSize()
Get the thumbnail geometry.
getTermWithIdentifier($a_identifier)
Returns a term with a given identifier.
setTerm($term, $index)
Sets a specific term.
getRTETextWithMediaObjects()
Collects all text in the question which could contain media objects which were created with the Rich ...
fetchSubmittedMatchingsFromPost()
addTerm($term)
Adds a term.
saveAnswerSpecificDataToDb()
Saves the answer specific records into a question types answer table.
afterSyncWithOriginal($origQuestionId, $dupQuestionId, $origParentObjId, $dupParentObjId)
{}
getExpressionTypes()
Get all available expression types for a specific question.
const MATCHING_MODE_1_ON_1
deleteImagefile($filename)
Deletes an imagefile from the system if the file is deleted manually.
getMaximumScoringMatchingPairs()
deleteMatchingPair($index=0)
Deletes a matching pair with a given index.
const MATCHING_MODE_N_ON_N
insertMatchingPair($position, $term=null, $definition=null, $points=0.0)
Inserts a matching pair for an matching choice question.
insertTerm($position, $term=null)
Inserts a term.
saveAdditionalQuestionDataToDb()
Saves a record to the question types additional data table.
generateThumbForFile($path, $file)
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.
buildImagePath($questionId, $parentObjectId)
static logAction($logtext="", $active_id="", $question_id="")
Logs an action into the Test&Assessment log.
getImagePath($question_id=null, $object_id=null)
Returns the image path for web accessable images of a question.
removeCurrentSolution($active_id, $pass, $authorized=true)
setAuthor($author="")
Sets the authors name of the assQuestion object.
static isFileAvailable($file)
setShuffler(ilArrayElementShuffler $shuffler)
setLifecycle(ilAssQuestionLifecycle $lifecycle)
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.
static getDraftInstance()
static getInstance($identifier)
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 moveUploadedFile($a_file, $a_name, $a_target, $a_raise_errors=true, $a_mode="move_uploaded")
move uploaded file
static delDir($a_dir, $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
static convertImage( $a_from, $a_to, $a_target_format="", $a_geometry="", $a_background_color="")
convert image
static rCopy($a_sdir, $a_tdir, $preserveTimeAttributes=false)
Copies content of a directory $a_sdir recursively to a directory $a_tdir.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static makeDirParents($a_dir)
Create a new directory and all parent directories.
const MT_TERMS_DEFINITIONS
Class iQuestionCondition.
const PercentageResultExpression
const MatchingResultExpression
getUserQuestionResult($active_id, $pass)
Get the user solution for a question by active_id and the test pass.
const NumericResultExpression
const EmptyAnswerExpression
Interface ilObjAnswerScoringAdjustable.
Interface ilObjQuestionScoringAdjustable.
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc