00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 include_once "./assessment/classes/class.assQuestionGUI.php";
00025 include_once "./assessment/classes/inc.AssessmentConstants.php";
00026
00038 class assSingleChoiceGUI extends assQuestionGUI
00039 {
00048 function assSingleChoiceGUI(
00049 $id = -1
00050 )
00051 {
00052 $this->assQuestionGUI();
00053 include_once "./assessment/classes/class.assSingleChoice.php";
00054 $this->object = new assSingleChoice();
00055 if ($id >= 0)
00056 {
00057 $this->object->loadFromDb($id);
00058 }
00059 }
00060
00061 function getCommand($cmd)
00062 {
00063 if (substr($cmd, 0, 6) == "upload")
00064 {
00065 $cmd = "upload";
00066 }
00067 if (substr($cmd, 0, 11) == "deleteImage")
00068 {
00069 $cmd = "deleteImage";
00070 }
00071 return $cmd;
00072 }
00073
00074
00083 function getQuestionType()
00084 {
00085 return "assSingleChoice";
00086 }
00087
00095 function editQuestion()
00096 {
00097 $javascript = "<script type=\"text/javascript\">function initialSelect() {\n%s\n}</script>";
00098 $graphical_answer_setting = $this->object->getGraphicalAnswerSetting();
00099 $multiline_answers = $this->object->getMultilineAnswerSetting();
00100 if ($graphical_answer_setting == 0)
00101 {
00102 for ($i = 0; $i < $this->object->getAnswerCount(); $i++)
00103 {
00104 $answer = $this->object->getAnswer($i);
00105 if (strlen($answer->getImage())) $graphical_answer_setting = 1;
00106 }
00107 }
00108 $this->object->setGraphicalAnswerSetting($graphical_answer_setting);
00109 $this->getQuestionTemplate();
00110 $this->tpl->addBlockFile("QUESTION_DATA", "question_data", "tpl.il_as_qpl_mc_sr.html", true);
00111
00112 if ($this->object->getAnswerCount() > 0)
00113 {
00114 $this->tpl->setCurrentBlock("answersheading");
00115 $this->tpl->setVariable("TEXT_POINTS", $this->lng->txt("points"));
00116 $this->tpl->setVariable("TEXT_ANSWER_TEXT", $this->lng->txt("answer_text"));
00117 $this->tpl->parseCurrentBlock();
00118 $this->tpl->setCurrentBlock("selectall");
00119 $this->tpl->setVariable("SELECT_ALL", $this->lng->txt("select_all"));
00120 $this->tpl->parseCurrentBlock();
00121 $this->tpl->setCurrentBlock("existinganswers");
00122 $this->tpl->setVariable("DELETE", $this->lng->txt("delete"));
00123 $this->tpl->setVariable("MOVE", $this->lng->txt("move"));
00124 $this->tpl->setVariable("ARROW", "<img src=\"" . ilUtil::getImagePath("arrow_downright.gif") . "\" alt=\"".$this->lng->txt("arrow_downright")."\">");
00125 $this->tpl->parseCurrentBlock();
00126 }
00127 for ($i = 0; $i < $this->object->getAnswerCount(); $i++)
00128 {
00129 $answer = $this->object->getAnswer($i);
00130 if ($graphical_answer_setting == 1)
00131 {
00132 $imagefilename = $this->object->getImagePath() . $answer->getImage();
00133 if (!@file_exists($imagefilename))
00134 {
00135 $answer->setImage("");
00136 }
00137 if (strlen($answer->getImage()))
00138 {
00139 $imagepath = $this->object->getImagePathWeb() . $answer->getImage();
00140 $this->tpl->setCurrentBlock("graphical_answer_image");
00141 $this->tpl->setVariable("IMAGE_FILE", $imagepath);
00142 if (strlen($answer->getAnswertext()))
00143 {
00144 $this->tpl->setVariable("IMAGE_ALT", ilUtil::prepareFormOutput($answer->getAnswertext()));
00145 }
00146 else
00147 {
00148 $this->tpl->setVariable("IMAGE_ALT", $this->lng->txt("image"));
00149 }
00150 $this->tpl->setVariable("ANSWER_ORDER", $answer->getOrder());
00151 $this->tpl->setVariable("DELETE_IMAGE", $this->lng->txt("delete_image"));
00152 $this->tpl->parseCurrentBlock();
00153 }
00154 $this->tpl->setCurrentBlock("graphical_answer");
00155 $this->tpl->setVariable("ANSWER_ORDER", $answer->getOrder());
00156 $this->tpl->setVariable("UPLOAD_IMAGE", $this->lng->txt("upload_image"));
00157 $this->tpl->setVariable("VALUE_IMAGE", $answer->getImage());
00158 $this->tpl->parseCurrentBlock();
00159 }
00160 if ($multiline_answers)
00161 {
00162 $this->tpl->setCurrentBlock("show_textarea");
00163 $this->tpl->setVariable("ANSWER_ANSWER_ORDER", $answer->getOrder());
00164 $this->tpl->setVariable("VALUE_ANSWER", ilUtil::prepareFormOutput($answer->getAnswertext()));
00165 $this->tpl->parseCurrentBlock();
00166 }
00167 else
00168 {
00169 $this->tpl->setCurrentBlock("show_textinput");
00170 $this->tpl->setVariable("ANSWER_ANSWER_ORDER", $answer->getOrder());
00171 $this->tpl->setVariable("VALUE_ANSWER", ilUtil::prepareFormOutput($answer->getAnswertext()));
00172 $this->tpl->parseCurrentBlock();
00173 }
00174 $this->tpl->setCurrentBlock("answers");
00175 $this->tpl->setVariable("ANSWER_ORDER", $answer->getOrder());
00176 $this->tpl->setVariable("VALUE_MULTIPLE_CHOICE_POINTS", $answer->getPoints());
00177 $this->tpl->setVariable("VALUE_TRUE", $this->lng->txt("true"));
00178 $this->tpl->parseCurrentBlock();
00179 }
00180
00181 $this->outOtherQuestionData();
00182
00183 $internallinks = array(
00184 "lm" => $this->lng->txt("obj_lm"),
00185 "st" => $this->lng->txt("obj_st"),
00186 "pg" => $this->lng->txt("obj_pg"),
00187 "glo" => $this->lng->txt("glossary_term")
00188 );
00189 foreach ($internallinks as $key => $value)
00190 {
00191 $this->tpl->setCurrentBlock("internallink");
00192 $this->tpl->setVariable("TYPE_INTERNAL_LINK", $key);
00193 $this->tpl->setVariable("TEXT_INTERNAL_LINK", $value);
00194 $this->tpl->parseCurrentBlock();
00195 }
00196
00197 $this->tpl->setCurrentBlock("HeadContent");
00198 if ($this->object->getAnswerCount() == 0)
00199 {
00200 $this->tpl->setVariable("CONTENT_BLOCK", sprintf($javascript, "document.frm_multiple_choice.title.focus();"));
00201 }
00202 else
00203 {
00204 switch ($this->ctrl->getCmd())
00205 {
00206 case "add":
00207 $nrOfAnswers = $_POST["nrOfAnswers"];
00208 if ((strcmp($nrOfAnswers, "yn") == 0) || (strcmp($nrOfAnswers, "tf") == 0)) $nrOfAnswers = 2;
00209 $this->tpl->setVariable("CONTENT_BLOCK", sprintf($javascript, "document.frm_multiple_choice.answer_".($this->object->getAnswerCount() - $nrOfAnswers).".focus(); document.getElementById('answer_".($this->object->getAnswerCount() - $nrOfAnswers)."').scrollIntoView(\"true\");"));
00210 break;
00211 case "deleteAnswer":
00212 if ($this->object->getAnswerCount() == 0)
00213 {
00214 $this->tpl->setVariable("CONTENT_BLOCK", sprintf($javascript, "document.frm_multiple_choice.title.focus();"));
00215 }
00216 else
00217 {
00218 $this->tpl->setVariable("CONTENT_BLOCK", sprintf($javascript, "document.frm_multiple_choice.answer_".($this->object->getAnswerCount() - 1).".focus(); document.getElementById('answer_".($this->object->getAnswerCount() - 1)."').scrollIntoView(\"true\");"));
00219 }
00220 break;
00221 default:
00222 $this->tpl->setVariable("CONTENT_BLOCK", sprintf($javascript, "document.frm_multiple_choice.title.focus();"));
00223 break;
00224 }
00225 }
00226 $this->tpl->parseCurrentBlock();
00227
00228 for ($i = 1; $i < 10; $i++)
00229 {
00230 $this->tpl->setCurrentBlock("numbers");
00231 $this->tpl->setVariable("VALUE_NUMBER", $i);
00232 if ($i == 1)
00233 {
00234 $this->tpl->setVariable("TEXT_NUMBER", $i . " " . $this->lng->txt("answer"));
00235 }
00236 else
00237 {
00238 $this->tpl->setVariable("TEXT_NUMBER", $i . " " . $this->lng->txt("answers"));
00239 }
00240 $this->tpl->parseCurrentBlock();
00241 }
00242
00243 $this->tpl->setCurrentBlock("numbers");
00244 $this->tpl->setVariable("VALUE_NUMBER", "yn");
00245 $this->tpl->setVariable("TEXT_NUMBER", $this->lng->txt("add_answer_yn"));
00246 $this->tpl->parseCurrentBlock();
00247
00248 $this->tpl->setCurrentBlock("numbers");
00249 $this->tpl->setVariable("VALUE_NUMBER", "tf");
00250 $this->tpl->setVariable("TEXT_NUMBER", $this->lng->txt("add_answer_tf"));
00251 $this->tpl->parseCurrentBlock();
00252
00253 $this->tpl->setCurrentBlock("question_data");
00254 $this->tpl->setVariable("MULTIPLE_CHOICE_ID", $this->object->getId());
00255 $this->tpl->setVariable("VALUE_MULTIPLE_CHOICE_TITLE", ilUtil::prepareFormOutput($this->object->getTitle()));
00256 $this->tpl->setVariable("VALUE_MULTIPLE_CHOICE_COMMENT", ilUtil::prepareFormOutput($this->object->getComment()));
00257 $this->tpl->setVariable("VALUE_MULTIPLE_CHOICE_AUTHOR", ilUtil::prepareFormOutput($this->object->getAuthor()));
00258 $questiontext = $this->object->getQuestion();
00259 $this->tpl->setVariable("VALUE_QUESTION", $this->object->prepareTextareaOutput($questiontext));
00260 $this->tpl->setVariable("VALUE_ADD_ANSWER", $this->lng->txt("add"));
00261 $this->tpl->setVariable("TEXT_GRAPHICAL_ANSWERS", $this->lng->txt("graphical_answers"));
00262 $this->tpl->setVariable("TEXT_HIDE_GRAPHICAL_ANSWER_SUPPORT", $this->lng->txt("graphical_answers_hide"));
00263 $this->tpl->setVariable("TEXT_SHOW_GRAPHICAL_ANSWER_SUPPORT", $this->lng->txt("graphical_answers_show"));
00264 if ($this->object->getGraphicalAnswerSetting() == 1)
00265 {
00266 $this->tpl->setVariable("SELECTED_SHOW_GRAPHICAL_ANSWER_SUPPORT", " selected=\"selected\"");
00267 }
00268 if ($multiline_answers)
00269 {
00270 $this->tpl->setVariable("SELECTED_SHOW_MULTILINE_ANSWERS", " selected=\"selected\"");
00271 }
00272 $this->tpl->setVariable("TEXT_HIDE_MULTILINE_ANSWERS", $this->lng->txt("multiline_answers_hide"));
00273 $this->tpl->setVariable("TEXT_SHOW_MULTILINE_ANSWERS", $this->lng->txt("multiline_answers_show"));
00274 $this->tpl->setVariable("SET_EDIT_MODE", $this->lng->txt("set_edit_mode"));
00275 $this->tpl->setVariable("TEXT_TITLE", $this->lng->txt("title"));
00276 $this->tpl->setVariable("TEXT_AUTHOR", $this->lng->txt("author"));
00277 $this->tpl->setVariable("TEXT_COMMENT", $this->lng->txt("description"));
00278 $this->tpl->setVariable("TEXT_QUESTION", $this->lng->txt("question"));
00279 $this->tpl->setVariable("TEXT_SHUFFLE_ANSWERS", $this->lng->txt("shuffle_answers"));
00280 $this->tpl->setVariable("TXT_YES", $this->lng->txt("yes"));
00281 $this->tpl->setVariable("TXT_NO", $this->lng->txt("no"));
00282 if ($this->object->getShuffle())
00283 {
00284 $this->tpl->setVariable("SELECTED_YES", " selected=\"selected\"");
00285 }
00286 else
00287 {
00288 $this->tpl->setVariable("SELECTED_NO", " selected=\"selected\"");
00289 }
00290 $this->tpl->setVariable("TEXT_SOLUTION_HINT", $this->lng->txt("solution_hint"));
00291 if (count($this->object->suggested_solutions))
00292 {
00293 $solution_array = $this->object->getSuggestedSolution(0);
00294 include_once "./assessment/classes/class.assQuestion.php";
00295 $href = assQuestion::_getInternalLinkHref($solution_array["internal_link"]);
00296 $this->tpl->setVariable("TEXT_VALUE_SOLUTION_HINT", " <a href=\"$href\" target=\"content\">" . $this->lng->txt("solution_hint"). "</a> ");
00297 $this->tpl->setVariable("BUTTON_REMOVE_SOLUTION", $this->lng->txt("remove"));
00298 $this->tpl->setVariable("BUTTON_ADD_SOLUTION", $this->lng->txt("change"));
00299 $this->tpl->setVariable("VALUE_SOLUTION_HINT", $solution_array["internal_link"]);
00300 }
00301 else
00302 {
00303 $this->tpl->setVariable("BUTTON_ADD_SOLUTION", $this->lng->txt("add"));
00304 }
00305 $this->tpl->setVariable("SAVE",$this->lng->txt("save"));
00306 $this->tpl->setVariable("SAVE_EDIT", $this->lng->txt("save_edit"));
00307 $this->tpl->setVariable("CANCEL",$this->lng->txt("cancel"));
00308 $this->tpl->setVariable("TXT_REQUIRED_FLD", $this->lng->txt("required_field"));
00309 $this->ctrl->setParameter($this, "sel_question_types", "assSingleChoice");
00310 $this->tpl->setVariable("ACTION_MULTIPLE_CHOICE_TEST", $this->ctrl->getFormAction($this));
00311 $this->tpl->setVariable("TEXT_QUESTION_TYPE", $this->lng->txt("assSingleChoice"));
00312
00313 $this->tpl->parseCurrentBlock();
00314 include_once "./Services/RTE/classes/class.ilRTE.php";
00315 $rtestring = ilRTE::_getRTEClassname();
00316 include_once "./Services/RTE/classes/class.$rtestring.php";
00317 $rte = new $rtestring();
00318 $rte->addPlugin("latex");
00319 $rte->addButton("latex");
00320 include_once "./classes/class.ilObject.php";
00321 $obj_id = $_GET["q_id"];
00322 $obj_type = ilObject::_lookupType($_GET["ref_id"], TRUE);
00323 $rte->addRTESupport($obj_id, $obj_type, "assessment");
00324
00325 $this->tpl->setCurrentBlock("adm_content");
00326 $this->tpl->setVariable("BODY_ATTRIBUTES", " onload=\"initialSelect();\"");
00327 $this->tpl->parseCurrentBlock();
00328 }
00329
00333 function add()
00334 {
00335
00336 $this->writePostData();
00337
00338 if (!$this->checkInput())
00339 {
00340 sendInfo($this->lng->txt("fill_out_all_required_fields_add_answer"));
00341 }
00342 else
00343 {
00344
00345 $nrOfAnswers = $_POST["nrOfAnswers"];
00346 switch ($nrOfAnswers)
00347 {
00348 case "tf":
00349
00350 $this->object->addAnswer(
00351 $this->lng->txt("true"),
00352 0,
00353 0,
00354 count($this->object->answers),
00355 ""
00356 );
00357 $this->object->addAnswer(
00358 $this->lng->txt("false"),
00359 0,
00360 0,
00361 count($this->object->answers),
00362 ""
00363 );
00364 break;
00365 case "yn":
00366
00367 $this->object->addAnswer(
00368 $this->lng->txt("yes"),
00369 0,
00370 0,
00371 count($this->object->answers),
00372 ""
00373 );
00374 $this->object->addAnswer(
00375 $this->lng->txt("no"),
00376 0,
00377 0,
00378 count($this->object->answers),
00379 ""
00380 );
00381 break;
00382 default:
00383 for ($i = 0; $i < $nrOfAnswers; $i++)
00384 {
00385 $this->object->addAnswer(
00386 $this->lng->txt(""),
00387 0,
00388 0,
00389 count($this->object->answers),
00390 ""
00391 );
00392 }
00393 break;
00394 }
00395 }
00396
00397 $this->editQuestion();
00398 }
00399
00403 function deleteAnswer()
00404 {
00405 $this->writePostData();
00406 $answers = $_POST["chb_answers"];
00407 if (is_array($answers))
00408 {
00409 arsort($answers);
00410 foreach ($answers as $answer)
00411 {
00412 $this->object->deleteAnswer($answer);
00413 }
00414 }
00415 $this->editQuestion();
00416 }
00417
00421 function checkInput()
00422 {
00423 $cmd = $this->ctrl->getCmd();
00424
00425 if ((!$_POST["title"]) or (!$_POST["author"]) or (!$_POST["question"]))
00426 {
00427
00428 return false;
00429 }
00430 foreach ($_POST as $key => $value)
00431 {
00432 if (preg_match("/answer_(\d+)/", $key, $matches))
00433 {
00434 if (strlen($value) == 0)
00435 {
00436 if (strlen($_POST["uploaded_image_".$matches[1]]) == 0)
00437 {
00438 return false;
00439 }
00440 }
00441 }
00442 }
00443
00444 return true;
00445 }
00446
00455 function writePostData()
00456 {
00457 $result = 0;
00458 if ((!$_POST["title"]) or (!$_POST["author"]) or (!$_POST["question"]))
00459 {
00460 $result = 1;
00461 }
00462
00463 if (($result) and (($_POST["cmd"]["add"]) or ($_POST["cmd"]["add_tf"]) or ($_POST["cmd"]["add_yn"])))
00464 {
00465
00466 sendInfo($this->lng->txt("fill_out_all_required_fields_add_answer"));
00467 $_POST["cmd"]["add"] = "";
00468 $_POST["cmd"]["add_yn"] = "";
00469 $_POST["cmd"]["add_tf"] = "";
00470 }
00471
00472
00473 if ($_POST["cmd"]["add"] or $_POST["cmd"]["add_yn"] or $_POST["cmd"]["add_tf"])
00474 {
00475 foreach ($_POST as $key => $value)
00476 {
00477 if (preg_match("/answer_(\d+)/", $key, $matches))
00478 {
00479 if (!$value)
00480 {
00481 $_POST["cmd"]["add"] = "";
00482 $_POST["cmd"]["add_yn"] = "";
00483 $_POST["cmd"]["add_tf"] = "";
00484 sendInfo($this->lng->txt("fill_out_all_answer_fields"));
00485 }
00486 }
00487 }
00488 }
00489
00490 $this->object->setTitle(ilUtil::stripSlashes($_POST["title"]));
00491 $this->object->setAuthor(ilUtil::stripSlashes($_POST["author"]));
00492 $this->object->setComment(ilUtil::stripSlashes($_POST["comment"]));
00493 include_once "./classes/class.ilObjAdvancedEditing.php";
00494 $questiontext = ilUtil::stripSlashes($_POST["question"], false, ilObjAdvancedEditing::_getUsedHTMLTagsAsString("assessment"));
00495 $this->object->setQuestion($questiontext);
00496 $this->object->setSuggestedSolution($_POST["solution_hint"], 0);
00497 $this->object->setShuffle($_POST["shuffle"]);
00498 $this->object->setMultilineAnswerSetting($_POST["multilineAnswers"]);
00499 $this->object->setGraphicalAnswerSetting($_POST["graphicalAnswerSupport"]);
00500
00501 $saved = $this->writeOtherPostData($result);
00502
00503
00504 $this->object->flushAnswers();
00505 $graphical_answer_setting = $this->object->getGraphicalAnswerSetting();
00506
00507 foreach ($_POST as $key => $value)
00508 {
00509 if (preg_match("/answer_(\d+)/", $key, $matches))
00510 {
00511 $answer_image = $_POST["uploaded_image_".$matches[1]];
00512 if ($graphical_answer_setting == 1)
00513 {
00514 foreach ($_FILES as $key2 => $value2)
00515 {
00516 if (preg_match("/image_(\d+)/", $key2, $matches2))
00517 {
00518 if ($matches[1] == $matches2[1])
00519 {
00520 if ($value2["tmp_name"])
00521 {
00522
00523 if ($this->object->getId() <= 0)
00524 {
00525 $this->object->saveToDb();
00526 $saved = true;
00527 $this->error .= $this->lng->txt("question_saved_for_upload") . "<br />";
00528 }
00529 $value2['name'] = $this->object->createNewImageFileName($value2['name']);
00530 $upload_result = $this->object->setImageFile($value2['name'], $value2['tmp_name']);
00531 switch ($upload_result)
00532 {
00533 case 0:
00534 $_POST["image_".$matches2[1]] = $value2['name'];
00535 $answer_image = $value2['name'];
00536 break;
00537 case 1:
00538 $this->error .= $this->lng->txt("error_image_upload_wrong_format") . "<br />";
00539 break;
00540 case 2:
00541 $this->error .= $this->lng->txt("error_image_upload_copy_file") . "<br />";
00542 break;
00543 }
00544 }
00545 }
00546 }
00547 }
00548 }
00549 $points = $_POST["points_$matches[1]"];
00550 $answertext = ilUtil::stripSlashes($_POST["$key"], false, ilObjAdvancedEditing::_getUsedHTMLTagsAsString("assessment"));
00551 $this->object->addAnswer(
00552 $answertext,
00553 ilUtil::stripSlashes($points),
00554 0,
00555 ilUtil::stripSlashes($matches[1]),
00556 $answer_image
00557 );
00558 }
00559 }
00560 if ($this->object->getMaximumPoints() < 0)
00561 {
00562 $result = 1;
00563 $this->setErrorMessage($this->lng->txt("enter_enough_positive_points"));
00564 }
00565
00566
00567 if ($_POST["multiple_choice_id"] > 0)
00568 {
00569 $this->object->setId($_POST["multiple_choice_id"]);
00570 }
00571
00572 if ($saved)
00573 {
00574
00575
00576
00577
00578 $this->object->saveToDb();
00579 $_GET["q_id"] = $this->object->getId();
00580 }
00581
00582 return $result;
00583 }
00584
00585 function outQuestionForTest($formaction, $active_id, $pass = NULL, $is_postponed = FALSE, $use_post_solutions = FALSE)
00586 {
00587 $test_output = $this->getTestOutput($active_id, $pass, $is_postponed, $use_post_solutions);
00588 $this->tpl->setVariable("QUESTION_OUTPUT", $test_output);
00589 $this->tpl->setVariable("FORMACTION", $formaction);
00590 }
00591
00592 function getSolutionOutput($active_id, $pass = NULL, $graphicalOutput = FALSE, $result_output = FALSE, $show_question_only = TRUE)
00593 {
00594
00595 $keys = array_keys($this->object->answers);
00596
00597
00598 $user_solution = "";
00599 if ($active_id)
00600 {
00601 $solutions =& $this->object->getSolutionValues($active_id, $pass);
00602 foreach ($solutions as $idx => $solution_value)
00603 {
00604 $user_solution = $solution_value["value1"];
00605 }
00606 }
00607 else
00608 {
00609 $found_index = -1;
00610 $max_points = 0;
00611 foreach ($this->object->answers as $index => $answer)
00612 {
00613 if ($answer->getPoints() > $max_points)
00614 {
00615 $max_points = $answer->getPoints();
00616 $found_index = $index;
00617 }
00618 }
00619 $user_solution = $found_index;
00620 }
00621
00622 include_once "./classes/class.ilTemplate.php";
00623 $template = new ilTemplate("tpl.il_as_qpl_mc_sr_output_solution.html", TRUE, TRUE, TRUE);
00624 $solutiontemplate = new ilTemplate("tpl.il_as_tst_solution_output.html", TRUE, TRUE, TRUE);
00625 foreach ($keys as $answer_id)
00626 {
00627 $answer = $this->object->answers[$answer_id];
00628 if ($active_id)
00629 {
00630 if ($graphicalOutput)
00631 {
00632
00633 $ok = FALSE;
00634 if (strcmp($user_solution, $answer_id) == 0)
00635 {
00636 if ($answer->getPoints() == $this->object->getMaximumPoints())
00637 {
00638 $ok = TRUE;
00639 }
00640 else
00641 {
00642 $ok = FALSE;
00643 }
00644 if ($ok)
00645 {
00646 $template->setCurrentBlock("icon_ok");
00647 $template->setVariable("ICON_OK", ilUtil::getImagePath("icon_ok.gif"));
00648 $template->setVariable("TEXT_OK", $this->lng->txt("answer_is_right"));
00649 $template->parseCurrentBlock();
00650 }
00651 else
00652 {
00653 $template->setCurrentBlock("icon_not_ok");
00654 if ($answer->getPoints() > 0)
00655 {
00656 $template->setVariable("ICON_NOT_OK", ilUtil::getImagePath("icon_mostly_ok.gif"));
00657 $template->setVariable("TEXT_NOT_OK", $this->lng->txt("answer_is_not_correct_but_positive"));
00658 }
00659 else
00660 {
00661 $template->setVariable("ICON_NOT_OK", ilUtil::getImagePath("icon_not_ok.gif"));
00662 $template->setVariable("TEXT_NOT_OK", $this->lng->txt("answer_is_wrong"));
00663 }
00664 $template->parseCurrentBlock();
00665 }
00666 }
00667 if (strlen($user_solution) == 0)
00668 {
00669 $template->setCurrentBlock("icon_not_ok");
00670 $template->setVariable("ICON_NOT_OK", ilUtil::getImagePath("icon_not_ok.gif"));
00671 $template->setVariable("TEXT_NOT_OK", $this->lng->txt("answer_is_wrong"));
00672 $template->parseCurrentBlock();
00673 }
00674 }
00675 }
00676 if (strlen($answer->getImage()))
00677 {
00678 $template->setCurrentBlock("answer_image");
00679 $template->setVariable("ANSWER_IMAGE_URL", $this->object->getImagePathWeb() . $answer->getImage());
00680 $alt = $answer->getImage();
00681 if (strlen($answer->getAnswertext()))
00682 {
00683 $alt = $answer->getAnswertext();
00684 }
00685 $alt = preg_replace("/<[^>]*?>/", "", $alt);
00686 $template->setVariable("ANSWER_IMAGE_ALT", ilUtil::prepareFormOutput($alt));
00687 $template->setVariable("ANSWER_IMAGE_TITLE", ilUtil::prepareFormOutput($alt));
00688 $template->parseCurrentBlock();
00689 }
00690 $template->setCurrentBlock("answer_row");
00691 $template->setVariable("ANSWER_TEXT", $this->object->prepareTextareaOutput($answer->getAnswertext(), TRUE));
00692 if (strcmp($user_solution, $answer_id) == 0)
00693 {
00694 $template->setVariable("SOLUTION_IMAGE", ilUtil::getImagePath("radiobutton_checked.gif"));
00695 $template->setVariable("SOLUTION_ALT", $this->lng->txt("checked"));
00696 }
00697 else
00698 {
00699 $template->setVariable("SOLUTION_IMAGE", ilUtil::getImagePath("radiobutton_unchecked.gif"));
00700 $template->setVariable("SOLUTION_ALT", $this->lng->txt("unchecked"));
00701 }
00702 if ($result_output)
00703 {
00704 $points = $this->object->answers[$answer_id]->getPoints();
00705 $resulttext = ($points == 1) ? "(%s " . $this->lng->txt("point") . ")" : "(%s " . $this->lng->txt("points") . ")";
00706 $template->setVariable("RESULT_OUTPUT", sprintf($resulttext, $points));
00707 }
00708 $template->parseCurrentBlock();
00709 }
00710 $questiontext = $this->object->getQuestion();
00711 $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE));
00712 $questionoutput = $template->get();
00713 $solutiontemplate->setVariable("SOLUTION_OUTPUT", $questionoutput);
00714
00715 $solutionoutput = $solutiontemplate->get();
00716 if (!$show_question_only)
00717 {
00718
00719 $pageoutput = $this->getILIASPage();
00720 $solutionoutput = preg_replace("/(<div( xmlns:xhtml\=\"http:\/\/www.w3.org\/1999\/xhtml\"){0,1} class\=\"ilc_Question\"><\/div>)/ims", $solutionoutput, $pageoutput);
00721 }
00722 return $solutionoutput;
00723 }
00724
00725 function getPreview()
00726 {
00727
00728 $keys = array_keys($this->object->answers);
00729 if ($this->object->getShuffle())
00730 {
00731 $keys = $this->object->pcArrayShuffle($keys);
00732 }
00733
00734
00735 include_once "./classes/class.ilTemplate.php";
00736 $template = new ilTemplate("tpl.il_as_qpl_mc_sr_output.html", TRUE, TRUE, TRUE);
00737 foreach ($keys as $answer_id)
00738 {
00739 $answer = $this->object->answers[$answer_id];
00740 if (strlen($answer->getImage()))
00741 {
00742 $template->setCurrentBlock("answer_image");
00743 $template->setVariable("ANSWER_IMAGE_URL", $this->object->getImagePathWeb() . $answer->getImage());
00744 $alt = $answer->getImage();
00745 if (strlen($answer->getAnswertext()))
00746 {
00747 $alt = $answer->getAnswertext();
00748 }
00749 $alt = preg_replace("/<[^>]*?>/", "", $alt);
00750 $template->setVariable("ANSWER_IMAGE_ALT", ilUtil::prepareFormOutput($alt));
00751 $template->setVariable("ANSWER_IMAGE_TITLE", ilUtil::prepareFormOutput($alt));
00752 $template->parseCurrentBlock();
00753 }
00754 $template->setCurrentBlock("answer_row");
00755 $template->setVariable("ANSWER_ID", $answer_id);
00756 $template->setVariable("ANSWER_TEXT", $this->object->prepareTextareaOutput($answer->getAnswertext(), TRUE));
00757 $template->parseCurrentBlock();
00758 }
00759 $questiontext = $this->object->getQuestion();
00760 $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE));
00761 $questionoutput = $template->get();
00762 $questionoutput = preg_replace("/<div[^>]*?>(.*)<\/div>/is", "\\1", $questionoutput);
00763 return $questionoutput;
00764 }
00765
00766 function getTestOutput($active_id, $pass = NULL, $is_postponed = FALSE, $use_post_solutions = FALSE)
00767 {
00768
00769 $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id);
00770
00771
00772 $keys = array_keys($this->object->answers);
00773 if ($this->object->getShuffle())
00774 {
00775 $keys = $this->object->pcArrayShuffle($keys);
00776 }
00777
00778
00779 $user_solution = "";
00780 if ($active_id)
00781 {
00782 $solutions = NULL;
00783 include_once "./assessment/classes/class.ilObjTest.php";
00784 if (ilObjTest::_getHidePreviousResults($active_id, true))
00785 {
00786 if (is_null($pass)) $pass = ilObjTest::_getPass($active_id);
00787 }
00788 $solutions =& $this->object->getSolutionValues($active_id, $pass);
00789 foreach ($solutions as $idx => $solution_value)
00790 {
00791 $user_solution = $solution_value["value1"];
00792 }
00793 }
00794
00795
00796 include_once "./classes/class.ilTemplate.php";
00797 $template = new ilTemplate("tpl.il_as_qpl_mc_sr_output.html", TRUE, TRUE, TRUE);
00798 foreach ($keys as $answer_id)
00799 {
00800 $answer = $this->object->answers[$answer_id];
00801 if (strlen($answer->getImage()))
00802 {
00803 $template->setCurrentBlock("answer_image");
00804 $template->setVariable("ANSWER_IMAGE_URL", $this->object->getImagePathWeb() . $answer->getImage());
00805 $alt = $answer->getImage();
00806 if (strlen($answer->getAnswertext()))
00807 {
00808 $alt = $answer->getAnswertext();
00809 }
00810 $alt = preg_replace("/<[^>]*?>/", "", $alt);
00811 $template->setVariable("ANSWER_IMAGE_ALT", ilUtil::prepareFormOutput($alt));
00812 $template->setVariable("ANSWER_IMAGE_TITLE", ilUtil::prepareFormOutput($alt));
00813 $template->parseCurrentBlock();
00814 }
00815 $template->setCurrentBlock("answer_row");
00816 $template->setVariable("ANSWER_ID", $answer_id);
00817 $template->setVariable("ANSWER_TEXT", $this->object->prepareTextareaOutput($answer->getAnswertext(), TRUE));
00818 if (strcmp($user_solution, $answer_id) == 0)
00819 {
00820 $template->setVariable("CHECKED_ANSWER", " checked=\"checked\"");
00821 }
00822 $template->parseCurrentBlock();
00823 }
00824 $questiontext = $this->object->getQuestion();
00825 $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE));
00826 $questionoutput = $template->get();
00827 $questionoutput = preg_replace("/(<div( xmlns:xhtml\=\"http:\/\/www.w3.org\/1999\/xhtml\"){0,1} class\=\"ilc_Question\"><\/div>)/ims", $questionoutput, $pageoutput);
00828 return $questionoutput;
00829 }
00830
00831 function addSuggestedSolution()
00832 {
00833 $_SESSION["subquestion_index"] = 0;
00834 if ($_POST["cmd"]["addSuggestedSolution"])
00835 {
00836 if ($this->writePostData())
00837 {
00838 sendInfo($this->getErrorMessage());
00839 $this->editQuestion();
00840 return;
00841 }
00842 if (!$this->checkInput())
00843 {
00844 sendInfo($this->lng->txt("fill_out_all_required_fields_add_answer"));
00845 $this->editQuestion();
00846 return;
00847 }
00848 }
00849 $this->object->saveToDb();
00850 $_GET["q_id"] = $this->object->getId();
00851 $this->tpl->setVariable("HEADER", $this->object->getTitle());
00852 $this->getQuestionTemplate();
00853 parent::addSuggestedSolution();
00854 }
00855
00859 function upload()
00860 {
00861 $this->writePostData();
00862 $this->editQuestion();
00863 }
00864
00865 function deleteImage()
00866 {
00867 if ($this->writePostData())
00868 {
00869 sendInfo($this->getErrorMessage());
00870 $this->editQuestion();
00871 return;
00872 }
00873 $imageorder = "";
00874 foreach ($_POST["cmd"] as $key => $value)
00875 {
00876 if (preg_match("/deleteImage_(\d+)/", $key, $matches))
00877 {
00878 $imageorder = $matches[1];
00879 }
00880 }
00881 for ($i = 0; $i < $this->object->getAnswerCount(); $i++)
00882 {
00883 $answer = $this->object->getAnswer($i);
00884 if ($answer->getOrder() == $imageorder)
00885 {
00886 $this->object->deleteImage($answer->getImage());
00887 $this->object->answers[$i]->setImage("");
00888 }
00889 }
00890 $this->editQuestion();
00891 }
00892
00893 function editMode()
00894 {
00895 global $ilUser;
00896
00897 $this->object->setMultilineAnswerSetting($_POST["multilineAnswers"]);
00898 $this->object->setGraphicalAnswerSetting($_POST["graphicalAnswerSupport"]);
00899 $this->writePostData();
00900 $this->editQuestion();
00901 }
00902
00903 }
00904 ?>