From a47a80284755495ad7efd1e5b8131c3e4dbe2805 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Noack?= <noack@data-quest.de>
Date: Fri, 3 Nov 2023 13:09:47 +0000
Subject: [PATCH] =?UTF-8?q?Resolve=20"Eintrag=20in=20die=20Hauptveranstalt?=
 =?UTF-8?q?ung=20wird=20nicht=20vorgenommen=20bei=20Nachr=C3=BCcken=20aus?=
 =?UTF-8?q?=20der=20Warteliste=20(ergibt=20Fatal=20error=20auf=20der=20Mei?=
 =?UTF-8?q?ne=20Veranstaltungen)"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #3411

Merge request studip/studip!2318
---
 app/controllers/blubber.php               |  6 +-----
 app/controllers/course/statusgroups.php   |  6 +-----
 lib/classes/AutoInsert.class.php          | 10 +---------
 lib/models/AdmissionApplication.class.php | 24 +++++------------------
 4 files changed, 8 insertions(+), 38 deletions(-)

diff --git a/app/controllers/blubber.php b/app/controllers/blubber.php
index 71d89f3e127..bd86050a1e4 100644
--- a/app/controllers/blubber.php
+++ b/app/controllers/blubber.php
@@ -414,11 +414,7 @@ class BlubberController extends AuthenticatedController
             $statement = DBManager::get()->prepare($query);
             $statement->execute([$this->thread->id]);
             foreach ($statement->fetchFirst() as $user_id) {
-                $member = new CourseMember();
-                $member['user_id'] = $user_id;
-                $member['seminar_id'] = $course->getId();
-                $member['status'] = $user_id === $this->thread['user_id'] ? 'dozent' : 'tutor';
-                $member->store();
+                CourseMember::insertCourseMember($course->getId(), $user_id, $user_id === $this->thread['user_id'] ? 'dozent' : 'tutor');
             }
 
             $this->thread['context_type'] = 'course';
diff --git a/app/controllers/course/statusgroups.php b/app/controllers/course/statusgroups.php
index 747feae6aac..a6f6b722305 100644
--- a/app/controllers/course/statusgroups.php
+++ b/app/controllers/course/statusgroups.php
@@ -418,11 +418,7 @@ class Course_StatusgroupsController extends AuthenticatedController
         foreach ($mp->getAddedUsers() as $a) {
 
             if (!CourseMember::exists([$this->course_id, $a])) {
-                $m = new CourseMember();
-                $m->seminar_id = $this->course_id;
-                $m->user_id = $a;
-                $m->status = User::find($a)->perms == 'user' ? 'user' : 'autor';
-                $m->store();
+                CourseMember::insertCourseMember($this->course_id, $a, User::find($a)->perms == 'user' ? 'user' : 'autor');
             }
 
             $s = new StatusgruppeUser();
diff --git a/lib/classes/AutoInsert.class.php b/lib/classes/AutoInsert.class.php
index fd0f7bba3c0..b2168ccfbe6 100644
--- a/lib/classes/AutoInsert.class.php
+++ b/lib/classes/AutoInsert.class.php
@@ -149,15 +149,7 @@ class AutoInsert
 
     private function addUser($user_id, $seminar)
     {
-        $course_member = new CourseMember([$seminar['Seminar_id'], $user_id]);
-        $course_member->setData([
-            'Seminar_id' => $seminar['Seminar_id'],
-            'user_id'    => $user_id,
-            'status'     => 'autor',
-            'gruppe'     => select_group($seminar['start_time']),
-        ]);
-
-        return $course_member->store() > 0;
+        return CourseMember::insertCourseMember($seminar['Seminar_id'], $user_id, 'autor');
     }
 
     private function removeUser($user_id, $seminar)
diff --git a/lib/models/AdmissionApplication.class.php b/lib/models/AdmissionApplication.class.php
index a62ebb58951..2901455ab58 100644
--- a/lib/models/AdmissionApplication.class.php
+++ b/lib/models/AdmissionApplication.class.php
@@ -197,32 +197,18 @@ class AdmissionApplication extends SimpleORMap implements PrivacyObject
                     "seminar_id = ? AND status = 'awaiting' ORDER BY position LIMIT {$count}",
                     [$seminar_id]
                 );
+                $log_message = 'Wurde automatisch aus der Warteliste in die Veranstaltung eingetragen.';
                 foreach ($memberships as $membership) {
-                    //ok, here ist the "colored-group" meant (for grouping on meine_seminare), not the grouped seminars as above!
-                    $group = select_group($seminar->getSemesterStartTime());
                     if (!$sem_preliminary) {
-                        $course_membership = new CourseMember([$seminar_id, $membership->id]);
-                        $course_membership->setData([
-                            'status'     => 'autor',
-                            'gruppe'     => $group,
-                        ]);
-                        $affected = $course_membership->store();
-
-                        NotificationCenter::postNotification('UserDidEnterCourse', $seminar->getId(), $membership->user_id);
+                        $affected = CourseMember::insertCourseMember($seminar_id, $membership->user_id, 'autor', false, false, $log_message);
                     } else {
                         $membership->status = 'accepted';
                         $affected = $membership->store();
+                        StudipLog::log('SEM_USER_ADD', $seminar->getId(), $membership->user_id,'accepted', $log_message);
                     }
-                    if ($affected > 0) {
-                        $log_message = 'Wurde automatisch aus der Warteliste in die Veranstaltung eingetragen.';
-                        StudipLog::log('SEM_USER_ADD', $seminar->getId(), $membership->user_id, $sem_preliminary ? 'accepted' : 'autor', $log_message);
-                        if (!$sem_preliminary) {
-                            $affected = $membership->delete();
-                        } else {
-                            $affected = 0;
-                        }
+                    if ($affected) {
                         //User benachrichtigen
-                        if (($sem_preliminary || $affected > 0) && $send_message) {
+                        if ($send_message) {
                             setTempLanguage($membership->user_id);
                             if (!$sem_preliminary) {
                                 $message = sprintf (_('Sie sind in die Veranstaltung **%s (%s)** eingetragen worden, da für Sie ein Platz frei geworden ist. Damit sind Sie für die Teilnahme an der Veranstaltung zugelassen. Ab sofort finden Sie die Veranstaltung in der Übersicht Ihrer Veranstaltungen.'), $seminar->getName(), $seminar->getFormattedTurnus(true));
-- 
GitLab