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';
94 $this->matchingpairs = array();
96 $this->terms = array();
97 $this->definitions = array();
107 if (strlen($this->title)
110 && count($this->matchingpairs)
127 $ilDB = $DIC[
'ilDB'];
140 $ilDB = $DIC[
'ilDB'];
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]
210 $ilDB = $DIC[
'ilDB'];
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),
238 $ilDB = $DIC[
'ilDB'];
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");
271 $this->
setEstimatedWorkingTime(substr($data[
"working_time"], 0, 2), substr($data[
"working_time"], 3, 2), substr($data[
"working_time"], 6, 2));
281 "SELECT * FROM qpl_a_mterm WHERE question_fi = %s ORDER BY term_id ASC",
285 include_once
"./Modules/TestQuestionPool/classes/class.assAnswerMatchingTerm.php";
286 $this->terms = array();
290 array_push($this->terms, $term);
291 $termids[
$data[
'term_id']] = $term;
295 $definitionids = array();
297 "SELECT * FROM qpl_a_mdef WHERE question_fi = %s ORDER BY def_id ASC",
301 include_once
"./Modules/TestQuestionPool/classes/class.assAnswerMatchingDefinition.php";
302 $this->definitions = array();
306 array_push($this->definitions, $definition);
307 $definitionids[
$data[
'def_id']] = $definition;
311 $this->matchingpairs = array();
313 "SELECT * FROM qpl_a_matching WHERE question_fi = %s ORDER BY answer_id",
317 include_once
"./Modules/TestQuestionPool/classes/class.assAnswerMatchingPair.php";
320 array_push($this->matchingpairs,
new assAnswerMatchingPair($termids[
$data[
'term_fi']], $definitionids[$data[
'definition_fi']], $data[
'points']));
323 parent::loadFromDb($question_id);
332 if ($this->
id <= 0) {
337 $this_id = $this->
getId();
341 include_once(
"./Modules/TestQuestionPool/classes/class.assQuestion.php");
345 if ((
int) $testObjId > 0) {
346 $clone->setObjId($testObjId);
365 $clone->copyPageOfQuestion($this_id);
367 $clone->copyXHTMLMediaObjectsOfQuestion($this_id);
369 $clone->duplicateImages($this_id, $thisObjId, $clone->getId(), $testObjId);
371 $clone->onDuplicate($thisObjId, $this_id, $clone->getObjId(), $clone->getId());
381 if ($this->
id <= 0) {
387 include_once(
"./Modules/TestQuestionPool/classes/class.assQuestion.php");
390 $source_questionpool_id = $this->
getObjId();
391 $clone->setObjId($target_questionpool_id);
401 $clone->copyImages(
$original_id, $source_questionpool_id);
403 $clone->onCopy($source_questionpool_id,
$original_id, $clone->getObjId(), $clone->getId());
410 if ($this->
id <= 0) {
415 include_once(
"./Modules/TestQuestionPool/classes/class.assQuestion.php");
418 $sourceParentId = $this->
getObjId();
424 $clone->setObjId($targetParentId);
426 if ($targetQuestionTitle) {
427 $clone->setTitle($targetQuestionTitle);
432 $clone->copyPageOfQuestion($sourceQuestionId);
434 $clone->copyXHTMLMediaObjectsOfQuestion($sourceQuestionId);
436 $clone->copyImages($sourceQuestionId, $sourceParentId);
438 $clone->onCopy($sourceParentId, $sourceQuestionId, $clone->getObjId(), $clone->getId());
448 $imagepath_original = str_replace(
"/$this->id/images",
"/$question_id/images", $imagepath);
450 if ((
int) $objectId > 0) {
451 $imagepath_original = str_replace(
"/$this->obj_id/",
"/$objectId/", $imagepath_original);
454 foreach ($this->terms as $term) {
455 if (strlen($term->picture)) {
457 if (!file_exists($imagepath)) {
460 if (!@copy($imagepath_original .
$filename, $imagepath . $filename)) {
461 $ilLog->write(
"matching question image could not be duplicated: $imagepath_original$filename");
463 if (@file_exists($imagepath_original . $this->
getThumbPrefix() . $filename)) {
465 $ilLog->write(
"matching question image thumbnail could not be duplicated: $imagepath_original" . $this->
getThumbPrefix() . $filename);
470 foreach ($this->definitions as $definition) {
471 if (strlen($definition->picture)) {
473 if (!file_exists($imagepath)) {
476 if (!@copy($imagepath_original .
$filename, $imagepath . $filename)) {
477 $ilLog->write(
"matching question image could not be duplicated: $imagepath_original$filename");
479 if (@file_exists($imagepath_original . $this->
getThumbPrefix() . $filename)) {
481 $ilLog->write(
"matching question image thumbnail could not be duplicated: $imagepath_original" . $this->
getThumbPrefix() . $filename);
488 public function copyImages($question_id, $source_questionpool)
494 $imagepath_original = str_replace(
"/$this->id/images",
"/$question_id/images", $imagepath);
495 $imagepath_original = str_replace(
"/$this->obj_id/",
"/$source_questionpool/", $imagepath_original);
496 foreach ($this->terms as $term) {
497 if (strlen($term->picture)) {
498 if (!file_exists($imagepath)) {
502 if (!@copy($imagepath_original .
$filename, $imagepath . $filename)) {
503 $ilLog->write(
"matching question image could not be copied: $imagepath_original$filename");
506 $ilLog->write(
"matching question image thumbnail could not be copied: $imagepath_original" . $this->
getThumbPrefix() . $filename);
510 foreach ($this->definitions as $definition) {
511 if (strlen($definition->picture)) {
513 if (!file_exists($imagepath)) {
518 copy($imagepath_original . $filename, $imagepath . $filename);
520 $ilLog->write(
"matching question image could not be copied: $imagepath_original$filename");
526 $ilLog->write(
"matching question image thumbnail could not be copied: $imagepath_original" . $this->
getThumbPrefix() . $filename);
544 include_once
"./Modules/TestQuestionPool/classes/class.assAnswerMatchingPair.php";
545 include_once
"./Modules/TestQuestionPool/classes/class.assAnswerMatchingTerm.php";
546 include_once
"./Modules/TestQuestionPool/classes/class.assAnswerMatchingDefinition.php";
547 if (is_null($term)) {
550 if (is_null($definition)) {
554 if ($position < count($this->matchingpairs)) {
555 $part1 = array_slice($this->matchingpairs, 0, $position);
556 $part2 = array_slice($this->matchingpairs, $position);
557 $this->matchingpairs = array_merge($part1, array($pair), $part2);
559 array_push($this->matchingpairs, $pair);
576 require_once
'./Modules/TestQuestionPool/classes/class.assAnswerMatchingPair.php';
577 require_once
'./Modules/TestQuestionPool/classes/class.assAnswerMatchingTerm.php';
578 require_once
'./Modules/TestQuestionPool/classes/class.assAnswerMatchingDefinition.php';
579 if (is_null($term)) {
582 if (is_null($definition)) {
586 array_push($this->matchingpairs, $pair);
594 foreach ($this->terms as $term) {
595 if ($term->identifier == $a_identifier) {
607 foreach ($this->definitions as $definition) {
608 if ($definition->identifier == $a_identifier) {
628 if (count($this->matchingpairs) < 1) {
631 if (
$index >= count($this->matchingpairs)) {
634 return $this->matchingpairs[
$index];
649 if (count($this->matchingpairs) < 1) {
652 if (
$index >= count($this->matchingpairs)) {
655 unset($this->matchingpairs[
$index]);
656 $this->matchingpairs = array_values($this->matchingpairs);
665 $this->matchingpairs = array();
676 return count($this->matchingpairs);
709 return count($this->terms);
720 return count($this->definitions);
731 array_push($this->terms, $term);
742 array_push($this->definitions, $definition);
753 if (is_null($term)) {
754 include_once
"./Modules/TestQuestionPool/classes/class.assAnswerMatchingTerm.php";
757 if ($position < count($this->terms)) {
758 $part1 = array_slice($this->terms, 0, $position);
759 $part2 = array_slice($this->terms, $position);
760 $this->terms = array_merge($part1, array($term), $part2);
762 array_push($this->terms, $term);
774 if (is_null($definition)) {
775 include_once
"./Modules/TestQuestionPool/classes/class.assAnswerMatchingDefinition.php";
778 if ($position < count($this->definitions)) {
779 $part1 = array_slice($this->definitions, 0, $position);
780 $part2 = array_slice($this->definitions, $position);
781 $this->definitions = array_merge($part1, array($definition), $part2);
783 array_push($this->definitions, $definition);
793 $this->terms = array();
802 $this->definitions = array();
813 unset($this->terms[$position]);
814 $this->terms = array_values($this->terms);
825 unset($this->definitions[$position]);
826 $this->definitions = array_values($this->definitions);
838 $this->terms[
$index] = $term;
853 if ($returndetails) {
854 throw new ilTestException(
'return details not implemented for ' . __METHOD__);
858 $ilDB = $DIC[
'ilDB'];
860 $found_values = array();
861 if (is_null(
$pass)) {
866 if (strcmp(
$data[
"value1"],
"") != 0) {
867 if (!isset($found_values[
$data[
'value2']])) {
868 $found_values[$data[
'value2']] = array();
871 $found_values[$data[
'value2']][] = $data[
'value1'];
907 $matchingPairs = array();
909 foreach ($this->matchingpairs as $pair) {
910 if ($pair->points <= 0) {
914 $matchingPairs[] = $pair;
917 return $matchingPairs;
922 $matchingPairsByDefinition = array();
924 foreach ($this->matchingpairs as $pair) {
925 if ($pair->points <= 0) {
929 $defId = $pair->definition->identifier;
931 if (!isset($matchingPairsByDefinition[$defId])) {
932 $matchingPairsByDefinition[$defId] = $pair;
933 } elseif ($pair->points > $matchingPairsByDefinition[$defId]->points) {
934 $matchingPairsByDefinition[$defId] = $pair;
938 return $matchingPairsByDefinition;
947 $indexedValues = array();
949 foreach ($valuePairs as $valuePair) {
950 if (!isset($indexedValues[$valuePair[
'value2']])) {
951 $indexedValues[$valuePair[
'value2']] = array();
954 $indexedValues[$valuePair[
'value2']][] = $valuePair[
'value1'];
957 return $indexedValues;
971 if (preg_match(
"/.*\\.(\\w+)$/",
$filename, $matches)) {
972 $extension = $matches[1];
974 return md5(
$filename) .
"." . $extension;
979 $term = $this->terms[
$index];
980 if (is_object($term)) {
982 $term->picture = null;
988 $definition = $this->definitions[
$index];
989 if (is_object($definition)) {
991 $definition->picture = null;
1018 public function setImageFile($image_tempfilename, $image_filename, $previous_filename =
'')
1021 if (strlen($image_tempfilename)) {
1022 $image_filename = str_replace(
" ",
"_", $image_filename);
1024 if (!file_exists($imagepath)) {
1027 $savename = $image_filename;
1028 if (!ilUtil::moveUploadedFile($image_tempfilename, $savename, $imagepath . $savename)) {
1035 if (
$result && (strcmp($image_filename, $previous_filename) != 0) && (strlen($previous_filename))) {
1046 $matchings = array();
1049 if (isset(
$postData[$definition->identifier])) {
1050 foreach ($this->
getTerms() as $term) {
1051 if (isset(
$postData[$definition->identifier][$term->identifier])) {
1052 if (!is_array(
$postData[$definition->identifier])) {
1053 $postData[$definition->identifier] = array();
1056 $matchings[$definition->identifier][] = $term->identifier;
1071 $handledTerms = array();
1073 foreach ($submittedMatchings as $definition =>
$terms) {
1080 if (isset($handledTerms[$term])) {
1085 $handledTerms[$term] = $term;
1103 $ilDB = $DIC[
'ilDB'];
1108 $matchingsExist =
false;
1110 if ($submittedMatchingsValid) {
1111 if (is_null(
$pass)) {
1112 include_once
"./Modules/Test/classes/class.ilObjTest.php";
1116 $this->
getProcessLocker()->executeUserSolutionUpdateLockOperation(
function () use (&$matchingsExist, $submittedMatchings, $active_id,
$pass, $authorized) {
1119 foreach ($submittedMatchings as $definition =>
$terms) {
1122 $matchingsExist =
true;
1127 $saveWorkingDataResult =
true;
1129 $saveWorkingDataResult =
false;
1132 include_once(
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
1134 if ($matchingsExist) {
1141 return $saveWorkingDataResult;
1155 mt_srand((
double) microtime() * 1000000);
1156 $random_number = mt_rand(1, 100000);
1160 foreach ($this->matchingpairs as
$key => $pair) {
1161 if (($pair->term->identifier == $random_number) || ($pair->definition->identifier == $random_number)) {
1167 return $random_number;
1198 return "assMatchingQuestion";
1208 return "qpl_qst_matching";
1218 return array(
"qpl_a_matching",
"qpl_a_mterm");
1227 return parent::getRTETextWithMediaObjects();
1243 parent::setExportDetailsXLS($worksheet, $startrow, $active_id,
$pass);
1249 foreach ($solutions as $solution) {
1250 $matches_written =
false;
1252 if (!$matches_written) {
1253 $worksheet->setCell($startrow +
$i, 1, $this->lng->txt(
"matches"));
1255 $matches_written =
true;
1256 if ($pair->definition->identifier == $solution[
"value2"]) {
1257 if (strlen($pair->definition->text)) {
1258 $worksheet->setCell($startrow +
$i, 0, $pair->definition->text);
1260 $worksheet->setCell($startrow +
$i, 0, $pair->definition->picture);
1263 if ($pair->term->identifier == $solution[
"value1"]) {
1264 if (strlen($pair->term->text)) {
1265 $worksheet->setCell($startrow +
$i, 2, $pair->term->text);
1267 $worksheet->setCell($startrow +
$i, 2, $pair->term->picture);
1274 return $startrow +
$i + 1;
1304 $this->thumb_geometry = ($a_geometry < 1) ? 100 : $a_geometry;
1312 foreach ($this->terms as $term) {
1313 if (strlen($term->picture)) {
1317 foreach ($this->definitions as $definition) {
1318 if (strlen($definition->picture)) {
1336 switch (strtoupper($path_info[
'extension'])) {
1367 'onenotcorrect' => $this->
formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(),
false)),
1368 'allcorrect' => $this->
formatSAQuestion($this->feedbackOBJ->getGenericFeedbackTestPresentation($this->getId(),
true))
1371 require_once
'Services/Randomization/classes/class.ilArrayElementShuffler.php';
1380 "id" => (
int) $this->getId() . $term->identifier
1397 "id" => (
int) $this->getId() . $def->identifier
1403 $matchings = array();
1406 if ($pair->points <= 0) {
1411 $pid = $pair->definition->identifier;
1413 $pid .=
'::' . $pair->term->identifier;
1416 if (!isset($matchings[$pid]) || $matchings[$pid][
"points"] < $pair->points) {
1417 $matchings[$pid] = array(
1418 "term_id" => (
int) $this->
getId() . $pair->term->identifier,
1419 "def_id" => (
int) $this->getId() . $pair->definition->identifier,
1420 "points" => (int) $pair->points
1425 $result[
'matchingPairs'] = array_values($matchings);
1428 $result[
'mobs'] =
$mobs;
1432 $lng->loadLanguageModule(
'assessment');
1433 $result[
'reset_button_label'] =
$lng->txt(
"reset_terms");
1435 return json_encode($result);
1465 foreach ($found_values as $definition =>
$terms) {
1466 foreach (
$terms as $term) {
1467 foreach ($this->matchingpairs as $pair) {
1468 if ($pair->definition->identifier == $definition && $pair->term->identifier == $term) {
1487 require_once
"./Modules/TestQuestionPool/classes/class.ilOperatorsExpressionMapping.php";
1516 $ilDB = $DIC[
'ilDB'];
1520 "SELECT ident FROM qpl_a_mdef WHERE question_fi = %s ORDER BY def_id",
1522 array($this->
getId())
1532 "SELECT ident FROM qpl_a_mterm WHERE question_fi = %s ORDER BY term_id",
1534 array($this->
getId())
1543 $maxStep = $this->lookupMaxStep($active_id,
$pass);
1545 if ($maxStep !== null) {
1547 "SELECT value1, value2 FROM tst_solutions WHERE active_fi = %s AND pass = %s AND question_fi = %s AND step = %s",
1548 array(
"integer",
"integer",
"integer",
"integer"),
1549 array($active_id,
$pass, $this->
getId(), $maxStep)
1553 "SELECT value1, value2 FROM tst_solutions WHERE active_fi = %s AND pass = %s AND question_fi = %s",
1554 array(
"integer",
"integer",
"integer"),
1560 if (
$row[
"value1"] > 0) {
1595 parent::afterSyncWithOriginal($origQuestionId, $dupQuestionId, $origParentObjId, $dupParentObjId);
1597 $origImagePath = $this->
buildImagePath($origQuestionId, $origParentObjId);
1598 $dupImagePath = $this->
buildImagePath($dupQuestionId, $dupParentObjId);
1601 if (is_dir($dupImagePath)) {
getThumbGeometry()
Get the thumbnail geometry.
Class for matching question terms.
supportsJavascriptOutput()
static makeDirParents($a_dir)
Create a new directory and all parent directories.
static logAction($logtext="", $active_id="", $question_id="")
Logs an action into the Test&Assessment log.
getId()
Gets the id of the assQuestion object.
duplicate($for_test=true, $title="", $author="", $owner="", $testObjId=null)
Duplicates an assMatchingQuestion.
static isFileAvailable($file)
getMaximumPoints()
Calculates and Returns the maximum points, a learner can reach answering the question.
static _getOriginalId($question_id)
Returns the original id of a question.
formatSAQuestion($a_q)
Format self assessment question.
const PercentageResultExpression
calculateReachedPoints($active_id, $pass=null, $authorizedSolution=true, $returndetails=false)
Returns the points, a learner has reached answering the question.
Class for matching question pairs.
Class iQuestionCondition.
static _getPass($active_id)
Retrieves the actual pass of a given user for a given test.
saveAdditionalQuestionDataToDb()
Saves a record to the question types additional data table.
getPositiveScoredMatchingPairs()
getTermCount()
Returns the number of terms.
const MATCHING_MODE_N_ON_N
copyObject($target_questionpool_id, $title="")
Copies an assMatchingQuestion.
generateThumbForFile($path, $file)
static rCopy($a_sdir, $a_tdir, $preserveTimeAttributes=false)
Copies content of a directory $a_sdir recursively to a directory $a_tdir.
deleteMatchingPair($index=0)
Deletes a matching pair with a given index.
Abstract basic class which is to be extended by the concrete assessment question type classes...
afterSyncWithOriginal($origQuestionId, $dupQuestionId, $origParentObjId, $dupParentObjId)
{}
getDefinitionCount()
Returns the number of definitions.
const MATCHING_MODE_1_ON_1
getQuestionType()
Returns the question type of the question.
setExportDetailsXLS($worksheet, $startrow, $active_id, $pass)
{}
getSolutionValues($active_id, $pass=null, $authorized=true)
Loads solutions of a given user from the database an returns it.
addTerm($term)
Adds a term.
setId($id=-1)
Sets the id of the assQuestion object.
flushMatchingPairs()
Deletes all matching pairs.
setImageFile($image_tempfilename, $image_filename, $previous_filename='')
Sets the image file and uploads the image to the object's image directory.
getEncryptedFilename($filename)
Returns the encrypted save filename of a matching picture Images are saved with an encrypted filename...
flushTerms()
Deletes all terms.
deleteImagefile($filename)
Deletes an imagefile from the system if the file is deleted manually.
getSolutionMaxPass($active_id)
Returns the maximum pass a users question solution.
const MT_TERMS_DEFINITIONS
fetchIndexedValuesFromValuePairs(array $valuePairs)
createNewOriginalFromThisDuplicate($targetParentId, $targetQuestionTitle="")
setEstimatedWorkingTime($hour=0, $min=0, $sec=0)
Sets the estimated working time of a question from given hour, minute and second. ...
getRTETextWithMediaObjects()
Collects all text in the question which could contain media objects which were created with the Rich ...
getAdditionalTableName()
Returns the name of the additional question data table in the database.
getUserQuestionResult($active_id, $pass)
Get the user solution for a question by active_id and the test pass.
setNrOfTries($a_nr_of_tries)
deleteTerm($position)
Deletes a term.
setAdditionalContentEditingMode($additinalContentEditingMode)
setter for additional content editing mode for this question
static _replaceMediaObjectImageSrc($a_text, $a_direction=0, $nic=IL_INST_ID)
Replaces image source from mob image urls with the mob id or replaces mob id with the correct image s...
rebuildThumbnails()
Rebuild the thumbnail images with a new thumbnail size.
getObjId()
Get the object id of the container object.
calculateReachedPointsForSolution($found_values)
getDefinitions()
Returns the definitions of the matching question.
loadFromDb($question_id)
Loads a assMatchingQuestion object from a database.
getMatchingPair($index=0)
Returns a matching pair with a given index.
Base Exception for all Exceptions relating to Modules/Test.
setMatchingMode($matchingMode)
Class for matching questions.
setParticipantsSolution($participantSolution)
duplicateImages($question_id, $objectId=null)
static _getLogLanguage()
retrieve the log language for assessment logging
fetchSubmittedMatchingsFromPost()
getTermWithIdentifier($a_identifier)
Returns a term with a given identifier.
getAvailableAnswerOptions($index=null)
If index is null, the function returns an array with all anwser options Else it returns the specific ...
insertMatchingPair($position, $term=null, $definition=null, $points=0.0)
Inserts a matching pair for an matching choice question.
setAuthor($author="")
Sets the authors name of the assQuestion object.
removeDefinitionImage($index)
static _enabledAssessmentLogging()
check wether assessment logging is enabled or not
getImagePath($question_id=null, $object_id=null)
Returns the image path for web accessable images of a question.
Class ilUserQuestionResult.
insertDefinition($position, $definition=null)
Inserts a definition.
saveCurrentSolution($active_id, $pass, $value1, $value2, $authorized=true, $tstamp=null)
setTerm($term, $index)
Sets a specific term.
getMatchingPairCount()
Returns the number of matching pairs.
const NumericResultExpression
getExpressionTypes()
Get all available expression types for a specific question.
getMostPositiveScoredUniqueTermMatchingPairs()
setShuffle($shuffle=true)
Sets the shuffle flag.
getOperators($expression)
Get all available operations for a specific question.
Interface ilObjAnswerScoringAdjustable.
checkSubmittedMatchings($submittedMatchings)
const MatchingResultExpression
getQuestion()
Gets the question string of the question object.
static convertImage( $a_from, $a_to, $a_target_format="", $a_geometry="", $a_background_color="")
convert image
saveWorkingData($active_id, $pass=null, $authorized=true)
Saves the learners input of the question to the database.
addDefinition($definition)
Adds a definition.
getMaximumScoringMatchingPairs()
flushDefinitions()
Deletes all definitions.
insertTerm($position, $term=null)
Inserts a term.
if($session===NULL) $postData
saveAnswerSpecificDataToDb()
Saves the answer specific records into a question types answer table.
static getOperatorsByExpression($expression)
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
__construct( $title="", $comment="", $author="", $owner=-1, $question="", $matching_type=MT_TERMS_DEFINITIONS)
assMatchingQuestion constructor
toJSON()
Returns a JSON representation of the question TODO.
setPoints($a_points)
Sets the maximum available points for the question.
saveQuestionDataToDb($original_id="")
deleteDefinition($position)
Deletes a definition.
getTerms()
Returns the terms of the matching question.
getDefinitionWithIdentifier($a_identifier)
Returns a definition with a given identifier.
setQuestion($question="")
Sets the question string of the question object.
Interface ilObjQuestionScoringAdjustable.
removeCurrentSolution($active_id, $pass, $authorized=true)
setThumbGeometry($a_geometry)
Set the thumbnail geometry.
buildImagePath($questionId, $parentObjectId)
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...
Class for matching question definitions.
addMatchingPair($term=null, $definition=null, $points=0.0)
Adds an matching pair for an matching choice question.
getAnswerTableName()
Returns the name of the answer table in the database.
getTitle()
Gets the title string of the assQuestion object.
saveToDb($original_id="")
Saves a assMatchingQuestion object to a database.
& getMatchingPairs()
Returns the matchingpairs array.
copyImages($question_id, $source_questionpool)
setTitle($title="")
Sets the title string of the assQuestion object.
setObjId($obj_id=0)
Set the object id of the container object.
savePreviewData(ilAssQuestionPreviewSession $previewSession)
static delDir($a_dir, $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
setComment($comment="")
Sets the comment string of the assQuestion object.
setShuffler(ilArrayElementShuffler $shuffler)
isComplete()
Returns true, if a matching question is complete for use.
getThumbSize()
Get the thumbnail geometry.
setOwner($owner="")
Sets the creator/owner ID of the assQuestion object.
const EmptyAnswerExpression