24 include_once
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
25 include_once
"./Modules/Test/classes/inc.AssessmentConstants.php";
91 $this->answers = array();
92 $this->coords = array();
103 if (($this->title) and ($this->author) and ($this->question) and ($this->image_filename) and (count($this->answers)) and ($this->
getMaximumPoints() > 0))
128 $affectedRows = $ilDB->manipulateF(
"DELETE FROM " . $this->
getAdditionalTableName() .
" WHERE question_fi = %s",
130 array($this->
getId())
132 $affectedRows = $ilDB->manipulateF(
"INSERT INTO " . $this->
getAdditionalTableName() .
" (question_fi, image_file) VALUES (%s, %s)",
133 array(
"integer",
"text"),
136 $this->image_filename
140 $affectedRows = $ilDB->manipulateF(
"DELETE FROM qpl_a_imagemap WHERE question_fi = %s",
142 array($this->
getId())
146 foreach ($this->answers as $key => $value)
148 $answer_obj = $this->answers[$key];
149 $next_id = $ilDB->nextId(
'qpl_a_imagemap');
150 $affectedRows = $ilDB->manipulateF(
"INSERT INTO qpl_a_imagemap (answer_id, question_fi, answertext, points, aorder, coords, area) VALUES (%s, %s, %s, %s, %s, %s, %s)",
151 array(
"integer",
"integer",
"text",
"float",
"integer",
"text",
"text"),
152 array($next_id, $this->
id, $answer_obj->getAnswertext(), $answer_obj->getPoints(), $answer_obj->getOrder(), $answer_obj->getCoords(), $answer_obj->getArea())
172 $this_id = $this->
getId();
174 include_once (
"./Modules/TestQuestionPool/classes/class.assQuestion.php");
199 $clone->copyPageOfQuestion($this_id);
201 $clone->copyXHTMLMediaObjectsOfQuestion($this_id);
203 $clone->duplicateFeedbackGeneric($this_id);
205 $clone->duplicateFeedbackAnswer($this_id);
208 $clone->duplicateImage($this_id);
209 $clone->onDuplicate($this_id);
229 include_once (
"./Modules/TestQuestionPool/classes/class.assQuestion.php");
232 $source_questionpool = $this->
getObjId();
233 $clone->setObjId($target_questionpool);
258 $imagepath_original = str_replace(
"/$this->id/images",
"/$question_id/images", $imagepath);
259 if (!file_exists($imagepath)) {
263 if (!copy($imagepath_original .
$filename, $imagepath . $filename)) {
264 print
"image could not be duplicated!!!! ";
271 $imagepath_original = str_replace(
"/$this->id/images",
"/$question_id/images", $imagepath);
272 $imagepath_original = str_replace(
"/$this->obj_id/",
"/$source_questionpool/", $imagepath_original);
273 if (!file_exists($imagepath))
278 if (!copy($imagepath_original .
$filename, $imagepath . $filename))
280 print
"image could not be copied!!!! ";
304 $this->
setId($question_id);
313 include_once(
"./Services/RTE/classes/class.ilRTE.php");
318 $result = $ilDB->queryF(
"SELECT * FROM qpl_a_imagemap WHERE question_fi = %s ORDER BY aorder ASC",
322 include_once
"./Modules/TestQuestionPool/classes/class.assAnswerImagemap.php";
343 if (!empty($imagemap_filename))
345 $fp = fopen($imagemap_filename,
"r");
346 $contents = fread($fp, filesize($imagemap_filename));
348 if (preg_match_all(
"/<area(.+)>/siU", $contents, $matches))
350 for ($i=0; $i< count($matches[1]); $i++)
352 preg_match(
"/alt\s*=\s*\"(.+)\"\s*/siU", $matches[1][$i], $alt);
353 preg_match(
"/coords\s*=\s*\"(.+)\"\s*/siU", $matches[1][$i],
$coords);
354 preg_match(
"/shape\s*=\s*\"(.+)\"\s*/siU", $matches[1][$i], $shape);
355 $this->
addAnswer($alt[1], 0.0, count($this->answers),
$coords[1], $shape[1]);
382 if (!empty($image_tempfilename))
385 if (!file_exists($imagepath))
391 $this->ilias->raiseError(
"The image could not be uploaded!", $this->ilias->error_obj->MESSAGE);
393 global
$ilLog; $ilLog->write(
"gespeichert: " . $imagepath.$image_filename);
408 for ($i = 0; $i < count($this->answers); $i++) {
412 $imagemap_contents .=
"href=\"$href&selimage=" . $this->answers[$i]->getOrder() .
"\" /> ";
440 include_once
"./Modules/TestQuestionPool/classes/class.assAnswerImagemap.php";
441 if (array_key_exists($order, $this->answers))
445 for ($i = count($this->answers) - 1; $i >= $order; $i--)
447 $this->answers[$i+1] = $this->answers[$i];
448 $this->answers[$i+1]->setOrder($i+1);
450 $this->answers[$order] = $answer;
456 array_push($this->answers, $answer);
470 return count($this->answers);
485 if ($index < 0)
return NULL;
486 if (count($this->answers) < 1)
return NULL;
487 if ($index >= count($this->answers))
return NULL;
488 return $this->answers[$index];
517 if ($index < 0)
return;
518 if (count($this->answers) < 1)
return;
519 if ($index >= count($this->answers))
return;
520 unset($this->answers[$index]);
521 $this->answers = array_values($this->answers);
522 for ($i = 0; $i < count($this->answers); $i++) {
523 if ($this->answers[$i]->getOrder() > $index) {
524 $this->answers[$i]->setOrder($i);
538 $this->answers = array();
551 foreach ($this->answers as $key => $value) {
552 if ($value->getPoints() >
$points)
575 $found_values = array();
580 $result = $ilDB->queryF(
"SELECT * FROM tst_solutions WHERE active_fi = %s AND question_fi = %s AND pass = %s",
581 array(
"integer",
"integer",
"integer"),
586 if (strcmp(
$data[
"value1"],
"") != 0)
588 array_push($found_values,
$data[
"value1"]);
592 if (count($found_values) > 0)
594 foreach ($this->answers as $key => $answer)
596 if (in_array($key, $found_values))
598 $points += $answer->getPoints();
624 include_once
"./Modules/Test/classes/class.ilObjTest.php";
628 $affectedRows = $ilDB->manipulateF(
"DELETE FROM tst_solutions WHERE active_fi = %s AND question_fi = %s AND pass = %s",
629 array(
"integer",
"integer",
"integer"),
633 if (strlen(
$_GET[
"selImage"]))
635 $next_id = $ilDB->nextId(
'tst_solutions');
636 $affectedRows = $ilDB->insert(
"tst_solutions", array(
637 "solution_id" => array(
"integer", $next_id),
638 "active_fi" => array(
"integer", $active_id),
639 "question_fi" => array(
"integer", $this->
getId()),
640 "value1" => array(
"clob",
$_GET[
'selImage']),
641 "value2" => array(
"clob", null),
642 "pass" => array(
"integer",
$pass),
643 "tstamp" => array(
"integer", time())
646 include_once (
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
654 include_once (
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
684 return "assImagemapQuestion";
697 return "qpl_qst_imagemap";
710 return "qpl_a_imagemap";
724 $affectedRows = $ilDB->manipulateF(
"DELETE FROM qpl_fb_imap WHERE question_fi = %s AND answer = %s",
725 array(
"integer",
"integer"),
726 array($this->
getId(), $answer_index)
728 if (strlen($feedback))
730 include_once(
"./Services/RTE/classes/class.ilRTE.php");
731 $next_id = $ilDB->nextId(
'qpl_fb_imap');
732 $affectedRows = $ilDB->manipulateF(
"INSERT INTO qpl_fb_imap (feedback_id, question_fi, answer, feedback, tstamp) VALUES (%s, %s, %s, %s, %s)",
733 array(
"integer",
"integer",
"integer",
"text",
"integer"),
751 $affectedRows = $ilDB->manipulateF(
"DELETE FROM qpl_fb_imap WHERE question_fi = %s",
753 array($this->original_id)
757 $result = $ilDB->queryF(
"SELECT * FROM qpl_fb_imap WHERE question_fi = %s",
759 array($this->
getId())
767 $next_id = $ilDB->nextId(
'qpl_fb_imap');
768 $affectedRows = $ilDB->manipulateF(
"INSERT INTO qpl_fb_imap (feedback_id, question_fi, answer, feedback, tstamp) VALUES (%s, %s, %s, %s, %s)",
769 array(
"integer",
"integer",
"integer",
"text",
"integer"),
770 array($next_id, $this->original_id,
$row[
"answer"],
$row[
"feedback"], time())
788 $result = $ilDB->queryF(
"SELECT * FROM qpl_fb_imap WHERE question_fi = %s AND answer = %s",
789 array(
'integer',
'integer'),
790 array($this->
getId(), $answer_index)
795 include_once(
"./Services/RTE/classes/class.ilRTE.php");
812 $result = $ilDB->queryF(
"SELECT * FROM qpl_fb_imap WHERE question_fi = %s",
820 $next_id = $ilDB->nextId(
'qpl_fb_imap');
821 $affectedRows = $ilDB->manipulateF(
"INSERT INTO qpl_fb_imap (feedback_id, question_fi, answer, feedback, tstamp) VALUES (%s, %s, %s, %s, %s)",
822 array(
"integer",
"integer",
"integer",
"text",
"integer"),
823 array($next_id, $this->
getId(),
$row[
"answer"],
$row[
"feedback"], time())
836 foreach ($this->answers as $index => $answer)
857 include_once (
"./Services/Excel/classes/class.ilExcelUtils.php");
864 $worksheet->writeString($startrow + $i, 0,
ilExcelUtils::_convert_text($answer->getArea() .
": " . $answer->getCoords()), $format_bold);
865 if (
$id == $solution[0][
"value1"])
867 $worksheet->write($startrow + $i, 1, 1);
871 $worksheet->write($startrow + $i, 1, 0);
875 return $startrow + $i + 1;
886 $this->image_filename =
"";
894 include_once(
"./Services/RTE/classes/class.ilRTE.php");
909 foreach ($this->
getAnswers() as $key => $answer_obj)
912 "answertext" => (
string) $answer_obj->getAnswertext(),
913 "points" => (float) $answer_obj->getPoints(),
914 "order" => (int) $answer_obj->getOrder(),
915 "coords" => $answer_obj->getCoords(),
916 "state" => $answer_obj->getState(),
917 "area" => $answer_obj->getArea(),