ILIAS  trunk Revision v12.0_alpha-1329-g1094ddb0c33
assLongMenuGUI Class Reference
+ Inheritance diagram for assLongMenuGUI:
+ Collaboration diagram for assLongMenuGUI:

Public Member Functions

 getCommand ($cmd)
 
 writeQuestionSpecificPostData (ilPropertyFormGUI $form)
 Extracts the question specific values from the request and applies them to the data object. More...
 
 editQuestion (bool $checkonly=false, ?bool $is_save_cmd=null)
 
 populateQuestionSpecificFormPart (ilPropertyFormGUI $form)
 Adds the question specific forms parts to a question property form gui. More...
 
 populateAnswerSpecificFormPart (ilPropertyFormGUI $form)
 
 getSolutionOutput (int $active_id, ?int $pass=null, bool $graphical_output=false, bool $result_output=false, bool $show_question_only=true, bool $show_feedback=false, bool $show_correct_solution=false, bool $show_manual_scoring=false, bool $show_question_text=true, bool $show_inline_feedback=true)
 
 renderSolutionOutput (mixed $user_solutions, int $active_id, ?int $pass, bool $graphical_output=false, bool $result_output=false, bool $show_question_only=true, bool $show_feedback=false, bool $show_correct_solution=false, bool $show_manual_scoring=false, bool $show_question_text=true, bool $show_autosave_title=false, bool $show_inline_feedback=false,)
 
 getPreview (bool $show_question_only=false, bool $show_inline_feedback=false)
 
 getTestOutput (int $active_id, int $pass, bool $is_question_postponed=false, array|bool $user_post_solutions=false, bool $show_specific_inline_feedback=false)
 
 getSpecificFeedbackOutput (array $userSolution)
 Returns the answer specific feedback for the question. More...
 
 getAfterParticipationSuppressionQuestionPostVars ()
 Returns a list of postvars which will be suppressed in the form output when used in scoring adjustment. More...
 
 getLongMenuTextWithInputFieldsInsteadOfGaps ($user_solution=[], $solution=false, $graphical=false)
 
 getSubQuestionsIndex ()
 
 getAnswersFrequency ($relevantAnswers, $questionIndex)
 
 getAnswerFrequencyTableGUI ($parentGui, $parentCmd, $relevantAnswers, $questionIndex)
 
 populateCorrectionsFormProperties (ilPropertyFormGUI $form)
 
 saveCorrectionsFormProperties (ilPropertyFormGUI $form)
 
- Public Member Functions inherited from assQuestionGUI
 editQuestion (bool $checkonly=false, ?bool $is_save_cmd=null)
 
 getSpecificFeedbackOutput (array $userSolution)
 Returns the answer specific feedback for the question. More...
 
 getSolutionOutput (int $active_id, ?int $pass=null, bool $graphical_output=false, bool $result_output=false, bool $show_question_only=true, bool $show_feedback=false, bool $show_correct_solution=false, bool $show_manual_scoring=false, bool $show_question_text=true, bool $show_inline_feedback=true)
 
 getPreview (bool $show_question_only=false, bool $show_inline_feedback=false)
 
 getTestOutput (int $active_id, int $pass, bool $is_question_postponed=false, array|bool $user_post_solutions=false, bool $show_specific_inline_feedback=false)
 
 renderSolutionOutput (mixed $user_solutions, int $active_id, ?int $pass, bool $graphical_output=false, bool $result_output=false, bool $show_question_only=true, bool $show_feedback=false, bool $show_correct_solution=false, bool $show_manual_scoring=false, bool $show_question_text=true, bool $show_autosave_title=false, bool $show_inline_feedback=false,)
 
 getObject ()
 
 setObject (assQuestion $question)
 
 setCopyToExistingPoolOnSave (?int $pool_ref_id)
 
 getCopyToExistingPoolOnSave ()
 
 setCopyToNewPoolOnSave (?string $pool_title)
 
 getCopyToNewPoolOnSave ()
 
 setMoveAfterQuestionId (?int $question_id)
 
 getMoveAfterQuestionId ()
 
 hasInlineFeedback ()
 
 addHeaderAction ()
 
 redrawHeaderAction ()
 
 getHeaderAction ()
 
 getCommentsPanelHTML ()
 
 executeCommand ()
 
 getType ()
 needed for page editor compliance More...
 
 getPresentationContext ()
 
 setPresentationContext (string $presentationContext)
 
 isTestPresentationContext ()
 
 isPreviousSolutionPrefilled ()
 
 setPreviousSolutionPrefilled (bool $previousSolutionPrefilled)
 
 getRenderPurpose ()
 
 setRenderPurpose (string $renderPurpose)
 
 isRenderPurposePrintPdf ()
 
 isRenderPurposePreview ()
 
 isRenderPurposeInputValue ()
 
 isRenderPurposePlayback ()
 
 isRenderPurposeDemoplay ()
 
 renderPurposeSupportsFormHtml ()
 
 getEditContext ()
 
 setEditContext (string $editContext)
 
 isAuthoringEditContext ()
 
 isAdjustmentEditContext ()
 
 setAdjustmentEditContext ()
 
 getNavigationGUI ()
 
 setNavigationGUI (?ilTestQuestionNavigationGUI $navigationGUI)
 
 setTaxonomyIds (array $taxonomyIds)
 
 getTaxonomyIds ()
 
 setTargetGui ($linkTargetGui)
 
 setTargetGuiClass (string $targetGuiClass)
 
 getTargetGuiClass ()
 
 setQuestionHeaderBlockBuilder (\ilQuestionHeaderBlockBuilder $questionHeaderBlockBuilder)
 
 getQuestionHeaderBlockBuilder ()
 
 setQuestionActionCmd (string $questionActionCmd)
 
 getQuestionActionCmd ()
 
 assessment ()
 
 populateJavascriptFilesRequiredForWorkForm (ilGlobalTemplateInterface $tpl)
 
 getPresentationJavascripts ()
 
 getQuestionTemplate ()
 
 getILIASPage (string $html="")
 Returns the ILIAS Page around a question. More...
 
 outQuestionPage ($a_temp_var, $a_postponed=false, $active_id="", $html="", $inlineFeedbackEnabled=false)
 
 syncQuestion ()
 
 saveReturn ()
 
 saveQuestion ()
 
 setAdditionalContentEditingModeFromPost ()
 
 getContextPath ($cont_obj, int $a_endnode_id, int $a_startnode_id=1)
 get context path in content object tree More...
 
 setSequenceNumber (int $nr)
 
 getSequenceNumber ()
 
 setQuestionCount (int $a_question_count)
 
 getQuestionCount ()
 
 getErrorMessage ()
 
 setErrorMessage (string $errormessage)
 
 addErrorMessage (string $errormessage)
 
 getQuestionType ()
 
 getAsValueAttribute (string $a_value)
 
 addQuestionFormCommandButtons (ilPropertyFormGUI $form)
 
 addBasicQuestionFormProperties (ilPropertyFormGUI $form)
 
 getGenericFeedbackOutput (int $active_id, ?int $pass)
 
 getGenericFeedbackOutputForCorrectSolution ()
 
 getGenericFeedbackOutputForIncorrectSolution ()
 
 outQuestionType ()
 
 saveSuggestedSolution ()
 
 cancelSuggestedSolution ()
 
 suggestedsolution (bool $save=false)
 
 outSolutionExplorer ()
 
 saveSuggestedSolutionType ()
 
 cancelExplorer ()
 
 outPageSelector ()
 
 outChapterSelector ()
 
 outGlossarySelector ()
 
 linkChilds ()
 
 addPG ()
 
 addST ()
 
 addGIT ()
 
 isSaveCommand ()
 
 setQuestionTabs ()
 
 addTab_SuggestedSolution (ilTabsGUI $tabs, string $classname)
 
 getEditQuestionTabCommands ()
 
 isAutosaveable ()
 
 outQuestionForTest (string $formaction, int $active_id, ?int $pass, bool $is_question_postponed=false, array|bool $user_post_solutions=false, bool $show_specific_inline_feedback=false)
 
 magicAfterTestOutput ()
 
 getFormEncodingType ()
 
 setPreviewSession (ilAssQuestionPreviewSession $preview_session)
 
 getPreviewSession ()
 
 buildFocusAnchorHtml ()
 
 isAnswerFrequencyStatisticSupported ()
 
 getSubQuestionsIndex ()
 
 getAnswersFrequency ($relevantAnswers, $questionIndex)
 
 getAnswerFrequencyTableGUI ($parentGui, $parentCmd, $relevantAnswers, $questionIndex)
 
 prepareReprintableCorrectionsForm (ilPropertyFormGUI $form)
 
 populateCorrectionsFormProperties (ilPropertyFormGUI $form)
 
 saveCorrectionsFormProperties (ilPropertyFormGUI $form)
 
 isInLearningModuleContext ()
 
 setInLearningModuleContext (bool $flag)
 
 cmdNeedsExistingQuestion (string $cmd)
 
 setContextAllowsSyncToPool (bool $sync_allowed)
 
 needsSyncQuery ()
 
 getQuestionSyncModal (string $cmd, string $cmd_class='')
 
 getAutoSavedSolutionOutput (int $active_id, int $pass, bool $graphical_output=false, bool $result_output=false, bool $show_question_only=true, bool $show_feedback=false, bool $show_correct_solution=false, bool $show_manual_scoring=false, bool $show_question_text=true, bool $show_autosave_title=false, bool $show_inline_feedback=false)
 
 buildFileDownloadLink ()
 
 populateQuestionSpecificFormPart (ilPropertyFormGUI $form)
 Adds the question specific forms parts to a question property form gui. More...
 
 writeQuestionSpecificPostData (ilPropertyFormGUI $form)
 Extracts the question specific values from the request and applies them to the data object. More...
 
 getAfterParticipationSuppressionQuestionPostVars ()
 Returns a list of postvars which will be suppressed in the form output when used in scoring adjustment. More...
 

