4require_once
'./Modules/TestQuestionPool/classes/class.assQuestionGUI.php';
5require_once
'./Modules/TestQuestionPool/interfaces/interface.ilGuiQuestionScoringAdjustable.php';
6require_once
'./Modules/TestQuestionPool/interfaces/interface.ilGuiAnswerScoringAdjustable.php';
8require_once
'./Modules/Test/classes/inc.AssessmentConstants.php';
36 parent::__construct();
37 include_once
"./Modules/TestQuestionPool/classes/class.assErrorText.php";
42 $this->
object->loadFromDb($id);
51 $hasErrors = (!$always) ? $this->
editQuestion(
true) :
false;
54 require_once
'Services/Form/classes/class.ilPropertyFormGUI.php';
66 if (is_array(
$_POST[
'errordata'][
'key'] ))
68 $this->
object->flushErrorData();
69 foreach (
$_POST[
'errordata'][
'key'] as $idx => $val)
71 $this->
object->addErrorData( $val,
72 $_POST[
'errordata'][
'value'][$idx],
73 $_POST[
'errordata'][
'points'][$idx]
81 $questiontext =
$_POST[
"question"];
82 $this->
object->setQuestion( $questiontext );
83 $this->
object->setErrorText(
$_POST[
"errortext"] );
84 $points_wrong = str_replace(
",",
".",
$_POST[
"points_wrong"] );
85 if (strlen( $points_wrong ) == 0)
87 $this->
object->setPointsWrong( $points_wrong );
89 if (!$this->object->getSelfAssessmentEditingMode())
91 $this->
object->setTextSize(
$_POST[
"textsize"] );
107 include_once(
"./Services/Form/classes/class.ilPropertyFormGUI.php");
109 $this->editForm = $form;
111 $form->setFormAction($this->ctrl->getFormAction($this));
113 $form->setMultipart(FALSE);
114 $form->setTableWidth(
"100%");
115 $form->setId(
"orderinghorizontal");
121 if (count($this->object->getErrorData()) || $checkonly)
128 $form->addCommandButton(
"analyze", $this->lng->txt(
'analyze_errortext'));
135 $form->setValuesByPost();
136 $errors = !$form->checkInput();
137 $form->setValuesByPost();
138 if (
$errors) $checkonly =
false;
141 if (!$checkonly) $this->tpl->setVariable(
"QUESTION_DATA", $form->getHTML());
152 $header->setTitle( $this->lng->txt(
"errors_section" ) );
155 include_once
"./Modules/TestQuestionPool/classes/class.ilErrorTextWizardInputGUI.php";
157 $errordata->setKeyName( $this->lng->txt(
'text_wrong' ) );
158 $errordata->setValueName( $this->lng->txt(
'text_correct' ) );
159 $errordata->setValues( $this->object->getErrorData() );
163 $points_wrong =
new ilNumberInputGUI($this->lng->txt(
"points_wrong" ),
"points_wrong");
164 $points_wrong->allowDecimals(
true);
165 $points_wrong->setMaxValue(0);
166 $points_wrong->setMaxvalueShouldBeLess(
true);
167 $points_wrong->setValue( $this->object->getPointsWrong() );
168 $points_wrong->setInfo( $this->lng->txt(
"points_wrong_info" ) );
169 $points_wrong->setSize( 6 );
170 $points_wrong->setRequired(
true );
171 $form->
addItem( $points_wrong );
183 $errortext->setValue( $this->object->getErrorText() );
184 $errortext->setRequired( TRUE );
185 $errortext->setInfo( $this->lng->txt(
"errortext_info" ) );
186 $errortext->setRows( 10 );
187 $errortext->setCols( 80 );
190 if (!$this->object->getSelfAssessmentEditingMode())
193 $textsize =
new ilNumberInputGUI($this->lng->txt(
"textsize" ),
"textsize");
194 $textsize->setValue( strlen( $this->object->getTextSize() ) ? $this->object->getTextSize() : 100.0 );
195 $textsize->setInfo( $this->lng->txt(
"textsize_errortext_info" ) );
196 $textsize->setSize( 6 );
197 $textsize->setSuffix(
"%" );
198 $textsize->setMinValue( 10 );
199 $textsize->setRequired(
true );
210 $this->
object->setErrorData($this->object->getErrorsFromText(
$_POST[
'errortext']));
233 $active_id,
$pass = NULL,
234 $graphicalOutput = FALSE,
235 $result_output = FALSE,
236 $show_question_only = TRUE,
237 $show_feedback = FALSE,
238 $show_correct_solution = FALSE,
239 $show_manual_scoring = FALSE,
240 $show_question_text = TRUE
244 $template =
new ilTemplate(
"tpl.il_as_qpl_errortext_output_solution.html", TRUE, TRUE,
"Modules/TestQuestionPool");
246 $selections = array();
247 if (($active_id > 0) && (!$show_correct_solution)) {
250 $reached_points = $this->
object->getReachedPoints($active_id,
$pass);
251 $solutions =& $this->
object->getSolutionValues($active_id,
$pass);
252 if (is_array($solutions)) {
253 foreach ($solutions as $solution) {
254 array_push($selections, (
int) $solution[
'value1']);
256 $errortext_value = join(
",", $selections);
260 $selections = $this->
object->getBestSelection();
261 $reached_points = $this->
object->getPoints();
264 if ($result_output) {
265 $resulttext = ($reached_points == 1) ?
"(%s " . $this->lng->txt(
"point") .
")" :
"(%s " . $this->lng->txt(
"points") .
")";
266 $template->setVariable(
"RESULT_OUTPUT",
sprintf($resulttext, $reached_points));
269 if ($this->object->getTextSize() >= 10)
270 $template->setVariable(
"STYLE",
" style=\"font-size: " . $this->object->getTextSize() .
"%;\"");
272 if ($show_question_text==
true)
273 $template->setVariable(
"QUESTIONTEXT", $this->object->prepareTextareaOutput($this->object->getQuestion(), TRUE));
275 $errortext = $this->
object->createErrorTextOutput($selections, $graphicalOutput, $show_correct_solution,
false);
277 $template->setVariable(
"ERRORTEXT", $errortext);
278 $questionoutput = $template->get();
280 $solutiontemplate =
new ilTemplate(
"tpl.il_as_tst_solution_output.html",TRUE, TRUE,
"Modules/TestQuestionPool");
288 $feedback .= strlen($fb) ? $fb :
'';
292 $feedback .= strlen($fb) ? $fb :
'';
294 if (strlen($feedback))
300 $solutiontemplate->setVariable(
"ILC_FB_CSS_CLASS", $cssClass);
301 $solutiontemplate->setVariable(
"FEEDBACK", $this->object->prepareTextareaOutput( $feedback,
true ));
304 $solutiontemplate->setVariable(
"SOLUTION_OUTPUT", $questionoutput);
306 $solutionoutput = $solutiontemplate->get();
307 if (!$show_question_only)
312 return $solutionoutput;
315 function getPreview($show_question_only = FALSE, $showInlineFeedback =
false)
319 $template =
new ilTemplate(
"tpl.il_as_qpl_errortext_output.html",TRUE, TRUE,
"Modules/TestQuestionPool");
320 if ($this->object->getTextSize() >= 10) $template->setVariable(
"STYLE",
" style=\"font-size: " . $this->object->getTextSize() .
"%;\"");
321 $template->setVariable(
"QUESTIONTEXT", $this->object->prepareTextareaOutput($this->object->getQuestion(), TRUE));
322 $errortext = $this->
object->createErrorTextOutput($selections);
323 $template->setVariable(
"ERRORTEXT", $errortext);
324 $template->setVariable(
"ERRORTEXT_ID",
"qst_" . $this->object->getId());
325 $questionoutput = $template->get();
326 if (!$show_question_only)
331 $this->tpl->addJavascript(
"./Modules/TestQuestionPool/templates/default/errortext.js");
332 return $questionoutput;
340 $is_postponed = FALSE,
341 $use_post_solutions = FALSE,
342 $show_feedback = FALSE
346 $template =
new ilTemplate(
"tpl.il_as_qpl_errortext_output.html",TRUE, TRUE,
"Modules/TestQuestionPool");
351 #include_once "./Modules/Test/classes/class.ilObjTest.php";
352 #if (!ilObjTest::_getUsePreviousAnswers($active_id, true))
354 # if (is_null($pass)) $pass = ilObjTest::_getPass($active_id);
356 $solutions = $this->
object->getTestOutputSolutions($active_id,
$pass);
359 $errortext_value =
"";
360 $selections = array();
361 if (is_array($solutions))
363 foreach ($solutions as $solution)
365 array_push($selections, $solution[
'value1']);
367 $errortext_value = join(
",", $selections);
369 if ($this->object->getTextSize() >= 10) $template->setVariable(
"STYLE",
" style=\"font-size: " . $this->object->getTextSize() .
"%;\"");
370 $template->setVariable(
"QUESTIONTEXT", $this->object->prepareTextareaOutput($this->object->getQuestion(), TRUE));
371 $errortext = $this->
object->createErrorTextOutput($selections);
373 $template->setVariable(
"ERRORTEXT", $errortext);
374 $template->setVariable(
"ERRORTEXT_ID",
"qst_" . $this->object->getId());
375 $template->setVariable(
"ERRORTEXT_VALUE", $errortext_value);
377 $questionoutput = $template->get();
378 if (!$show_question_only)
383 $this->tpl->addJavascript(
"./Modules/TestQuestionPool/templates/default/errortext.js");
384 $questionoutput = $template->get();
385 $pageoutput = $this->
outQuestionPage(
"", $is_postponed, $active_id, $questionoutput);
398 global $rbacsystem, $ilTabs;
400 $ilTabs->clearTargets();
402 $this->ctrl->setParameterByClass(
"ilAssQuestionPageGUI",
"q_id",
$_GET[
"q_id"]);
403 include_once
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
404 $q_type = $this->
object->getQuestionType();
408 $classname = $q_type .
"GUI";
409 $this->ctrl->setParameterByClass(strtolower($classname),
"sel_question_types", $q_type);
410 $this->ctrl->setParameterByClass(strtolower($classname),
"q_id",
$_GET[
"q_id"]);
415 if ($rbacsystem->checkAccess(
'write',
$_GET[
"ref_id"]))
418 $ilTabs->addTarget(
"edit_page",
419 $this->ctrl->getLinkTargetByClass(
"ilAssQuestionPageGUI",
"edit"),
420 array(
"edit",
"insert",
"exec_pg"),
421 "",
"", $force_active);
427 $force_active =
false;
428 if ($rbacsystem->checkAccess(
'write',
$_GET[
"ref_id"]))
431 if ($classname)
$url = $this->ctrl->getLinkTargetByClass($classname,
"editQuestion");
433 $ilTabs->addTarget(
"edit_question",
435 array(
"editQuestion",
"save",
"saveEdit",
"analyze",
"originalSyncForm"),
436 $classname,
"", $force_active);
451 $ilTabs->addTarget(
"statistics",
452 $this->ctrl->getLinkTargetByClass($classname,
"assessment"),
462 $selection = $this->
object->getBestSelection(
false);
464 if( !$this->object->feedbackOBJ->specificAnswerFeedbackExists(array_keys($selection)) )
469 $feedback =
'<table class="test_specific_feedback"><tbody>';
472 foreach(preg_split(
"/[\n\r]+/", $this->object->errortext) as $line)
474 $elements = array_merge( $elements, preg_split(
"/\s+/", $line));
477 $matchedIndexes = array();
480 foreach ($selection as $index => $answer)
483 foreach($answer as $answerPartIndex)
485 $element[] = $elements[$answerPartIndex];
488 $element = implode(
' ', $element);
489 $element = str_replace(array(
'((',
'))',
'#'), array(
'',
'',
''), $element);
491 $ordinal = $index + 1;
495 $feedback .=
'<td class="text-nowrap">' . $ordinal .
'. ' . $element .
':</td>';
497 foreach ($this->object->getErrorData() as $idx => $ans)
499 if( isset($matchedIndexes[$idx]) )
504 if ( preg_match(
'/'.preg_quote($ans->text_wrong,
'/').
'/', $element) )
506 $fb = $this->
object->feedbackOBJ->getSpecificAnswerFeedbackTestPresentation(
507 $this->object->getId(), $idx
510 $feedback .=
'<td>'. $fb .
'</td>';
512 $matchedIndexes[$idx] = $idx;
518 $feedback .=
'</tr>';
521 $feedback .=
'</tbody></table>';
523 return $this->
object->prepareTextareaOutput($feedback, TRUE);
564 $errortext = $this->
object->getErrorText();
567 foreach($relevant_answers as $answer_chosen)
569 $passdata[$answer_chosen[
'active_fi'].
'-'. $answer_chosen[
'pass']][$answer_chosen[
'value2']][] = $answer_chosen[
'value1'];
573 foreach($passdata as $key =>
$pass)
575 $passdata[$key] = $this->
object->createErrorTextOutput(
$pass);
576 $html .= $passdata[$key] .
'<hr /><br />';
sprintf('%.4f', $callTime)
An exception for terminatinating execution or to throw for unit testing.
The assErrorTextGUI class encapsulates the GUI representation for error text questions.
setQuestionTabs()
Sets the ILIAS tabs for this question type.
getAggregatedAnswersView($relevant_answers)
Returns an html string containing a question specific representation of the answers so far given in t...
getTestOutput( $active_id, $pass, $is_postponed=FALSE, $use_post_solutions=FALSE, $show_feedback=FALSE)
getAfterParticipationSuppressionQuestionPostVars()
Returns a list of postvars which will be suppressed in the form output when used in scoring adjustmen...
populateQuestionSpecificFormPart(ilPropertyFormGUI $form)
getPreview($show_question_only=FALSE, $showInlineFeedback=false)
writeQuestionSpecificPostData(ilPropertyFormGUI $form)
Extracts the question specific values from $_POST and applies them to the data object.
writeAnswerSpecificPostData(ilPropertyFormGUI $form)
Extracts the answer specific values from $_POST and applies them to the data object.
getAfterParticipationSuppressionAnswerPostVars()
Returns a list of postvars which will be suppressed in the form output when used in scoring adjustmen...
populateAnswerSpecificFormPart(ilPropertyFormGUI $form)
writePostData($always=false)
{Evaluates a posted edit form and writes the form data in the question object.integer A positive valu...
__construct($id=-1)
assErrorTextGUI constructor
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 question solution output.
editQuestion($checkonly=FALSE)
Creates an output of the edit form for the question.
getSpecificFeedbackOutput($active_id, $pass)
Returns the answer specific feedback for the question.
analyze()
Parse the error text.
Class for error text questions.
Basic GUI class for assessment questions.
populateTaxonomyFormSection(ilPropertyFormGUI $form)
setErrorMessage($errormessage)
addTab_QuestionHints(ilTabsGUI $tabs)
adds the hints tab to ilTabsGUI
writeQuestionGenericPostData()
addQuestionFormCommandButtons($form)
Add the command buttons of a question properties form.
getILIASPage($html="")
Returns the ILIAS Page around a question.
getQuestionTemplate()
get question template
addTab_SuggestedSolution(ilTabsGUI $tabs, $classname)
saveTaxonomyAssignments()
outQuestionPage($a_temp_var, $a_postponed=false, $active_id="", $html="")
output question page
addBackTab(ilTabsGUI $ilTabs)
isTestPresentationContext()
hasCorrectSolution($activeId, $passIndex)
addTab_QuestionFeedback(ilTabsGUI $tabs)
adds the feedback tab to ilTabsGUI
addBasicQuestionFormProperties($form)
Add basic question form properties: assessment: title, author, description, question,...
addTab_QuestionPreview(ilTabsGUI $tabsGUI)
getGenericFeedbackOutput($active_id, $pass)
Returns the answer specific feedback for the question.
const CSS_CLASS_FEEDBACK_WRONG
const CSS_CLASS_FEEDBACK_CORRECT
This class represents a key value pair wizard property in a property form.
special template class to simplify handling of ITX/PEAR
This class represents a text area property in a property form.
Interface ilGuiAnswerScoringAdjustable.
Interface ilGuiQuestionScoringAdjustable.