4 require_once
'./Modules/TestQuestionPool/classes/class.assQuestionGUI.php';
5 require_once
'./Modules/TestQuestionPool/interfaces/interface.ilGuiQuestionScoringAdjustable.php';
6 require_once
'./Modules/TestQuestionPool/interfaces/interface.ilGuiAnswerScoringAdjustable.php';
7 require_once
'./Modules/Test/classes/inc.AssessmentConstants.php';
35 require_once
'./Modules/TestQuestionPool/classes/class.assTextSubset.php';
39 $this->
object->loadFromDb($id);
52 $hasErrors = (!$always) ? $this->
editQuestion(
true) :
false;
55 require_once
'Services/Form/classes/class.ilPropertyFormGUI.php';
73 require_once
'./Services/Form/classes/class.ilPropertyFormGUI.php';
75 $form->setFormAction($this->ctrl->getFormAction($this));
77 $form->setMultipart(FALSE);
78 $form->setTableWidth(
"100%");
79 $form->setId(
"asstextsubset");
90 $form->setValuesByPost();
91 $points = $form->getItemByPostVar(
'points');
92 $points->setValue($this->object->getMaximumPoints());
94 $form->setValuesByPost();
95 if (
$errors) $checkonly =
false;
98 if (!$checkonly) $this->tpl->setVariable(
"QUESTION_DATA", $form->getHTML());
108 $position = key(
$_POST[
'cmd'][
'addanswers']);
109 $this->
object->addAnswer(
"", 0, $position+1);
119 $position = key(
$_POST[
'cmd'][
'removeanswers']);
120 $this->
object->deleteAnswer($position);
140 $graphicalOutput = FALSE,
141 $result_output = FALSE,
142 $show_question_only = TRUE,
143 $show_feedback = FALSE,
144 $show_correct_solution = FALSE,
145 $show_manual_scoring = FALSE,
146 $show_question_text = TRUE
150 $solutions = array();
151 if (($active_id > 0) && (!$show_correct_solution))
153 $solutions =& $this->
object->getSolutionValues($active_id,
$pass);
158 foreach ($this->object->answers as $answer)
160 if ($answer->getPoints() > 0)
162 if (!is_array($rank[$answer->getPoints()]))
164 $rank[$answer->getPoints()] = array();
166 array_push($rank[$answer->getPoints()], $answer->getAnswertext());
169 krsort($rank, SORT_NUMERIC);
170 foreach ($rank as $index => $bestsolutions)
172 array_push($solutions, array(
"value1" => join(
",", $bestsolutions),
"points" => $index));
177 include_once
"./Services/UICore/classes/class.ilTemplate.php";
178 $template =
new ilTemplate(
"tpl.il_as_qpl_textsubset_output_solution.html", TRUE, TRUE,
"Modules/TestQuestionPool");
179 $solutiontemplate =
new ilTemplate(
"tpl.il_as_tst_solution_output.html", TRUE, TRUE,
"Modules/TestQuestionPool");
180 $available_answers =& $this->
object->getAvailableAnswers();
181 for ($i = 0; $i < $this->
object->getCorrectAnswers(); $i++)
183 if ((!$test_id) && (strcmp($solutions[$i][
"value1"],
"") == 0))
188 if (($active_id > 0) && (!$show_correct_solution))
190 if ($graphicalOutput)
193 $index = $this->
object->isAnswerCorrect($available_answers, $solutions[$i][
"value1"]);
195 if ($index !== FALSE)
197 unset($available_answers[$index]);
202 $template->setCurrentBlock(
"icon_ok");
204 $template->setVariable(
"TEXT_OK", $this->lng->txt(
"answer_is_right"));
205 $template->parseCurrentBlock();
209 $template->setCurrentBlock(
"icon_ok");
211 $template->setVariable(
"TEXT_NOT_OK", $this->lng->txt(
"answer_is_wrong"));
212 $template->parseCurrentBlock();
216 $template->setCurrentBlock(
"textsubset_row");
217 $template->setVariable(
"SOLUTION", $solutions[$i][
"value1"]);
218 $template->setVariable(
"COUNTER", $i+1);
221 $points = $solutions[$i][
"points"];
222 $resulttext = ($points == 1) ?
"(%s " . $this->lng->txt(
"point") .
")" :
"(%s " . $this->lng->txt(
"points") .
")";
223 $template->setVariable(
"RESULT_OUTPUT", sprintf($resulttext, $points));
225 $template->parseCurrentBlock();
228 $questiontext = $this->
object->getQuestion();
229 if ($show_question_text==
true)
231 $template->setVariable(
"QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE));
233 $questionoutput = $template->get();
235 if (strlen($feedback)) $solutiontemplate->setVariable(
"FEEDBACK", $this->object->prepareTextareaOutput( $feedback,
true));
236 $solutiontemplate->setVariable(
"SOLUTION_OUTPUT", $questionoutput);
238 $solutionoutput = $solutiontemplate->get();
239 if (!$show_question_only)
244 return $solutionoutput;
247 function getPreview($show_question_only = FALSE, $showInlineFeedback =
false)
251 include_once
"./Services/UICore/classes/class.ilTemplate.php";
252 $template =
new ilTemplate(
"tpl.il_as_qpl_textsubset_output.html", TRUE, TRUE,
"Modules/TestQuestionPool");
253 $width = $this->
object->getMaxTextboxWidth();
254 for ($i = 0; $i < $this->
object->getCorrectAnswers(); $i++)
256 $template->setCurrentBlock(
"textsubset_row");
257 foreach ($solutions as $idx => $solution_value)
261 $template->setVariable(
"TEXTFIELD_VALUE",
" value=\"" . $solution_value.
"\"");
264 $template->setVariable(
"COUNTER", $i+1);
265 $template->setVariable(
"TEXTFIELD_ID", sprintf(
"%02d", $i+1));
266 $template->setVariable(
"TEXTFIELD_SIZE", $width);
267 $template->parseCurrentBlock();
269 $questiontext = $this->
object->getQuestion();
270 $template->setVariable(
"QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE));
271 $questionoutput = $template->get();
272 if (!$show_question_only)
277 return $questionoutput;
287 include_once
"./Modules/Test/classes/class.ilObjTest.php";
292 $solutions =& $this->
object->getSolutionValues($active_id,
$pass);
296 include_once
"./Services/UICore/classes/class.ilTemplate.php";
297 $template =
new ilTemplate(
"tpl.il_as_qpl_textsubset_output.html", TRUE, TRUE,
"Modules/TestQuestionPool");
298 $width = $this->
object->getMaxTextboxWidth();
299 for ($i = 0; $i < $this->
object->getCorrectAnswers(); $i++)
301 $template->setCurrentBlock(
"textsubset_row");
302 foreach ($solutions as $idx => $solution_value)
309 $template->setVariable(
"COUNTER", $i+1);
310 $template->setVariable(
"TEXTFIELD_ID", sprintf(
"%02d", $i+1));
311 $template->setVariable(
"TEXTFIELD_SIZE", $width);
312 $template->parseCurrentBlock();
314 $questiontext = $this->
object->getQuestion();
315 $template->setVariable(
"QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE));
316 $questionoutput = $template->get();
317 $pageoutput = $this->
outQuestionPage(
"", $is_postponed, $active_id, $questionoutput);
330 global $rbacsystem, $ilTabs;
332 $ilTabs->clearTargets();
334 $this->ctrl->setParameterByClass(
"ilAssQuestionPageGUI",
"q_id",
$_GET[
"q_id"]);
335 include_once
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
336 $q_type = $this->
object->getQuestionType();
340 $classname = $q_type .
"GUI";
341 $this->ctrl->setParameterByClass(strtolower($classname),
"sel_question_types", $q_type);
342 $this->ctrl->setParameterByClass(strtolower($classname),
"q_id",
$_GET[
"q_id"]);
347 if ($rbacsystem->checkAccess(
'write',
$_GET[
"ref_id"]))
350 $ilTabs->addTarget(
"edit_page",
351 $this->ctrl->getLinkTargetByClass(
"ilAssQuestionPageGUI",
"edit"),
352 array(
"edit",
"insert",
"exec_pg"),
353 "",
"", $force_active);
359 $force_active =
false;
360 if ($rbacsystem->checkAccess(
'write',
$_GET[
"ref_id"]))
363 if ($classname) $url = $this->ctrl->getLinkTargetByClass($classname,
"editQuestion");
365 $ilTabs->addTarget(
"edit_question",
367 array(
"editQuestion",
"save",
"saveEdit",
"addanswers",
"removeanswers",
"originalSyncForm"),
368 $classname,
"", $force_active);
383 $ilTabs->addTarget(
"statistics",
384 $this->ctrl->getLinkTargetByClass($classname,
"assessment"),
395 return $this->
object->prepareTextareaOutput($output, TRUE);
400 $this->
object->setCorrectAnswers(
$_POST[
"correctanswers"] );
401 $this->
object->setTextRating(
$_POST[
"text_rating"] );
407 $this->
object->flushAnswers();
408 foreach (
$_POST[
'answers'][
'answer'] as $index => $answer)
410 $answertext = $answer;
411 $this->
object->addAnswer( $answertext,
$_POST[
'answers'][
'points'][$index], $index );
418 $correctanswers =
new ilNumberInputGUI($this->lng->txt(
"nr_of_correct_answers" ),
"correctanswers");
420 $correctanswers->setDecimals( 0 );
421 $correctanswers->setSize( 3 );
422 $correctanswers->setValue( $this->object->getCorrectAnswers() );
423 $correctanswers->setRequired(
true );
424 $form->
addItem( $correctanswers );
427 $points =
new ilNumberInputGUI($this->lng->txt(
"maximum_points" ),
"points");
429 $points->setMinvalueShouldBeGreater(
true);
430 $points->setSize( 6 );
431 $points->setDisabled(
true );
432 $points->setValue( $this->object->getMaximumPoints() );
433 $points->setRequired(
false );
437 $textrating =
new ilSelectInputGUI($this->lng->txt(
"text_rating" ),
"text_rating");
438 $text_options = array(
439 "ci" => $this->lng->txt(
"cloze_textgap_case_insensitive" ),
440 "cs" => $this->lng->txt(
"cloze_textgap_case_sensitive" )
442 if (!$this->object->getSelfAssessmentEditingMode())
444 $text_options[
"l1"] = sprintf( $this->lng->txt(
"cloze_textgap_levenshtein_of" ),
"1" );
445 $text_options[
"l2"] = sprintf( $this->lng->txt(
"cloze_textgap_levenshtein_of" ),
"2" );
446 $text_options[
"l3"] = sprintf( $this->lng->txt(
"cloze_textgap_levenshtein_of" ),
"3" );
447 $text_options[
"l4"] = sprintf( $this->lng->txt(
"cloze_textgap_levenshtein_of" ),
"4" );
448 $text_options[
"l5"] = sprintf( $this->lng->txt(
"cloze_textgap_levenshtein_of" ),
"5" );
451 $textrating->setValue( $this->object->getTextRating() );
459 include_once
"./Modules/TestQuestionPool/classes/class.ilAnswerWizardInputGUI.php";
462 $choices->setQuestionObject( $this->
object );
463 $choices->setSingleline(
true );
464 $choices->setAllowMove(
false );
465 $choices->setMinValue(0.0);
466 if ($this->object->getAnswerCount() == 0)
467 $this->object->addAnswer(
"", 0, 0 );
468 $choices->setValues( $this->object->getAnswers() );
518 $aggregate = array();
520 foreach ($relevant_answers_chosen as $relevant_answer)
522 if ( array_key_exists($relevant_answer[
'value1'], $aggregate) )
524 $aggregate[$relevant_answer[
'value1']]++;
528 $aggregate[$relevant_answer[
'value1']] = 1;
541 $tpl =
new ilTemplate(
'tpl.il_as_aggregated_answers_table.html',
true,
true,
"Modules/TestQuestionPool");
543 foreach ($aggregate as $key => $value)
545 $tpl->setCurrentBlock(
'aggregaterow' );
546 $tpl->setVariable(
'OPTION', $key );
547 $tpl->setVariable(
'COUNT', $value );
548 $tpl->parseCurrentBlock();