From 9c0379da5f49e51ebb4b7697e472e4fad243df2c Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Thu, 12 May 2022 12:34:19 +0000
Subject: [PATCH] check validity of forms before proceeding, fixes #772

Closes #772

Merge request studip/studip!412
---
 resources/assets/javascripts/lib/dialog.js | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/resources/assets/javascripts/lib/dialog.js b/resources/assets/javascripts/lib/dialog.js
index 0ce30c6eef6..bd1cc7b4dd6 100644
--- a/resources/assets/javascripts/lib/dialog.js
+++ b/resources/assets/javascripts/lib/dialog.js
@@ -667,9 +667,17 @@ Dialog.removeHeaderHandler = function (header) {
 };
 
 Dialog.initialize = function() {
+    function checkValidity(element) {
+        const form = element.closest('form');
+        if (form === null) {
+            return true;
+        }
+        return form.checkValidity();
+    }
+
     // Actual dialog handler
     function dialogHandler(event) {
-        if (!event.isDefaultPrevented()) {
+        if (!event.isDefaultPrevented() && checkValidity(event.target)) {
             var target = $(event.target).closest('[data-dialog]');
             var options = target.data().dialog;
             if (Dialog.fromElement(target, parseOptions(options))) {
@@ -679,7 +687,7 @@ Dialog.initialize = function() {
     }
 
     function clickHandler(event) {
-        if (!event.isDefaultPrevented()) {
+        if (!event.isDefaultPrevented() && checkValidity(event.target)) {
             var element = $(event.target).closest(':submit,input[type="image"]');
             var form = element.closest('form');
             var action = element.attr('formaction');
-- 
GitLab