Protected Member Functions

 writePostData (bool $always=false)
 {Evaluates a posted edit form and writes the form data in the question object.
Returns
integer A positive value, if one of the required fields wasn't set, else 0
} More...
 
 buildEditForm ()
 
 getTemplateForPreviewAndTest (array $user_solution)
 
- Protected Member Functions inherited from assQuestionGUI
 hasSpecialQuestionCommands ()
 
 writePostData (bool $always=false)
 Evaluates a posted edit form and writes the form data in the question object. More...
 
 renderEditForm (ilPropertyFormGUI $form)
 
 getUseUnchangedAnswerCheckboxHtml ()
 
 getPreviousSolutionProvidedMessage ()
 
 getPreviousSolutionConfirmationCheckboxHtml ()
 
 setTestSpecificProperties ()
 
 addNumberOfTriesToFormIfNecessary (ilPropertyFormGUI $form)
 
 saveTaxonomyAssignments ()
 
 populateTaxonomyFormSection (ilPropertyFormGUI $form)
 
 genericFeedbackOutputBuilder (int $active_id, ?int $pass)
 
 getTypeOptions ()
 
 createSuggestedSolutionLinkingTo (string $type, string $target)
 
 setDefaultTabs (ilTabsGUI $tabs_gui)
 
 setQuestionSpecificTabs (ilTabsGUI $tabs_gui)
 
 getBasicEditQuestionTabCommands ()
 
 getAdditionalEditQuestionCommands ()
 
 addTab_QuestionFeedback (ilTabsGUI $tabs)
 
 addTab_Question (ilTabsGUI $tabs_gui)
 
 hasCorrectSolution ($activeId, $passIndex)
 
 writeQuestionGenericPostData ()
 
 completeTestOutputFormAction (string $form_action, int $active_id, int $pass)
 
 addBackTab (ilTabsGUI $tabs_gui)
 
 buildBasicEditFormObject ()
 
 escapeTemplatePlaceholders (string $text)
 
 buildEditForm ()
 
 generateCorrectnessIconsForCorrectness (int $correctness)
 
 renderLatex ($content)
 Wrap content with latex in a LatexContent UI component and render it to be processed by MathJax in the browser. More...
 
 getSuggestedSolutionsRepo ()
 
 cleanupAnswerText (array $answer_text, bool $is_rte)
 sk - 12.05.2023: This is one more of those that we need, but don't want. More...
 
 addSaveOnEnterOnLoadCode ()
 
 resetSavedPreviewSession ()
 

Private Member Functions

 verifyAnswerOptions ()
 
 stripSlashesRecursive (array $data)
 
 trimArrayRecursive (array $data)
 
 getModalHtml (string &$modal_id)
 
 getTextGapTemplate ($key, $value, $solution, $ok=false, $graphical=false)
 
 getSelectGapTemplate ($key, $answers, $user_value, $solution, $ok=false, $graphical=false)
 

Private Attributes

const DEFAULT_MODAL_ID = 'ilGapModal'
 
readonly UIFactory $ui_factory
 
readonly UIRenderer $ui_renderer
 

Additional Inherited Members

- Static Public Member Functions inherited from assQuestionGUI
static _getQuestionGUI (string $question_type='', int $question_id=-1)
 Creates a question gui representation and returns the alias to the question gui. More...
 
static getCommandsFromClassConstants (string $guiClassName, string $cmdConstantNameBegin='CMD_')
 
static prepareTextareaOutput (?string $txt_output, bool $prepare_for_latex_output=false, bool $omitNl2BrWhenTextArea=false)
 Prepares a string for a text area output where latex code may be in it If the text is HTML-free, CHR(13) will be converted to a line break. More...
 
- Data Fields inherited from assQuestionGUI
const ALLOWED_PLAIN_TEXT_TAGS = "<em>, <strong>"
 sk - 12.05.2023: This const is also used in ilKprimChoiceWizardInputGUI. More...
 
const SESSION_PREVIEW_DATA_BASE_INDEX = 'ilAssQuestionPreviewAnswers'
 
