From 5eeead4633b95fb4df0a5f318ec2ae4939ed0de6 Mon Sep 17 00:00:00 2001 From: Matheus Zych Date: Tue, 24 Feb 2026 13:45:09 +0100 Subject: [PATCH] Fixes long menu question point correction modal closing issue by moving rendered modals outside of form scope --- .../ILIAS/Form/classes/class.ilFormGUI.php | 8 ++++++ .../classes/class.ilModalFormInputGUI.php | 26 +++++++++++++++++++ .../Form/classes/class.ilPropertyFormGUI.php | 3 +++ .../Form/templates/default/tpl.form.html | 1 + ...class.ilAssLongmenuCorrectionsInputGUI.php | 18 +++++++++---- .../tst.longmenu_corrections_input.html | 1 - 6 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 components/ILIAS/Form/classes/class.ilModalFormInputGUI.php diff --git a/components/ILIAS/Form/classes/class.ilFormGUI.php b/components/ILIAS/Form/classes/class.ilFormGUI.php index 49b043156872..938e367890bd 100755 --- a/components/ILIAS/Form/classes/class.ilFormGUI.php +++ b/components/ILIAS/Form/classes/class.ilFormGUI.php @@ -33,6 +33,7 @@ class ilFormGUI protected string $name = ''; protected string $target = ''; protected bool $prevent_double_submission = false; + protected array $modals = []; public function setFormAction(string $a_formaction): void { @@ -181,6 +182,13 @@ public function getHTML(): string if (!$this->getKeepOpen()) { $tpl->setVariable("FORM_CLOSE_TAG", ""); } + + if ($this->modals !== []) { + global $DIC; + $tpl->setVariable("MODALS", $DIC->ui()->renderer()->render($this->modals)); + $tpl->parseCurrentBlock(); + } + return $tpl->get(); } diff --git a/components/ILIAS/Form/classes/class.ilModalFormInputGUI.php b/components/ILIAS/Form/classes/class.ilModalFormInputGUI.php new file mode 100644 index 000000000000..fe14d187948b --- /dev/null +++ b/components/ILIAS/Form/classes/class.ilModalFormInputGUI.php @@ -0,0 +1,26 @@ +items as $item) { if ($item->getType() != "hidden") { $this->insertItem($item); + if ($item instanceof ilModalFormInputGUI && ($modal = $item->getModal())) { + $this->modals[] = $modal; + } } } diff --git a/components/ILIAS/Form/templates/default/tpl.form.html b/components/ILIAS/Form/templates/default/tpl.form.html index 59cae26b4d1b..8f4c31136f9b 100755 --- a/components/ILIAS/Form/templates/default/tpl.form.html +++ b/components/ILIAS/Form/templates/default/tpl.form.html @@ -3,3 +3,4 @@ {FORM_CONTENT} {FORM_CLOSE_TAG} +{MODALS} diff --git a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssLongmenuCorrectionsInputGUI.php b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssLongmenuCorrectionsInputGUI.php index 3b79b4e74671..07c06f40d154 100755 --- a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssLongmenuCorrectionsInputGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssLongmenuCorrectionsInputGUI.php @@ -16,6 +16,8 @@ * *********************************************************************/ +use ILIAS\UI\Component\Modal\Lightbox; + /** * Class ilAssLongmenuCorrectionsInputGUI * @@ -24,10 +26,12 @@ * * @package components\ILIAS/Test(QuestionPool) */ -class ilAssLongmenuCorrectionsInputGUI extends ilAnswerWizardInputGUI +class ilAssLongmenuCorrectionsInputGUI extends ilAnswerWizardInputGUI implements ilModalFormInputGUI { private \ILIAS\DI\UIServices $ui; + private ?Lightbox $modal = null; + public function __construct($a_title = "", $a_postvar = "") { global $DIC; @@ -41,21 +45,25 @@ public function checkInput(): bool return true; } + public function getModal(): ?Lightbox + { + return $this->modal; + } + public function insert(ilTemplate $a_tpl): void { // Get input - $inp = new ilTextWizardInputGUI('', ''); + $inp = new ilTextWizardInputGUI($this->getTitle(), $this->getPostVar()); $inp->setValues(current($this->values['answers_all'])); $inp->setDisabled(true); $message = $inp->render(); $page = $this->ui->factory()->modal()->lightboxTextPage($message, $this->lng->txt('answer_options')); - $modal = $this->ui->factory()->modal()->lightbox($page); - $button = $this->ui->factory()->button()->standard($this->lng->txt('show'), $modal->getShowSignal()); + $this->modal = $this->ui->factory()->modal()->lightbox($page); + $button = $this->ui->factory()->button()->standard($this->lng->txt('show'), $this->modal->getShowSignal()); $tpl = new ilTemplate('tst.longmenu_corrections_input.html', true, true, 'components/ILIAS/TestQuestionPool'); - $tpl->setVariable('ANSWERS_MODAL', $this->ui->renderer()->render($modal)); $tpl->setVariable('TAG_INPUT', $this->buildTagInput()->render()); $tpl->setVariable('NUM_ANSWERS', $this->values['answers_all_count']); $tpl->setVariable('BTN_SHOW', $this->ui->renderer()->render($button)); diff --git a/components/ILIAS/TestQuestionPool/templates/default/tst.longmenu_corrections_input.html b/components/ILIAS/TestQuestionPool/templates/default/tst.longmenu_corrections_input.html index fe2de16d48eb..965692d08e25 100755 --- a/components/ILIAS/TestQuestionPool/templates/default/tst.longmenu_corrections_input.html +++ b/components/ILIAS/TestQuestionPool/templates/default/tst.longmenu_corrections_input.html @@ -2,5 +2,4 @@

{TXT_ANSWERS} {NUM_ANSWERS} {BTN_SHOW}

{TXT_CORRECT_ANSWERS}

{TAG_INPUT} - {ANSWERS_MODAL} \ No newline at end of file