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
00039 class assNumericGUI extends assQuestionGUI
00040 {
00049 function assNumericGUI(
00050 $id = -1
00051 )
00052 {
00053 $this->assQuestionGUI();
00054 include_once "./assessment/classes/class.assNumeric.php";
00055 $this->object = new assNumeric();
00056 if ($id >= 0)
00057 {
00058 $this->object->loadFromDb($id);
00059 }
00060 }
00061
00062 function getCommand($cmd)
00063 {
00064 if (substr($cmd, 0, 6) == "delete")
00065 {
00066 $cmd = "delete";
00067 }
00068
00069 return $cmd;
00070 }
00071
00072
00080 function editQuestion()
00081 {
00082 $javascript = "<script type=\"text/javascript\">function initialSelect() {\n%s\n}</script>";
00083 $this->getQuestionTemplate();
00084 $this->tpl->addBlockFile("QUESTION_DATA", "question_data", "tpl.il_as_qpl_numeric.html", true);
00085
00086 $this->outOtherQuestionData();
00087
00088 $internallinks = array(
00089 "lm" => $this->lng->txt("obj_lm"),
00090 "st" => $this->lng->txt("obj_st"),
00091 "pg" => $this->lng->txt("obj_pg"),
00092 "glo" => $this->lng->txt("glossary_term")
00093 );
00094 foreach ($internallinks as $key => $value)
00095 {
00096 $this->tpl->setCurrentBlock("internallink");
00097 $this->tpl->setVariable("TYPE_INTERNAL_LINK", $key);
00098 $this->tpl->setVariable("TEXT_INTERNAL_LINK", $value);
00099 $this->tpl->parseCurrentBlock();
00100 }
00101
00102 if ($this->object->getRangeCount() == 0)
00103 {
00104 $this->object->addRange(0.0, 0.0, 0);
00105 }
00106
00107 $counter = 0;
00108 foreach ($this->object->ranges as $range)
00109 {
00110 $this->tpl->setCurrentBlock("ranges");
00111 $this->tpl->setVariable("COUNTER", $counter);
00112 $this->tpl->setVariable("TEXT_RANGE", $this->lng->txt("range"));
00113 if (strlen($range->getPoints())) $this->tpl->setVariable("VALUE_POINTS", " value=\"" . $range->getPoints() . "\"");
00114 if (strlen($range->getLowerLimit())) $this->tpl->setVariable("VALUE_LOWER_LIMIT", " value=\"" . $range->getLowerLimit() . "\"");
00115 if (strlen($range->getUpperLimit())) $this->tpl->setVariable("VALUE_UPPER_LIMIT", " value=\"" . $range->getUpperLimit() . "\"");
00116 $this->tpl->setVariable("TEXT_RANGE_LOWER_LIMIT", $this->lng->txt("range_lower_limit"));
00117 $this->tpl->setVariable("TEXT_RANGE_UPPER_LIMIT", $this->lng->txt("range_upper_limit"));
00118 $this->tpl->setVariable("TEXT_POINTS", $this->lng->txt("points"));
00119 $this->tpl->parseCurrentBlock();
00120 $counter++;
00121 }
00122
00123 $this->tpl->setCurrentBlock("question_data");
00124 $this->tpl->setVariable("NUMERIC_ID", $this->object->getId());
00125 $this->tpl->setVariable("VALUE_NUMERIC_TITLE", ilUtil::prepareFormOutput($this->object->getTitle()));
00126 $this->tpl->setVariable("VALUE_NUMERIC_COMMENT", ilUtil::prepareFormOutput($this->object->getComment()));
00127 $this->tpl->setVariable("VALUE_NUMERIC_AUTHOR", ilUtil::prepareFormOutput($this->object->getAuthor()));
00128 $questiontext = $this->object->getQuestion();
00129 $this->tpl->setVariable("VALUE_QUESTION", ilUtil::prepareFormOutput($this->object->prepareTextareaOutput($questiontext)));
00130 $this->tpl->setVariable("TEXT_TITLE", $this->lng->txt("title"));
00131 $this->tpl->setVariable("TEXT_AUTHOR", $this->lng->txt("author"));
00132 $this->tpl->setVariable("TEXT_COMMENT", $this->lng->txt("description"));
00133 $this->tpl->setVariable("TEXT_QUESTION", $this->lng->txt("question"));
00134 $this->tpl->setVariable("TEXT_SOLUTION_HINT", $this->lng->txt("solution_hint"));
00135 $this->tpl->setVariable("TEXT_MAXCHARS", $this->lng->txt("maxchars"));
00136 $this->tpl->setVariable("VALUE_MAXCHARS", $this->object->getMaxChars());
00137 if (count($this->object->suggested_solutions))
00138 {
00139 $solution_array = $this->object->getSuggestedSolution(0);
00140 include_once "./assessment/classes/class.assQuestion.php";
00141 $href = assQuestion::_getInternalLinkHref($solution_array["internal_link"]);
00142 $this->tpl->setVariable("TEXT_VALUE_SOLUTION_HINT", " <a href=\"$href\" target=\"content\">" . $this->lng->txt("solution_hint"). "</a> ");
00143 $this->tpl->setVariable("BUTTON_REMOVE_SOLUTION", $this->lng->txt("remove"));
00144 $this->tpl->setVariable("BUTTON_ADD_SOLUTION", $this->lng->txt("change"));
00145 $this->tpl->setVariable("VALUE_SOLUTION_HINT", $solution_array["internal_link"]);
00146 }
00147 else
00148 {
00149 $this->tpl->setVariable("BUTTON_ADD_SOLUTION", $this->lng->txt("add"));
00150 }
00151 $this->tpl->setVariable("SAVE",$this->lng->txt("save"));
00152 $this->tpl->setVariable("SAVE_EDIT", $this->lng->txt("save_edit"));
00153 $this->tpl->setVariable("CANCEL",$this->lng->txt("cancel"));
00154 $this->tpl->setVariable("TXT_REQUIRED_FLD", $this->lng->txt("required_field"));
00155 $this->ctrl->setParameter($this, "sel_question_types", "assNumeric");
00156 $this->tpl->setVariable("FORMACTION", $this->ctrl->getFormAction($this));
00157 $this->tpl->setVariable("TEXT_QUESTION_TYPE", $this->lng->txt("assNumeric"));
00158 include_once "./Services/RTE/classes/class.ilRTE.php";
00159 $rtestring = ilRTE::_getRTEClassname();
00160 include_once "./Services/RTE/classes/class.$rtestring.php";
00161 $rte = new $rtestring();
00162 $rte->addPlugin("latex");
00163 $rte->addButton("latex");
00164 include_once "./classes/class.ilObject.php";
00165 $obj_id = $_GET["q_id"];
00166 $obj_type = ilObject::_lookupType($_GET["ref_id"], TRUE);
00167 $rte->addRTESupport($obj_id, $obj_type, "assessment");
00168
00169 $this->tpl->parseCurrentBlock();
00170 $this->tpl->setCurrentBlock("adm_content");
00171
00172 $this->tpl->parseCurrentBlock();
00173 }
00174
00178 function checkInput()
00179 {
00180 $cmd = $this->ctrl->getCmd();
00181
00182 if ((!$_POST["title"]) or (!$_POST["author"]) or (!$_POST["question"]))
00183 {
00184
00185 return false;
00186 }
00187 foreach ($_POST as $key => $value)
00188 {
00189 if (preg_match("/range_(\d+)/", $key, $matches))
00190 {
00191 if (!$value)
00192 {
00193
00194 return false;
00195 }
00196 }
00197 }
00198
00199 return true;
00200 }
00201
00211 function checkRange()
00212 {
00213 if (is_numeric($_POST["rang_lower_limit"]) AND is_numeric ($_POST ["range_upper_limit"]))
00214 {
00215 if ($_POST ["rang_lower_limit"] < $_POST ["range_upper_limit"])
00216 {
00217 return true;
00218 }
00219 else
00220 {
00221 return false;
00222 }
00223 }
00224 else
00225 {
00226 return false;
00227 }
00228 }
00229
00238 function writePostData()
00239 {
00240 $saved = false;
00241 $result = 0;
00242 if ((!$_POST["title"]) or (!$_POST["author"]) or (!$_POST["question"]) or (!$_POST["maxchars"]))
00243 {
00244 $result = 1;
00245 }
00246
00247 $this->object->setTitle(ilUtil::stripSlashes($_POST["title"]));
00248 $this->object->setAuthor(ilUtil::stripSlashes($_POST["author"]));
00249 $this->object->setComment(ilUtil::stripSlashes($_POST["comment"]));
00250 include_once "./classes/class.ilObjAdvancedEditing.php";
00251 $questiontext = ilUtil::stripSlashes($_POST["question"], false, ilObjAdvancedEditing::_getUsedHTMLTagsAsString("assessment"));
00252 $questiontext = preg_replace("/[\n\r]+/", "<br />", $questiontext);
00253 $this->object->setQuestion($questiontext);
00254 $this->object->setSuggestedSolution($_POST["solution_hint"], 0);
00255 $this->object->setShuffle($_POST["shuffle"]);
00256 $this->object->setMaxChars($_POST["maxchars"]);
00257
00258
00259 $saved = $saved | $this->writeOtherPostData($result);
00260
00261
00262 $this->object->flushRanges();
00263
00264
00265
00266
00267 foreach ($_POST as $key => $value)
00268 {
00269 if (preg_match("/lowerlimit_(\d+)/", $key, $matches))
00270 {
00271 $points = $_POST["points_$matches[1]"];
00272 if ($points < 0)
00273 {
00274 $result = 1;
00275 $this->setErrorMessage($this->lng->txt("negative_points_not_allowed"));
00276 }
00277 $lowerlimit = str_replace(",", ".", $_POST["lowerlimit_".$matches[1]]);
00278 if (strlen($lowerlimit) == 0) $lowerlimit = 0.0;
00279 if (!is_numeric($lowerlimit))
00280 {
00281 $this->setErrorMessage($this->lng->txt("value_is_not_a_numeric_value"));
00282 $result = 1;
00283 }
00284 $upperlimit = str_replace(",", ".", $_POST["upperlimit_".$matches[1]]);
00285 if (strlen($upperlimit) == 0) $upperlimit = 0.0;
00286 if (!is_numeric($upperlimit))
00287 {
00288 $this->setErrorMessage($this->lng->txt("value_is_not_a_numeric_value"));
00289 $result = 1;
00290 }
00291 $this->object->addRange(
00292 $lowerlimit,
00293 $upperlimit,
00294 $points,
00295 $matches[1]
00296 );
00297 }
00298 }
00299
00300 if ($saved)
00301 {
00302
00303
00304
00305
00306 $this->object->saveToDb();
00307 $_GET["q_id"] = $this->object->getId();
00308 }
00309
00310 return $result;
00311 }
00312
00313 function outQuestionForTest($formaction, $active_id, $pass = NULL, $is_postponed = FALSE, $use_post_solutions = FALSE)
00314 {
00315 $test_output = $this->getTestOutput($active_id, $pass, $is_postponed, $use_post_solutions);
00316 $this->tpl->setVariable("QUESTION_OUTPUT", $test_output);
00317 $this->tpl->setVariable("FORMACTION", $formaction);
00318 }
00319
00320 function getSolutionOutput($active_id, $pass = NULL, $graphicalOutput = FALSE, $result_output = FALSE, $show_question_only = TRUE)
00321 {
00322
00323 $solutions = array();
00324 if ($active_id)
00325 {
00326 $solutions =& $this->object->getSolutionValues($active_id, $pass);
00327 }
00328 else
00329 {
00330 foreach ($this->object->ranges as $key => $range)
00331 {
00332 array_push($solutions, array("value1" => sprintf($this->lng->txt("value_between_x_and_y"), $range->getLowerLimit(), $range->getUpperLimit())));
00333 }
00334 }
00335
00336
00337 include_once "./classes/class.ilTemplate.php";
00338 $template = new ilTemplate("tpl.il_as_qpl_numeric_output_solution.html", TRUE, TRUE, TRUE);
00339 $solutiontemplate = new ilTemplate("tpl.il_as_tst_solution_output.html", TRUE, TRUE, TRUE);
00340 if (is_array($solutions))
00341 {
00342 if ($active_id)
00343 {
00344 if ($graphicalOutput)
00345 {
00346
00347 if ($this->object->getReachedPoints($active_id) == $this->object->getMaximumPoints())
00348 {
00349 $template->setCurrentBlock("icon_ok");
00350 $template->setVariable("ICON_OK", ilUtil::getImagePath("icon_ok.gif"));
00351 $template->setVariable("TEXT_OK", $this->lng->txt("answer_is_right"));
00352 $template->parseCurrentBlock();
00353 }
00354 else
00355 {
00356 $template->setCurrentBlock("icon_ok");
00357 $template->setVariable("ICON_NOT_OK", ilUtil::getImagePath("icon_not_ok.gif"));
00358 $template->setVariable("TEXT_NOT_OK", $this->lng->txt("answer_is_wrong"));
00359 $template->parseCurrentBlock();
00360 }
00361 }
00362 }
00363 foreach ($solutions as $solution)
00364 {
00365 $template->setVariable("NUMERIC_VALUE", $solution["value1"]);
00366 }
00367 if (count($solutions) == 0)
00368 {
00369 $template->setVariable("NUMERIC_VALUE", " ");
00370 }
00371 }
00372 $template->setVariable("NUMERIC_SIZE", $this->object->getMaxChars());
00373 $questiontext = $this->object->getQuestion();
00374 $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE));
00375 $questionoutput = $template->get();
00376 $solutiontemplate->setVariable("SOLUTION_OUTPUT", $questionoutput);
00377
00378 $solutionoutput = $solutiontemplate->get();
00379 if (!$show_question_only)
00380 {
00381
00382 $pageoutput = $this->getILIASPage();
00383 $solutionoutput = preg_replace("/(<div( xmlns:xhtml\=\"http:\/\/www.w3.org\/1999\/xhtml\"){0,1} class\=\"ilc_Question\"><\/div>)/ims", $solutionoutput, $pageoutput);
00384 }
00385 return $solutionoutput;
00386 }
00387
00388 function getPreview()
00389 {
00390
00391 include_once "./classes/class.ilTemplate.php";
00392 $template = new ilTemplate("tpl.il_as_qpl_numeric_output.html", TRUE, TRUE, TRUE);
00393 $template->setVariable("NUMERIC_SIZE", $this->object->getMaxChars());
00394 $questiontext = $this->object->getQuestion();
00395 $questiontext = $this->object->getQuestion();
00396 $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE));
00397 $questionoutput = $template->get();
00398 $questionoutput = preg_replace("/<div[^>]*?>(.*)<\/div>/is", "\\1", $questionoutput);
00399 return $questionoutput;
00400 }
00401
00402 function getTestOutput($active_id, $pass = NULL, $is_postponed = FALSE, $use_post_solutions = FALSE)
00403 {
00404
00405 $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id);
00406
00407
00408 if ($active_id)
00409 {
00410 $solutions = NULL;
00411 include_once "./assessment/classes/class.ilObjTest.php";
00412 if (ilObjTest::_getHidePreviousResults($active_id, true))
00413 {
00414 if (is_null($pass)) $pass = ilObjTest::_getPass($active_id);
00415 }
00416 $solutions =& $this->object->getSolutionValues($active_id, $pass);
00417 }
00418
00419
00420 include_once "./classes/class.ilTemplate.php";
00421 $template = new ilTemplate("tpl.il_as_qpl_numeric_output.html", TRUE, TRUE, TRUE);
00422 if (is_array($solutions))
00423 {
00424 foreach ($solutions as $solution)
00425 {
00426 $template->setVariable("NUMERIC_VALUE", " value=\"".$solution["value1"]."\"");
00427 }
00428 }
00429 $template->setVariable("NUMERIC_SIZE", $this->object->getMaxChars());
00430 $questiontext = $this->object->getQuestion();
00431 $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE));
00432 $questionoutput = $template->get();
00433 $questionoutput = preg_replace("/(<div( xmlns:xhtml\=\"http:\/\/www.w3.org\/1999\/xhtml\"){0,1} class\=\"ilc_Question\"><\/div>)/ims", $questionoutput, $pageoutput);
00434 return $questionoutput;
00435 }
00436
00437 function addSuggestedSolution()
00438 {
00439 $_SESSION["subquestion_index"] = 0;
00440 if ($_POST["cmd"]["addSuggestedSolution"])
00441 {
00442 if ($this->writePostData())
00443 {
00444 sendInfo($this->getErrorMessage());
00445 $this->editQuestion();
00446 return;
00447 }
00448 if (!$this->checkInput())
00449 {
00450 sendInfo($this->lng->txt("fill_out_all_required_fields_add_answer"));
00451 $this->editQuestion();
00452 return;
00453 }
00454 }
00455 $this->object->saveToDb();
00456 $_GET["q_id"] = $this->object->getId();
00457 $this->tpl->setVariable("HEADER", $this->object->getTitle());
00458 $this->getQuestionTemplate();
00459 parent::addSuggestedSolution();
00460 }
00461
00470 function getQuestionType()
00471 {
00472 return "assNumeric";
00473 }
00474 }
00475 ?>