const FORM_MODE_EDIT = 'edit'
 
const FORM_MODE_ADJUST = 'adjust'
 
const FORM_ENCODING_URLENCODE = 'application/x-www-form-urlencoded'
 
const FORM_ENCODING_MULTIPART = 'multipart/form-data'
 
const CORRECTNESS_NOT_OK = 0
 
const CORRECTNESS_MOSTLY_OK = 1
 
const CORRECTNESS_OK = 2
 
const RENDER_PURPOSE_PLAYBACK = 'renderPurposePlayback'
 
const RENDER_PURPOSE_DEMOPLAY = 'renderPurposeDemoplay'
 
const RENDER_PURPOSE_PREVIEW = 'renderPurposePreview'
 
const RENDER_PURPOSE_PRINT_PDF = 'renderPurposePrintPdf'
 
const RENDER_PURPOSE_INPUT_VALUE = 'renderPurposeInputValue'
 
const EDIT_CONTEXT_AUTHORING = 'authoring'
 
const EDIT_CONTEXT_ADJUSTMENT = 'adjustment'
 
const PRESENTATION_CONTEXT_TEST = 'pContextTest'
 
const PRESENTATION_CONTEXT_RESULTS = 'pContextResults'
 
const CMD_SYNC_QUESTION_AND_RETURN = 'syncQuestionReturn'
 
- Protected Attributes inherited from assQuestionGUI
const HAS_SPECIAL_QUESTION_COMMANDS = false
 
const SUGGESTED_SOLUTION_COMMANDS_CANCEL = 'cancelSuggestedSolution'
 
const SUGGESTED_SOLUTION_COMMANDS_SAVE = 'saveSuggestedSolution'
 
const SUGGESTED_SOLUTION_COMMANDS_DEFAULT = 'suggestedsolution'
 
const QUESTION_SAVE_CMDS
 
const ADDITIONAL_CMDS_NEEDING_EXISTING_QST
 There are functions that need an existing question. More...
 
UIServices $ui
 
ilLogger $logger
 
GeneralQuestionPropertiesRepository $questionrepository
 
GUIService $notes_gui
 
ilCtrl $ctrl
 
assQuestion $object
 
ilGlobalPageTemplate $tpl
 
ilLanguage $lng
 
Refinery $refinery
 
 $error
 
string $errormessage
 
int $sequence_no
 sequence number in test More...
 
int $question_count
 question count in test More...
 
ilPropertyFormGUI $editForm = null
 
readonly ilTestLegacyFormsHelper $forms_helper
 
readonly RequestDataCollector $request_data_collector
 
bool $parent_type_is_lm = false
 
SuggestedSolutionsDatabaseRepository $suggestedsolution_repo = null
 

Detailed Description

Definition at line 29 of file class.assLongMenuGUI.php.

Member Function Documentation

◆ buildEditForm()

assLongMenuGUI::buildEditForm ( )
protected
Returns
ilPropertyFormGUI

Reimplemented from assQuestionGUI.

Definition at line 178 of file class.assLongMenuGUI.php.

179 {
180 $form = $this->buildBasicEditFormObject();
181 $this->addQuestionFormCommandButtons($form);
182 $this->addBasicQuestionFormProperties($form);
184 $this->populateTaxonomyFormSection($form);
185
186 return $form;
187 }
populateQuestionSpecificFormPart(ilPropertyFormGUI $form)
Adds the question specific forms parts to a question property form gui.
populateTaxonomyFormSection(ilPropertyFormGUI $form)
addBasicQuestionFormProperties(ilPropertyFormGUI $form)
addQuestionFormCommandButtons(ilPropertyFormGUI $form)
This class represents a property form user interface.

Referenced by editQuestion(), and writePostData().

+ Here is the caller graph for this function:

◆ editQuestion()

assLongMenuGUI::editQuestion ( bool  $checkonly = false,
?bool  $is_save_cmd = null 
)

Reimplemented from assQuestionGUI.

Definition at line 154 of file class.assLongMenuGUI.php.

157 : bool {
158 $form = $this->editForm;
159 if ($form === null) {
160 $form = $this->buildEditForm();
161 }
162
163 /*
164 * sk 29.01.2025: This is a god aw-ful hack and one more sign,
165 * that the flow here needs to change, but we need this to set the
166 * question id on question creation (see: https://mantis.ilias.de/view.php?id=43705)
167 */
168 if ($this->object->getId() > 0) {
169 $this->ctrl->setParameterByClass(self::class, 'q_id', $this->object->getId());
170 }
171 $form->setFormAction($this->ctrl->getFormActionByClass(self::class));
172 $this->renderEditForm($form);
173 return false;
174 }
renderEditForm(ilPropertyFormGUI $form)
ilPropertyFormGUI $editForm

References buildEditForm().

Referenced by writePostData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getAfterParticipationSuppressionQuestionPostVars()

assLongMenuGUI::getAfterParticipationSuppressionQuestionPostVars ( )

Returns a list of postvars which will be suppressed in the form output when used in scoring adjustment.

The form elements will be shown disabled, so the users see the usual form but can only edit the settings, which make sense in the given context.

E.g. array('cloze_type', 'image_filename')

Returns
string[]

Implements ilGuiQuestionScoringAdjustable.

Definition at line 519 of file class.assLongMenuGUI.php.

519 : array
520 {
521 return [];
522 }

◆ getAnswerFrequencyTableGUI()

assLongMenuGUI::getAnswerFrequencyTableGUI (   $parentGui,
  $parentCmd,
  $relevantAnswers,
  $questionIndex 
)

Reimplemented from assQuestionGUI.

Definition at line 648 of file class.assLongMenuGUI.php.

649 {
650 global $DIC; /* @var ILIAS\DI\Container $DIC */
651
652 $table = parent::getAnswerFrequencyTableGUI(
653 $parentGui,
654 $parentCmd,
655 $relevantAnswers,
656 $questionIndex
657 );
658
659 $table->setTitle(
660 sprintf(
661 $DIC->language()->txt('tst_corrections_answers_tbl_subindex'),
662 $DIC->language()->txt('longmenu') . ' ' . ($questionIndex + 1)
663 )
664 );
665
666 return $table;
667 }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
global $DIC
Definition: shib_login.php:26

References $DIC.

◆ getAnswersFrequency()

assLongMenuGUI::getAnswersFrequency (   $relevantAnswers,
  $questionIndex 
)

Reimplemented from assQuestionGUI.

Definition at line 625 of file class.assLongMenuGUI.php.

625 : array
626 {
627 $answers = [];
628
629 foreach ($relevantAnswers as $row) {
630 if ($row['value1'] != $questionIndex) {
631 continue;
632 }
633
634 if (!isset($answers[$row['value2']])) {
635 //$label = $this->getAnswerTextLabel($row['value1'], $row['value2']);
636
637 $answers[$row['value2']] = [
638 'answer' => $row['value2'], 'frequency' => 0
639 ];
640 }
641
642 $answers[$row['value2']]['frequency']++;
643 }
644
645 return $answers;
646 }

