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));
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";
326 array_push($this->matchingpairs,
new assAnswerMatchingPair($termids[
$data[
'term_fi']], $definitionids[$data[
'definition_fi']], $data[
'points']));
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)) {
466 if (!@copy($imagepath_original .
$filename, $imagepath . $filename)) {
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)) {
482 if (!@copy($imagepath_original .
$filename, $imagepath . $filename)) {
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)) {
508 if (!@copy($imagepath_original .
$filename, $imagepath . $filename)) {
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)) {
524 copy($imagepath_original . $filename, $imagepath . $filename);
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__);
864 $ilDB = $DIC[
'ilDB'];
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;
1109 $ilDB = $DIC[
'ilDB'];
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);
1434 $result[
'mobs'] =
$mobs;
1438 $lng->loadLanguageModule(
'assessment');
1439 $result[
'reset_button_label'] =
$lng->txt(
"reset_terms");
1441 return json_encode($result);
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";
1522 $ilDB = $DIC[
'ilDB'];
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)) {
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 getInstance($identifier)
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
static moveUploadedFile($a_file, $a_name, $a_target, $a_raise_errors=true, $a_mode="move_uploaded")
move uploaded file
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.
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)
__construct(Container $dic, ilPlugin $plugin)
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.
setLifecycle(ilAssQuestionLifecycle $lifecycle)
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.
static getDraftInstance()
getThumbSize()
Get the thumbnail geometry.
setOwner($owner="")
Sets the creator/owner ID of the assQuestion object.
const EmptyAnswerExpression