From a838d4f6a962c20cd4ed812223062e02a3f49316 Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Mon, 28 Oct 2024 16:40:41 +0000
Subject: [PATCH] allow rendering of forms outside of dialog, fixes #4775

Closes #4775

Merge request studip/studip!3567
---
 lib/classes/StudipController.php |  3 ++-
 lib/classes/forms/Form.php       | 14 ++++++++++++--
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/lib/classes/StudipController.php b/lib/classes/StudipController.php
index f99511c543d..f749bd0d602 100644
--- a/lib/classes/StudipController.php
+++ b/lib/classes/StudipController.php
@@ -585,7 +585,8 @@ abstract class StudipController extends Trails\Controller
 
     public function render_form(\Studip\Forms\Form $form)
     {
-        $this->render_text($form->render());
+        \NotificationCenter::postNotification('FormWillRender', $form);
+        $this->render_template($form->getTemplate(), $this->layout);
     }
 
     /**
diff --git a/lib/classes/forms/Form.php b/lib/classes/forms/Form.php
index a734e6fa6c0..0148c9ccb81 100644
--- a/lib/classes/forms/Form.php
+++ b/lib/classes/forms/Form.php
@@ -2,6 +2,8 @@
 
 namespace Studip\Forms;
 
+use Flexi\Template;
+
 class Form extends Part
 {
 
@@ -495,12 +497,20 @@ class Form extends Part
      * @return string
      * @throws \Flexi\TemplateNotFoundException
      */
-    public function render()
+    public function render(string|Template $layout = null)
     {
         \NotificationCenter::postNotification('FormWillRender', $this);
+        return $this->getTemplate()->render([], $layout);
+    }
+
+    /**
+     * Returns the template used for this form populated with this form object.
+     */
+    public function getTemplate(): Template
+    {
         $template = $GLOBALS['template_factory']->open('forms/form');
         $template->form = $this;
-        return $template->render();
+        return $template;
     }
 
     /**
-- 
GitLab