◆ getCommand()

assLongMenuGUI::getCommand (   $cmd)

Definition at line 50 of file class.assLongMenuGUI.php.

51 {
52 return $cmd;
53 }

◆ getLongMenuTextWithInputFieldsInsteadOfGaps()

assLongMenuGUI::getLongMenuTextWithInputFieldsInsteadOfGaps (   $user_solution = [],
  $solution = false,
  $graphical = false 
)

Definition at line 524 of file class.assLongMenuGUI.php.

524 : string
525 {
526 $return_value = '';
527 $text_array = preg_split("/\\[" . assLongMenu::GAP_PLACEHOLDER . " (\\d+)\\]/", $this->object->getLongMenuTextValue());
528 $correct_answers = $this->object->getCorrectAnswers();
529 $answers = $this->object->getAnswers();
530 foreach ($text_array as $key => $value) {
531 $answer_is_correct = false;
532 $user_value = '';
533 $return_value .= ilLegacyFormElementsUtil::prepareTextareaOutput($value, true);
534 if ($key < sizeof($text_array) - 1) {
535 if (!array_key_exists($key, $correct_answers)) {
536 $this->tpl->setOnScreenMessage('failure', $this->lng->txt('longmenu_answeroptions_differ'));
537 continue;
538 }
539 if ($correct_answers[$key][2] === assLongMenu::ANSWER_TYPE_TEXT_VAL) {
540 if (array_key_exists($key, $user_solution)) {
541 $user_value = $user_solution[$key];
542 if (in_array($user_value, $correct_answers[$key][0])) {
543 $answer_is_correct = true;
544 }
545 }
546
547 $return_value .= $this->getTextGapTemplate($key, $user_value, $solution, $answer_is_correct, $graphical);
548 } elseif ($correct_answers[$key][2] === assLongMenu::ANSWER_TYPE_SELECT_VAL) {
549 if (array_key_exists($key, $user_solution)) {
550 $user_value = $user_solution[$key];
551 if (in_array($user_value, $correct_answers[$key][0])) {
552 $answer_is_correct = true;
553 }
554 }
555 $return_value .= $this->getSelectGapTemplate($key, $answers[$key], $user_value, $solution, $answer_is_correct, $graphical);
556 }
557 }
558 }
559 return $return_value;
560 }
getSelectGapTemplate($key, $answers, $user_value, $solution, $ok=false, $graphical=false)
getTextGapTemplate($key, $value, $solution, $ok=false, $graphical=false)
const ANSWER_TYPE_TEXT_VAL
const ANSWER_TYPE_SELECT_VAL
static prepareTextareaOutput(string $txt_output, bool $prepare_for_latex_output=false, bool $omitNl2BrWhenTextArea=false)
Prepares a string for a text area output where latex code may be in it If the text is HTML-free,...

References assLongMenu\ANSWER_TYPE_SELECT_VAL, assLongMenu\ANSWER_TYPE_TEXT_VAL, assLongMenu\GAP_PLACEHOLDER, ILIAS\Repository\lng(), ILIAS\Repository\object(), and ilLegacyFormElementsUtil\prepareTextareaOutput().

+ Here is the call graph for this function:

◆ getModalHtml()

assLongMenuGUI::getModalHtml ( string &  $modal_id)
private

Definition at line 314 of file class.assLongMenuGUI.php.

314 : string
315 {
316 $modal = $this->ui_factory->modal()->interruptive('', '', '');
317 $doc = new DOMDocument();
318 @$doc->loadHTML($this->ui_renderer->render($modal));
319 $dialogs = $doc->getElementsByTagName('dialog');
320 $modal_id = $dialogs->item(0)->attributes->getNamedItem('id')->nodeValue ?? self::DEFAULT_MODAL_ID;
321 return $doc->saveHTML();
322 }

◆ getPreview()

assLongMenuGUI::getPreview ( bool  $show_question_only = false,
bool  $show_inline_feedback = false 
)

Reimplemented from assQuestionGUI.

Definition at line 432 of file class.assLongMenuGUI.php.

435 : string {
436 $user_solution = is_object($this->getPreviewSession()) ? (array) $this->getPreviewSession()->getParticipantsSolution() : [];
437 $user_solution = array_values($user_solution);
438
439 $template = $this->getTemplateForPreviewAndTest($user_solution);
440
441 $question_output = $template->get();
442 if (!$show_question_only) {
443 $question_output = $this->getILIASPage($question_output);
444 }
445 return $question_output;
446 }
getTemplateForPreviewAndTest(array $user_solution)
getILIASPage(string $html="")
Returns the ILIAS Page around a question.

◆ getSelectGapTemplate()

assLongMenuGUI::getSelectGapTemplate (   $key,
  $answers,
  $user_value,
  $solution,
  $ok = false,
  $graphical = false 
)
private

Definition at line 585 of file class.assLongMenuGUI.php.

585 : string
586 {
587 $tpl = new ilTemplate("tpl.il_as_qpl_longmenu_question_select_gap.html", true, true, "components/ILIAS/TestQuestionPool");
588 $tpl->setVariable('KEY', $key);
589 if ($solution) {
590 $tpl->setVariable('DISABLED', 'disabled');
591 $tpl->setVariable('JS_IGNORE', '_ignore');
592 $tpl->setCurrentBlock('best_solution');
593 if ($user_value == -1) {
594 $tpl->setVariable("SOLUTION", $this->lng->txt("please_select"));
595 } else {
596 $tpl->setVariable('SOLUTION', $user_value);
597 }
598 if ($graphical) {
599 $correctness_icon = $this->generateCorrectnessIconsForCorrectness(self::CORRECTNESS_NOT_OK);
600 if ($ok) {
601 $correctness_icon = $this->generateCorrectnessIconsForCorrectness(self::CORRECTNESS_OK);
602 }
603 $tpl->setVariable("ICON_OK", $correctness_icon);
604 }
606 } else {
607 $tpl->setVariable("PLEASE_SELECT", $this->lng->txt("please_select"));
608 foreach ($answers as $value) {
609 $tpl->setCurrentBlock('select_option');
610 $tpl->setVariable('VALUE', $value);
611 if ($value == $user_value) {
612 $tpl->setVariable('SELECTED', 'selected');
613 }
615 }
616 }
617 return $tpl->get();
618 }
ilGlobalPageTemplate $tpl
generateCorrectnessIconsForCorrectness(int $correctness)
setCurrentBlock(string $blockname=self::DEFAULT_BLOCK)
Sets the template to the given block.
get(string $part=self::DEFAULT_BLOCK)
Renders the given block and returns the html string.
setVariable(string $variable, $value='')
Sets the given variable to the given value.
parseCurrentBlock(string $blockname=self::DEFAULT_BLOCK)
Parses the given block.
special template class to simplify handling of ITX/PEAR

References ILIAS\Repository\lng().

+ Here is the call graph for this function:

◆ getSolutionOutput()

