Skip to content
Snippets Groups Projects
5.3.19_cleanup_admission_seminar_user.php 1.67 KiB
Newer Older
<?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
                ]);
            }
        }
    }
}