From cd6c6dc2f678f473e4830ab463f727498d686382 Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Thu, 1 Feb 2024 14:36:49 +0000
Subject: [PATCH] fixes #3678

Closes #3678

Merge request studip/studip!2575
---
 app/controllers/registration.php              |  7 ++--
 lib/classes/forms/Form.php                    |  1 +
 .../assets/javascripts/bootstrap/forms.js     | 36 ++++++++-----------
 3 files changed, 21 insertions(+), 23 deletions(-)

diff --git a/app/controllers/registration.php b/app/controllers/registration.php
index edb6b42d0ed..de866836778 100644
--- a/app/controllers/registration.php
+++ b/app/controllers/registration.php
@@ -1,4 +1,7 @@
 <?php
+
+use Studip\Forms\Form;
+
 class RegistrationController extends AuthenticatedController
 {
     protected $allow_nobody = true;
@@ -14,7 +17,7 @@ class RegistrationController extends AuthenticatedController
     {
         $new_user = new User();
 
-        $this->registrationform = \Studip\Forms\Form::fromSORM(
+        $this->registrationform = Form::fromSORM(
             $new_user,
             [
                 'legend' => _('Herzlich willkommen!'),
@@ -108,7 +111,7 @@ class RegistrationController extends AuthenticatedController
         $this->registrationform->setCancelButtonName(URLHelper::getURL('index.php?cancel_login=1'));
 
         $this->registrationform->addStoreCallback(
-            function ($form) {
+            function (Form $form) {
                 $new_user = $form->getLastPart()->getContextObject();
 
                 $GLOBALS['sess']->regenerate_session_id(['auth']);
diff --git a/lib/classes/forms/Form.php b/lib/classes/forms/Form.php
index fb3ff10b143..5e27895455f 100644
--- a/lib/classes/forms/Form.php
+++ b/lib/classes/forms/Form.php
@@ -318,6 +318,7 @@ class Form extends Part
                     }
                 }
             }
+            header('Content-Type: application/json');
             echo json_encode($output);
             page_close();
             die();
diff --git a/resources/assets/javascripts/bootstrap/forms.js b/resources/assets/javascripts/bootstrap/forms.js
index dbd4613f6ef..e379d422f1f 100644
--- a/resources/assets/javascripts/bootstrap/forms.js
+++ b/resources/assets/javascripts/bootstrap/forms.js
@@ -323,11 +323,10 @@ STUDIP.ready(function () {
                             let v = this;
                             this.STUDIPFORM_VALIDATIONNOTES = [];
 
-                            let validation_promise = new Promise(function (resolve, reject) {
+                            return new Promise((resolve, reject) => {
                                 let validated = v.$el.checkValidity();
 
                                 $(v.$el).find('input, select, textarea').each(function () {
-                                    let name = $(this).attr('name');
                                     if (!this.validity.valid) {
                                         let note = {
                                             name: this.name,
@@ -362,35 +361,30 @@ STUDIP.ready(function () {
                                         v.STUDIPFORM_VALIDATIONNOTES.push(note);
                                     }
                                 });
-                                if (v.STUDIPFORM_SERVERVALIDATION) {
 
+                                if (v.STUDIPFORM_SERVERVALIDATION) {
                                     let params = v.getFormValues();
+                                    if (v.STUDIPFORM_AUTOSAVEURL) {
+                                        params.STUDIPFORM_AUTOSTORE = 1;
+                                    }
                                     params.STUDIPFORM_SERVERVALIDATION = 1;
 
-                                    $.ajax({
-                                        url: v.STUDIPFORM_VALIDATION_URL,
-                                        data: params,
-                                        type: 'post',
-                                        dataType: 'json',
-                                        success(output) {
-                                            for (let i in output) {
-                                                let note = {
-                                                    name: output[i].name,
-                                                    label: output[i].label,
-                                                    description: output[i].error,
-                                                    describedby: null
-                                                };
-                                                v.STUDIPFORM_VALIDATIONNOTES.push(note);
-                                            }
-                                            validated = v.STUDIPFORM_VALIDATIONNOTES.length < 1;
-                                            resolve(validated);
+                                    $.post(v.STUDIPFORM_VALIDATION_URL, params).done((output) => {
+                                        for (let i in output) {
+                                            v.STUDIPFORM_VALIDATIONNOTES.push({
+                                                name: output[i].name,
+                                                label: output[i].label,
+                                                description: output[i].error,
+                                                describedby: null
+                                            });
                                         }
+                                        validated = v.STUDIPFORM_VALIDATIONNOTES.length < 1;
+                                        resolve(validated);
                                     });
                                 } else {
                                     resolve(validated);
                                 }
                             });
-                            return validation_promise;
                         },
                         setInputs(inputs) {
                             for (const [key, value] of Object.entries(inputs)) {
-- 
GitLab