assLongMenuGUI::getSolutionOutput ( int  $active_id,
?int  $pass = null,
bool  $graphical_output = false,
bool  $result_output = false,
bool  $show_question_only = true,
bool  $show_feedback = false,
bool  $show_correct_solution = false,
bool  $show_manual_scoring = false,
bool  $show_question_text = true,
bool  $show_inline_feedback = true 
)

Reimplemented from assQuestionGUI.

Definition at line 333 of file class.assLongMenuGUI.php.

344 : string {
345 if (($active_id > 0) && (!$show_correct_solution)) {
346 $user_solutions = $this->object->getSolutionValues($active_id, $pass, true);
347 } else {
348 $user_solutions = [];
349 foreach ($this->object->getCorrectAnswersForQuestionSolution($this->object->getId()) as $idx => $val) {
350 $user_solutions[] = [
351 'value1' => $idx,
352 'value2' => $val,
353 ];
354 }
355 }
356
357 return $this->renderSolutionOutput(
358 $user_solutions,
359 $active_id,
360 $pass,
361 $graphical_output,
362 $result_output,
363 $show_question_only,
364 $show_feedback,
365 $show_correct_solution,
366 $show_manual_scoring,
367 $show_question_text,
368 false,
369 $show_inline_feedback
370 );
371 }
renderSolutionOutput(mixed $user_solutions, int $active_id, ?int $pass, bool $graphical_output=false, bool $result_output=false, bool $show_question_only=true, bool $show_feedback=false, bool $show_correct_solution=false, bool $show_manual_scoring=false, bool $show_question_text=true, bool $show_autosave_title=false, bool $show_inline_feedback=false,)

◆ getSpecificFeedbackOutput()

assLongMenuGUI::getSpecificFeedbackOutput ( array  $userSolution)

Returns the answer specific feedback for the question.

Parameters
array$userSolution($userSolution[<value1>] = <value2>)

Reimplemented from assQuestionGUI.

Definition at line 484 of file class.assLongMenuGUI.php.

484 : string
485 {
486 if (!$this->object->feedbackOBJ->specificAnswerFeedbackExists()) {
487 return '';
488 }
489
490 $feedback = '<table class="test_specific_feedback"><tbody>';
491 $gaps = $this->object->getCorrectAnswers();
492 foreach ($gaps as $index => $answer) {
493 $caption = assLongMenu::GAP_PLACEHOLDER . ' ';
494 $caption .= $index + 1 . ': ';
495
496 $feedback .= '<tr><td>';
497
498 $feedback .= $caption . '</td><td>';
499 $feedback .= $this->object->feedbackOBJ->getSpecificAnswerFeedbackTestPresentation(
500 $this->object->getId(),
501 0,
502 $index
503 ) . '</td> </tr>';
504 }
505 $feedback .= '</tbody></table>';
507 }

References assLongMenu\GAP_PLACEHOLDER, ILIAS\Repository\object(), and ilLegacyFormElementsUtil\prepareTextareaOutput().

+ Here is the call graph for this function:

◆ getSubQuestionsIndex()

assLongMenuGUI::getSubQuestionsIndex ( )

Reimplemented from assQuestionGUI.

Definition at line 620 of file class.assLongMenuGUI.php.

620 : array
621 {
622 return array_keys($this->object->getAnswers());
623 }

References ILIAS\Repository\object().

+ Here is the call graph for this function:

◆ getTemplateForPreviewAndTest()

assLongMenuGUI::getTemplateForPreviewAndTest ( array  $user_solution)
protected

Definition at line 470 of file class.assLongMenuGUI.php.

470 : ilTemplate
471 {
472 $template = new ilTemplate('tpl.il_as_qpl_longmenu_question_output.html', true, true, 'components/ILIAS/TestQuestionPool');
473 $this->tpl->addJavaScript('assets/js/longMenuQuestionPlayer.js');
474 $this->tpl->addOnLoadCode('il.test.player.longmenu.init('
475 . $this->object->getMinAutoComplete() . ', '
476 . json_encode($this->object->getAvailableAnswerOptions())
477 . ')');
478
479 $template->setVariable('QUESTIONTEXT', $this->renderLatex($this->renderLatex($this->object->getQuestionForHTMLOutput())));
480 $template->setVariable('LONGMENU_TEXT', $this->getLongMenuTextWithInputFieldsInsteadOfGaps($user_solution));
481 return $template;
482 }
getLongMenuTextWithInputFieldsInsteadOfGaps($user_solution=[], $solution=false, $graphical=false)
renderLatex($content)
Wrap content with latex in a LatexContent UI component and render it to be processed by MathJax in th...

References ILIAS\Repository\object().

+ Here is the call graph for this function:

◆ getTestOutput()

assLongMenuGUI::getTestOutput ( int  $active_id,
int  $pass,
bool  $is_question_postponed = false,
array|bool  $user_post_solutions = false,
bool  $show_specific_inline_feedback = false 
)

Reimplemented from assQuestionGUI.

Definition at line 448 of file class.assLongMenuGUI.php.

454 : string {
455 $user_solution = [];
456 if ($active_id) {
457 $solutions = $this->object->getUserSolutionPreferingIntermediate($active_id, $pass);
458 foreach ($solutions as $idx => $solution_value) {
459 $user_solution[$solution_value['value1']] = $solution_value['value2'];
460 }
461 }
462
463 $template = $this->getTemplateForPreviewAndTest($user_solution);
464
465 $question_output = $template->get();
466 $page_output = $this->outQuestionPage('', $is_question_postponed, $active_id, $question_output);
467 return $page_output;
468 }
outQuestionPage($a_temp_var, $a_postponed=false, $active_id="", $html="", $inlineFeedbackEnabled=false)

◆ getTextGapTemplate()

assLongMenuGUI::getTextGapTemplate (   $key,
  $value,
  $solution,
  $ok = false,
  $graphical = false 
)
private

Definition at line 562 of file class.assLongMenuGUI.php.

562 : string
563 {
564 $tpl = new ilTemplate('tpl.il_as_qpl_longmenu_question_text_gap.html', true, true, 'components/ILIAS/TestQuestionPool');
565 if ($solution) {
566 $tpl->setVariable('DISABLED', 'disabled');
567 $tpl->setVariable('JS_IGNORE', '_ignore');
568 if ($graphical) {
569 $correctness_icon = $this->generateCorrectnessIconsForCorrectness(self::CORRECTNESS_NOT_OK);
570 if ($ok) {
571 $correctness_icon = $this->generateCorrectnessIconsForCorrectness(self::CORRECTNESS_OK);
572 }
573 $tpl->setVariable("ICON_OK", $correctness_icon);
574 }
575 }
576 if ($solution) {
577 $tpl->setVariable('SIZE', 'size="' . mb_strlen($value) . '"');
578 }
579 $tpl->setVariable('VALUE', htmlentities($value));
580 $tpl->setVariable('KEY', $key);
581
582 return $tpl->get();
583 }

◆ populateAnswerSpecificFormPart()

assLongMenuGUI::populateAnswerSpecificFormPart ( ilPropertyFormGUI  $form)
Parameters
ilPropertyFormGUI$form
Returns
ilPropertyFormGUI

