24 include_once 
"./Modules/Test/classes/inc.AssessmentConstants.php";
 
  200                 $this->original_id = null;
 
  208                         $this->author = $this->ilias->account->fullname;
 
  211                 if ($this->owner <= 0)
 
  213                         $this->owner = $this->ilias->account->id;
 
  217                 $this->suggested_solutions = array();
 
  219                 $this->nr_of_tries = 
"";
 
  222                 $this->arrData = array();
 
  236         function fromXML(&$item, &$questionpool_id, &$tst_id, &$tst_object, &$question_counter, &$import_mapping)
 
  238                 include_once 
"./Modules/TestQuestionPool/classes/import/qti12/class." . $this->
getQuestionType() . 
"Import.php";
 
  240                 $import = 
new $classname($this);
 
  241                 $import->fromXML($item, $questionpool_id, $tst_id, $tst_object, $question_counter, $import_mapping);
 
  250         function toXML($a_include_header = 
true, $a_include_binary = 
true, $a_shuffle = 
false, $test_output = 
false, $force_image_references = 
false)
 
  252                 include_once 
"./Modules/TestQuestionPool/classes/export/qti12/class." . $this->
getQuestionType() . 
"Export.php";
 
  254                 $export = 
new $classname($this);
 
  255                 return $export->toXML($a_include_header, $a_include_binary, $a_shuffle, $test_output, $force_image_references);
 
  280                 $result = $ilDB->queryF(
"SELECT * FROM qpl_questions WHERE obj_fi = %s AND title = %s",
 
  281                         array(
'integer',
'text'),
 
  282                         array($questionpool_id, 
$title)
 
  284                 return (
$result->numRows() == 1) ? TRUE : FALSE;
 
  320                 $this->test_id = 
$id;
 
  378                 $this->est_working_time = array(
"h" => (
int)$hour, 
"m" => (
int)$min, 
"s" => (
int)$sec);
 
  392                         foreach ($array as $key => $value)
 
  394                                 if (strcmp($key, $searchkey)==0)
 
  414                         $author = $this->ilias->account->fullname;
 
  523                 if (!$this->est_working_time)
 
  525                         $this->est_working_time = array(
"h" => 0, 
"m" => 0, 
"s" => 0);
 
  589                 $result = $ilDB->queryF(
"SELECT points FROM qpl_questions WHERE question_id = %s",
 
  611                 $result = $ilDB->queryF(
"SELECT qpl_questions.*, qpl_qst_type.type_tag FROM qpl_qst_type, qpl_questions WHERE qpl_questions.question_id = %s AND qpl_questions.question_type_fi = qpl_qst_type.question_type_id",
 
  617                         return $ilDB->fetchAssoc(
$result);
 
  632                 $result = $ilDB->queryF(
"SELECT suggested_solution_id FROM qpl_sol_sug WHERE question_fi = %s",
 
  649                 return $question->getSuggestedSolutionOutput();
 
  655                 foreach ($this->suggested_solutions as $solution)
 
  657                         switch ($solution[
"type"])
 
  673                 return join($output, 
"<br />");
 
  688                 $result = $ilDB->queryF(
"SELECT * FROM qpl_sol_sug WHERE question_fi = %s AND subquestion_index = %s",
 
  689                         array(
'integer',
'integer'),
 
  690                         array($question_id, $subquestion_index)
 
  696                                 "internal_link" => 
$row[
"internal_link"],
 
  697                                 "import_id" => 
$row[
"import_id"]
 
  730                         include_once 
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
 
  733                 $result = $ilDB->queryF(
"SELECT * FROM tst_test_result WHERE active_fi = %s AND question_fi = %s AND pass = %s",
 
  734                         array(
'integer',
'integer',
'integer'),
 
  735                         array($active_id, $question_id, 
$pass)
 
  781                         include_once 
"./Modules/Test/classes/class.ilObjTest.php";
 
  785                 if (is_null($reached_points)) $reached_points = 0;
 
  787                 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_test_result WHERE active_fi = %s AND question_fi = %s AND pass = %s",
 
  788                         array(
"integer", 
"integer", 
"integer"),
 
  796                 $next_id = $ilDB->nextId(
"tst_test_result");
 
  797                 $affectedRows = $ilDB->manipulateF(
"INSERT INTO tst_test_result (test_result_id, active_fi, question_fi, pass, points, tstamp) VALUES (%s, %s, %s, %s, %s, %s)", 
 
  798                         array(
"integer",
"integer", 
"integer", 
"integer", 
"float", 
"integer"),
 
  808                 include_once (
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
 
  818                 include_once 
'Modules/Course/classes/class.ilCourseObjectiveResult.php';
 
  838                 include_once 
"./Modules/Test/classes/class.ilObjTest.php";
 
  841                 $result = $ilDB->queryF(
"SELECT tst_pass_result.* FROM tst_pass_result WHERE active_fi = %s AND pass = %s",
 
  842                         array(
'integer',
'integer'),
 
  843                         array($active_id, 
$pass)
 
  846                 $max = 
$row[
'maxpoints'];
 
  847                 $reached = 
$row[
'points'];
 
  848                 include_once 
"./Modules/Test/classes/class.assMarkSchema.php";
 
  849                 $percentage = (!$max) ? 0 : ($reached / $max) * 100.0;
 
  851                 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_result_cache WHERE active_fi = %s",
 
  855                 $affectedRows = $ilDB->manipulateF(
"INSERT INTO tst_result_cache (active_fi, pass, max_points, reached_points, mark_short, mark_official, passed, failed, tstamp) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s)",
 
  870                                 strlen($max) ? $max : 0,
 
  871                                 strlen($reached) ? $reached : 0,
 
  872                                 strlen($mark[
"short_name"]) ? $mark[
"short_name"] : 
" ",
 
  873                                 strlen($mark[
"official_name"]) ? $mark[
"official_name"] : 
" ",
 
  874                                 ($mark[
"passed"]) ? 1 : 0,
 
  875                                 (!$mark[
"passed"]) ? 1 : 0,
 
  884                 include_once 
"./Modules/Test/classes/class.ilObjTest.php";
 
  888                 $result = $ilDB->queryF(
"SELECT SUM(points) reachedpoints, COUNT(question_fi) answeredquestions FROM tst_test_result WHERE active_fi = %s AND pass = %s",
 
  889                         array(
'integer',
'integer'),
 
  890                         array($active_id, 
$pass)
 
  895                         $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_pass_result WHERE active_fi = %s AND pass = %s",
 
  896                                 array(
'integer',
'integer'),
 
  897                                 array($active_id, 
$pass)
 
  899                         $affectedRows = $ilDB->manipulateF(
"INSERT INTO tst_pass_result (active_fi, pass, points, maxpoints, questioncount, answeredquestions, workingtime, tstamp) VALUES (%s,%s,%s,%s,%s,%s,%s,%s)",
 
  913                                         (
$row[
"reachedpoints"]) ? 
$row[
"reachedpoints"] : 0,
 
  916                                         $row[
"answeredquestions"],
 
  924                         'active_fi' => $active_id,
 
  926                         'points' => (
$row[
"reachedpoints"]) ? 
$row[
"reachedpoints"] : 0,
 
  927                         'maxpoints' => 
$data[
"points"],
 
  928                         'questioncount' => 
$data[
"count"],
 
  929                         'answeredquestions' => $row[
"answeredquestions"],
 
  930                         'workingtime' => $time,
 
  942         function logAction($logtext = 
"", $active_id = 
"", $question_id = 
"")
 
  947                 if (strcmp($question_id, 
"") != 0)
 
  949                         include_once 
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
 
  952                 include_once 
"./Modules/Test/classes/class.ilObjAssessmentFolder.php";
 
  953                 include_once 
"./Modules/Test/classes/class.ilObjTest.php";
 
  964         function _logAction($logtext = 
"", $active_id = 
"", $question_id = 
"")
 
  969                 if (strcmp($question_id, 
"") != 0)
 
  971                         include_once 
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
 
  974                 include_once 
"./Modules/Test/classes/class.ilObjAssessmentFolder.php";
 
  975                 include_once 
"./Modules/Test/classes/class.ilObjTest.php";
 
  988                 $mediatempdir = CLIENT_WEB_DIR . 
"/assessment/temp";
 
  990                 $temp_name = tempnam($mediatempdir, $name . 
"_____");
 
  991                 $temp_name = str_replace(
"\\", 
"/", $temp_name);
 
 1009                 return CLIENT_WEB_DIR . 
"/assessment/$this->obj_id/$this->id/solution/";
 
 1019                 return CLIENT_WEB_DIR . 
"/assessment/$this->obj_id/$this->id/java/";
 
 1030                 return CLIENT_WEB_DIR . 
"/assessment/$this->obj_id/$this->id/images/";
 
 1041                 return CLIENT_WEB_DIR . 
"/assessment/$this->obj_id/$this->id/flash/";
 
 1052                 include_once 
"./Services/Utilities/classes/class.ilUtil.php";
 
 1064                 include_once 
"./Services/Utilities/classes/class.ilUtil.php";
 
 1077                 include_once 
"./Services/Utilities/classes/class.ilUtil.php";
 
 1090                 include_once 
"./Services/Utilities/classes/class.ilUtil.php";
 
 1113                 $result = $ilDB->queryF(
"SELECT * FROM tst_solutions WHERE active_fi = %s AND question_fi = %s AND pass = %s ORDER BY solution_id",
 
 1114                         array(
'integer',
'integer',
'integer'),
 
 1119                         array_push($values, 
$row);
 
 1135                 if ($question_id < 1) $question_id = $this->
getId();
 
 1136                 $result = $ilDB->queryF(
"SELECT COUNT(qpl_questions.question_id) question_count FROM qpl_questions, tst_test_question WHERE qpl_questions.original_id = %s AND qpl_questions.question_id = tst_test_question.question_fi",
 
 1141                 $count = 
$row[
"question_count"];
 
 1143                 $result = $ilDB->queryF(
"SELECT DISTINCT tst_active.test_fi, qpl_questions.question_id FROM qpl_questions, tst_test_rnd_qst, tst_active WHERE qpl_questions.original_id = %s AND qpl_questions.question_id = tst_test_rnd_qst.question_fi AND tst_test_rnd_qst.active_fi = tst_active.active_id",
 
 1162                 if ($question_id < 1) $question_id = 
$this->id;
 
 1163                 $result = $ilDB->queryF(
"SELECT original_id FROM qpl_questions WHERE question_id = %s",
 
 1168                 return (
$row[
"original_id"] > 0) ? TRUE : FALSE;
 
 1179                 $keys = array_keys($array);
 
 1182                 foreach ($keys as $key)
 
 1198                 $result = $ilDB->queryF(
"SELECT qpl_qst_type.type_tag FROM qpl_qst_type, qpl_questions WHERE qpl_questions.question_id = %s AND qpl_questions.question_type_fi = qpl_qst_type.question_type_id",
 
 1203                 return $data[
"type_tag"];
 
 1238                 if (is_array($answer_table_name))
 
 1240                         foreach ($answer_table_name as $table)
 
 1244                                         $affectedRows = $ilDB->manipulateF(
"DELETE FROM $table WHERE question_fi = %s",
 
 1253                         if (strlen($answer_table_name))
 
 1255                                 $affectedRows = $ilDB->manipulateF(
"DELETE FROM $answer_table_name WHERE question_fi = %s",
 
 1273                 if (is_array($additional_table_name))
 
 1275                         foreach ($additional_table_name as $table)
 
 1279                                         $affectedRows = $ilDB->manipulateF(
"DELETE FROM $table WHERE question_fi = %s",
 
 1288                         if (strlen($additional_table_name))
 
 1290                                 $affectedRows = $ilDB->manipulateF(
"DELETE FROM $additional_table_name WHERE question_fi = %s",
 
 1306                 include_once 
"./Services/COPage/classes/class.ilPageObject.php";
 
 1318         public function delete($question_id)
 
 1322                 if ($question_id < 1) 
return true; 
 
 1324                 $result = $ilDB->queryF(
"SELECT obj_fi FROM qpl_questions WHERE question_id = %s",
 
 1343                         $ilLog->write(
"EXCEPTION: Could not delete page of question $question_id: $e");
 
 1347                 $affectedRows = $ilDB->manipulateF(
"DELETE FROM qpl_questions WHERE question_id = %s",
 
 1351                 if ($affectedRows == 0) 
return false;
 
 1360                         $ilLog->write(
"EXCEPTION: Could not delete additional table data of question $question_id: $e");
 
 1367                         $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_test_question WHERE question_fi = %s", 
 
 1374                         $ilLog->write(
"EXCEPTION: Could not delete delete question $question_id from a test: $e");
 
 1381                         $affectedRows = $ilDB->manipulateF(
"DELETE FROM qpl_sol_sug WHERE question_fi = %s", 
 
 1388                         $ilLog->write(
"EXCEPTION: Could not delete suggested solutions of question $question_id: $e");
 
 1394                         $directory = CLIENT_WEB_DIR . 
"/assessment/" . 
$obj_id . 
"/$question_id";
 
 1395                         if (preg_match(
"/\d+/", 
$obj_id) and preg_match(
"/\d+/", $question_id) and is_dir($directory))
 
 1397                                 include_once 
"./Services/Utilities/classes/class.ilUtil.php";
 
 1403                         $ilLog->write(
"EXCEPTION: Could not delete question file directory $directory of question $question_id: $e");
 
 1409                         include_once(
"./Services/MediaObjects/classes/class.ilObjMediaObject.php");
 
 1415                         foreach(
$mobs as $mob)
 
 1427                         $ilLog->write(
"EXCEPTION: Error deleting the media objects of question $question_id: $e");
 
 1434                         include_once 
"./Modules/TestQuestionPool/classes/class.ilObjQuestionPool.php";
 
 1439                         $ilLog->write(
"EXCEPTION: Error updating the question pool question count of question pool " . $this->
getObjId() . 
" when deleting question $question_id: $e");
 
 1464                 $result = $ilDB->queryF(
"SELECT question_id FROM qpl_questions WHERE original_id = %s OR question_id = %s",
 
 1465                         array(
'integer',
'integer'),
 
 1466                         array($a_q_id, $a_q_id)
 
 1472                 $found_id = array();
 
 1475                         array_push($found_id, 
$row[
"question_id"]);
 
 1478                 $result = $ilDB->query(
"SELECT * FROM tst_test_result WHERE " . $ilDB->in(
'question_fi', $found_id, 
false, 
'integer'));
 
 1493                 $result = $ilDB->queryF(
"SELECT question_id FROM qpl_questions WHERE original_id = %s OR question_id = %s",
 
 1494                         array(
'integer',
'integer'),
 
 1495                         array($a_q_id, $a_q_id)
 
 1501                 $found_id = array();
 
 1504                         array_push($found_id, 
$row[
"question_id"]);
 
 1506                 $result = $ilDB->query(
"SELECT * FROM tst_test_result WHERE " . $ilDB->in(
'question_fi', $found_id, 
false, 
'integer'));
 
 1510                         $reached = 
$row[
"points"]; 
 
 1511                         include_once 
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
 
 1513                         array_push($answers, array(
"reached" => $reached, 
"max" => $max));
 
 1517                 foreach ($answers as $key => $value)
 
 1519                         $max += $value[
"max"];
 
 1520                         $reached += $value[
"reached"];
 
 1524                         return $reached / $max;
 
 1540                 $result = $ilDB->queryF(
"SELECT title FROM qpl_questions WHERE question_id = %s",
 
 1547                         return $row[
"title"];
 
 1563                 $result = $ilDB->queryF(
"SELECT question_text FROM qpl_questions WHERE question_id = %s",
 
 1570                         return $row[
"question_text"];
 
 1581                 include_once(
"./Services/MediaObjects/classes/class.ilObjMediaObject.php");
 
 1583                 foreach (
$mobs as $mob)
 
 1591                 include_once(
"./Services/MediaObjects/classes/class.ilObjMediaObject.php");
 
 1593                 foreach (
$mobs as $mob)
 
 1606                 include_once 
"./Services/COPage/classes/class.ilPageObject.php";
 
 1608                 $this->page->setId($this->
getId());
 
 1609                 $this->page->setParentId($qpl_id);
 
 1610                 $this->page->setXMLContent(
"<PageObject><PageContent>".
 
 1611                         "<Question QRef=\"il__qst_".$this->
getId().
"\"/>".
 
 1612                         "</PageContent></PageObject>");
 
 1613                 $this->page->create();
 
 1620                         include_once 
"./Services/COPage/classes/class.ilPageObject.php";
 
 1623                         $xml = str_replace(
"il__qst_".$a_q_id, 
"il__qst_".$this->
id, 
$page->getXMLContent());
 
 1624                         $this->page->setXMLContent($xml);
 
 1625                         $this->page->saveMobUsage($xml);
 
 1626                         $this->page->updateFromXML();
 
 1632                 include_once 
"./Services/COPage/classes/class.ilPageObject.php";
 
 1634                 return $page->getXMLContent();
 
 1648                 if ($question_id < 1) 
return "";
 
 1649                 $result = $ilDB->queryF(
"SELECT type_tag FROM qpl_questions, qpl_qst_type WHERE qpl_questions.question_id = %s AND qpl_questions.question_type_fi = qpl_qst_type.question_type_id",
 
 1656                         return $data[
"type_tag"];
 
 1675                 if ($question_id < 1) 
return "";
 
 1677                 $result = $ilDB->queryF(
"SELECT title FROM qpl_questions WHERE qpl_questions.question_id = %s",
 
 1684                         return $data[
"title"];
 
 1712                 $result = $ilDB->queryF(
"SELECT * FROM qpl_sol_sug WHERE question_fi = %s",
 
 1714                         array($this->
getId())
 
 1716                 $this->suggested_solutions = array();
 
 1719                         include_once(
"./Services/RTE/classes/class.ilRTE.php");
 
 1723                                 $this->suggested_solutions[
$row[
"subquestion_index"]] = array(
 
 1724                                         "type" => $row[
"type"],
 
 1726                                         "internal_link" => $row[
"internal_link"],
 
 1727                                         "import_id" => $row[
"import_id"]
 
 1741                 global 
$ilDB, $ilUser;
 
 1745                 $estw_time = sprintf(
"%02d:%02d:%02d", $estw_time[
'h'], $estw_time[
'm'], $estw_time[
's']);
 
 1749                         $next_id = $ilDB->nextId(
'qpl_questions');
 
 1750                         $affectedRows = $ilDB->insert(
"qpl_questions", array(
 
 1751                                 "question_id" => array(
"integer", $next_id),
 
 1753                                 "obj_fi" => array(
"integer", 
$obj_id),
 
 1754                                 "title" => array(
"text", NULL),
 
 1755                                 "description" => array(
"text", NULL),
 
 1756                                 "author" => array(
"text", $this->
getAuthor()),
 
 1757                                 "owner" => array(
"integer", $ilUser->getId()),
 
 1758                                 "question_text" => array(
"clob", NULL),
 
 1759                                 "points" => array(
"float", 0),
 
 1760                                 "nr_of_tries" => array(
"integer", 1),
 
 1761                                 "working_time" => array(
"text", $estw_time),
 
 1762                                 "complete" => array(
"text", $complete),
 
 1763                                 "created" => array(
"integer", time()),
 
 1764                                 "original_id" => array(
"integer", NULL),
 
 1765                                 "tstamp" => array(
"integer", 0)
 
 1767                         $this->
setId($next_id);
 
 1771                 return $this->
getId();
 
 1779                 $estw_time = sprintf(
"%02d:%02d:%02d", $estw_time[
'h'], $estw_time[
'm'], $estw_time[
's']);
 
 1782                 include_once(
"./Services/RTE/classes/class.ilRTE.php");
 
 1783                 if ($this->
getId() == -1)
 
 1786                         $next_id = $ilDB->nextId(
'qpl_questions');
 
 1787                         $affectedRows = $ilDB->insert(
"qpl_questions", array(
 
 1788                                 "question_id" => array(
"integer", $next_id),
 
 1790                                 "obj_fi" => array(
"integer", $this->
getObjId()),
 
 1791                                 "title" => array(
"text", $this->
getTitle()),
 
 1792                                 "description" => array(
"text", $this->
getComment()),
 
 1793                                 "author" => array(
"text", $this->
getAuthor()),
 
 1794                                 "owner" => array(
"integer", $this->
getOwner()),
 
 1797                                 "working_time" => array(
"text", $estw_time),
 
 1799                                 "created" => array(
"integer", time()),
 
 1801                                 "tstamp" => array(
"integer", time())
 
 1803                         $this->
setId($next_id);
 
 1810                         $affectedRows = $ilDB->update(
"qpl_questions", array(
 
 1811                                 "obj_fi" => array(
"integer", $this->
getObjId()),
 
 1812                                 "title" => array(
"text", $this->
getTitle()),
 
 1813                                 "description" => array(
"text", $this->
getComment()),
 
 1814                                 "author" => array(
"text", $this->
getAuthor()),
 
 1818                                 "working_time" => array(
"text", $estw_time),
 
 1819                                 "tstamp" => array(
"integer", time())
 
 1821                         "question_id" => array(
"integer", $this->
getId())
 
 1848                 $affectedRows = $ilDB->manipulateF(
"UPDATE qpl_questions SET tstamp = %s, owner = %s, complete = %s WHERE question_id = %s",
 
 1849                         array(
'integer',
'integer', 
'integer',
'text'),
 
 1850                         array(time(), ($this->
getOwner() <= 0) ? $this->ilias->account->id : $this->getOwner(), $complete, $this->
getId())
 
 1854                 include_once 
"./Modules/TestQuestionPool/classes/class.ilObjQuestionPool.php";
 
 1869         protected function onCopy($source_questionpool_id, $source_question_id)
 
 1881                 $affectedRows = $ilDB->manipulateF(
"DELETE FROM qpl_sol_sug WHERE question_fi = %s",
 
 1883                         array($this->
getId())
 
 1886                 include_once 
"./Services/COPage/classes/class.ilInternalLink.php";
 
 1888                 $this->suggested_solutions = array();
 
 1901                 if (array_key_exists($subquestion_index, $this->suggested_solutions))
 
 1903                         return $this->suggested_solutions[$subquestion_index];
 
 1921                 if (array_key_exists($subquestion_index, $this->suggested_solutions))
 
 1923                         $title = $this->suggested_solutions[$subquestion_index][
"internal_link"];
 
 1944                 if (strcmp($solution_id, 
"") != 0)
 
 1949                                 $import_id = $solution_id;
 
 1952                         $this->suggested_solutions[$subquestion_index] = array(
 
 1953                                 "internal_link" => $solution_id,
 
 1954                                 "import_id" => $import_id
 
 1966                 foreach ($this->suggested_solutions as $index => $solution)
 
 1968                         if (strcmp($solution[
"type"], 
"file") == 0)
 
 1971                                 $filepath_original = str_replace(
"/$this->id/solution", 
"/$question_id/solution", $filepath);
 
 1972                                 if (!file_exists($filepath))
 
 1979                                         if (!copy($filepath_original . 
$filename, $filepath . $filename))
 
 1981                                                 $ilLog->write(
"File could not be duplicated!!!!", $ilLog->ERROR);
 
 1982                                                 $ilLog->write(
"object: " . print_r($this, TRUE), $ilLog->ERROR);
 
 1997                 $filepath_original = str_replace(
"/$this->id/solution", 
"/$original_id/solution", $filepath);
 
 1999                 foreach ($this->suggested_solutions as $index => $solution)
 
 2001                         if (strcmp($solution[
"type"], 
"file") == 0)
 
 2003                                 if (!file_exists($filepath_original))
 
 2010                                         if (!@copy($filepath . 
$filename, $filepath_original . $filename))
 
 2012                                                 $ilLog->write(
"File could not be duplicated!!!!", $ilLog->ERROR);
 
 2013                                                 $ilLog->write(
"object: " . print_r($this, TRUE), $ilLog->ERROR);
 
 2024                 foreach ($this->suggested_solutions as $index => $solution)
 
 2026                         if (strcmp($solution[
"type"], 
"file") == 0)
 
 2029                                 $filepath_original = str_replace(
"/$this->obj_id/$this->id/solution", 
"/$source_questionpool_id/$source_question_id/solution", $filepath);
 
 2030                                 if (!file_exists($filepath))
 
 2037                                         if (!copy($filepath_original . 
$filename, $filepath . $filename))
 
 2039                                                 $ilLog->write(
"File could not be copied!!!!", $ilLog->ERROR);
 
 2040                                                 $ilLog->write(
"object: " . print_r($this, TRUE), $ilLog->ERROR);
 
 2055                 include_once 
"./Services/COPage/classes/class.ilInternalLink.php";
 
 2056                 $affectedRows = $ilDB->manipulateF(
"DELETE FROM qpl_sol_sug WHERE question_fi = %s",
 
 2061                 include_once(
"./Services/RTE/classes/class.ilRTE.php");
 
 2062                 foreach ($this->suggested_solutions as $index => $solution)
 
 2064                         $next_id = $ilDB->nextId(
'qpl_sol_sug');
 
 2065                         $affectedRows = $ilDB->manipulateF(
"INSERT INTO qpl_sol_sug (suggested_solution_id, question_fi, type, value, internal_link, import_id, subquestion_index, tstamp) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)", 
 
 2066                                 array(
"integer",
"integer", 
"text", 
"text", 
"text", 
"text", 
"integer",
"integer"),
 
 2072                                         $solution[
"internal_link"],
 
 2078                         if (preg_match(
"/il_(\d*?)_(\w+)_(\d+)/", $solution[
"internal_link"], $matches))
 
 2100                 $affectedRows = $ilDB->manipulateF(
"DELETE FROM qpl_sol_sug WHERE question_fi = %s AND subquestion_index = %s", 
 
 2101                         array(
"integer", 
"integer"),
 
 2108                 $next_id = $ilDB->nextId(
'qpl_sol_sug');
 
 2109                 include_once(
"./Services/RTE/classes/class.ilRTE.php");
 
 2110                 $affectedRows = $ilDB->manipulateF(
"INSERT INTO qpl_sol_sug (suggested_solution_id, question_fi, type, value, internal_link, import_id, subquestion_index, tstamp) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)", 
 
 2111                         array(
"integer",
"integer", 
"text", 
"text", 
"text", 
"text", 
"integer",
"integer"),
 
 2123                 if ($affectedRows == 1)
 
 2125                         $this->suggested_solutions[
"subquestion_index"] = array(
 
 2128                                 "internal_link" => $solution_id,
 
 2137                 if (preg_match(
"/il_(\d+)_(\w+)_(\d+)/", $internal_link, $matches))
 
 2139                         include_once 
"./Services/COPage/classes/class.ilInternalLink.php";
 
 2140                         include_once 
"./Modules/LearningModule/classes/class.ilLMObject.php";
 
 2141                         include_once 
"./Modules/Glossary/classes/class.ilGlossaryTerm.php";
 
 2142                         switch ($matches[2])
 
 2160                         if (strcmp($resolved_link, 
"") == 0)
 
 2162                                 $resolved_link = $internal_link;
 
 2167                         $resolved_link = $internal_link;
 
 2169                 return $resolved_link;
 
 2176                 $result = $ilDB->queryF(
"SELECT * FROM qpl_sol_sug WHERE question_fi = %s",
 
 2184                                 $internal_link = 
$row[
"internal_link"];
 
 2185                                 include_once 
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
 
 2187                                 if (strcmp($internal_link, $resolved_link) != 0)
 
 2190                                         $affectedRows = $ilDB->manipulateF(
"UPDATE qpl_sol_sug SET internal_link = %s WHERE suggested_solution_id = %s",
 
 2191                                                 array(
'text',
'integer'),
 
 2192                                                 array($resolved_link, 
$row[
"suggested_solution_id"])
 
 2203                         include_once 
"./Services/COPage/classes/class.ilInternalLink.php";
 
 2206                         $result = $ilDB->queryF(
"SELECT * FROM qpl_sol_sug WHERE question_fi = %s",
 
 2214                                         if (preg_match(
"/il_(\d*?)_(\w+)_(\d+)/", 
$row[
"internal_link"], $matches))
 
 2227                         "lm" => 
"LearningModule",
 
 2228                         "pg" => 
"PageObject",
 
 2229                         "st" => 
"StructureObject",
 
 2230                         "git" => 
"GlossaryItem",
 
 2231                         "mob" => 
"MediaObject" 
 2234                 if (preg_match(
"/il__(\w+)_(\d+)/", $target, $matches))
 
 2236                         $type = $matches[1];
 
 2238                         include_once 
"./Services/Utilities/classes/class.ilUtil.php";
 
 2239                         switch($linktypes[$matches[1]])
 
 2241                                 case "LearningModule":
 
 2242                                         $href = 
"./goto.php?target=" . $type . 
"_" . 
$target_id;
 
 2245                                 case "StructureObject":
 
 2246                                         $href = 
"./goto.php?target=" . $type . 
"_" . 
$target_id;
 
 2248                                 case "GlossaryItem":
 
 2249                                         $href = 
"./goto.php?target=" . $type . 
"_" . 
$target_id;
 
 2252                                         $href = 
"./ilias.php?baseClass=ilLMPresentationGUI&obj_type=" . $linktypes[$type] . 
"&cmd=media&ref_id=".$_GET[
"ref_id"].
"&mob_id=".
$target_id;
 
 2269                 $result = $ilDB->queryF(
"SELECT * FROM qpl_questions WHERE question_id = %s",
 
 2276                         if (
$row[
"original_id"] > 0)
 
 2278                                 return $row[
"original_id"];
 
 2282                                 return $row[
"question_id"];
 
 2330                 if ($question_id < 1)
 
 2335                 $result = $ilDB->queryF(
"SELECT question_id FROM qpl_questions WHERE question_id = %s",
 
 2358                 if (strcmp($question_id, 
"") != 0)
 
 2361                         if (!strlen($question_type)) 
return null;
 
 2377                 if (strcmp($this->points, 
"") == 0)
 
 2396                 $this->points = $a_points;
 
 2427                 $result = $ilDB->queryF(
"SELECT MAX(pass) maxpass FROM tst_test_result WHERE active_fi = %s AND question_fi = %s",
 
 2428                         array(
'integer',
'integer'),
 
 2429                         array($active_id, $question_id)
 
 2434                         return $row[
"maxpass"];
 
 2454                 if (($question_id < 1) || ($user_id < 1))
 
 2459                 $result = $ilDB->queryF(
"SELECT obj_fi FROM qpl_questions WHERE question_id = %s",
 
 2466                         $qpl_object_id = 
$row[
"obj_fi"];
 
 2467                         include_once 
"./Modules/TestQuestionPool/classes/class.ilObjQuestionPool.php";
 
 2486                 if ($question_id < 1) 
return 0;
 
 2487                 $result = $ilDB->queryF(
"SELECT test_random_question_id FROM tst_test_rnd_qst WHERE question_fi = %s",
 
 2505                 include_once 
"./Modules/Test/classes/class.ilObjTest.php";
 
 2507                 if ($count_system == 1)
 
 2515                 if ($score_cutting == 0)
 
 2540                         include_once 
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
 
 2543                 $result = $ilDB->queryF(
"SELECT solution_id FROM tst_solutions WHERE active_fi = %s AND question_fi = %s AND pass = %s",
 
 2544                         array(
'integer',
'integer',
'integer'),
 
 2545                         array($active_id, $question_id, 
$pass)
 
 2568                 $res = $ilDB->queryF(
"SELECT DISTINCT(question_fi) FROM tst_test_result JOIN tst_active ".
 
 2569                         "ON (active_id = active_fi) ".
 
 2570                         "WHERE " . $ilDB->in(
'question_fi', $a_question_ids, 
false, 
'integer') .
 
 2571                         " AND user_fi = %s",
 
 2575                 return (
$res->numRows() == count($a_question_ids)) ? 
true : 
false;
 
 2587                 if (preg_match(
"/<[^>]*?>/", $a_text))
 
 2605                 include_once 
"./Services/Utilities/classes/class.ilUtil.php";
 
 2619                 for ($i = 0; $i < $a_material->getMaterialCount(); $i++)
 
 2621                         $material = $a_material->getMaterial($i);
 
 2622                         if (strcmp($material[
"type"], 
"mattext") == 0)
 
 2624                                 $result .= $material[
"material"]->getContent();
 
 2626                         if (strcmp($material[
"type"], 
"matimage") == 0)
 
 2628                                 $matimage = $material[
"material"];
 
 2629                                 if (preg_match(
"/(il_([0-9]+)_mob_([0-9]+))/", $matimage->getLabel(), $matches))
 
 2632                                         if (!is_array(
$_SESSION[
"import_mob_xhtml"])) 
$_SESSION[
"import_mob_xhtml"] = array();
 
 2633                                         array_push(
$_SESSION[
"import_mob_xhtml"], array(
"mob" => $matimage->getLabel(), 
"uri" => $matimage->getUri()));
 
 2648         function addQTIMaterial(&$a_xml_writer, $a_material, $close_material_tag = TRUE, $add_mobs = TRUE)
 
 2650                 include_once 
"./Services/RTE/classes/class.ilRTE.php";
 
 2651                 include_once(
"./Services/MediaObjects/classes/class.ilObjMediaObject.php");
 
 2653                 $a_xml_writer->xmlStartTag(
"material");
 
 2655                         "texttype" => 
"text/plain" 
 2657                 if ($this->
isHTML($a_material))
 
 2659                         $attrs[
"texttype"] = 
"text/xhtml";
 
 2665                         foreach (
$mobs as $mob)
 
 2667                                 $moblabel = 
"il_" . IL_INST_ID . 
"_mob_" . $mob;
 
 2668                                 if (strpos($a_material, 
"mm_$mob") !== FALSE)
 
 2674                                                         "label" => $moblabel,
 
 2675                                                         "uri" => 
"objects/" . 
"il_" . IL_INST_ID . 
"_mob_" . $mob . 
"/" . $mob_obj->getTitle()
 
 2678                                         $a_xml_writer->xmlElement(
"matimage", $imgattrs, NULL);
 
 2682                 if ($close_material_tag) $a_xml_writer->xmlEndTag(
"material");
 
 2688                 if (preg_match(
"/.*\.(png|jpg|gif|jpeg)$/i", $image_filename, $matches))
 
 2690                         $extension = 
"." . $matches[1];
 
 2692                 $image_filename = md5($image_filename) . $extension;
 
 2693                 return $image_filename;
 
 2719                         $result = $ilDB->queryF(
"SELECT points FROM tst_test_result WHERE active_fi = %s AND question_fi = %s AND pass = %s",
 
 2720                                 array(
'integer',
'integer',
'integer'),
 
 2721                                 array($active_id, $question_id, 
$pass)
 
 2723                         $manual = ($manualscoring) ? 1 : 0;
 
 2727                                 $old_points = 
$row[
"points"];
 
 2728                                 $affectedRows = $ilDB->manipulateF(
"UPDATE tst_test_result SET points = %s, manual = %s, tstamp = %s WHERE active_fi = %s AND question_fi = %s AND pass = %s",
 
 2729                                         array(
'float', 
'integer', 
'integer', 
'integer', 
'integer', 
'integer'),
 
 2730                                         array(
$points, $manual, time(), $active_id, $question_id, 
$pass)
 
 2735                                 $next_id = $ilDB->nextId(
'tst_test_result');
 
 2736                                 $affectedRows = $ilDB->manipulateF(
"INSERT INTO tst_test_result (test_result_id, active_fi, question_fi, points, pass, manual, tstamp) VALUES (%s, %s, %s, %s, %s, %s, %s)",
 
 2737                                         array(
'integer', 
'integer',
'integer', 
'float', 
'integer', 
'integer',
'integer'),
 
 2738                                         array($next_id, $active_id, $question_id, 
$points, 
$pass, $manual, time())
 
 2743                         include_once 
"./Modules/Test/classes/class.ilObjTest.php";
 
 2744                         include_once 
'./Modules/Course/classes/class.ilCourseObjectiveResult.php';
 
 2747                         include_once (
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
 
 2750                                 global 
$lng, $ilUser;
 
 2751                                 include_once 
"./Modules/Test/classes/class.ilObjTestAccess.php";
 
 2812                 $result = $ilDB->queryF(
"SELECT question_type_id FROM qpl_qst_type WHERE type_tag = %s",
 
 2819                         return $row[
"question_type_id"];
 
 2837                 switch ($correctness)
 
 2847                 $affectedRows = $ilDB->manipulateF(
"DELETE FROM qpl_fb_generic WHERE question_fi = %s AND correctness = %s",
 
 2848                         array(
'integer', 
'text'),
 
 2849                         array($this->
getId(), $correctness)
 
 2851                 if (strlen($feedback))
 
 2853                         include_once(
"./Services/RTE/classes/class.ilRTE.php");
 
 2854                         $next_id = $ilDB->nextId(
'qpl_fb_generic');
 
 2855                         $affectedRows = $ilDB->manipulateF(
"INSERT INTO qpl_fb_generic (feedback_id, question_fi, correctness, feedback, tstamp) VALUES (%s, %s, %s, %s, %s)",
 
 2856                                 array(
'integer',
'integer',
'text',
'text',
'integer'),
 
 2876                 $result = $ilDB->queryF(
"SELECT * FROM qpl_fb_generic WHERE question_fi = %s AND correctness = %s",
 
 2877                         array(
'integer', 
'text'),
 
 2878                         array($this->
getId(), $correctness)
 
 2883                         include_once(
"./Services/RTE/classes/class.ilRTE.php");
 
 2900                 $result = $ilDB->queryF(
"SELECT * FROM qpl_fb_generic WHERE question_fi = %s",
 
 2908                                 $next_id = $ilDB->nextId(
'qpl_fb_generic');
 
 2909                                 $affectedRows = $ilDB->manipulateF(
"INSERT INTO qpl_fb_generic (feedback_id, question_fi, correctness, feedback, tstamp) VALUES (%s, %s, %s, %s, %s)",
 
 2910                                         array(
'integer',
'integer',
'text',
'text',
'integer'),
 
 2911                                         array($next_id, $this->
getId(), 
$row[
"correctness"], 
$row[
"feedback"], time())
 
 2924                 $affectedRows = $ilDB->manipulateF(
"DELETE FROM qpl_fb_generic WHERE question_fi = %s",
 
 2926                         array($this->original_id)
 
 2930                 $result = $ilDB->queryF(
"SELECT * FROM qpl_fb_generic WHERE question_fi = %s",
 
 2932                         array($this->
getId())
 
 2940                                 $next_id = $ilDB->nextId(
'qpl_fb_generic');
 
 2941                                 $affectedRows = $ilDB->manipulateF(
"INSERT INTO qpl_fb_generic (feedback_id, question_fi, correctness, feedback, tstamp) VALUES (%s, %s, %s, %s, %s)",
 
 2942                                         array(
'integer',
'integer',
'text',
'text',
'integer'),
 
 2943                                         array($next_id, $this->original_id, 
$row[
"correctness"], 
$row[
"feedback"], time())
 
 2960                 foreach ($this->suggested_solutions as $solution_array)
 
 2962                         $collected .= $solution_array[
"value"];
 
 2974                 include_once(
"./Services/RTE/classes/class.ilRTE.php");
 
 2987                 $result = $ilDB->queryF(
"SELECT question_id FROM qpl_questions WHERE original_id = %s",
 
 2989                         array($this->
getId())
 
 2991                 $instances = array();
 
 2995                         array_push($ids, 
$row[
"question_id"]);
 
 2997                 foreach ($ids as $question_id)
 
 3000                         $result = $ilDB->queryF(
"SELECT tst_tests.obj_fi FROM tst_tests, tst_test_question WHERE tst_test_question.question_fi = %s AND tst_test_question.test_fi = tst_tests.test_id",
 
 3009                         $result = $ilDB->queryF(
"SELECT tst_tests.obj_fi FROM tst_tests, tst_test_rnd_qst, tst_active WHERE tst_test_rnd_qst.active_fi = tst_active.active_id AND tst_test_rnd_qst.question_fi = %s AND tst_tests.test_id = tst_active.test_fi",
 
 3018                 include_once 
"./Modules/Test/classes/class.ilObjTest.php";
 
 3019                 foreach ($instances as $key => $value)
 
 3028                 include_once 
"./Modules/Test/classes/class.ilObjAssessmentFolder.php";
 
 3031                 if (in_array($questiontype, $scoring))
 
 3051                 $result = $ilDB->queryF(
"SELECT * FROM tst_active WHERE active_id = %s",
 
 3058                         return array(
"user_id" => 
$row[
"user_fi"], 
"test_id" => 
$row[
"test_fi"]);
 
 3075                 $type = $question_type;
 
 3076                 if ($gui) $type .= 
"GUI";
 
 3077                 if (file_exists(
"./Modules/TestQuestionPool/classes/class.".$type.
".php"))
 
 3079                         include_once 
"./Modules/TestQuestionPool/classes/class.".$type.
".php";
 
 3083                         global $ilPluginAdmin;
 
 3084                         $pl_names = $ilPluginAdmin->getActivePluginsForSlot(
IL_COMP_MODULE, 
"TestQuestionPool", 
"qst");
 
 3085                         foreach ($pl_names as $pl_name)
 
 3088                                 if (strcmp($pl->getQuestionType(), $question_type) == 0)
 
 3090                                         $pl->includeClass(
"class.".$type.
".php");
 
 3104                 if (file_exists(
"./Modules/TestQuestionPool/classes/class.".$type_tag.
".php"))
 
 3107                         return $lng->txt($type_tag);
 
 3111                         global $ilPluginAdmin;
 
 3112                         $pl_names = $ilPluginAdmin->getActivePluginsForSlot(
IL_COMP_MODULE, 
"TestQuestionPool", 
"qst");
 
 3113                         foreach ($pl_names as $pl_name)
 
 3116                                 if (strcmp($pl->getQuestionType(), $type_tag) == 0)
 
 3118                                         return $pl->getQuestionTypeTranslation();
 
 3134                 if (strcmp($question_id, 
"") != 0)
 
 3137                         $question_type_gui = $question_type . 
"GUI";
 
 3139                         $question_gui = 
new $question_type_gui();
 
 3140                         $question_gui->object->loadFromDb($question_id);
 
 3141                         return $question_gui;
 
 3170                                 return $this->
getId();
 
 3190                         case "est_working_time":
 
 3214                         case "suggested_solutions":
 
 3221                                 if (array_key_exists($value, $this->arrData))
 
 3223                                         return $this->arrData[$value];
 
 3241                                 $this->
setId($value);
 
 3261                         case "est_working_time":
 
 3262                                 if (is_array($value))
 
 3283                                 $this->page =& $value;
 
 3286                                 $this->arrData[$key] = $value;
 
 3298                 $this->nr_of_tries = $a_nr_of_tries;