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';
28 parent::__construct();
30 require_once
'Modules/TestQuestionPool/classes/class.assKprimChoice.php';
35 $this->
object->loadFromDb($qId);
41 return array(
'uploadImage',
'removeImage');
52 $this->tpl->addCss(
'Modules/Test/templates/default/ta.css');
54 $this->tpl->setVariable(
"QUESTION_DATA", $this->ctrl->getHTML($form));
63 $this->
object->saveToDb();
70 $position = key(
$_POST[
'cmd'][
'removeImage']);
71 $this->
object->removeAnswerImage($position);
73 $this->
object->saveToDb();
79 if( isset(
$_POST[
'cmd'][__FUNCTION__]) && count(
$_POST[
'cmd'][__FUNCTION__]) )
81 $this->
object->moveAnswerDown( key(
$_POST[
'cmd'][__FUNCTION__]) );
82 $this->
object->saveToDb();
90 if( isset(
$_POST[
'cmd'][__FUNCTION__]) && count(
$_POST[
'cmd'][__FUNCTION__]) )
92 $this->
object->moveAnswerUp( key(
$_POST[
'cmd'][__FUNCTION__]) );
93 $this->
object->saveToDb();
105 $form->setValuesByPost();
109 $answersInput = $form->getItemByPostVar(
'kprim_answers');
110 $answersInput->setIgnoreMissingUploadsEnabled(
true);
112 if( !$answersInput->checkUploads(
$_POST[$answersInput->getPostVar()]) )
119 $answersInput->collectValidFiles();
121 elseif( !$form->checkInput() )
163 $shuffleAnswers =
new ilCheckboxInputGUI($this->lng->txt(
"shuffle_answers" ),
"shuffle_answers_enabled");
165 $form->
addItem($shuffleAnswers);
167 if( !$this->
object->getSelfAssessmentEditingMode() )
170 $answerType =
new ilSelectInputGUI($this->lng->txt(
'answer_types'),
'answer_type');
171 $answerType->
setOptions($this->
object->getAnswerTypeSelectOptions($this->lng));
172 $answerType->setValue( $this->
object->getAnswerType() );
176 if( !$this->
object->getSelfAssessmentEditingMode() && $this->
object->isSingleLineAnswerType($this->
object->getAnswerType()) )
179 $thumbSize =
new ilNumberInputGUI($this->lng->txt(
'thumb_size'),
'thumb_size');
180 $thumbSize->
setSuffix($this->lng->txt(
"thumb_size_unit_pixel"));
181 $thumbSize->setInfo( $this->lng->txt(
'thumb_size_info') );
182 $thumbSize->setDecimals(
false);
183 $thumbSize->setMinValue(20);
184 $thumbSize->setSize(6);
185 $thumbSize->setValue( $this->
object->getThumbSize() );
191 $optionLabel->
setInfo($this->lng->txt(
'option_label_info'));
192 $optionLabel->setRequired(
true);
193 $optionLabel->setValue($this->
object->getOptionLabel());
194 foreach($this->
object->getValidOptionLabelsTranslated($this->lng) as $labelValue => $labelText)
197 $optionLabel->addOption($option);
199 if( $this->
object->isCustomOptionLabel($labelValue) )
202 $this->lng->txt(
'option_label_custom_true'),
'option_label_custom_true' 204 $customLabelTrue->
setValue($this->
object->getCustomTrueOptionLabel());
205 $option->addSubItem($customLabelTrue);
208 $this->lng->txt(
'option_label_custom_false'),
'option_label_custom_false' 210 $customLabelFalse->
setValue($this->
object->getCustomFalseOptionLabel());
211 $option->addSubItem($customLabelFalse);
220 $points->allowDecimals(
true);
221 $points->setMinValue(0);
222 $points->setMinvalueShouldBeGreater(
true);
223 $points->setValue($this->
object->getPoints());
227 $scorePartialSolution =
new ilCheckboxInputGUI($this->lng->txt(
'score_partsol_enabled'),
'score_partsol_enabled');
228 $scorePartialSolution->
setInfo($this->lng->txt(
'score_partsol_enabled_info'));
229 $scorePartialSolution->setChecked( $this->
object->isScorePartialSolutionEnabled() );
230 $form->
addItem($scorePartialSolution);
240 $oldAnswerType = $this->
object->getAnswerType();
242 $this->
object->setShuffleAnswersEnabled($form->
getItemByPostVar(
'shuffle_answers_enabled')->getChecked());
244 if( !$this->
object->getSelfAssessmentEditingMode() )
246 $this->
object->setAnswerType($form->
getItemByPostVar(
'answer_type')->getValue());
253 if( !$this->
object->getSelfAssessmentEditingMode() && $this->
object->isSingleLineAnswerType($oldAnswerType) )
255 $this->
object->setThumbSize($form->
getItemByPostVar(
'thumb_size')->getValue());
258 $this->
object->setOptionLabel($form->
getItemByPostVar(
'option_label')->getValue());
260 if( $this->
object->isCustomOptionLabel($this->object->getOptionLabel()) )
262 $this->
object->setCustomTrueOptionLabel( strip_tags(
265 $this->
object->setCustomFalseOptionLabel( strip_tags(
272 $this->
object->setScorePartialSolutionEnabled($form->
getItemByPostVar(
'score_partsol_enabled')->getChecked());
281 require_once
'Modules/TestQuestionPool/classes/class.ilKprimChoiceWizardInputGUI.php';
283 $kprimAnswers->
setInfo($this->lng->txt(
'kprim_answers_info'));
284 $kprimAnswers->setSize(64);
285 $kprimAnswers->setMaxLength(1000);
286 $kprimAnswers->setRequired(
true);
287 $kprimAnswers->setAllowMove(
true);
288 $kprimAnswers->setQuestionObject($this->
object);
289 if( !$this->
object->getSelfAssessmentEditingMode() )
291 $kprimAnswers->setSingleline($this->
object->isSingleLineAnswerType($this->object->getAnswerType()));
295 $kprimAnswers->setSingleline(
false);
297 $kprimAnswers->setValues($this->
object->getAnswers());
312 $this->
object->handleFileUploads($answers,
$files);
313 $this->
object->setAnswers($answers);
323 foreach($answers as $key => $answer)
355 $is_postponed = FALSE,
356 $use_post_solutions = FALSE,
357 $showInlineFeedback = FALSE
364 $user_solution =
array();
369 #include_once "./Modules/Test/classes/class.ilObjTest.php"; 370 #if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) 372 # if (is_null($pass)) $pass = ilObjTest::_getPass($active_id); 374 $solutions = $this->
object->getTestOutputSolutions($active_id,
$pass);
376 foreach ($solutions as $idx => $solution_value)
378 $user_solution[$solution_value[
"value1"]] = $solution_value[
"value2"];
383 include_once
"./Services/UICore/classes/class.ilTemplate.php";
384 $template =
new ilTemplate(
"tpl.il_as_qpl_mc_kprim_output.html", TRUE, TRUE,
"Modules/TestQuestionPool");
386 foreach ($keys as $answer_id)
388 $answer = $this->
object->getAnswer($answer_id);
389 if (strlen($answer->getImageFile()))
391 if ($this->
object->getThumbSize())
393 $template->setCurrentBlock(
"preview");
394 $template->setVariable(
"URL_PREVIEW", $answer->getImageWebPath());
395 $template->setVariable(
"TEXT_PREVIEW", $this->lng->txt(
'preview'));
397 $template->setVariable(
"ANSWER_IMAGE_URL", $answer->getThumbWebPath());
398 list($width, $height, $type, $attr) = getimagesize($answer->getImageFsPath());
399 $alt = $answer->getImageFile();
400 if (strlen($answer->getAnswertext()))
402 $alt = $answer->getAnswertext();
404 $alt = preg_replace(
"/<[^>]*?>/",
"", $alt);
407 $template->parseCurrentBlock();
411 $template->setCurrentBlock(
"answer_image");
412 $template->setVariable(
"ANSWER_IMAGE_URL", $answer->getImageWebPath());
413 list($width, $height, $type, $attr) = getimagesize($answer->getImageFsPath());
414 $alt = $answer->getImageFile();
415 if (strlen($answer->getAnswertext()))
417 $alt = $answer->getAnswertext();
419 $alt = preg_replace(
"/<[^>]*?>/",
"", $alt);
420 $template->setVariable(
"ATTR", $attr);
423 $template->parseCurrentBlock();
427 if( $showInlineFeedback )
432 $template->setCurrentBlock(
"answer_row");
433 $template->setVariable(
"ANSWER_ID", $answer_id);
434 $template->setVariable(
"ANSWER_TEXT", $this->
object->prepareTextareaOutput($answer->getAnswertext(), TRUE));
435 $template->setVariable(
'VALUE_TRUE', 1);
436 $template->setVariable(
'VALUE_FALSE', 0);
438 if( isset($user_solution[$answer->getPosition()]) )
440 $tplVar = $user_solution[$answer->getPosition()] ?
'CHECKED_ANSWER_TRUE' :
'CHECKED_ANSWER_FALSE';
441 $template->setVariable($tplVar,
" checked=\"checked\"");
444 $template->parseCurrentBlock();
447 $questiontext = $this->
object->getQuestion();
448 $template->setVariable(
"QUESTIONTEXT", $this->
object->prepareTextareaOutput($questiontext, TRUE));
450 $template->setVariable(
"INSTRUCTIONTEXT", $this->
object->getInstructionTextTranslation(
451 $this->lng, $this->object->getOptionLabel()
454 $template->setVariable(
"OPTION_LABEL_TRUE", $this->
object->getTrueOptionLabelTranslation(
455 $this->lng, $this->object->getOptionLabel()
458 $template->setVariable(
"OPTION_LABEL_FALSE", $this->
object->getFalseOptionLabelTranslation(
459 $this->lng, $this->object->getOptionLabel()
462 $questionoutput = $template->get();
463 $pageoutput = $this->
outQuestionPage(
"", $is_postponed, $active_id, $questionoutput);
471 public function getPreview($show_question_only = FALSE, $showInlineFeedback =
false)
478 include_once
"./Services/UICore/classes/class.ilTemplate.php";
479 $template =
new ilTemplate(
"tpl.il_as_qpl_mc_kprim_output.html", TRUE, TRUE,
"Modules/TestQuestionPool");
481 foreach ($keys as $answer_id)
483 $answer = $this->
object->getAnswer($answer_id);
484 if (strlen($answer->getImageFile()))
486 if ($this->
object->getThumbSize())
488 $template->setCurrentBlock(
"preview");
489 $template->setVariable(
"URL_PREVIEW", $answer->getImageWebPath());
490 $template->setVariable(
"TEXT_PREVIEW", $this->lng->txt(
'preview'));
492 $template->setVariable(
"ANSWER_IMAGE_URL", $answer->getThumbWebPath());
493 list($width, $height, $type, $attr) = getimagesize($answer->getImageFsPath());
494 $alt = $answer->getImageFile();
495 if (strlen($answer->getAnswertext()))
497 $alt = $answer->getAnswertext();
499 $alt = preg_replace(
"/<[^>]*?>/",
"", $alt);
502 $template->parseCurrentBlock();
506 $template->setCurrentBlock(
"answer_image");
507 $template->setVariable(
"ANSWER_IMAGE_URL", $answer->getImageWebPath());
508 list($width, $height, $type, $attr) = getimagesize($answer->getImageFsPath());
509 $alt = $answer->getImageFile();
510 if (strlen($answer->getAnswertext()))
512 $alt = $answer->getAnswertext();
514 $alt = preg_replace(
"/<[^>]*?>/",
"", $alt);
515 $template->setVariable(
"ATTR", $attr);
518 $template->parseCurrentBlock();
522 if( $showInlineFeedback )
527 $template->setCurrentBlock(
"answer_row");
528 $template->setVariable(
"ANSWER_ID", $answer_id);
529 $template->setVariable(
"ANSWER_TEXT", $this->
object->prepareTextareaOutput($answer->getAnswertext(), TRUE));
530 $template->setVariable(
'VALUE_TRUE', 1);
531 $template->setVariable(
'VALUE_FALSE', 0);
533 if( isset($user_solution[$answer->getPosition()]) )
535 $tplVar = $user_solution[$answer->getPosition()] ?
'CHECKED_ANSWER_TRUE' :
'CHECKED_ANSWER_FALSE';
536 $template->setVariable($tplVar,
" checked=\"checked\"");
539 $template->parseCurrentBlock();
541 $questiontext = $this->
object->getQuestion();
542 $template->setVariable(
"QUESTIONTEXT", $this->
object->prepareTextareaOutput($questiontext, TRUE));
544 $template->setVariable(
"INSTRUCTIONTEXT", $this->
object->getInstructionTextTranslation(
545 $this->lng, $this->object->getOptionLabel()
548 $template->setVariable(
"OPTION_LABEL_TRUE", $this->
object->getTrueOptionLabelTranslation(
549 $this->lng, $this->object->getOptionLabel()
552 $template->setVariable(
"OPTION_LABEL_FALSE", $this->
object->getFalseOptionLabelTranslation(
553 $this->lng, $this->object->getOptionLabel()
556 $questionoutput = $template->get();
557 if (!$show_question_only)
562 return $questionoutput;
579 $graphicalOutput = FALSE,
580 $result_output = FALSE,
581 $show_question_only = TRUE,
582 $show_feedback = FALSE,
583 $show_correct_solution = FALSE,
584 $show_manual_scoring = FALSE,
585 $show_question_text = TRUE
592 $user_solution =
array();
593 if (($active_id > 0) && (!$show_correct_solution))
595 $solutions =& $this->
object->getSolutionValues($active_id,
$pass);
596 foreach ($solutions as $idx => $solution_value)
598 $user_solution[$solution_value[
'value1']] = $solution_value[
'value2'];
604 foreach ($this->
object->getAnswers() as $answer)
606 $user_solution[$answer->getPosition()] = $answer->getCorrectness();
611 $template =
new ilTemplate(
"tpl.il_as_qpl_mc_kprim_output_solution.html", TRUE, TRUE,
"Modules/TestQuestionPool");
613 foreach ($keys as $answer_id)
615 $answer = $this->
object->getAnswer($answer_id);
617 if (($active_id > 0) && (!$show_correct_solution))
619 if ($graphicalOutput)
623 if( $user_solution[$answer->getPosition()] == $answer->getCorrectness() )
625 $template->setCurrentBlock(
"icon_ok");
627 $template->setVariable(
"TEXT_OK", $this->lng->txt(
"answer_is_right"));
628 $template->parseCurrentBlock();
632 $template->setCurrentBlock(
"icon_ok");
634 $template->setVariable(
"TEXT_NOT_OK", $this->lng->txt(
"answer_is_wrong"));
635 $template->parseCurrentBlock();
639 if (strlen($answer->getImageFile()))
641 $template->setCurrentBlock(
"answer_image");
642 if ($this->
object->getThumbSize())
644 $template->setVariable(
"ANSWER_IMAGE_URL", $answer->getThumbWebPath());
648 $template->setVariable(
"ANSWER_IMAGE_URL", $answer->getImageWebPath());
653 $template->parseCurrentBlock();
661 $template->setCurrentBlock(
"answer_row");
662 $template->setVariable(
"ANSWER_TEXT", $this->
object->prepareTextareaOutput($answer->getAnswertext(), TRUE));
666 if( isset($user_solution[$answer->getPosition()]) )
668 if( $user_solution[$answer->getPosition()] )
671 $template->setVariable(
"SOLUTION_ALT_TRUE", $this->lng->txt(
"checked"));
673 $template->setVariable(
"SOLUTION_ALT_FALSE", $this->lng->txt(
"unchecked"));
678 $template->setVariable(
"SOLUTION_ALT_TRUE", $this->lng->txt(
"unchecked"));
680 $template->setVariable(
"SOLUTION_ALT_FALSE", $this->lng->txt(
"checked"));
686 $template->setVariable(
"SOLUTION_ALT_TRUE", $this->lng->txt(
"unchecked"));
688 $template->setVariable(
"SOLUTION_ALT_FALSE", $this->lng->txt(
"unchecked"));
693 $template->setVariable(
'SOL_QID', $this->
object->getId());
694 $template->setVariable(
'SOL_SUFFIX', $show_correct_solution ?
'bestsolution' :
'usersolution');
695 $template->setVariable(
'SOL_POSITION', $answer->getPosition());
697 $template->setVariable(
'SOL_TRUE_VALUE', 1);
698 $template->setVariable(
'SOL_FALSE_VALUE', 0);
700 if( isset($user_solution[$answer->getPosition()]) )
702 if( $user_solution[$answer->getPosition()] )
704 $template->setVariable(
'SOL_TRUE_CHECKED',
'checked');
708 $template->setVariable(
'SOL_FALSE_CHECKED',
'checked');
713 $template->parseCurrentBlock();
716 if ($show_question_text==
true)
718 $questiontext = $this->
object->getQuestion();
719 $template->setVariable(
"QUESTIONTEXT", $this->
object->prepareTextareaOutput($questiontext, TRUE));
721 $template->setVariable(
"INSTRUCTIONTEXT", $this->
object->getInstructionTextTranslation(
722 $this->lng, $this->object->getOptionLabel()
726 $template->setVariable(
"OPTION_LABEL_TRUE", $this->
object->getTrueOptionLabelTranslation(
727 $this->lng, $this->object->getOptionLabel()
730 $template->setVariable(
"OPTION_LABEL_FALSE", $this->
object->getFalseOptionLabelTranslation(
731 $this->lng, $this->object->getOptionLabel()
735 $questionoutput = $template->get();
738 $solutiontemplate =
new ilTemplate(
"tpl.il_as_tst_solution_output.html",TRUE, TRUE,
"Modules/TestQuestionPool");
740 if (strlen($feedback))
746 $solutiontemplate->setVariable(
"ILC_FB_CSS_CLASS", $cssClass);
747 $solutiontemplate->setVariable(
"FEEDBACK", $this->
object->prepareTextareaOutput( $feedback,
true ));
750 $solutiontemplate->setVariable(
"SOLUTION_OUTPUT", $questionoutput);
752 $solutionoutput = $solutiontemplate->get();
754 if (!$show_question_only)
759 return $solutionoutput;
764 $choiceKeys = array_keys($this->
object->getAnswers());
766 if( $this->
object->isShuffleAnswersEnabled() )
768 $choiceKeys = $this->
object->getShuffler()->shuffle($choiceKeys);
776 require_once
'Modules/TestQuestionPool/classes/feedback/class.ilAssConfigurableMultiOptionQuestionFeedback.php';
780 if($user_solution[$answer_id])
782 $fb = $this->
object->feedbackOBJ->getSpecificAnswerFeedbackTestPresentation($this->
object->getId(), $answer_id);
785 $template->setCurrentBlock(
"feedback");
786 $template->setVariable(
"FEEDBACK", $this->
object->prepareTextareaOutput($fb,
true));
787 $template->parseCurrentBlock();
794 $fb = $this->
object->feedbackOBJ->getSpecificAnswerFeedbackTestPresentation($this->
object->getId(), $answer_id);
797 $template->setCurrentBlock(
"feedback");
798 $template->setVariable(
"FEEDBACK", $this->
object->prepareTextareaOutput($fb,
true));
799 $template->parseCurrentBlock();
805 $answer = $this->
object->getAnswer($answer_id);
807 if($answer->getCorrectness())
809 $fb = $this->
object->feedbackOBJ->getSpecificAnswerFeedbackTestPresentation($this->
object->getId(), $answer_id);
812 $template->setCurrentBlock(
"feedback");
813 $template->setVariable(
"FEEDBACK", $this->
object->prepareTextareaOutput($fb,
true));
814 $template->parseCurrentBlock();
861 return '<pre>'.print_r($relevant_answers, 1).
'</pre>';
866 $trueOptionLabel = $this->
object->getTrueOptionLabelTranslation($this->lng, $this->
object->getOptionLabel());
867 $falseOptionLabel = $this->
object->getFalseOptionLabelTranslation($this->lng, $this->
object->getOptionLabel());
869 $tpl =
new ilTemplate(
'tpl.il_as_aggregated_kprim_answers_table.html',
true,
true,
"Modules/TestQuestionPool");
871 foreach( $aggregate as $lineData )
873 $tpl->setCurrentBlock(
'aggregaterow');
874 $tpl->setVariable(
'OPTION', $lineData[
'answertext']);
875 $tpl->setVariable(
'COUNT_TRUE', $lineData[
'count_true']);
876 $tpl->setVariable(
'COUNT_FALSE', $lineData[
'count_false']);
877 $tpl->parseCurrentBlock();
880 $tpl->setVariable(
'OPTION_HEAD', $this->lng->txt(
'answers'));
881 $tpl->setVariable(
'COUNT_TRUE_HEAD', $trueOptionLabel);
882 $tpl->setVariable(
'COUNT_FALSE_HEAD', $falseOptionLabel);
889 $aggregate =
array();
891 foreach( $answers as $answer )
894 'answertext' => $answer->getAnswerText(),
'count_true' => 0,
'count_false' => 0
897 foreach( $rawSolutionData as $solutionRecord )
899 if( $solutionRecord[
'value1'] == $answer->getPosition() )
901 if( $solutionRecord[
'value2'] )
903 $answerAgg[
'count_true']++;
907 $answerAgg[
'count_false']++;
913 $aggregate[] = $answerAgg;
isTestPresentationContext()
getSpecificFeedbackOutput($active_id, $pass)
writeQuestionSpecificPostData(ilPropertyFormGUI $form)
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms public
hasCorrectSolution($activeId, $passIndex)
This class represents an option in a radio group.
getAfterParticipationSuppressionQuestionPostVars()
Returns a list of postvars which will be suppressed in the form output when used in scoring adjustmen...
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)
addBasicQuestionFormProperties($form)
Add basic question form properties: assessment: title, author, description, question, working time.
buildBasicEditFormObject()
getTestOutput( $active_id, $pass, $is_postponed=FALSE, $use_post_solutions=FALSE, $showInlineFeedback=FALSE)
populateAnswerSpecificFormPart(ilPropertyFormGUI $form)
getQuestionTemplate()
get question template
const CSS_CLASS_FEEDBACK_CORRECT
const FEEDBACK_SETTING_CHECKED
populateTaxonomyFormSection(ilPropertyFormGUI $form)
getAdditionalEditQuestionCommands()
handleAnswerTextsSubmit($answers)
const ANSWER_TYPE_MULTI_LINE
writePostData($upload=false)
{}
writeQuestionGenericPostData()
const FEEDBACK_SETTING_CORRECT
getILIASPage($html="")
Returns the ILIAS Page around a question.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
special template class to simplify handling of ITX/PEAR
renderAggregateView($aggregate)
This class represents a text property in a property form.
writeAnswerSpecificPostData(ilPropertyFormGUI $form)
const CSS_CLASS_FEEDBACK_WRONG
Basic GUI class for assessment questions.
static getHtmlPath($relative_path)
get url of path
getPreview($show_question_only=FALSE, $showInlineFeedback=false)
Create styles array
The data for the language used.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
getAggregatedAnswersView($relevant_answers)
Returns an html string containing a question specific representation of the answers so far given in t...
getAfterParticipationSuppressionAnswerPostVars()
Returns a list of postvars which will be suppressed in the form output when used in scoring adjustmen...
saveTaxonomyAssignments()
Create new PHPExcel object
obj_idprivate
const FEEDBACK_SETTING_ALL
editQuestion(ilPropertyFormGUI $form=null)
static secureString($a_str, $a_strip_html=true, $a_allow="")
Remove unsecure tags.
isRenderPurposePrintPdf()
Interface ilGuiAnswerScoringAdjustable.
outQuestionPage($a_temp_var, $a_postponed=false, $active_id="", $html="")
output question page
aggregateAnswers($rawSolutionData, $answers)
getGenericFeedbackOutput($active_id, $pass)
Returns the answer specific feedback for the question.
Interface ilGuiQuestionScoringAdjustable.
setValue($a_value)
Set Value.
populateSpecificFeedbackInline($user_solution, $answer_id, $template)
getParticipantsAnswerKeySequence()
addQuestionFormCommandButtons($form)
Add the command buttons of a question properties form.
populateQuestionSpecificFormPart(ilPropertyFormGUI $form)
renderPurposeSupportsFormHtml()