Definition at line 328 of file class.assLongMenuGUI.php.

329 {
330 return $form;
331 }

◆ populateCorrectionsFormProperties()

assLongMenuGUI::populateCorrectionsFormProperties ( ilPropertyFormGUI  $form)

Reimplemented from assQuestionGUI.

Definition at line 669 of file class.assLongMenuGUI.php.

669 : void
670 {
671 $correct_answers = $this->object->getCorrectAnswers();
672
673 foreach ($this->object->getAnswers() as $lm_index => $lm) {
674 $lm_values = [
675 'answers_all' => [0 => $lm],
676 'answers_all_count' => count($lm),
677 'answers_correct' => $correct_answers[$lm_index][0]
678 ];
679
680 $lm_points = $correct_answers[$lm_index][1];
681
682 $section = new ilFormSectionHeaderGUI();
683 $section->setTitle($this->lng->txt('longmenu') . ' ' . ($lm_index + 1));
684 $form->addItem($section);
685
686 $lm_input = new ilAssLongmenuCorrectionsInputGUI(
687 $this->lng->txt('answers'),
688 'longmenu_' . $lm_index
689 );
690
691 $lm_input->setRequired(true);
692
693 $lm_input->setValues($lm_values);
694
695 $form->addItem($lm_input);
696
697 $points_inp = new ilNumberInputGUI($this->lng->txt("points"), 'points_' . $lm_index);
698 $points_inp->setRequired(true);
699 $points_inp->allowDecimals(true);
700 $points_inp->setSize(4);
701 $points_inp->setMinValue(0);
702 $points_inp->setMinvalueShouldBeGreater(false);
703 $points_inp->setValue($lm_points);
704 $form->addItem($points_inp);
705 }
706 }
This class represents a section header in a property form.
This class represents a number property in a property form.

References ilPropertyFormGUI\addItem(), ILIAS\Repository\lng(), and ILIAS\Repository\object().

+ Here is the call graph for this function:

◆ populateQuestionSpecificFormPart()

assLongMenuGUI::populateQuestionSpecificFormPart ( ilPropertyFormGUI  $form)

Adds the question specific forms parts to a question property form gui.

Implements ilGuiQuestionScoringAdjustable.

Definition at line 189 of file class.assLongMenuGUI.php.

190 {
191 $long_menu_text = new ilTextAreaInputGUI($this->lng->txt("longmenu_text"), 'longmenu_text');
192 $long_menu_text->setRequired(true);
193 $long_menu_text->setRows(10);
194 $long_menu_text->setCols(80);
195 if (!$this->object->getSelfAssessmentEditingMode()) {
196 if ($this->object->getAdditionalContentEditingMode() == assQuestion::ADDITIONAL_CONTENT_EDITING_MODE_RTE) {
197 $long_menu_text->setRteTags(ilRTESettings::_getUsedHTMLTags("assessment"));
198 $long_menu_text->setRTESupport($this->object->getId(), "qpl", "assessment");
199 $long_menu_text->setUseRte(true);
200 }
201 } else {
203 $long_menu_text->setUseTagsForRteOnly(false);
204 }
205
206 $long_menu_text->setValue($this->object->getLongMenuTextValue());
207 $form->addItem($long_menu_text);
208
209 $tpl = new ilTemplate('tpl.il_as_qpl_longmenu_question_gap_button_code.html', true, true, 'components/ILIAS/TestQuestionPool');
210 $tpl->setVariable('INSERT_GAP', $this->lng->txt('insert_gap'));
212 $button = new ilCustomInputGUI('&nbsp;', '');
213 $button->setHtml($tpl->get());
214 $form->addItem($button);
215
216 $min_auto_complete = new ilNumberInputGUI($this->lng->txt('min_auto_complete'), 'min_auto_complete');
217
218 $auto_complete = $this->object->getMinAutoComplete();
219 if ($auto_complete === 0) {
221 }
222 $min_auto_complete->setDecimals(0);
223 $min_auto_complete->setValue($auto_complete);
224 $min_auto_complete->setMinValue(1);
225 $min_auto_complete->setMaxValue(99);
226 $min_auto_complete->setSize(5);
227 $form->addItem($min_auto_complete);
228 // identical scoring
229 $identical_scoring = new ilCheckboxInputGUI($this->lng->txt('identical_scoring'), 'identical_scoring');
230 $identical_scoring->setValue(1);
231 $identical_scoring->setChecked($this->object->getIdenticalScoring());
232 $identical_scoring->setInfo($this->lng->txt('identical_scoring_desc'));
233 $identical_scoring->setRequired(false);
234 $form->addItem($identical_scoring);
235 $hidden_text = new ilHiddenInputGUI('hidden_text_files');
236 $form->addItem($hidden_text);
237
238 $hidden_correct = new ilHiddenInputGUI('hidden_correct_answers');
239 $form->addItem($hidden_correct);
240
241 $long_menu_language = [
242 'edit' => '[' . $this->lng->txt('edit') . ']',
243 'type' => $this->lng->txt('type'),
244 'answers' => $this->lng->txt('answers'),
245 'answer_options' => $this->lng->txt('answer_options'),
246 'correct_answers' => $this->lng->txt('correct_answers') . ':',
247 'add_answers' => '[' . $this->lng->txt('add_answers') . ']',
248 'manual_editing' => $this->lng->txt('manual_editing')
249 ];
250
251 $question_parts = [
252 'list' => json_decode($this->object->getJsonStructure()) ?? [],
253 'gap_placeholder' => assLongMenu::GAP_PLACEHOLDER,
254 'last_updated_element' => 0,
255 'replacement_word' => '',
256 'filereader_usable' => false,
257 'max_input_fields' => assLongMenu::MAX_INPUT_FIELDS
258 ];
259 $answers = $this->object->getAnswersObject();
260
261 if ($this->request_data_collector->isset('hidden_text_files')) {
262 $question_parts['list'] = json_decode($this->request_data_collector->raw('hidden_correct_answers')) ?? [];
263 $answers = $this->request_data_collector->raw('hidden_text_files');
264 }
265
266 $this->tpl->addJavaScript('assets/js/longMenuQuestionGapBuilder.js');
267 $this->tpl->addJavaScript('assets/js/longMenuQuestion.js');
268 $tpl = new ilTemplate("tpl.il_as_qpl_longmenu_question_gap.html", true, true, "components/ILIAS/TestQuestionPool");
269 $tpl->setVariable('MAX_INPUT_FIELDS', assLongMenu::MAX_INPUT_FIELDS);
270 $tpl->setVariable('GAP_PLACEHOLDER', assLongMenu::GAP_PLACEHOLDER);
271 $tpl->setVariable('SELECT_BOX', $this->lng->txt('insert_gap'));
272 $tpl->setVariable("SELECT", $this->lng->txt('answers_select'));
273 $tpl->setVariable("TEXT", $this->lng->txt('answers_text_box'));
274 $tpl->setVariable("POINTS", $this->lng->txt('points'));
275 $tpl->setVariable("INFO_TEXT_UPLOAD", $this->lng->txt('info_text_upload'));
276 $tpl->setVariable("TXT_BROWSE", $this->lng->txt('select_file'));
277 $tpl->setVariable('POINTS_ERROR', $this->lng->txt('enter_enough_positive_points'));
278 $tpl->setVariable('AUTOCOMPLETE_ERROR', $this->lng->txt('autocomplete_error'));
279 $tpl->setVariable('MISSING_VALUE', $this->lng->txt('msg_input_is_required'));
280 $tpl->setVariable('SAVE', $this->lng->txt('save'));
281 $tpl->setVariable('CANCEL', $this->lng->txt('cancel'));
282 $tpl->setVariable('ADD_BUTTON', $this->ui_renderer->render(
283 $this->ui_factory->button()->shy('', '')->withSymbol($this->ui_factory->symbol()->glyph()->add())
284 ));
285 $tpl->setVariable('REMOVE_BUTTON', $this->ui_renderer->render(
286 $this->ui_factory->button()->shy('', '')->withSymbol($this->ui_factory->symbol()->glyph()->remove())
287 ));
288 $tag_input = new ilTagInputGUI();
289 $tag_input->setPostVar('taggable');
290 $tag_input->setJsSelfInit(false);
291 $tag_input->setTypeAheadMinLength(1);
292 $tpl->setVariable('TAGGING_PROTOTYPE', $tag_input->render(''));
293
294 $modal_id = self::DEFAULT_MODAL_ID;
295 $tpl->setVariable('MY_MODAL', $this->getModalHtml($modal_id));
297 $this->tpl->addOnLoadCode(
298 'longMenuQuestion.Init(' .
299 implode(', ', [
300 json_encode($long_menu_language),
301 json_encode($question_parts),
302 $answers === '' ? '{}' : $answers,
303 json_encode($modal_id)
304 ])
305 . ');'
306 );
307
308 $button = new ilCustomInputGUI('&nbsp;', '');
309 $button->setHtml($tpl->get());
310 $form->addItem($button);
311 return $form;
312 }
getModalHtml(string &$modal_id)
const MIN_LENGTH_AUTOCOMPLETE
const ADDITIONAL_CONTENT_EDITING_MODE_RTE
static getSelfAssessmentTags()
Get tags allowed in question tags in self assessment mode.
This class represents a checkbox property in a property form.
This class represents a custom property in a property form.
This class represents a hidden form property in a property form.
static _getUsedHTMLTags(string $module='')
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This class represents a text area property in a property form.

