From 014d8f4ed9fbf21229cac8517cf414b789a1042b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Noack?= <noack@data-quest.de>
Date: Mon, 12 Feb 2024 15:38:09 +0000
Subject: [PATCH] Resolve #3718 "Gradebook meldet beim Speichern "Die Noten
 wurden gespeichert." obwohl nicht alle Daten prozessiert wurden"

Closes #3718

Merge request studip/studip!2589
---
 .../course/gradebook/lecturers.php            | 50 ++++++++++---------
 1 file changed, 27 insertions(+), 23 deletions(-)

diff --git a/app/controllers/course/gradebook/lecturers.php b/app/controllers/course/gradebook/lecturers.php
index 2cba5f3bfc0..b3b1f820e9e 100644
--- a/app/controllers/course/gradebook/lecturers.php
+++ b/app/controllers/course/gradebook/lecturers.php
@@ -164,33 +164,37 @@ class Course_Gradebook_LecturersController extends AuthenticatedController
     public function store_grades_action()
     {
         CSRFProtection::verifyUnsafeRequest();
-        $course = \Context::get();
-        $studentIds = $course->getMembersWithStatus('autor', true)->pluck('user_id');
-        $definitionIds = \SimpleCollection::createFromArray(
-            Definition::findByCourse($course)
-        )->pluck('id');
-
-        $grades = \Request::getArray('grades');
-        $passed = \Request::getArray('passed');
-        $feedback = \Request::getArray('feedback');
-        foreach ($grades as $studentId => $studentGrades) {
-            if (!in_array($studentId, $studentIds)) {
-                continue;
-            }
-            foreach ($studentGrades as $definitionId => $strGrade) {
-                if (!in_array($definitionId, $definitionIds)) {
+        if (Request::submitted('accept')) {
+            $course = \Context::get();
+            $studentIds = $course->getMembersWithStatus('autor', true)->pluck('user_id');
+            $definitionIds = \SimpleCollection::createFromArray(
+                Definition::findByCourse($course)
+            )->pluck('id');
+
+            $grades = \Request::getArray('grades');
+            $passed = \Request::getArray('passed');
+            $feedback = \Request::getArray('feedback');
+            foreach ($grades as $studentId => $studentGrades) {
+                if (!in_array($studentId, $studentIds)) {
                     continue;
                 }
-
-                $instance = new Instance([$definitionId, $studentId]);
-                $instance->rawgrade = ((int) $strGrade) / 100.0;
-                $instance->passed = $passed[$studentId][$definitionId] ?? 0;
-                $instance->feedback = $feedback[$studentId][$definitionId] ?? '';
-                $instance->store();
+                foreach ($studentGrades as $definitionId => $strGrade) {
+                    if (!in_array($definitionId, $definitionIds)) {
+                        continue;
+                    }
+
+                    $instance = new Instance([$definitionId, $studentId]);
+                    $instance->rawgrade = ((int)$strGrade) / 100.0;
+                    $instance->passed = $passed[$studentId][$definitionId] ?? 0;
+                    $instance->feedback = $feedback[$studentId][$definitionId] ?? '';
+                    $instance->store();
+                }
             }
-        }
 
-        \PageLayout::postSuccess(_('Die Noten wurden gespeichert.'));
+            \PageLayout::postSuccess(_('Die Noten wurden gespeichert.'));
+        } else {
+            \PageLayout::postError(_('Beim Ãœbermitteln der Daten trat ein Fehler auf.'));
+        }
         $this->redirect('course/gradebook/lecturers/custom_definitions');
     }
 
-- 
GitLab