From 0ec620a8b069cc72d0c65b8fa23aef8fea1d9fa5 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms <tleilax+studip@gmail.com> Date: Fri, 24 Mar 2023 10:49:58 +0000 Subject: [PATCH] use correct pk and remove handling for copying studycourse, adds migration to... Closes #2441 Merge request studip/studip!1638 --- .../5.3.19_cleanup_admission_seminar_user.php | 48 +++++++++++++++++++ lib/models/CourseMember.class.php | 6 +-- 2 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 db/migrations/5.3.19_cleanup_admission_seminar_user.php 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 00000000000..94b5cc852a7 --- /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 dc3a8fb9930..e905d4b6806 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; -- GitLab