References ilRTESettings\_getUsedHTMLTags(), ilPropertyFormGUI\addItem(), assQuestion\ADDITIONAL_CONTENT_EDITING_MODE_RTE, assLongMenu\GAP_PLACEHOLDER, ilAssSelfAssessmentQuestionFormatter\getSelfAssessmentTags(), ILIAS\Repository\lng(), assLongMenu\MAX_INPUT_FIELDS, assLongMenu\MIN_LENGTH_AUTOCOMPLETE, and ILIAS\Repository\object().

+ Here is the call graph for this function:

◆ renderSolutionOutput()

assLongMenuGUI::renderSolutionOutput ( mixed  $user_solutions,
int  $active_id,
?int  $pass,
bool  $graphical_output = false,
bool  $result_output = false,
bool  $show_question_only = true,
bool  $show_feedback = false,
bool  $show_correct_solution = false,
bool  $show_manual_scoring = false,
bool  $show_question_text = true,
bool  $show_autosave_title = false,
bool  $show_inline_feedback = false 
)

Reimplemented from assQuestionGUI.

Definition at line 373 of file class.assLongMenuGUI.php.

386 : ?string {
387
388 $user_solution = [];
389 foreach ($user_solutions as $idx => $solution_value) {
390 $user_solution[$solution_value["value1"]] = $solution_value["value2"];
391 }
392
393 $template = new ilTemplate("tpl.il_as_qpl_longmenu_question_output_solution.html", true, true, "components/ILIAS/TestQuestionPool");
394 if ($show_question_text) {
395 $template->setVariable("QUESTIONTEXT", $this->renderLatex($this->object->getQuestionForHTMLOutput()));
396 }
397 $template->setVariable('LONGMENU_TEXT_SOLUTION', $this->getLongMenuTextWithInputFieldsInsteadOfGaps($user_solution, true, $graphical_output));
398
399 $solution_template = new ilTemplate("tpl.il_as_tst_solution_output.html", true, true, "components/ILIAS/TestQuestionPool");
400 $question_output = $template->get();
401 $feedback = '';
402 if ($show_feedback) {
403 if (!$this->isTestPresentationContext()) {
404 $fb = $this->getGenericFeedbackOutput((int) $active_id, $pass);
405 $feedback .= strlen($fb) ? $fb : '';
406 }
407
408 $fb = $this->getSpecificFeedbackOutput([]);
409 $feedback .= strlen($fb) ? $fb : '';
410 }
411 if (strlen($feedback)) {
412 $cssClass = (
413 $this->hasCorrectSolution($active_id, $pass) ?
415 );
416
417 $solution_template->setVariable("ILC_FB_CSS_CLASS", $cssClass);
418 $solution_template->setVariable("FEEDBACK", ilLegacyFormElementsUtil::prepareTextareaOutput($feedback, true));
419 }
420
421 $solution_template->setVariable("SOLUTION_OUTPUT", $question_output);
422
423 $solution_output = $solution_template->get();
424
425 if (!$show_question_only) {
426 $solution_output = $this->getILIASPage($solution_output);
427 }
428
429 return $solution_output;
430 }
getSpecificFeedbackOutput(array $userSolution)
Returns the answer specific feedback for the question.
getGenericFeedbackOutput(int $active_id, ?int $pass)
hasCorrectSolution($activeId, $passIndex)

◆ saveCorrectionsFormProperties()

assLongMenuGUI::saveCorrectionsFormProperties ( ilPropertyFormGUI  $form)

Reimplemented from assQuestionGUI.

Definition at line 708 of file class.assLongMenuGUI.php.

708 : void
709 {
710 $correct_answers = $this->object->getCorrectAnswers();
711
712 foreach ($this->object->getAnswers() as $lm_index => $lm) {
713 $points_input = (float) str_replace(',', '.', $form->getInput('points_' . $lm_index));
714 $correct_answers_input = (array) $form->getInput('longmenu_' . $lm_index . '_tags');
715
716 foreach ($correct_answers_input as $idx => $answer) {
717 if (in_array($answer, $lm)) {
718 continue;
719 }
720
721 unset($correct_answers_input[$idx]);
722 }
723
724 $correct_answers[$lm_index][0] = array_values($correct_answers_input);
725 $correct_answers[$lm_index][1] = $points_input;
726 }
727
728 $this->object->setCorrectAnswers($correct_answers);
729 }
getInput(string $a_post_var, bool $ensureValidation=true)
Returns the input of an item, if item provides getInput method and as fallback the value of the HTTP-...

