diff --git a/db/migrations/5.3.19_cleanup_admission_seminar_user.php b/db/migrations/5.3.19_cleanup_admission_seminar_user.php new file mode 100644 index 0000000000000000000000000000000000000000..94b5cc852a7e3ed154f7bad36a949d5ddc570ad7 --- /dev/null +++ b/db/migrations/5.3.19_cleanup_admission_seminar_user.php @@ -0,0 +1,48 @@ +<?php + +/** + * @see https://gitlab.studip.de/studip/studip/-/issues/2441 + */ +final class CleanupAdmissionSeminarUser extends Migration +{ + public function description() + { + return 'Removes entries from table admission_seminar_user that are ' + . 'already in table seminar_user'; + } + + protected function up() + { + // Fetch affected course ids + $query = "SELECT DISTINCT `seminar_id` + FROM `admission_seminar_user` + JOIN `seminar_user` USING (`seminar_id`, `user_id`)"; + $course_ids = DBManager::get()->fetchFirst($query); + + // Remove all entries that are already in seminar_user + $query = "DELETE `admission_seminar_user` + FROM `admission_seminar_user` + JOIN `seminar_user` USING (`seminar_id`, `user_id`)"; + DBManager::get()->exec($query); + + // Adjust positions in admission_seminar_user for all affected courses + foreach ($course_ids as $course_id) { + $query = "SELECT `user_id` + FROM `admission_seminar_user` + WHERE `seminar_id` = ? AND status = 'awaiting' + ORDER BY `position`"; + $user_ids = DBManager::get()->fetchFirst($query, [$course_id]); + + foreach ($user_ids as $index => $user_id) { + $query = "UPDATE `admission_seminar_user` + SET `position` = ? + WHERE `seminar_id` = ? AND `user_id` = ?"; + DBManager::get()->execute($query, [ + $index + 1, + $course_id, + $user_id + ]); + } + } + } +} diff --git a/lib/models/CourseMember.class.php b/lib/models/CourseMember.class.php index dc3a8fb993031112db1f78b332c155bc5257f8b0..e905d4b68066ea1ccf544285408f60333774eaa4 100644 --- a/lib/models/CourseMember.class.php +++ b/lib/models/CourseMember.class.php @@ -380,12 +380,8 @@ class CourseMember extends SimpleORMap implements PrivacyObject $admission_comment = ''; $mkdate = time(); - $admission_user = AdmissionApplication::find([$seminar_id, $user_id]); + $admission_user = AdmissionApplication::find([$user_id, $seminar_id]); if ($admission_user) { - // copy the studycourse from admission_seminar_user - if ($copy_studycourse && $admission_user->studiengang_id) { - $contingent = $admission_user->studiengang_id; - } $admission_status = $admission_user->status; $admission_comment = $admission_user->comment ?? ''; $mkdate = $admission_user->mkdate;