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();
102 $form->setValuesByPost();
106 $answersInput = $form->getItemByPostVar(
'kprim_answers');
107 $answersInput->setIgnoreMissingUploadsEnabled(
true);
109 if( !$answersInput->checkUploads(
$_POST[$answersInput->getPostVar()]) )
116 $answersInput->collectValidFiles();
118 elseif( !$form->checkInput() )
160 $shuffleAnswers =
new ilCheckboxInputGUI($this->lng->txt(
"shuffle_answers" ),
"shuffle_answers_enabled");
161 $shuffleAnswers->
setChecked( $this->object->isShuffleAnswersEnabled() );
162 $form->
addItem($shuffleAnswers);
164 if( !$this->object->getSelfAssessmentEditingMode() )
167 $answerType =
new ilSelectInputGUI($this->lng->txt(
'answer_types'),
'answer_type');
168 $answerType->
setOptions($this->object->getAnswerTypeSelectOptions($this->lng));
169 $answerType->setValue( $this->object->getAnswerType() );
173 if( !$this->object->getSelfAssessmentEditingMode() && $this->
object->isSingleLineAnswerType($this->object->getAnswerType()) )
176 $thumbSize =
new ilNumberInputGUI($this->lng->txt(
'thumb_size'),
'thumb_size');
177 $thumbSize->
setSuffix($this->lng->txt(
"thumb_size_unit_pixel"));
178 $thumbSize->setInfo( $this->lng->txt(
'thumb_size_info') );
179 $thumbSize->setDecimals(
false);
180 $thumbSize->setMinValue(20);
181 $thumbSize->setSize(6);
182 $thumbSize->setValue( $this->object->getThumbSize() );
188 $optionLabel->
setInfo($this->lng->txt(
'option_label_info'));
189 $optionLabel->setRequired(
true);
190 $optionLabel->setValue($this->object->getOptionLabel());
191 foreach($this->object->getValidOptionLabelsTranslated($this->lng) as $labelValue => $labelText)
194 $optionLabel->addOption($option);
196 if( $this->object->isCustomOptionLabel($labelValue) )
199 $this->lng->txt(
'option_label_custom_true'),
'option_label_custom_true' 201 $customLabelTrue->
setValue($this->object->getCustomTrueOptionLabel());
202 $option->addSubItem($customLabelTrue);
205 $this->lng->txt(
'option_label_custom_false'),
'option_label_custom_false' 207 $customLabelFalse->
setValue($this->object->getCustomFalseOptionLabel());
208 $option->addSubItem($customLabelFalse);
217 $points->allowDecimals(
true);
218 $points->setMinValue(0);
219 $points->setMinvalueShouldBeGreater(
true);
220 $points->setValue($this->object->getPoints());
224 $scorePartialSolution =
new ilCheckboxInputGUI($this->lng->txt(
'score_partsol_enabled'),
'score_partsol_enabled');
225 $scorePartialSolution->
setInfo($this->lng->txt(
'score_partsol_enabled_info'));
226 $scorePartialSolution->setChecked( $this->object->isScorePartialSolutionEnabled() );
227 $form->
addItem($scorePartialSolution);
237 $oldAnswerType = $this->
object->getAnswerType();
239 $this->
object->setShuffleAnswersEnabled($form->
getItemByPostVar(
'shuffle_answers_enabled')->getChecked());
241 if( !$this->object->getSelfAssessmentEditingMode() )
243 $this->
object->setAnswerType($form->
getItemByPostVar(
'answer_type')->getValue());
250 if( !$this->object->getSelfAssessmentEditingMode() && $this->
object->isSingleLineAnswerType($oldAnswerType) )
252 $this->
object->setThumbSize($form->
getItemByPostVar(
'thumb_size')->getValue());
255 $this->
object->setOptionLabel($form->
getItemByPostVar(
'option_label')->getValue());
257 if( $this->object->isCustomOptionLabel($this->object->getOptionLabel()) )
259 $this->
object->setCustomTrueOptionLabel( strip_tags(
262 $this->
object->setCustomFalseOptionLabel( strip_tags(
269 $this->
object->setScorePartialSolutionEnabled($form->
getItemByPostVar(
'score_partsol_enabled')->getChecked());
278 require_once
'Modules/TestQuestionPool/classes/class.ilKprimChoiceWizardInputGUI.php';
280 $kprimAnswers->
setInfo($this->lng->txt(
'kprim_answers_info'));
281 $kprimAnswers->setSize(64);
282 $kprimAnswers->setMaxLength(1000);
283 $kprimAnswers->setRequired(
true);
284 $kprimAnswers->setAllowMove(
true);
285 $kprimAnswers->setQuestionObject($this->
object);
286 if( !$this->object->getSelfAssessmentEditingMode() )
288 $kprimAnswers->setSingleline($this->object->isSingleLineAnswerType($this->object->getAnswerType()));
292 $kprimAnswers->setSingleline(
false);
294 $kprimAnswers->setValues($this->object->getAnswers());
309 $this->
object->handleFileUploads($answers, $files);
310 $this->
object->setAnswers($answers);
320 foreach($answers as $key => $answer)
352 $is_postponed = FALSE,
353 $use_post_solutions = FALSE,
354 $showInlineFeedback = FALSE
361 $user_solution = array();
366 #include_once "./Modules/Test/classes/class.ilObjTest.php"; 367 #if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) 369 # if (is_null($pass)) $pass = ilObjTest::_getPass($active_id); 373 foreach ($solutions as $idx => $solution_value)
375 $user_solution[$solution_value[
"value1"]] = $solution_value[
"value2"];
380 include_once
"./Services/UICore/classes/class.ilTemplate.php";
381 $template =
new ilTemplate(
"tpl.il_as_qpl_mc_kprim_output.html", TRUE, TRUE,
"Modules/TestQuestionPool");
383 foreach ($keys as $answer_id)
385 $answer = $this->
object->getAnswer($answer_id);
386 if (strlen($answer->getImageFile()))
388 if ($this->object->getThumbSize())
390 $template->setCurrentBlock(
"preview");
391 $template->setVariable(
"URL_PREVIEW", $answer->getImageWebPath());
392 $template->setVariable(
"TEXT_PREVIEW", $this->lng->txt(
'preview'));
394 $template->setVariable(
"ANSWER_IMAGE_URL", $answer->getThumbWebPath());
395 list($width, $height, $type, $attr) = getimagesize($answer->getImageFsPath());
396 $alt = $answer->getImageFile();
397 if (strlen($answer->getAnswertext()))
399 $alt = $answer->getAnswertext();
401 $alt = preg_replace(
"/<[^>]*?>/",
"", $alt);
404 $template->parseCurrentBlock();
408 $template->setCurrentBlock(
"answer_image");
409 $template->setVariable(
"ANSWER_IMAGE_URL", $answer->getImageWebPath());
410 list($width, $height, $type, $attr) = getimagesize($answer->getImageFsPath());
411 $alt = $answer->getImageFile();
412 if (strlen($answer->getAnswertext()))
414 $alt = $answer->getAnswertext();
416 $alt = preg_replace(
"/<[^>]*?>/",
"", $alt);
417 $template->setVariable(
"ATTR", $attr);
420 $template->parseCurrentBlock();
424 if( $showInlineFeedback )
429 $template->setCurrentBlock(
"answer_row");
430 $template->setVariable(
"ANSWER_ID", $answer_id);
431 $template->setVariable(
"ANSWER_TEXT", $this->object->prepareTextareaOutput($answer->getAnswertext(), TRUE));
432 $template->setVariable(
'VALUE_TRUE', 1);
433 $template->setVariable(
'VALUE_FALSE', 0);
435 if( isset($user_solution[$answer->getPosition()]) )
437 $tplVar = $user_solution[$answer->getPosition()] ?
'CHECKED_ANSWER_TRUE' :
'CHECKED_ANSWER_FALSE';
438 $template->setVariable($tplVar,
" checked=\"checked\"");
441 $template->parseCurrentBlock();
444 $questiontext = $this->
object->getQuestion();
445 $template->setVariable(
"QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE));
447 $template->setVariable(
"INSTRUCTIONTEXT", $this->object->getInstructionTextTranslation(
448 $this->lng, $this->object->getOptionLabel()
451 $template->setVariable(
"OPTION_LABEL_TRUE", $this->object->getTrueOptionLabelTranslation(
452 $this->lng, $this->object->getOptionLabel()
455 $template->setVariable(
"OPTION_LABEL_FALSE", $this->object->getFalseOptionLabelTranslation(
456 $this->lng, $this->object->getOptionLabel()
459 $questionoutput = $template->get();
460 $pageoutput = $this->
outQuestionPage(
"", $is_postponed, $active_id, $questionoutput);
468 public function getPreview($show_question_only = FALSE, $showInlineFeedback =
false)
475 include_once
"./Services/UICore/classes/class.ilTemplate.php";
476 $template =
new ilTemplate(
"tpl.il_as_qpl_mc_kprim_output.html", TRUE, TRUE,
"Modules/TestQuestionPool");
478 foreach ($keys as $answer_id)
480 $answer = $this->
object->getAnswer($answer_id);
481 if (strlen($answer->getImageFile()))
483 if ($this->object->getThumbSize())
485 $template->setCurrentBlock(
"preview");
486 $template->setVariable(
"URL_PREVIEW", $answer->getImageWebPath());
487 $template->setVariable(
"TEXT_PREVIEW", $this->lng->txt(
'preview'));
489 $template->setVariable(
"ANSWER_IMAGE_URL", $answer->getThumbWebPath());
490 list($width, $height, $type, $attr) = getimagesize($answer->getImageFsPath());
491 $alt = $answer->getImageFile();
492 if (strlen($answer->getAnswertext()))
494 $alt = $answer->getAnswertext();
496 $alt = preg_replace(
"/<[^>]*?>/",
"", $alt);
499 $template->parseCurrentBlock();
503 $template->setCurrentBlock(
"answer_image");
504 $template->setVariable(
"ANSWER_IMAGE_URL", $answer->getImageWebPath());
505 list($width, $height, $type, $attr) = getimagesize($answer->getImageFsPath());
506 $alt = $answer->getImageFile();
507 if (strlen($answer->getAnswertext()))
509 $alt = $answer->getAnswertext();
511 $alt = preg_replace(
"/<[^>]*?>/",
"", $alt);
512 $template->setVariable(
"ATTR", $attr);
515 $template->parseCurrentBlock();
519 if( $showInlineFeedback )
524 $template->setCurrentBlock(
"answer_row");
525 $template->setVariable(
"ANSWER_ID", $answer_id);
526 $template->setVariable(
"ANSWER_TEXT", $this->object->prepareTextareaOutput($answer->getAnswertext(), TRUE));
527 $template->setVariable(
'VALUE_TRUE', 1);
528 $template->setVariable(
'VALUE_FALSE', 0);
530 if( isset($user_solution[$answer->getPosition()]) )
532 $tplVar = $user_solution[$answer->getPosition()] ?
'CHECKED_ANSWER_TRUE' :
'CHECKED_ANSWER_FALSE';
533 $template->setVariable($tplVar,
" checked=\"checked\"");
536 $template->parseCurrentBlock();
538 $questiontext = $this->
object->getQuestion();
539 $template->setVariable(
"QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE));
541 $template->setVariable(
"INSTRUCTIONTEXT", $this->object->getInstructionTextTranslation(
542 $this->lng, $this->object->getOptionLabel()
545 $template->setVariable(
"OPTION_LABEL_TRUE", $this->object->getTrueOptionLabelTranslation(
546 $this->lng, $this->object->getOptionLabel()
549 $template->setVariable(
"OPTION_LABEL_FALSE", $this->object->getFalseOptionLabelTranslation(
550 $this->lng, $this->object->getOptionLabel()
553 $questionoutput = $template->get();
554 if (!$show_question_only)
559 return $questionoutput;
576 $graphicalOutput = FALSE,
577 $result_output = FALSE,
578 $show_question_only = TRUE,
579 $show_feedback = FALSE,
580 $show_correct_solution = FALSE,
581 $show_manual_scoring = FALSE,
582 $show_question_text = TRUE
589 $user_solution = array();
590 if (($active_id > 0) && (!$show_correct_solution))
592 $solutions =& $this->
object->getSolutionValues($active_id,
$pass);
593 foreach ($solutions as $idx => $solution_value)
595 $user_solution[$solution_value[
'value1']] = $solution_value[
'value2'];
601 foreach ($this->object->getAnswers() as $answer)
603 $user_solution[$answer->getPosition()] = $answer->getCorrectness();
608 $template =
new ilTemplate(
"tpl.il_as_qpl_mc_kprim_output_solution.html", TRUE, TRUE,
"Modules/TestQuestionPool");
610 foreach ($keys as $answer_id)
612 $answer = $this->
object->getAnswer($answer_id);
614 if (($active_id > 0) && (!$show_correct_solution))
616 if ($graphicalOutput)
620 if( $user_solution[$answer->getPosition()] == $answer->getCorrectness() )
622 $template->setCurrentBlock(
"icon_ok");
624 $template->setVariable(
"TEXT_OK", $this->lng->txt(
"answer_is_right"));
625 $template->parseCurrentBlock();
629 $template->setCurrentBlock(
"icon_ok");
631 $template->setVariable(
"TEXT_NOT_OK", $this->lng->txt(
"answer_is_wrong"));
632 $template->parseCurrentBlock();
636 if (strlen($answer->getImageFile()))
638 $template->setCurrentBlock(
"answer_image");
639 if ($this->object->getThumbSize())
641 $template->setVariable(
"ANSWER_IMAGE_URL", $answer->getThumbWebPath());
645 $template->setVariable(
"ANSWER_IMAGE_URL", $answer->getImageWebPath());
650 $template->parseCurrentBlock();
658 $template->setCurrentBlock(
"answer_row");
659 $template->setVariable(
"ANSWER_TEXT", $this->object->prepareTextareaOutput($answer->getAnswertext(), TRUE));
663 if( isset($user_solution[$answer->getPosition()]) )
665 if( $user_solution[$answer->getPosition()] )
668 $template->setVariable(
"SOLUTION_ALT_TRUE", $this->lng->txt(
"checked"));
670 $template->setVariable(
"SOLUTION_ALT_FALSE", $this->lng->txt(
"unchecked"));
675 $template->setVariable(
"SOLUTION_ALT_TRUE", $this->lng->txt(
"unchecked"));
677 $template->setVariable(
"SOLUTION_ALT_FALSE", $this->lng->txt(
"checked"));
683 $template->setVariable(
"SOLUTION_ALT_TRUE", $this->lng->txt(
"unchecked"));
685 $template->setVariable(
"SOLUTION_ALT_FALSE", $this->lng->txt(
"unchecked"));
690 $template->setVariable(
'SOL_QID', $this->object->getId());
691 $template->setVariable(
'SOL_SUFFIX', $show_correct_solution ?
'bestsolution' :
'usersolution');
692 $template->setVariable(
'SOL_POSITION', $answer->getPosition());
694 $template->setVariable(
'SOL_TRUE_VALUE', 1);
695 $template->setVariable(
'SOL_FALSE_VALUE', 0);
697 if( isset($user_solution[$answer->getPosition()]) )
699 if( $user_solution[$answer->getPosition()] )
701 $template->setVariable(
'SOL_TRUE_CHECKED',
'checked');
705 $template->setVariable(
'SOL_FALSE_CHECKED',
'checked');
710 $template->parseCurrentBlock();
713 if ($show_question_text==
true)
715 $questiontext = $this->
object->getQuestion();
716 $template->setVariable(
"QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE));
718 $template->setVariable(
"INSTRUCTIONTEXT", $this->object->getInstructionTextTranslation(
719 $this->lng, $this->object->getOptionLabel()
723 $template->setVariable(
"OPTION_LABEL_TRUE", $this->object->getTrueOptionLabelTranslation(
724 $this->lng, $this->object->getOptionLabel()
727 $template->setVariable(
"OPTION_LABEL_FALSE", $this->object->getFalseOptionLabelTranslation(
728 $this->lng, $this->object->getOptionLabel()
732 $questionoutput = $template->get();
735 $solutiontemplate =
new ilTemplate(
"tpl.il_as_tst_solution_output.html",TRUE, TRUE,
"Modules/TestQuestionPool");
737 if (strlen($feedback))
743 $solutiontemplate->setVariable(
"ILC_FB_CSS_CLASS", $cssClass);
744 $solutiontemplate->setVariable(
"FEEDBACK", $this->object->prepareTextareaOutput( $feedback,
true ));
747 $solutiontemplate->setVariable(
"SOLUTION_OUTPUT", $questionoutput);
749 $solutionoutput = $solutiontemplate->get();
751 if (!$show_question_only)
756 return $solutionoutput;
761 $choiceKeys = array_keys($this->object->getAnswers());
763 if( $this->object->isShuffleAnswersEnabled() )
765 $choiceKeys = $this->
object->getShuffler()->shuffle($choiceKeys);
773 require_once
'Modules/TestQuestionPool/classes/feedback/class.ilAssConfigurableMultiOptionQuestionFeedback.php';
777 if($user_solution[$answer_id])
779 $fb = $this->
object->feedbackOBJ->getSpecificAnswerFeedbackTestPresentation($this->object->getId(), $answer_id);
782 $template->setCurrentBlock(
"feedback");
783 $template->setVariable(
"FEEDBACK", $this->object->prepareTextareaOutput($fb,
true));
784 $template->parseCurrentBlock();
791 $fb = $this->
object->feedbackOBJ->getSpecificAnswerFeedbackTestPresentation($this->object->getId(), $answer_id);
794 $template->setCurrentBlock(
"feedback");
795 $template->setVariable(
"FEEDBACK", $this->object->prepareTextareaOutput($fb,
true));
796 $template->parseCurrentBlock();
802 $answer = $this->
object->getAnswer($answer_id);
804 if($answer->getCorrectness())
806 $fb = $this->
object->feedbackOBJ->getSpecificAnswerFeedbackTestPresentation($this->object->getId(), $answer_id);
809 $template->setCurrentBlock(
"feedback");
810 $template->setVariable(
"FEEDBACK", $this->object->prepareTextareaOutput($fb,
true));
811 $template->parseCurrentBlock();
856 $this->
aggregateAnswers( $relevant_answers, $this->object->getAnswers() ) )->get();
858 return '<pre>'.print_r($relevant_answers, 1).
'</pre>';
863 $trueOptionLabel = $this->
object->getTrueOptionLabelTranslation($this->lng, $this->object->getOptionLabel());
864 $falseOptionLabel = $this->
object->getFalseOptionLabelTranslation($this->lng, $this->object->getOptionLabel());
866 $tpl =
new ilTemplate(
'tpl.il_as_aggregated_kprim_answers_table.html',
true,
true,
"Modules/TestQuestionPool");
868 foreach( $aggregate as $lineData )
870 $tpl->setCurrentBlock(
'aggregaterow');
871 $tpl->setVariable(
'OPTION', $lineData[
'answertext']);
872 $tpl->setVariable(
'COUNT_TRUE', $lineData[
'count_true']);
873 $tpl->setVariable(
'COUNT_FALSE', $lineData[
'count_false']);
874 $tpl->parseCurrentBlock();
877 $tpl->setVariable(
'OPTION_HEAD', $this->lng->txt(
'answers'));
878 $tpl->setVariable(
'COUNT_TRUE_HEAD', $trueOptionLabel);
879 $tpl->setVariable(
'COUNT_FALSE_HEAD', $falseOptionLabel);
886 $aggregate = array();
888 foreach( $answers as $answer )
891 'answertext' => $answer->getAnswerText(),
'count_true' => 0,
'count_false' => 0
894 foreach( $rawSolutionData as $solutionRecord )
896 if( $solutionRecord[
'value1'] == $answer->getPosition() )
898 if( $solutionRecord[
'value2'] )
900 $answerAgg[
'count_true']++;
904 $answerAgg[
'count_false']++;
910 $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)
writePostData()
Evaluates a posted edit form and writes the form data in the question object.
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)
getTestOutputSolutions($activeId, $pass)
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
isContentEditingOutputMode()
Basic GUI class for assessment questions.
static getHtmlPath($relative_path)
get url of path
getPreview($show_question_only=FALSE, $showInlineFeedback=false)
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()
const FEEDBACK_SETTING_ALL
editQuestion(ilPropertyFormGUI $form=null)
static secureString($a_str, $a_strip_html=true, $a_allow="")
Remove unsecure tags.
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)