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