function getTestOutput($active_id, $pass = NULL, $is_postponed = FALSE, $use_post_solutions = FALSE, $show_feedback = FALSE) { // generate the question output $template = new ilTemplate("tpl.il_as_qpl_fileupload_output.html", TRUE, TRUE, "Modules/TestQuestionPool"); if ($active_id) { $solutions = NULL; include_once "./Modules/Test/classes/class.ilObjTest.php"; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } $solutions =& $this->object->getSolutionValues($active_id, $pass); $files = $this->object->getUploadedFiles($active_id, $pass); if (count($files)) { include_once "./Modules/TestQuestionPool/classes/tables/class.assFileUploadFileTableGUI.php"; $table_gui = new assFileUploadFileTableGUI(null, $this->getQuestionActionCmd()); $table_gui->setTitle($this->lng->txt('already_delivered_files'), 'icon_file.svg', $this->lng->txt('already_delivered_files')); $table_gui->setData($files); $template->setCurrentBlock("files"); $template->setVariable('FILES', $table_gui->getHTML()); $template->parseCurrentBlock(); } } if (strlen($this->object->getAllowedExtensions())) { $template->setCurrentBlock("allowed_extensions"); $template->setVariable("TXT_ALLOWED_EXTENSIONS", $this->object->prepareTextareaOutput($this->lng->txt("allowedextensions") . ": " . $this->object->getAllowedExtensions())); $template->parseCurrentBlock(); } $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($this->object->question, TRUE)); $template->setVariable("CMD_UPLOAD", $this->getQuestionActionCmd()); $template->setVariable("TEXT_UPLOAD", $this->object->prepareTextareaOutput($this->lng->txt('upload'))); $template->setVariable("TXT_UPLOAD_FILE", $this->object->prepareTextareaOutput($this->lng->txt('file_add'))); $template->setVariable("TXT_MAX_SIZE", $this->object->prepareTextareaOutput($this->lng->txt('file_notice') . " " . $this->object->getMaxFilesizeAsString())); $questionoutput = $template->get(); if (!$show_question_only) { // get page object output $questionoutput = $this->getILIASPage($questionoutput); } $questionoutput = $template->get(); $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id, $questionoutput); return $pageoutput; }
/** * @param integer $active_id * @param integer|null $pass * @param bool $is_postponed * @param bool $use_post_solutions * @param bool $show_feedback * * @return string */ function getTestOutput($active_id, $pass = NULL, $is_postponed = FALSE, $use_post_solutions = FALSE, $showInlineFeedback = FALSE) { // shuffle output $keys = $this->getParticipantsAnswerKeySequence(); // get the solution of the user for the active pass or from the last pass if allowed $user_solution = array(); if ($active_id) { $solutions = NULL; include_once "./Modules/Test/classes/class.ilObjTest.php"; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } $solutions =& $this->object->getSolutionValues($active_id, $pass); foreach ($solutions as $idx => $solution_value) { $user_solution[$solution_value["value1"]] = $solution_value["value2"]; } } // generate the question output include_once "./Services/UICore/classes/class.ilTemplate.php"; $template = new ilTemplate("tpl.il_as_qpl_mc_kprim_output.html", TRUE, TRUE, "Modules/TestQuestionPool"); foreach ($keys as $answer_id) { $answer = $this->object->getAnswer($answer_id); if (strlen($answer->getImageFile())) { if ($this->object->getThumbSize()) { $template->setCurrentBlock("preview"); $template->setVariable("URL_PREVIEW", $answer->getImageWebPath()); $template->setVariable("TEXT_PREVIEW", $this->lng->txt('preview')); $template->setVariable("IMG_PREVIEW", ilUtil::getImagePath('enlarge.svg')); $template->setVariable("ANSWER_IMAGE_URL", $answer->getThumbWebPath()); list($width, $height, $type, $attr) = getimagesize($answer->getImageFsPath()); $alt = $answer->getImageFile(); if (strlen($answer->getAnswertext())) { $alt = $answer->getAnswertext(); } $alt = preg_replace("/<[^>]*?>/", "", $alt); $template->setVariable("ANSWER_IMAGE_ALT", ilUtil::prepareFormOutput($alt)); $template->setVariable("ANSWER_IMAGE_TITLE", ilUtil::prepareFormOutput($alt)); $template->parseCurrentBlock(); } else { $template->setCurrentBlock("answer_image"); $template->setVariable("ANSWER_IMAGE_URL", $answer->getImageWebPath()); list($width, $height, $type, $attr) = getimagesize($answer->getImageFsPath()); $alt = $answer->getImageFile(); if (strlen($answer->getAnswertext())) { $alt = $answer->getAnswertext(); } $alt = preg_replace("/<[^>]*?>/", "", $alt); $template->setVariable("ATTR", $attr); $template->setVariable("ANSWER_IMAGE_ALT", ilUtil::prepareFormOutput($alt)); $template->setVariable("ANSWER_IMAGE_TITLE", ilUtil::prepareFormOutput($alt)); $template->parseCurrentBlock(); } } if ($showInlineFeedback) { $this->populateSpecificFeedbackInline($user_solution, $answer_id, $template); } $template->setCurrentBlock("answer_row"); $template->setVariable("ANSWER_ID", $answer_id); $template->setVariable("ANSWER_TEXT", $this->object->prepareTextareaOutput($answer->getAnswertext(), TRUE)); $template->setVariable('VALUE_TRUE', 1); $template->setVariable('VALUE_FALSE', 0); if (isset($user_solution[$answer->getPosition()])) { $tplVar = $user_solution[$answer->getPosition()] ? 'CHECKED_ANSWER_TRUE' : 'CHECKED_ANSWER_FALSE'; $template->setVariable($tplVar, " checked=\"checked\""); } $template->parseCurrentBlock(); } $questiontext = $this->object->getQuestion(); $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE)); $template->setVariable("INSTRUCTIONTEXT", $this->object->getInstructionTextTranslation($this->lng, $this->object->getOptionLabel())); $template->setVariable("OPTION_LABEL_TRUE", $this->object->getTrueOptionLabelTranslation($this->lng, $this->object->getOptionLabel())); $template->setVariable("OPTION_LABEL_FALSE", $this->object->getFalseOptionLabelTranslation($this->lng, $this->object->getOptionLabel())); $questionoutput = $template->get(); $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id, $questionoutput); return $pageoutput; }
/** * @param integer $active_id * @param integer|null $pass * @param bool $is_postponed * @param bool $use_post_solutions * @param bool $show_feedback * * @return string */ function getTestOutput($active_id, $pass = NULL, $is_postponed = FALSE, $use_post_solutions = FALSE, $show_feedback = FALSE) { // shuffle output $keys = $this->getChoiceKeys(); // get the solution of the user for the active pass or from the last pass if allowed $user_solution = array(); if ($active_id) { $solutions = NULL; include_once "./Modules/Test/classes/class.ilObjTest.php"; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } $solutions =& $this->object->getSolutionValues($active_id, $pass); foreach ($solutions as $idx => $solution_value) { array_push($user_solution, $solution_value["value1"]); } } // generate the question output include_once "./Services/UICore/classes/class.ilTemplate.php"; $template = new ilTemplate("tpl.il_as_qpl_mc_mr_output.html", TRUE, TRUE, "Modules/TestQuestionPool"); foreach ($keys as $answer_id) { $answer = $this->object->answers[$answer_id]; if (strlen($answer->getImage())) { if ($this->object->getThumbSize()) { $template->setCurrentBlock("preview"); $template->setVariable("URL_PREVIEW", $this->object->getImagePathWeb() . $answer->getImage()); $template->setVariable("TEXT_PREVIEW", $this->lng->txt('preview')); $template->setVariable("IMG_PREVIEW", ilUtil::getImagePath('enlarge.png')); $template->setVariable("ANSWER_IMAGE_URL", $this->object->getImagePathWeb() . $this->object->getThumbPrefix() . $answer->getImage()); list($width, $height, $type, $attr) = getimagesize($this->object->getImagePath() . $answer->getImage()); $alt = $answer->getImage(); if (strlen($answer->getAnswertext())) { $alt = $answer->getAnswertext(); } $alt = preg_replace("/<[^>]*?>/", "", $alt); $template->setVariable("ANSWER_IMAGE_ALT", ilUtil::prepareFormOutput($alt)); $template->setVariable("ANSWER_IMAGE_TITLE", ilUtil::prepareFormOutput($alt)); $template->parseCurrentBlock(); } else { $template->setCurrentBlock("answer_image"); $template->setVariable("ANSWER_IMAGE_URL", $this->object->getImagePathWeb() . $answer->getImage()); list($width, $height, $type, $attr) = getimagesize($this->object->getImagePath() . $answer->getImage()); $alt = $answer->getImage(); if (strlen($answer->getAnswertext())) { $alt = $answer->getAnswertext(); } $alt = preg_replace("/<[^>]*?>/", "", $alt); $template->setVariable("ATTR", $attr); $template->setVariable("ANSWER_IMAGE_ALT", ilUtil::prepareFormOutput($alt)); $template->setVariable("ANSWER_IMAGE_TITLE", ilUtil::prepareFormOutput($alt)); $template->parseCurrentBlock(); } } if ($show_feedback && $this->object->getSpecificFeedbackSetting() == 2) { foreach ($user_solution as $mc_solution) { if (strcmp($mc_solution, $answer_id) == 0) { $fb = $this->object->feedbackOBJ->getSpecificAnswerFeedbackTestPresentation($this->object->getId(), $answer_id); if (strlen($fb)) { $template->setCurrentBlock("feedback"); $template->setVariable("FEEDBACK", $this->object->prepareTextareaOutput($fb, true)); $template->parseCurrentBlock(); } } } } if ($show_feedback && $this->object->getSpecificFeedbackSetting() == 1) { $fb = $this->object->feedbackOBJ->getSpecificAnswerFeedbackTestPresentation($this->object->getId(), $answer_id); if (strlen($fb)) { $template->setCurrentBlock("feedback"); $template->setVariable("FEEDBACK", $this->object->prepareTextareaOutput($fb, true)); $template->parseCurrentBlock(); } } if ($show_feedback && $this->object->getSpecificFeedbackSetting() == 3) { $answer = $this->object->getAnswer($answer_id); if ($answer->getPoints() > 0) { $fb = $this->object->feedbackOBJ->getSpecificAnswerFeedbackTestPresentation($this->object->getId(), $answer_id); if (strlen($fb)) { $template->setCurrentBlock("feedback"); $template->setVariable("FEEDBACK", $this->object->prepareTextareaOutput($fb, true)); $template->parseCurrentBlock(); } } } $template->setCurrentBlock("answer_row"); $template->setVariable("ANSWER_ID", $answer_id); $template->setVariable("ANSWER_TEXT", $this->object->prepareTextareaOutput($answer->getAnswertext(), TRUE)); foreach ($user_solution as $mc_solution) { if (strcmp($mc_solution, $answer_id) == 0) { $template->setVariable("CHECKED_ANSWER", " checked=\"checked\""); } } $template->parseCurrentBlock(); } $questiontext = $this->object->getQuestion(); $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE)); $questionoutput = $template->get(); $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id, $questionoutput); return $pageoutput; }
function getTestOutput($active_id, $pass = NULL, $is_postponed = FALSE, $use_post_solutions = FALSE, $show_feedback = FALSE) { // generate the question output $template = new ilTemplate("tpl.il_as_qpl_orderinghorizontal_output.html", TRUE, TRUE, "Modules/TestQuestionPool"); $elements = $this->object->getRandomOrderingElements(); if ($active_id) { $solutions = NULL; include_once "./Modules/Test/classes/class.ilObjTest.php"; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } $solutions =& $this->object->getSolutionValues($active_id, $pass); if (count($solutions) == 1) { $elements = split("{::}", $solutions[0]["value1"]); } } if (count($solutions) == 0) { $_SESSION['qst_ordering_horizontal_elements'] = $elements; } else { unset($_SESSION['qst_ordering_horizontal_elements']); } foreach ($elements as $id => $element) { $template->setCurrentBlock("element"); $template->setVariable("ELEMENT_ID", "e_" . $this->object->getId() . "_{$id}"); $template->setVariable("ORDERING_VALUE", ilUtil::prepareFormOutput($element)); $template->setVariable("ELEMENT_VALUE", ilUtil::prepareFormOutput($element)); $template->parseCurrentBlock(); } $template->setVariable("QUESTION_ID", $this->object->getId()); if ($this->object->textsize >= 10) { $template->setVariable("STYLE", " style=\"font-size: " . $this->object->textsize . "%;\""); } $template->setVariable("VALUE_ORDERRESULT", ' value="' . join($elements, '{::}') . '"'); $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($this->object->getQuestion(), TRUE)); $questionoutput = $template->get(); if (!$show_question_only) { // get page object output $questionoutput = $this->getILIASPage($questionoutput); } $this->tpl->addJavascript("./Modules/TestQuestionPool/templates/default/orderinghorizontal.js"); $questionoutput = $template->get(); $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id, $questionoutput); return $pageoutput; }
function getTestOutput($active_id, $pass = NULL, $is_postponed = FALSE, $use_post_solutions = FALSE, $show_feedback = FALSE) { // generate the question output $template = new ilTemplate("tpl.il_as_qpl_orderinghorizontal_output.html", TRUE, TRUE, "Modules/TestQuestionPool"); $elements = $this->object->getRandomOrderingElements(); if ($active_id) { $solutions = NULL; include_once "./Modules/Test/classes/class.ilObjTest.php"; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } $solutions =& $this->object->getSolutionValues($active_id, $pass); if (count($solutions) == 1) { $elements = split("{::}", $solutions[0]["value1"]); } } if (strlen($_SESSION['qst_selection'])) { $this->object->moveRight($_SESSION['qst_selection'], $active_id, $pass); unset($_SESSION['qst_selection']); $solutions =& $this->object->getSolutionValues($active_id, $pass); if (count($solutions) == 1) { $elements = split("{::}", $solutions[0]["value1"]); } } if (count($solutions) == 0) { $_SESSION['qst_ordering_horizontal_elements'] = $elements; } else { unset($_SESSION['qst_ordering_horizontal_elements']); } $idx = 0; foreach ($elements as $id => $element) { $template->setCurrentBlock("element"); $template->setVariable("ELEMENT_ID", "e_" . $this->object->getId() . "_{$id}"); $template->setVariable("ELEMENT_VALUE", ilUtil::prepareFormOutput($element)); $this->ctrl->setParameterByClass('iltestoutputgui', 'qst_selection', $idx); $idx++; $url = $this->ctrl->getLinkTargetByClass('iltestoutputgui', 'gotoQuestion'); $template->setVariable("MOVE_RIGHT", $url); $template->setVariable("TEXT_MOVE_RIGHT", $this->lng->txt('move_right')); $template->setVariable("RIGHT_IMAGE", ilUtil::getImagePath('nav_arr_R.png')); $template->parseCurrentBlock(); } if ($this->object->textsize >= 10) { echo $template->setVariable("STYLE", " style=\"font-size: " . $this->object->textsize . "%;\""); } $template->setVariable("VALUE_ORDERRESULT", ' value="' . join($elements, '{::}') . '"'); $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($this->object->getQuestion(), TRUE)); $questionoutput = $template->get(); if (!$show_question_only) { // get page object output $questionoutput = $this->getILIASPage($questionoutput); } include_once "./Services/YUI/classes/class.ilYuiUtil.php"; ilYuiUtil::initDragDropAnimation(); $this->tpl->addJavascript("./Modules/TestQuestionPool/templates/default/orderinghorizontal.js"); $questionoutput = $template->get(); $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id, $questionoutput); return $pageoutput; }
function getTestOutput($active_id, $pass = NULL, $is_postponed = FALSE, $use_post_solutions = FALSE) { $userdata = $this->object->getActiveUserData($active_id); // generate the question output include_once "./Services/UICore/classes/class.ilTemplate.php"; $template = new ilTemplate("tpl.il_as_qpl_javaapplet_question_output.html", TRUE, TRUE, "Modules/TestQuestionPool"); $template->setCurrentBlock("appletparam"); $template->setVariable("PARAM_NAME", "test_type"); include_once "./Modules/Test/classes/class.ilObjTest.php"; if (ilObjTest::_lookupAnonymity(ilObjTest::_getObjectIDFromTestID($userdata["test_id"]))) { $template->setVariable("PARAM_VALUE", "0"); } else { $template->setVariable("PARAM_VALUE", "1"); } $template->parseCurrentBlock(); $template->setCurrentBlock("appletparam"); $template->setVariable("PARAM_NAME", "active_id"); $template->setVariable("PARAM_VALUE", $active_id); $template->parseCurrentBlock(); $template->setCurrentBlock("appletparam"); $template->setVariable("PARAM_NAME", "test_id"); $template->setVariable("PARAM_VALUE", $userdata["test_id"]); $template->parseCurrentBlock(); $template->setCurrentBlock("appletparam"); $template->setVariable("PARAM_NAME", "question_id"); $template->setVariable("PARAM_VALUE", $this->object->getId()); $template->parseCurrentBlock(); $template->setCurrentBlock("appletparam"); $template->setVariable("PARAM_NAME", "user_id"); $template->setVariable("PARAM_VALUE", $userdata["user_id"]); $template->parseCurrentBlock(); $template->setCurrentBlock("appletparam"); $template->setVariable("PARAM_NAME", "points_max"); $template->setVariable("PARAM_VALUE", $this->object->getPoints()); $template->parseCurrentBlock(); $template->setCurrentBlock("appletparam"); $template->setVariable("PARAM_NAME", "session_id"); $template->setVariable("PARAM_VALUE", $_COOKIE["PHPSESSID"]); $template->parseCurrentBlock(); $template->setCurrentBlock("appletparam"); $template->setVariable("PARAM_NAME", "client"); $template->setVariable("PARAM_VALUE", CLIENT_ID); $template->parseCurrentBlock(); $template->setCurrentBlock("appletparam"); $template->setVariable("PARAM_NAME", "pass"); $actualpass = ilObjTest::_getPass($active_id); $template->setVariable("PARAM_VALUE", $actualpass); $template->parseCurrentBlock(); $template->setCurrentBlock("appletparam"); $template->setVariable("PARAM_NAME", "post_url"); $template->setVariable("PARAM_VALUE", ilUtil::removeTrailingPathSeparators(ILIAS_HTTP_PATH) . "/Modules/TestQuestionPool/save_question_post_data.php"); $template->parseCurrentBlock(); // additional parameters for ($i = 0; $i < $this->object->getParameterCount(); $i++) { $parameter = $this->object->getParameter($i); $template->setCurrentBlock("appletparam"); $template->setVariable("PARAM_NAME", $parameter["name"]); $template->setVariable("PARAM_VALUE", $parameter["value"]); $template->parseCurrentBlock(); } if ($active_id) { $solutions = NULL; include_once "./Modules/Test/classes/class.ilObjTest.php"; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } $info = $this->object->getReachedInformation($active_id, $pass); foreach ($info as $kk => $infodata) { $template->setCurrentBlock("appletparam"); $template->setVariable("PARAM_NAME", "value_" . $infodata["order"] . "_1"); $template->setVariable("PARAM_VALUE", $infodata["value1"]); $template->parseCurrentBlock(); $template->setCurrentBlock("appletparam"); $template->setVariable("PARAM_NAME", "value_" . $infodata["order"] . "_2"); $template->setVariable("PARAM_VALUE", $infodata["value2"]); $template->parseCurrentBlock(); } include_once './Services/Administration/classes/class.ilSetting.php'; $soapSetting = new ilSetting(); if ($soapSetting->get("soap_user_administration") == 1) { $template->setCurrentBlock("appletparam"); $template->setVariable("PARAM_NAME", "server"); $template->setVariable("PARAM_VALUE", ilUtil::removeTrailingPathSeparators(ILIAS_HTTP_PATH) . "/webservice/soap/server.php"); } } $questiontext = $this->object->getQuestion(); $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE)); $template->setVariable("APPLET_WIDTH", $this->object->getJavaWidth()); $template->setVariable("APPLET_HEIGHT", $this->object->getJavaHeight()); $template->setVariable("APPLET_CODE", $this->object->getJavaCode()); if (strlen($this->object->getJavaArchive()) > 0) { $template->setVariable("APPLET_ARCHIVE", " archive=\"" . $this->object->getJavaArchive() . "\""); } else { if (strpos($this->object->getJavaAppletFilename(), ".jar") !== FALSE) { $template->setVariable("APPLET_ARCHIVE", " archive=\"" . $this->object->getJavaPathWeb() . $this->object->getJavaAppletFilename() . "\""); } } if (strlen($this->object->getJavaCodebase()) > 0) { $template->setVariable("APPLET_CODEBASE", " codebase=\"" . $this->object->getJavaCodebase() . "\""); } else { if (strpos($this->object->getJavaAppletFilename(), ".class") !== FALSE) { $template->setVariable("APPLET_CODEBASE", " codebase=\"" . $this->object->getJavaPathWeb() . "\""); } } $questionoutput = $template->get(); $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id, $questionoutput); return $pageoutput; }
/** * Get the question solution output * @param integer $active_id The active user id * @param integer $pass The test pass * @param boolean $graphicalOutput Show visual feedback for right/wrong answers * @param boolean $result_output Show the reached points for parts of the question * @param boolean $show_question_only Show the question without the ILIAS content around * @param boolean $show_feedback Show the question feedback * @param boolean $show_correct_solution Show the correct solution instead of the user solution * @param boolean $show_manual_scoring Show specific information for the manual scoring output * @return The solution output of the question as HTML code */ function getSolutionOutput($active_id, $pass = NULL, $graphicalOutput = FALSE, $result_output = FALSE, $show_question_only = TRUE, $show_feedback = FALSE, $show_correct_solution = FALSE, $show_manual_scoring = FALSE, $show_question_text = TRUE) { // get the solution of the user for the active pass or from the last pass if allowed $user_solution = ""; if ($active_id > 0 && !$show_correct_solution) { $solutions = NULL; include_once "./Modules/Test/classes/class.ilObjTest.php"; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } $user_solution["active_id"] = $active_id; $user_solution["pass"] = $pass; $solutions =& $this->object->getSolutionValues($active_id, $pass); foreach ($solutions as $idx => $solution_value) { if (preg_match("/^(\\\$v\\d+)\$/", $solution_value["value1"], $matches)) { $user_solution[$matches[1]] = $solution_value["value2"]; } else { if (preg_match("/^(\\\$r\\d+)\$/", $solution_value["value1"], $matches)) { if (!array_key_exists($matches[1], $user_solution)) { $user_solution[$matches[1]] = array(); } $user_solution[$matches[1]]["value"] = $solution_value["value2"]; } else { if (preg_match("/^(\\\$r\\d+)_unit\$/", $solution_value["value1"], $matches)) { if (!array_key_exists($matches[1], $user_solution)) { $user_solution[$matches[1]] = array(); } $user_solution[$matches[1]]["unit"] = $solution_value["value2"]; } } } } } else { if ($active_id) { $solutions = NULL; include_once "./Modules/Test/classes/class.ilObjTest.php"; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } $user_solution = $this->object->getBestSolution($this->object->getSolutionValues($active_id, $pass)); } elseif (is_object($this->getPreviewSession())) { $solutionValues = array(); foreach ($this->getPreviewSession()->getParticipantsSolution() as $val1 => $val2) { $solutionValues[] = array('value1' => $val1, 'value2' => $val2); } $user_solution = $this->object->getBestSolution($solutionValues); } } $template = new ilTemplate("tpl.il_as_qpl_formulaquestion_output_solution.html", true, true, 'Modules/TestQuestionPool'); $questiontext = $this->object->substituteVariables($user_solution, $graphicalOutput, TRUE, $result_output, $this->getPreviewSession()); $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE)); $questionoutput = $template->get(); $solutiontemplate = new ilTemplate("tpl.il_as_tst_solution_output.html", TRUE, TRUE, "Modules/TestQuestionPool"); $solutiontemplate->setVariable("SOLUTION_OUTPUT", $questionoutput); $solutionoutput = $solutiontemplate->get(); if (!$show_question_only) { // get page object output $solutionoutput = $this->getILIASPage($solutionoutput); } return $solutionoutput; }
function getTestOutput($active_id, $pass = NULL, $is_postponed = FALSE, $use_post_solutions = FALSE, $show_feedback = FALSE) { // get the solution of the user for the active pass or from the last pass if allowed $user_solution = ""; if ($this->object->getIsMultipleChoice()) { $user_solution = array(); } if ($active_id) { $solutions = NULL; include_once "./Modules/Test/classes/class.ilObjTest.php"; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } $solutions =& $this->object->getSolutionValues($active_id, $pass); foreach ($solutions as $idx => $solution_value) { if ($this->object->getIsMultipleChoice()) { $user_solution[] = $solution_value["value1"]; } else { $user_solution = $solution_value["value1"]; } } } $imagepath = $this->object->getImagePathWeb() . $this->object->getImageFilename(); if ($active_id) { $solutions = NULL; include_once "./Modules/Test/classes/class.ilObjTest.php"; if (!$showsolution && !ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } $solutions =& $this->object->getSolutionValues($active_id, $pass); include_once "./Modules/TestQuestionPool/classes/class.ilImagemapPreview.php"; $preview = new ilImagemapPreview($this->object->getImagePath() . $this->object->getImageFilename()); foreach ($solutions as $idx => $solution_value) { if (strcmp($solution_value["value1"], "") != 0) { $preview->addArea($solution_value["value1"], $this->object->answers[$solution_value["value1"]]->getArea(), $this->object->answers[$solution_value["value1"]]->getCoords(), $this->object->answers[$solution_value["value1"]]->getAnswertext(), "", "", true, $this->linecolor); } } $preview->createPreview(); $imagepath = $this->object->getImagePathWeb() . $preview->getPreviewFilename($this->object->getImagePath(), $this->object->getImageFilename()); } // generate the question output include_once "./Services/UICore/classes/class.ilTemplate.php"; $template = new ilTemplate("tpl.il_as_qpl_imagemap_question_output.html", TRUE, TRUE, "Modules/TestQuestionPool"); $this->ctrl->setParameterByClass($this->getTargetGuiClass(), "formtimestamp", time()); $hrefArea = $this->ctrl->getLinkTargetByClass($this->getTargetGuiClass(), $this->getQuestionActionCmd()); foreach ($this->object->answers as $answer_id => $answer) { $template->setCurrentBlock("imagemap_area"); $parameter = "&selImage={$answer_id}"; if (is_array($user_solution) && in_array($answer_id, $user_solution)) { $parameter = "&remImage={$answer_id}"; } $template->setVariable("HREF_AREA", $hrefArea . $parameter); $template->setVariable("SHAPE", $answer->getArea()); $template->setVariable("COORDS", $answer->getCoords()); $template->setVariable("ALT", ilUtil::prepareFormOutput($answer->getAnswertext())); $template->setVariable("TITLE", ilUtil::prepareFormOutput($answer->getAnswertext())); $template->parseCurrentBlock(); if ($show_feedback) { if (!$this->object->getIsMultipleChoice() && strlen($user_solution) && $user_solution == $answer_id) { $feedback = $this->object->feedbackOBJ->getSpecificAnswerFeedbackTestPresentation($this->object->getId(), $answer_id); if (strlen($feedback)) { $template->setCurrentBlock("feedback"); $template->setVariable("FEEDBACK", $feedback); $template->parseCurrentBlock(); } } } } $questiontext = $this->object->getQuestion(); $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE)); $template->setVariable("IMG_SRC", "{$imagepath}"); $template->setVariable("IMG_ALT", $this->lng->txt("imagemap")); $template->setVariable("IMG_TITLE", $this->lng->txt("imagemap")); $questionoutput = $template->get(); $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id, $questionoutput); return $pageoutput; }
function getTestOutput($active_id, $pass = NULL, $is_postponed = FALSE, $user_post_solution = FALSE) { if ($this->object->getOutputType() == OUTPUT_JAVASCRIPT) { return $this->getTestOutputJS($active_id, $pass, $is_postponed, $user_post_solution); } // generate the question output include_once "./Services/UICore/classes/class.ilTemplate.php"; $template = new ilTemplate("tpl.il_as_qpl_matching_output.html", TRUE, TRUE, "Modules/TestQuestionPool"); if ($active_id) { $solutions = NULL; include_once "./Modules/Test/classes/class.ilObjTest.php"; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } if (is_array($user_post_solution)) { $solutions = array(); foreach ($user_post_solution['matching'][$this->object->getId()] as $definition => $term) { array_push($solutions, array("value1" => $term, "value2" => $definition)); } } else { $solutions =& $this->object->getSolutionValues($active_id, $pass); } } // shuffle output $terms = $this->object->getTerms(); $definitions = $this->object->getDefinitions(); switch ($this->object->getShuffle()) { case 1: $terms = $this->object->pcArrayShuffle($terms); if (count($solutions)) { $definitions = $this->sortDefinitionsBySolution($solutions); } else { $definitions = $this->object->pcArrayShuffle($definitions); } break; case 2: $terms = $this->object->pcArrayShuffle($terms); break; case 3: if (count($solutions)) { $definitions = $this->sortDefinitionsBySolution($solutions); } else { $definitions = $this->object->pcArrayShuffle($definitions); } break; } $maxcount = max(count($terms), count($definitions)); for ($i = 0; $i < count($definitions); $i++) { $definition = $definitions[$i]; if (is_object($definition)) { if (strlen($definition->picture)) { $template->setCurrentBlock('definition_image'); $template->setVariable('ANSWER_IMAGE_URL', $this->object->getImagePathWeb() . $this->object->getThumbPrefix() . $definition->picture); $template->setVariable('ANSWER_IMAGE_ALT', strlen($definition->text) ? ilUtil::prepareFormOutput($definition->text) : ilUtil::prepareFormOutput($definition->picture)); $template->setVariable('ANSWER_IMAGE_TITLE', strlen($definition->text) ? ilUtil::prepareFormOutput($definition->text) : ilUtil::prepareFormOutput($definition->picture)); $template->setVariable('URL_PREVIEW', $this->object->getImagePathWeb() . $definition->picture); $template->setVariable("TEXT_PREVIEW", $this->lng->txt('preview')); $template->setVariable("IMG_PREVIEW", ilUtil::getImagePath('enlarge.png')); $template->setVariable("TEXT_DEFINITION", strlen($definition->text) ? $this->lng->txt('definition') . ' ' . ($i + 1) . ': ' . ilUtil::prepareFormOutput($definition->text) : $this->lng->txt('definition') . ' ' . ($i + 1)); $template->parseCurrentBlock(); } else { $template->setCurrentBlock('definition_text'); $template->setVariable("DEFINITION", $this->object->prepareTextareaOutput($definition->text, true)); $template->parseCurrentBlock(); } } $template->setCurrentBlock('option'); $template->setVariable("VALUE_OPTION", 0); $template->setVariable("TEXT_OPTION", ilUtil::prepareFormOutput($this->lng->txt('please_select'))); $template->parseCurrentBlock(); $j = 1; foreach ($terms as $term) { $template->setCurrentBlock('option'); $template->setVariable("VALUE_OPTION", $term->identifier); $template->setVariable("TEXT_OPTION", strlen($term->text) ? $this->lng->txt('term') . ' ' . $j . ': ' . ilUtil::prepareFormOutput($term->text) : $this->lng->txt('term') . ' ' . $j); foreach ($solutions as $solution) { if ($solution["value1"] == $term->identifier && $solution["value2"] == $definition->identifier) { $template->setVariable("SELECTED_OPTION", " selected=\"selected\""); } } $template->parseCurrentBlock(); $j++; } $template->setCurrentBlock('row'); $template->setVariable("TEXT_MATCHES", $this->lng->txt("matches")); if ($this->object->getEstimatedElementHeight() > 0) { $template->setVariable("ELEMENT_HEIGHT", " style=\"height: " . $this->object->getEstimatedElementHeight() . "px;\""); } $template->setVariable("QUESTION_ID", $this->object->getId()); $template->setVariable("DEFINITION_ID", $definition->identifier); $template->parseCurrentBlock(); } $i = 0; foreach ($terms as $term) { if (strlen($term->picture)) { $template->setCurrentBlock('term_image'); $template->setVariable('ANSWER_IMAGE_URL', $this->object->getImagePathWeb() . $this->object->getThumbPrefix() . $term->picture); $template->setVariable('ANSWER_IMAGE_ALT', strlen($term->text) ? ilUtil::prepareFormOutput($term->text) : ilUtil::prepareFormOutput($term->picture)); $template->setVariable('ANSWER_IMAGE_TITLE', strlen($term->text) ? ilUtil::prepareFormOutput($term->text) : ilUtil::prepareFormOutput($term->picture)); $template->setVariable('URL_PREVIEW', $this->object->getImagePathWeb() . $term->picture); $template->setVariable("TEXT_PREVIEW", $this->lng->txt('preview')); $template->setVariable("TEXT_TERM", strlen($term->text) ? $this->lng->txt('term') . ' ' . ($i + 1) . ': ' . ilUtil::prepareFormOutput($term->text) : $this->lng->txt('term') . ' ' . ($i + 1)); $template->setVariable("IMG_PREVIEW", ilUtil::getImagePath('enlarge.png')); $template->parseCurrentBlock(); } else { $template->setCurrentBlock('term_text'); $template->setVariable("TERM", $this->object->prepareTextareaOutput($term->text, true)); $template->parseCurrentBlock(); } $template->touchBlock('terms'); $i++; } $questiontext = $this->object->getQuestion(); $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE)); $template->setVariable("TEXT_TERMS", ilUtil::prepareFormOutput($this->lng->txt('available_terms'))); $template->setVariable('TEXT_SELECTION', ilUtil::prepareFormOutput($this->lng->txt('selection'))); $questiontext = $this->object->getQuestion(); $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE)); $questionoutput = $template->get(); $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id, $questionoutput); return $pageoutput; }
function getTestOutput($active_id, $pass = NULL, $is_postponed = FALSE, $use_post_solutions = FALSE) { // get page object output $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id); // get the solution of the user for the active pass or from the last pass if allowed $user_solution = ""; if ($active_id) { $solutions = NULL; include_once "./Modules/Test/classes/class.ilObjTest.php"; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } $solutions =& $this->object->getSolutionValues($active_id, $pass); } // generate the question output include_once "./classes/class.ilTemplate.php"; $template = new ilTemplate("tpl.il_as_qpl_syntaxtree_output.html", TRUE, TRUE, $this->ownDir); $this->tpl->addCss($this->cssDir . "/default.css"); $this->tpl->addJavascript($this->ownDir . "/js/bracketCount.js"); $this->tpl->addJavascript($this->ownDir . "/js/url_encode.js"); $width = $this->object->getMaxTextboxWidth(); for ($i = 0; $i < $this->object->getCorrectAnswers(); $i++) { $template->setCurrentBlock("syntaxtree_row"); foreach ($solutions as $idx => $solution_value) { if ($idx == $i) { $template->setVariable("TEXTFIELD_VALUE", $solution_value["value1"]); } } $template->setVariable("COUNTER", $i + 1); $template->setVariable("TEXTFIELD_ID", sprintf("%02d", $i + 1)); $template->setVariable("TEXTFIELD_SIZE", $width); $template->setVariable("GRAPHPATH", $this->ownDir . "/phpsyntaxtree_obj/stgraph.png"); $template->setVariable("TEXT_PHRASE_HEADER", $this->lng->txt("qpl_qst_syntaxtree_phrase_header")); $template->setVariable("TEXT_OPEN_BRACKETS", $this->lng->txt("qpl_qst_syntaxtree_open_brackets")); $template->setVariable("TEXT_CLOSED_BRACKETS", $this->lng->txt("qpl_qst_syntaxtree_closed_brackets")); $template->setVariable("TEXT_YOUR_GRAPH", $this->lng->txt("qpl_qst_syntaxtree_your_graph")); $template->parseCurrentBlock(); } $questiontext = $this->object->getQuestion(); $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE)); $questionoutput = $template->get(); $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id, $questionoutput); return $pageoutput; }
/** * Get the HTML output of the question for a test * * @param integer $active_id The active user id * @param integer $pass The test pass * @param boolean $is_postponed Question is postponed * @param boolean $use_post_solutions Use post solutions * @param boolean $show_feedback Show a feedback * @return string */ public function getTestOutput($active_id, $pass = NULL, $is_postponed = FALSE, $use_post_solutions = FALSE, $show_feedback = FALSE) { $solution = NULL; // get the solution of the user for the active pass or from the last pass if allowed if ($active_id) { require_once './Modules/Test/classes/class.ilObjTest.php'; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } // get preferrably the intermediate solution $solution = $this->object->getSolutionStored($active_id, $pass, null); } $questionoutput = $this->getQuestionOutput($solution); $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id, $questionoutput); return $pageoutput; }
/** * Get the HTML output of the question for a test * * @param integer $active_id The active user id * @param integer $pass The test pass * @param boolean $is_postponed Question is postponed * @param boolean $use_post_solutions Use post solutions * @param boolean $show_feedback Show a feedback * @return string */ function getTestOutput($active_id, $pass = NULL, $is_postponed = FALSE, $use_post_solutions = FALSE, $show_feedback = FALSE) { global $tpl; // get the solution of the user for the active pass or from the last pass if allowed $user_solution = array(); if ($active_id) { include_once "./Modules/Test/classes/class.ilObjTest.php"; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } $user_solution =& $this->object->getSolutionValues($active_id, $pass); if (!is_array($user_solution)) { $user_solution = array(); } } $template = $this->getJsmeOutputTemplate($this->object->getQuestion(), $this->object->getOptionString(), $user_solution[0]["value1"]); $questionoutput = $template->get(); $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id, $questionoutput); return $pageoutput; }
function getTestOutput($active_id, $pass = NULL, $is_postponed = FALSE, $user_post_solution = FALSE) { $this->tpl->addJavaScript('Modules/TestQuestionPool/js/jquery-ui-1-10-3-fixed.js'); $this->tpl->addJavaScript('Modules/TestQuestionPool/js/ilMatchingQuestion.js'); $this->tpl->addCss(ilUtil::getStyleSheetLocation('output', 'test_javascript.css', 'Modules/TestQuestionPool')); $template = new ilTemplate("tpl.il_as_qpl_matching_output.html", true, true, "Modules/TestQuestionPool"); if ($active_id) { $solutions = NULL; include_once "./Modules/Test/classes/class.ilObjTest.php"; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } if (is_array($user_post_solution)) { $solutions = array(); foreach ($user_post_solution['matching'][$this->object->getId()] as $definition => $term) { array_push($solutions, array("value1" => $term, "value2" => $definition)); } } else { $solutions =& $this->object->getSolutionValues($active_id, $pass); } $counter = 0; foreach ($solutions as $idx => $solution_value) { if ($solution_value["value2"] > -1 && $solution_value["value1"] > -1) { $template->setCurrentBlock("matching_data"); $template->setVariable("TERM_ID", $solution_value["value1"]); $template->setVariable("DEFINITION_ID", $solution_value["value2"]); $template->parseCurrentBlock(); } $counter++; } } $terms = $this->object->getTerms(); $definitions = $this->object->getDefinitions(); switch ($this->object->getShuffle()) { case 1: $terms = $this->object->pcArrayShuffle($terms); if (count($solutions)) { $definitions = $this->sortDefinitionsBySolution($solutions, $definitions); } else { $definitions = $this->object->pcArrayShuffle($definitions); } break; case 2: $terms = $this->object->pcArrayShuffle($terms); break; case 3: if (count($solutions)) { $definitions = $this->sortDefinitionsBySolution($solutions, $definitions); } else { $definitions = $this->object->pcArrayShuffle($definitions); } break; } // create definitions $counter = 0; foreach ($definitions as $definition) { if (strlen($definition->picture)) { $template->setCurrentBlock("definition_picture"); $template->setVariable("DEFINITION_ID", $definition->identifier); $template->setVariable("IMAGE_HREF", $this->object->getImagePathWeb() . $definition->picture); $thumbweb = $this->object->getImagePathWeb() . $this->object->getThumbPrefix() . $definition->picture; $thumb = $this->object->getImagePath() . $this->object->getThumbPrefix() . $definition->picture; if (!@file_exists($thumb)) { $this->object->rebuildThumbnails(); } $template->setVariable("THUMBNAIL_HREF", $thumbweb); $template->setVariable("THUMB_ALT", $this->lng->txt("image")); $template->setVariable("THUMB_TITLE", $this->lng->txt("image")); $template->setVariable("TEXT_DEFINITION", strlen($definition->text) ? ilUtil::prepareFormOutput($definition->text) : ''); $template->setVariable("TEXT_PREVIEW", $this->lng->txt('preview')); $template->setVariable("IMG_PREVIEW", ilUtil::getImagePath('enlarge.svg')); $template->parseCurrentBlock(); } else { $template->setCurrentBlock("definition_text"); $template->setVariable("DEFINITION", $this->object->prepareTextareaOutput($definition->text, true)); $template->parseCurrentBlock(); } $template->setCurrentBlock("droparea"); $template->setVariable("ID_DROPAREA", $definition->identifier); $template->setVariable("QUESTION_ID", $this->object->getId()); $template->parseCurrentBlock(); $template->setCurrentBlock("definition_data"); $template->setVariable("DEFINITION_ID", $definition->identifier); $template->parseCurrentBlock(); } // create terms $counter = 0; foreach ($terms as $term) { if (strlen($term->picture)) { $template->setCurrentBlock("term_picture"); $template->setVariable("TERM_ID", $term->identifier); $template->setVariable("IMAGE_HREF", $this->object->getImagePathWeb() . $term->picture); $thumbweb = $this->object->getImagePathWeb() . $this->object->getThumbPrefix() . $term->picture; $thumb = $this->object->getImagePath() . $this->object->getThumbPrefix() . $term->picture; if (!@file_exists($thumb)) { $this->object->rebuildThumbnails(); } $template->setVariable("THUMBNAIL_HREF", $thumbweb); $template->setVariable("THUMB_ALT", $this->lng->txt("image")); $template->setVariable("THUMB_TITLE", $this->lng->txt("image")); $template->setVariable("TEXT_PREVIEW", $this->lng->txt('preview')); $template->setVariable("TEXT_TERM", strlen($term->text) ? ilUtil::prepareFormOutput($term->text) : ''); $template->setVariable("IMG_PREVIEW", ilUtil::getImagePath('enlarge.svg')); $template->parseCurrentBlock(); } else { $template->setCurrentBlock("term_text"); $template->setVariable("TERM_TEXT", $this->object->prepareTextareaOutput($term->text, true)); $template->parseCurrentBlock(); } $template->setCurrentBlock("draggable"); $template->setVariable("ID_DRAGGABLE", $term->identifier); $template->parseCurrentBlock(); $template->setCurrentBlock('term_data'); $template->setVariable('TERM_ID', $term->identifier); $template->parseCurrentBlock(); } $template->setVariable('MATCHING_MODE', $this->object->getMatchingMode()); $template->setVariable("RESET_BUTTON", $this->lng->txt("reset_terms")); $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($this->object->getQuestion(), TRUE)); return $this->outQuestionPage("", $is_postponed, $active_id, $template->get()); }
function getTestOutput($active_id, $pass = NULL, $is_postponed = FALSE, $use_post_solutions = FALSE) { // get the solution of the user for the active pass or from the last pass if allowed $user_solution = ""; if ($active_id) { $solutions = NULL; include_once "./Modules/Test/classes/class.ilObjTest.php"; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } $solutions =& $this->object->getSolutionValues($active_id, $pass); } // generate the question output include_once "./Services/UICore/classes/class.ilTemplate.php"; $template = new ilTemplate("tpl.il_as_qpl_textsubset_output.html", TRUE, TRUE, "Modules/TestQuestionPool"); $width = $this->object->getMaxTextboxWidth(); for ($i = 0; $i < $this->object->getCorrectAnswers(); $i++) { $template->setCurrentBlock("textsubset_row"); foreach ($solutions as $idx => $solution_value) { if ($idx == $i) { $template->setVariable("TEXTFIELD_VALUE", " value=\"" . $solution_value["value1"] . "\""); } } $template->setVariable("COUNTER", $i + 1); $template->setVariable("TEXTFIELD_ID", sprintf("%02d", $i + 1)); $template->setVariable("TEXTFIELD_SIZE", $width); $template->parseCurrentBlock(); } $questiontext = $this->object->getQuestion(); $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE)); $questionoutput = $template->get(); $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id, $questionoutput); return $pageoutput; }
function getTestOutput($active_id, $pass = NULL, $is_postponed = FALSE, $user_post_solution = FALSE) { // shuffle output $keys = array(); if (is_array($user_post_solution)) { $keys = $_SESSION["ordering_keys"]; } else { $keys = array_keys($this->object->answers); shuffle($keys); } $_SESSION["ordering_keys"] = $keys; // generate the question output include_once "./Services/UICore/classes/class.ilTemplate.php"; $template = new ilTemplate("tpl.il_as_qpl_ordering_output.html", TRUE, TRUE, "Modules/TestQuestionPool"); if ($this->object->getOutputType() == OUTPUT_JAVASCRIPT) { // BEGIN: add javascript code for javascript enabled ordering questions $this->tpl->addBlockFile("CONTENT_BLOCK", "head_content", "tpl.il_as_qpl_ordering_output_javascript.html", "Modules/TestQuestionPool"); $this->tpl->setCurrentBlock("head_content"); $this->tpl->setVariable("JS_LOCATION", "./Modules/TestQuestionPool/js/toolman/"); $this->tpl->parseCurrentBlock(); // END: add javascript code for javascript enabled ordering questions // BEGIN: add additional stylesheet for javascript enabled ordering questions $this->tpl->setCurrentBlock("AdditionalStyle"); $this->tpl->setVariable("LOCATION_ADDITIONAL_STYLESHEET", ilUtil::getStyleSheetLocation("output", "test_javascript.css", "Modules/TestQuestionPool")); $this->tpl->parseCurrentBlock(); // END: add additional stylesheet for javascript enabled ordering questions // BEGIN: onsubmit form action for javascript enabled ordering questions $this->tpl->setVariable("ON_SUBMIT", "return saveOrder('orderlist');"); // END: onsubmit form action for javascript enabled ordering questions } // get the solution of the user for the active pass or from the last pass if allowed if ($active_id) { $solutions = NULL; include_once "./Modules/Test/classes/class.ilObjTest.php"; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } if (is_array($user_post_solution)) { $solutions = array(); foreach ($user_post_solution as $key => $value) { if (preg_match("/order_(\\d+)/", $key, $matches)) { foreach ($this->object->getAnswers() as $answeridx => $answer) { if ($answer->getRandomID() == $matches[1]) { array_push($solutions, array("value1" => $answeridx, "value2" => $value)); } } } } } else { $solutions =& $this->object->getSolutionValues($active_id, $pass); } if ($this->object->getOutputType() == OUTPUT_JAVASCRIPT) { $solution_script .= ""; $jssolutions = array(); foreach ($solutions as $idx => $solution_value) { if (strcmp($solution_value["value2"], "") != 0 && strcmp($solution_value["value1"], "") != 0) { $jssolutions[$solution_value["value2"]] = $solution_value["value1"]; } } if (count($jssolutions)) { ksort($jssolutions); $js = ""; foreach ($jssolutions as $key => $value) { if (is_object($this->object->getAnswer($value))) { $js .= "initialorder.push('id_" . $this->object->getAnswer($value)->getRandomID() . "');"; } } $js .= "restoreInitialOrder();"; } if (strlen($js)) { $template->setCurrentBlock("javascript_restore_order"); $template->setVariable("RESTORE_ORDER", $js); $template->parseCurrentBlock(); } } } if ($this->object->getOutputType() != OUTPUT_JAVASCRIPT) { foreach ($keys as $idx) { $answer = $this->object->answers[$idx]; if ($this->object->getOrderingType() == OQ_PICTURES) { $template->setCurrentBlock("ordering_row_standard_pictures"); $template->setVariable("PICTURE_HREF", $this->object->getImagePathWeb() . $answer->getAnswertext()); $thumbweb = $this->object->getImagePathWeb() . $this->object->getThumbPrefix() . $answer->getAnswertext(); $thumb = $this->object->getImagePath() . $this->object->getThumbPrefix() . $answer->getAnswertext(); if (!@file_exists($thumb)) { $this->object->rebuildThumbnails(); } $template->setVariable("THUMB_HREF", $thumbweb); $template->setVariable("THUMB_ALT", $this->lng->txt("thumbnail")); $template->setVariable("THUMB_TITLE", $this->lng->txt("enlarge")); $template->setVariable("ANSWER_ID", $answer->getRandomID()); $template->parseCurrentBlock(); } else { $template->setCurrentBlock("ordering_row_standard_text"); $template->setVariable("ANSWER_TEXT", $this->object->prepareTextareaOutput($answer->getAnswertext(), TRUE)); $template->setVariable("ANSWER_ID", $answer->getRandomID()); $template->parseCurrentBlock(); } $template->setCurrentBlock("ordering_row_standard"); $template->setVariable("ANSWER_ID", $answer->getRandomID()); if (is_array($solutions)) { foreach ($solutions as $solution) { if ($solution["value1"] == $idx && strlen($solution["value2"])) { $template->setVariable("ANSWER_ORDER", " value=\"" . $solution["value2"] . "\""); } } } $template->parseCurrentBlock(); } } else { foreach ($keys as $idx) { $answer = $this->object->answers[$idx]; if ($this->object->getOrderingType() == OQ_PICTURES) { $template->setCurrentBlock("ordering_row_javascript_pictures"); $template->setVariable("PICTURE_HREF", $this->object->getImagePathWeb() . $answer->getAnswertext()); $thumbweb = $this->object->getImagePathWeb() . $this->object->getThumbPrefix() . $answer->getAnswertext(); $thumb = $this->object->getImagePath() . $this->object->getThumbPrefix() . $answer->getAnswertext(); if (!@file_exists($thumb)) { $this->object->rebuildThumbnails(); } $template->setVariable("THUMB_HREF", $thumbweb); $template->setVariable("THUMB_ALT", $this->lng->txt("thumbnail")); $template->setVariable("THUMB_TITLE", $this->lng->txt("thumbnail")); $template->setVariable("ENLARGE_HREF", ilUtil::getImagePath("enlarge.png", FALSE)); $template->setVariable("ENLARGE_ALT", $this->lng->txt("enlarge")); $template->setVariable("ENLARGE_TITLE", $this->lng->txt("enlarge")); $template->setVariable("ANSWER_ID", $answer->getRandomID()); $template->parseCurrentBlock(); } else { $template->setCurrentBlock("ordering_row_javascript_text"); $template->setVariable("ANSWER_TEXT", $this->object->prepareTextareaOutput($answer->getAnswertext(), TRUE)); $template->setVariable("ANSWER_ID", $answer->getRandomID()); $template->parseCurrentBlock(); } } $template->setCurrentBlock("ordering_with_javascript"); if ($this->object->getOrderingType() == OQ_PICTURES) { $template->setVariable("RESET_POSITIONS", $this->lng->txt("reset_pictures")); } else { $template->setVariable("RESET_POSITIONS", $this->lng->txt("reset_definitions")); } $template->parseCurrentBlock(); } $questiontext = $this->object->getQuestion(); $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE)); $questionoutput = $template->get(); $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id, $questionoutput); return $pageoutput; }
function getTestOutput($active_id, $pass = NULL, $is_postponed = FALSE, $use_post_solutions = FALSE, $show_feedback = FALSE) { // get the solution of the user for the active pass or from the last pass if allowed $user_solution = array(); if ($active_id) { include_once "./Modules/Test/classes/class.ilObjTest.php"; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } $user_solution =& $this->object->getSolutionValues($active_id, $pass); if (!is_array($user_solution)) { $user_solution = array(); } } // generate the question output include_once "./Services/UICore/classes/class.ilTemplate.php"; $template = new ilTemplate("tpl.il_as_qpl_cloze_question_output.html", TRUE, TRUE, "Modules/TestQuestionPool"); $output = $this->object->getClozeText(); foreach ($this->object->getGaps() as $gap_index => $gap) { switch ($gap->getType()) { case CLOZE_TEXT: $gaptemplate = new ilTemplate("tpl.il_as_qpl_cloze_question_gap_text.html", TRUE, TRUE, "Modules/TestQuestionPool"); $gaptemplate->setVariable("TEXT_GAP_SIZE", $this->object->getFixedTextLength() ? $this->object->getFixedTextLength() : $gap->getMaxWidth()); $gaptemplate->setVariable("GAP_COUNTER", $gap_index); foreach ($user_solution as $solution) { if (strcmp($solution["value1"], $gap_index) == 0) { $gaptemplate->setVariable("VALUE_GAP", " value=\"" . ilUtil::prepareFormOutput($solution["value2"]) . "\""); } } $output = preg_replace("/\\[gap\\].*?\\[\\/gap\\]/", $gaptemplate->get(), $output, 1); break; case CLOZE_SELECT: $gaptemplate = new ilTemplate("tpl.il_as_qpl_cloze_question_gap_select.html", TRUE, TRUE, "Modules/TestQuestionPool"); foreach ($gap->getItems() as $item) { $gaptemplate->setCurrentBlock("select_gap_option"); $gaptemplate->setVariable("SELECT_GAP_VALUE", $item->getOrder()); $gaptemplate->setVariable("SELECT_GAP_TEXT", ilUtil::prepareFormOutput($item->getAnswerText())); foreach ($user_solution as $solution) { if (strcmp($solution["value1"], $gap_index) == 0) { if (strcmp($solution["value2"], $item->getOrder()) == 0) { $gaptemplate->setVariable("SELECT_GAP_SELECTED", " selected=\"selected\""); } } } $gaptemplate->parseCurrentBlock(); } $gaptemplate->setVariable("PLEASE_SELECT", $this->lng->txt("please_select")); $gaptemplate->setVariable("GAP_COUNTER", $gap_index); $output = preg_replace("/\\[gap\\].*?\\[\\/gap\\]/", $gaptemplate->get(), $output, 1); break; case CLOZE_NUMERIC: $gaptemplate = new ilTemplate("tpl.il_as_qpl_cloze_question_gap_numeric.html", TRUE, TRUE, "Modules/TestQuestionPool"); $gaptemplate->setVariable("TEXT_GAP_SIZE", $this->object->getFixedTextLength() ? $this->object->getFixedTextLength() : $gap->getMaxWidth()); $gaptemplate->setVariable("GAP_COUNTER", $gap_index); foreach ($user_solution as $solution) { if (strcmp($solution["value1"], $gap_index) == 0) { $gaptemplate->setVariable("VALUE_GAP", " value=\"" . ilUtil::prepareFormOutput($solution["value2"]) . "\""); } } $output = preg_replace("/\\[gap\\].*?\\[\\/gap\\]/", $gaptemplate->get(), $output, 1); break; } } $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($output, TRUE)); $questionoutput = $template->get(); $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id, $questionoutput); return $pageoutput; }
function getTestOutput($active_id, $pass = NULL, $is_postponed = FALSE, $use_post_solutions = FALSE, $show_feedback = FALSE) { // generate the question output $template = new ilTemplate("tpl.il_as_qpl_errortext_output.html", TRUE, TRUE, "Modules/TestQuestionPool"); if ($active_id) { $solutions = NULL; include_once "./Modules/Test/classes/class.ilObjTest.php"; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } $solutions =& $this->object->getSolutionValues($active_id, $pass); } $errortext_value = ""; $selections = array(); if (is_array($solutions)) { foreach ($solutions as $solution) { array_push($selections, $solution['value1']); } $errortext_value = join(",", $selections); } if ($this->object->getTextSize() >= 10) { $template->setVariable("STYLE", " style=\"font-size: " . $this->object->getTextSize() . "%;\""); } $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($this->object->getQuestion(), TRUE)); $errortext = $this->object->createErrorTextOutput($selections); $this->ctrl->setParameterByClass($this->getTargetGuiClass(), 'errorvalue', ''); $template->setVariable("ERRORTEXT", $errortext); $template->setVariable("ERRORTEXT_ID", "qst_" . $this->object->getId()); $template->setVariable("ERRORTEXT_VALUE", $errortext_value); $questionoutput = $template->get(); if (!$show_question_only) { // get page object output $questionoutput = $this->getILIASPage($questionoutput); } $this->tpl->addJavascript("./Modules/TestQuestionPool/templates/default/errortext.js"); $questionoutput = $template->get(); $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id, $questionoutput); return $pageoutput; }
function getTestOutput($active_id, $pass = NULL, $is_postponed = FALSE, $use_post_solutions = FALSE) { // get the solution of the user for the active pass or from the last pass if allowed $user_solution = ""; if ($active_id) { $solutions = NULL; include_once "./Modules/Test/classes/class.ilObjTest.php"; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } $solutions =& $this->object->getSolutionValues($active_id, $pass); foreach ($solutions as $idx => $solution_value) { $user_solution = $solution_value["value1"]; } } // generate the question output include_once "./Services/UICore/classes/class.ilTemplate.php"; $template = new ilTemplate("tpl.il_as_qpl_text_question_output.html", TRUE, TRUE, "Modules/TestQuestionPool"); if ($this->object->getMaxNumOfChars()) { $template->setCurrentBlock("maximum_char_hint"); $template->setVariable("MAXIMUM_CHAR_HINT", sprintf($this->lng->txt("text_maximum_chars_allowed"), $this->object->getMaxNumOfChars())); $template->parseCurrentBlock(); #mbecker: No such block. $template->setCurrentBlock("has_maxchars"); $template->setVariable("MAXCHARS", $this->object->getMaxNumOfChars()); $template->parseCurrentBlock(); $template->setCurrentBlock("maxchars_counter"); $template->setVariable("MAXCHARS", $this->object->getMaxNumOfChars()); $template->setVariable("TEXTBOXSIZE", strlen($this->object->getMaxNumOfChars())); $template->setVariable("CHARACTERS", $this->lng->txt("characters")); $template->parseCurrentBlock(); } $template->setVariable("ESSAY", ilUtil::prepareFormOutput($user_solution)); $questiontext = $this->object->getQuestion(); $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE)); $questionoutput = $template->get(); $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id, $questionoutput); include_once "./Services/YUI/classes/class.ilYuiUtil.php"; ilYuiUtil::initDomEvent(); return $pageoutput; }
/** * @param integer $active_id * @param integer|null $pass * @param bool $is_postponed * @param bool $use_post_solutions * * @return string */ public function getTestOutput($active_id, $pass = NULL, $is_postponed = FALSE, $use_post_solutions = FALSE) { $solutions = NULL; // get the solution of the user for the active pass or from the last pass if allowed if ($active_id) { require_once './Modules/Test/classes/class.ilObjTest.php'; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } $solutions =& $this->object->getSolutionValues($active_id, $pass); } // generate the question output require_once './Services/UICore/classes/class.ilTemplate.php'; $template = new ilTemplate("tpl.il_as_qpl_numeric_output.html", TRUE, TRUE, "Modules/TestQuestionPool"); if (is_array($solutions)) { foreach ($solutions as $solution) { $template->setVariable("NUMERIC_VALUE", " value=\"" . $solution["value1"] . "\""); } } $template->setVariable("NUMERIC_SIZE", $this->object->getMaxChars()); $questiontext = $this->object->getQuestion(); $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE)); $questionoutput = $template->get(); $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id, $questionoutput); return $pageoutput; }
function getTestOutput($active_id, $pass = NULL, $is_postponed = FALSE, $user_post_solution = FALSE) { global $tpl; $tpl->addCss(ilUtil::getStyleSheetLocation("output", "test_javascript.css", "Modules/TestQuestionPool")); // generate the question output include_once "./Services/UICore/classes/class.ilTemplate.php"; $template = new ilTemplate("tpl.il_as_qpl_ordering_output.html", TRUE, TRUE, "Modules/TestQuestionPool"); $this->object->setOutputType(OUTPUT_JAVASCRIPT); // shuffle output $keys = array(); if (is_array($user_post_solution)) { $keys = $_SESSION["ordering_keys"]; } else { $keys = array_keys($this->object->answers); shuffle($keys); } $_SESSION["ordering_keys"] = $keys; if ($this->object->getOrderingType() == OQ_NESTED_TERMS || $this->object->getOrderingType() == OQ_NESTED_PICTURES) { include_once 'Services/Form/classes/class.ilPropertyFormGUI.php'; include_once 'Modules/TestQuestionPool/classes/class.ilNestedOrderingGUI.php'; $answerGUI = new ilNestedOrderingGUI($this->lng->txt("answers"), "answers"); $answerGUI->setInstanceId('participant'); $answerGUI->setOrderingType($this->object->getOrderingType()); $answerMap = $this->getRandomIdToAnswerMap(); $answerArray = array(); $shuffleAnswers = false; if (is_array($user_post_solution) && isset($user_post_solution['answers_ordering__participant'])) { $answers_ordering = $_POST['answers_ordering__participant']; $user_solution_hierarchy = json_decode($answers_ordering); $with_random_id = true; $this->object->setLeveledOrdering($user_solution_hierarchy, $with_random_id); foreach ($this->object->leveled_ordering as $randomId => $depth) { $answ = new ASS_AnswerOrdering($answerMap[$randomId]->getAnswertext(), $randomId, $depth); $answerArray[] = $answ; } } else { include_once "./Modules/Test/classes/class.ilObjTest.php"; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } $solutions =& $this->object->getSolutionValues($active_id, $pass); if (count($solutions)) { foreach ($solutions as $solution) { list($randomId, $depth) = explode(':', $solution['value2']); $answ = new ASS_AnswerOrdering($answerMap[$randomId]->getAnswertext(), $randomId, $depth); $answerArray[] = $answ; } } else { $answerArray = $this->object->answers; $shuffleAnswers = true; } } $answerGUI->setObjAnswersArray($answerArray, $shuffleAnswers); if ($this->object->getOrderingType() == OQ_NESTED_PICTURES) { $answerGUI->setImagePath($this->object->getImagePath()); $answerGUI->setImagePathWeb($this->object->getImagePathWeb()); $answerGUI->setThumbPrefix($this->object->getThumbPrefix()); } $template->setCurrentBlock('nested_ordering_output'); $template->setVariable('NESTED_ORDERING', $answerGUI->getHtml($shuffleAnswers)); $template->parseCurrentBlock(); $questiontext = $this->object->getQuestion(); $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE)); $questionoutput = $template->get(); $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id, $questionoutput); return $pageoutput; } else { $this->tpl->addJavascript("./Modules/TestQuestionPool/templates/default/ordering.js"); // BEGIN: onsubmit form action for javascript enabled ordering questions $this->tpl->setVariable("ON_SUBMIT", "return \$('div.ilVerticalOrderingQuestion').ilOrderingQuestion('saveOrder');"); // END: onsubmit form action for javascript enabled ordering questions // get the solution of the user for the active pass or from the last pass if allowed if ($active_id) { $solutions = NULL; include_once "./Modules/Test/classes/class.ilObjTest.php"; if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) { if (is_null($pass)) { $pass = ilObjTest::_getPass($active_id); } } if (is_array($user_post_solution)) { $solutions = array(); foreach ($user_post_solution as $key => $value) { if (preg_match("/order_(\\d+)/", $key, $matches)) { foreach ($this->object->getAnswers() as $answeridx => $answer) { if ($answer->getRandomID() == $matches[1]) { array_push($solutions, array("value1" => $answeridx, "value2" => $value)); } } } } } else { $solutions =& $this->object->getSolutionValues($active_id, $pass); } $jssolutions = array(); foreach ($solutions as $idx => $solution_value) { if (strcmp($solution_value["value2"], "") != 0 && strcmp($solution_value["value1"], "") != 0) { $jssolutions[$solution_value["value2"]] = $solution_value["value1"]; } } if (count($jssolutions)) { ksort($jssolutions); $initial_order = array(); foreach ($jssolutions as $key => $value) { if (is_object($this->object->getAnswer($value))) { $initial_order[] = 'id_' . $this->object->getAnswer($value)->getRandomID(); } } $template->setVariable('INITIAL_ORDER', json_encode($initial_order)); } else { $template->setVariable('INITIAL_ORDER', json_encode(array())); } } foreach ($keys as $idx) { $answer = $this->object->answers[$idx]; if ($this->object->getOrderingType() == OQ_PICTURES) { $template->setCurrentBlock("ordering_row_javascript_pictures"); $template->setVariable("PICTURE_HREF", $this->object->getImagePathWeb() . $answer->getAnswertext()); $thumbweb = $this->object->getImagePathWeb() . $this->object->getThumbPrefix() . $answer->getAnswertext(); $thumb = $this->object->getImagePath() . $this->object->getThumbPrefix() . $answer->getAnswertext(); if (!@file_exists($thumb)) { $this->object->rebuildThumbnails(); } $template->setVariable("THUMB_HREF", $thumbweb); $template->setVariable("THUMB_ALT", $this->lng->txt("thumbnail")); $template->setVariable("THUMB_TITLE", $this->lng->txt("thumbnail")); $template->setVariable("ENLARGE_HREF", ilUtil::getImagePath("enlarge.svg", FALSE)); $template->setVariable("ENLARGE_ALT", $this->lng->txt("enlarge")); $template->setVariable("ENLARGE_TITLE", $this->lng->txt("enlarge")); $template->setVariable("ANSWER_ID", $answer->getRandomID()); $template->parseCurrentBlock(); } else { $template->setCurrentBlock("ordering_row_javascript_text"); $template->setVariable("ANSWER_TEXT", $this->object->prepareTextareaOutput($answer->getAnswertext(), TRUE)); $template->setVariable("ANSWER_ID", $answer->getRandomID()); $template->parseCurrentBlock(); } } if ($this->object->getOrderingType() == OQ_PICTURES) { $template->setVariable("RESET_POSITIONS", $this->lng->txt("reset_pictures")); } else { $template->setVariable("RESET_POSITIONS", $this->lng->txt("reset_definitions")); } $questiontext = $this->object->getQuestion(); $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE)); $template->setVariable("QUESTION_ID", $this->object->getId()); $questionoutput = $template->get(); $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id, $questionoutput); $this->tpl->addJavascript("./Modules/TestQuestionPool/templates/default/ordering.js"); return $pageoutput; } }