References ilPropertyFormGUI\getInput(), and ILIAS\Repository\object().

+ Here is the call graph for this function:

◆ stripSlashesRecursive()

assLongMenuGUI::stripSlashesRecursive ( array  $data)
private

Definition at line 122 of file class.assLongMenuGUI.php.

122 : array
123 {
124 return array_map(
125 function (int|string|array $v): int|string|array {
126 if (is_array($v)) {
127 return $this->stripSlashesRecursive($v);
128 }
129 if (is_int($v)) {
130 return $v;
131 }
132 return ilUtil::stripSlashes($v);
133 },
134 $data
135 );
136 }
stripSlashesRecursive(array $data)
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")

References $data, ilUtil\stripSlashes(), and stripSlashesRecursive().

Referenced by stripSlashesRecursive(), verifyAnswerOptions(), and writeQuestionSpecificPostData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ trimArrayRecursive()

assLongMenuGUI::trimArrayRecursive ( array  $data)
private

Definition at line 138 of file class.assLongMenuGUI.php.

138 : array
139 {
140 return array_map(
141 function (int|string|array $v): int|string|array {
142 if (is_array($v)) {
143 return $this->trimArrayRecursive($v);
144 }
145 if (is_int($v)) {
146 return $v;
147 }
148 return trim($v);
149 },
150 $data
151 );
152 }
trimArrayRecursive(array $data)

References $data, and trimArrayRecursive().

Referenced by trimArrayRecursive(), and writeQuestionSpecificPostData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ verifyAnswerOptions()

assLongMenuGUI::verifyAnswerOptions ( )
private

Definition at line 97 of file class.assLongMenuGUI.php.

97 : bool
98 {
99 $longmenu_text = $this->request_data_collector->raw('longmenu_text') ?? '';
100 $hidden_text_files = $this->request_data_collector->raw('hidden_text_files') ?? '';
101 $answer_options_from_text = preg_split(
102 "/\\[" . assLongMenu::GAP_PLACEHOLDER . " (\\d+)\\]/",
103 $longmenu_text
104 );
105
106 $answer_options_from_files = $this->stripSlashesRecursive(json_decode($hidden_text_files));
107 if (count($answer_options_from_text) - 1 !== count($answer_options_from_files)) {
108 $this->tpl->setOnScreenMessage('failure', $this->lng->txt('longmenu_answeroptions_differ'));
109 return false;
110 }
111
112 $correct_answers = $this->stripSlashesRecursive(json_decode($this->request_data_collector->raw('hidden_correct_answers')));
113 foreach ($correct_answers as $answer) {
114 if (!is_numeric(str_replace(',', '.', $answer[1]))) {
115 $this->tpl->setOnScreenMessage('failure', $this->lng->txt('points_non_numeric_or_negative_msg'));
116 return false;
117 }
118 }
119 return true;
120 }

References assLongMenu\GAP_PLACEHOLDER, ILIAS\Repository\lng(), and stripSlashesRecursive().

Referenced by writePostData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ writePostData()

assLongMenuGUI::writePostData ( bool  $always = false)
protected

{Evaluates a posted edit form and writes the form data in the question object.

Returns
integer A positive value, if one of the required fields wasn't set, else 0
}

Reimplemented from assQuestionGUI.

Definition at line 58 of file class.assLongMenuGUI.php.

58 : int
59 {
60 $this->editForm = $this->buildEditForm();
61 $this->editForm->setValuesByPost();
62 $check = $this->editForm->checkInput() && $this->verifyAnswerOptions();
63
64 if (!$check) {
65 $this->editQuestion();
66 return 1;
67 }
69 $this->writeQuestionSpecificPostData($this->editForm);
70 $custom_check = $this->object->checkQuestionCustomPart($this->editForm);
71 if (!$custom_check) {
72 $this->tpl->setOnScreenMessage('failure', $this->lng->txt('form_input_not_valid'));
73 $this->editQuestion();
74 return 1;
75 }
77 return 0;
78 }
$check
Definition: buildRTE.php:81
editQuestion(bool $checkonly=false, ?bool $is_save_cmd=null)
writeQuestionSpecificPostData(ilPropertyFormGUI $form)
Extracts the question specific values from the request and applies them to the data object.

References $check, buildEditForm(), editQuestion(), ILIAS\Repository\lng(), assQuestionGUI\saveTaxonomyAssignments(), verifyAnswerOptions(), assQuestionGUI\writeQuestionGenericPostData(), and writeQuestionSpecificPostData().

+ Here is the call graph for this function:

◆ writeQuestionSpecificPostData()

assLongMenuGUI::writeQuestionSpecificPostData ( ilPropertyFormGUI  $form)

Extracts the question specific values from the request and applies them to the data object.

Implements ilGuiQuestionScoringAdjustable.

Definition at line 80 of file class.assLongMenuGUI.php.

80 : void
81 {
82 $min_auto_complete = (int) ($form->getInput('min_auto_complete') ?? assLongMenu::MIN_LENGTH_AUTOCOMPLETE);
83 $hidden_text_files = $this->request_data_collector->string('hidden_text_files');
84 $hidden_correct_answers = $this->request_data_collector->string('hidden_correct_answers');
85 $long_menu_type = $this->request_data_collector->raw('long_menu_type') ?? [];
86 $this->object->setLongMenuTextValue($this->request_data_collector->string('longmenu_text'));
87 $this->object->setAnswers($this->trimArrayRecursive($this->stripSlashesRecursive(json_decode($hidden_text_files))));
88 $this->object->setCorrectAnswers($this->trimArrayRecursive($this->stripSlashesRecursive(json_decode($hidden_correct_answers))));
89 $this->object->setAnswerType(ilArrayUtil::stripSlashesRecursive($long_menu_type));
90 $this->object->setQuestion($this->request_data_collector->string('question'));
91 $this->object->setMinAutoComplete($min_auto_complete);
92 $this->object->setIdenticalScoring($this->request_data_collector->int('identical_scoring'));
93
95 }
static stripSlashesRecursive($a_data, bool $a_strip_html=true, string $a_allow="")

References ilPropertyFormGUI\getInput(), ILIAS\Repository\int(), assLongMenu\MIN_LENGTH_AUTOCOMPLETE, assQuestionGUI\saveTaxonomyAssignments(), ilArrayUtil\stripSlashesRecursive(), stripSlashesRecursive(), and trimArrayRecursive().

Referenced by writePostData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Field Documentation

◆ $ui_factory

readonly UIFactory assLongMenuGUI::$ui_factory
private

Definition at line 33 of file class.assLongMenuGUI.php.

◆ $ui_renderer

readonly UIRenderer assLongMenuGUI::$ui_renderer
private

Definition at line 34 of file class.assLongMenuGUI.php.

◆ DEFAULT_MODAL_ID

const assLongMenuGUI::DEFAULT_MODAL_ID = 'ilGapModal'
private

Definition at line 31 of file class.assLongMenuGUI.php.


The documentation for this class was generated from the following file: