diff options
| author | Jan-Hendrik Willms <tleilax+studip@gmail.com> | 2023-03-24 10:49:58 +0000 |
|---|---|---|
| committer | Jan-Hendrik Willms <tleilax+studip@gmail.com> | 2023-03-24 10:49:58 +0000 |
| commit | 0ec620a8b069cc72d0c65b8fa23aef8fea1d9fa5 (patch) | |
| tree | 81cc0cd3da3030ea898561356e490501cdb3b615 /db | |
| parent | d549af7e9e8cf5e44675eaf60485fc53c0b3e7f1 (diff) | |
use correct pk and remove handling for copying studycourse, adds migration to...
Closes #2441
Merge request studip/studip!1638
Diffstat (limited to 'db')
| -rw-r--r-- | db/migrations/5.3.19_cleanup_admission_seminar_user.php | 48 |
1 files changed, 48 insertions, 0 deletions
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 0000000..94b5cc8 --- /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 + ]); + } + } + } +} |
